Eserv. Эта программа решит многие Ваши проблемы |
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 |
Давненько это было, подробности не помню уже, но примерно следующее... В Борланд паскале можно обьявить константу, передать как параметр ее какой либо функции, а внутри функции изменить значение этой константы. По выходе из функции значение константы будет изменено :) Это не решает вопроса о размерности массива, но сам факт интересен. |
Полезные ссылки
О проекте | Выскажите Ваше мнение