Eserv. Эта программа решит многие Ваши проблемы


Рейтинг.ru
Задание размерности массива в ВР7 (дос)
Victor
08.03.2000 - 12:02
! Чайника ногами не пинать !
В Васике там вроде просто:
Dim Mass(N,M)
Input 'введите рзмерность массива' N,M
Дальше его можно набивать данными...
В Паскале не писал сроду но вроде там нельза такой же фокус провернуть - компилятор должен знать размерность массива до компиляции.
У меня вопрос - как сделать на паскале сабж в стиле Васика?
То есть вводим размерность - далее набиваем нужно количество данных.
В крайняк нужен аналог REDIM.
Но чего-то мне не верится в то что в ВР7 нельзя работать с массивами переменной размерности.
VaS
1 - 08.03.2000 - 14:10
int *m;
scanf << k;
i=malloc(k*sizeof(int));
m[0]=34;
........
m[k]=2345;
........
free(m);
На Паскале очень похоже имхо...
NoName
2 - 08.03.2000 - 22:38
Нет такой фишки в BP7.0
VaS
3 - 09.03.2000 - 06:56
2NoName: выделить память и работать с ней в Паскале можно (с указателями в нем все в порядке). Я просто очень давно в BP работал -- не помню уже ничего :(
PSy
4 - 11.03.2000 - 07:09
Если я тебя правильно понял , то
mas1: array [a..b] of [c..d] of ... [x..z] of {тип массива}
VaS
5 - 11.03.2000 - 19:23
Оно не возьмет переменные как размер массива. Только константы.
Victor M.
6 - 12.03.2000 - 23:42
Дык, я не понял, это что действительно непереезжаемая проблема для паскаля?
Вонючий, попсный васик делает это как два пальца а тут такие заморочки....
Я удивляюсь.
Народ не разочаровывайте меня, пож.
Наверняка что-то можно сделать...
OGO
7 - 14.03.2000 - 16:22
Пример для массива типа boolean
Const
MaxBooleans = (65520 - $F) div sizeof(boolean);
Type
TBoolArray = array[1..MaxBooleans] of boolean;
PBoolArray = ^TBoolArray;
Var
B : PBoolArray;
N : LongInt;
BEGIN
writeln(MaxBooleans);
N := 63579;
{= получение памяти под динамический массив.. =}
GetMem(B, N*sizeof(boolean));
{= работа с массивом... =}
B^[3477] := FALSE;
{= возвращение памяти в кучу =}
FreeMem(B, N*sizeof(boolean));
END.
Soft
8 - 24.03.2000 - 21:50
Или так:
{$R-}
Type MasType = byte;
     MyType = Array [1..1, 1..1] of MasType;
Var Mass:^MyType;
Procedure DIM(N,M:byte); {DIM Mass(N,M) }
begin
GetMem(Mass, N * M * SizeOf(MasType));
end;
Procedure ClearMas(N,M:byte);
begin
FreeMem(Mass, N * M * SizeOf(MasType));
end;
begin
DIM(10,10);
Readln(Mass^[2,8]);
Writeln(Mass^[2,8]);
ClearMas(10,10);
end.
REDIM напишешь сам
Пенсионер
9 - 27.03.2000 - 18:50
Давненько Паскаль не юзал...
К нему прилагается классная вещь:Turbo Vision. Есть там объект коллекции,
кажется TCollection - она очень красиво решает эту "проблему"
HotDog
11 - 12.04.2000 - 11:38
Давненько это было, подробности не помню уже, но примерно следующее...
В Борланд паскале можно обьявить константу, передать как параметр ее какой либо функции, а внутри функции изменить значение этой константы. По выходе из функции значение константы будет изменено :) Это не решает вопроса о размерности массива, но сам факт интересен.

Полезные ссылки
О проекте | Выскажите Ваше мнение


Сайт управляется системой uCoz