![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
Reber |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 44 Репутация: ![]() ![]() ![]() |
Разве так нельзя писать?
Type a=array[1..n] of integer Пишет Error 133... -------------------- Играйте в футбол
|
trminator |
![]()
Сообщение
#2
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: ![]() ![]() ![]() |
А n перед этим описал как константу? Если да то не знаю, у меня проходит...
-------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
AlaRic |
![]()
Сообщение
#3
|
... ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: ![]() ![]() ![]() |
Может у тебя константа N вещественного типа?
|
Reber |
![]()
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 44 Репутация: ![]() ![]() ![]() |
Цитата А n перед этим описал как константу? Нет... Мне нужно, чтобы n с клавиатуры вводилось, и получался массив из n членов. Тогда как это сделать? Через процедуру? ??? -------------------- Играйте в футбол
|
AlaRic |
![]()
Сообщение
#5
|
... ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 347 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Нет... Мне нужно, чтобы n с клавиатуры вводилось, и получался массив из n членов Можешь вводить с клавы, скажем m, а потом присвоить это значение n.....вроде так можно.....или наоборот? |
Ivs |
![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 209 Репутация: ![]() ![]() ![]() |
В паскале все типы описываются до начала работы программы поэтому тут такой фокус не потянет (в этом и заключается недостаток паскаля по сравнению с бейсиком, в котором это проходит только так). Так что выхода два
1) описывай массив заранее большей размерности. 2) используй динамические структуры данных ;) -------------------- Если вы хотите чаще встречаться с понравившейся девушкой установите ей Windows'95
|
trminator |
![]()
Сообщение
#7
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Нет... Мне нужно, чтобы n с клавиатуры вводилось, и получался массив из n членов. Тогда как это сделать? Через процедуру? ??? Опиши массив с запасом, например до 10000, а затем спроси число n и считай, что массив у тебя не до 10000, а до n (n<=10000) -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
mj |
![]()
Сообщение
#8
|
![]() Adminь ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Можно запросто организовать свой сассив (в динамически распределяемой памяти и даже в расширенной вроде можно), создать функции работы с динамическим массивом и пользоватся.
Впринцыпи я бы мог написать функции эмулирующие массивы... |
Alex |
![]()
Сообщение
#9
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 201 Репутация: ![]() ![]() ![]() |
Напиши.Я бы с удовольствием посмотрел на них.Тем более я не очень-то разбираюсь в динамической памяти.Мож заодно как-нибудь вдуплюсь!!!
|
AGPA |
![]()
Сообщение
#10
|
![]() Группа: Пользователи Сообщений: 4 Репутация: ![]() ![]() ![]() |
У меня тоже такие приколы были - приходится указывать n const ... Надо попробывать записать n побольше, может получится... ;D
|
Demik |
![]()
Сообщение
#11
|
![]() Группа: Пользователи Сообщений: 4 Репутация: ![]() ![]() ![]() |
Да это точно в Паскале есть два не достатка:
1 Нет операции возведения 2 И нет динамических массивов Вот собственно говаря как это можно обойти {$R-} {Это чтоб не было лишних ругательств ![]() Type MyType={здесь описываешь тип элемента массива, скажем} Word; Type MyArray=Array[1..1] of MyType; {Описываем массив всего из 1 элемента} MyArrayPtr=^MyArray; [color=Red][/color] Var DynamicArray: MyArrayPtr; {Это указатель на наш динамически массив} Count, {Это вводимый размер массива} I: Word; Begin Write('Число элементов массива: '); {Вводим размер массива} ReadLn(Count); GetMem(DynamicArray,Count*SizeOf(MyType)); {выделяем по него память} For I:=1 to Count do DynamicArray^[I]:=I; {заполняем наш массив значениями} For I:=Count downto 1 do WriteLn(DynamicArray^[I]); {печатаем массив задом-наперед} FreeMem(DynamicArray,Count*SizeOf(MyType)) {уничтожаем массив} End. P.S. Если элементы массива более сложные (например, строки или записи), то стоит воспользоваться списками или коллекциями, |
Demik |
![]()
Сообщение
#12
|
![]() Группа: Пользователи Сообщений: 4 Репутация: ![]() ![]() ![]() |
Да я так подумал можно можно может и матрицу сделать динамическую..
Если MyType бедет не Word, а MyType=Array[1..1] of Word и с этим куском сделать тоже самое что и спервым. :DХотя предется писать еще несколько процедур для работы!!!! |
SKVOZNJAK |
![]()
Сообщение
#13
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата :DХотя предется писать еще несколько процедур для работы!!!! Да уж ещё несколько процедур наверно понадобятся :) Вот как примерно может выглядеть файловый массив для одновременного использования разных типов переменных. Если почаще "попадать" в 512 байтное окно, то обращения к диску будут минимальные. Вместо типизованных констант, можно использовать гл. перемееные. UNIT CEBURAS; interface FUNCTION PAKMAN(FAG:BYTE;DUR,BAIT:LONGINT):LONGINT;{(ФЛАГ,АДРЕС(>0),БАЙТ)} {ФЛАГИ: 1 - BYTE ЗАПИСЬ, 2 - BYTE ЧТЕНИЕ, 3 - INTEGER ЗАПИСЬ, 4 - INTEGER ЧТЕНИЕ, 7 - WORD ЗАПИСЬ, 8 - WORD ЧТЕНИЕ, 9 - LONGINT ЗАПИСЬ, 10 - LONGINT ЧТЕНИЕ} PROCEDURE PAKIN(UU:STRING;ZZ:LONGINT);{СОЗДАНИЕ ФАЙЛА С ИМЕНЕМ ЗАДАННЫМ В UU:STRING И ДЛИНОЙ РАВНОЙ ZZ*512} PROCEDURE PAKEEV(UU:STRING); {ПРИВЯЗКА МАССИВА К УЖЕ ГОТОВОМУ ФАЙЛУ, UU:STRING - ИМЯ ЭТОГО ФАЙЛА} PROCEDURE PAKFIG;{ОБНУЛЕНИЕ ТЕКУЩЕГО СЕГМЕНТА БЕЗ ЗАПИСИ РЕЗУЛЬТАТОВ В ФАЙЛ} PROCEDURE PAKMENT;{ЗАПИСЬ ТЕКУЩЕГО СЕГМЕНТА В ФАЙЛ} implementation USES CRT,DOS; VAR Q7: FILE; Q8: LONGINT; {ДЕЙСТВУЮЩИЙ СЕГМЕНТ(ПРИ ПЕРВОМ СЕГМЕНТЕ Q8=0)} {UY:STRING[12]; } CONST U:ARRAY[0..511] OF BYTE =( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); PROCEDURE CVB(J,K:LONGINT); BEGIN RESET(Q7,1); SEEK(Q7,J); BLOCKWRITE(Q7,U,512); CLOSE(Q7); RESET(Q7,1); SEEK(Q7,K); BLOCKREAD(Q7,U,512); CLOSE(Q7); END; PROCEDURE CXB(K:LONGINT); {СОВМЕЩЕНИЕ СЕГМЕНТОВ} VAR E: WORD; Q,W,T: LONGINT; BEGIN T:=K DIV 512; E:=K MOD 512; IF T>0 THEN BEGIN IF E>0 THEN T:=T+1; END; IF Q8<>T THEN BEGIN Q:=Q8*512; W:=T*512; CVB(Q,W); Q8:=T; END; END; FUNCTION PAKMAN(FAG:BYTE;DUR,BAIT:LONGINT):LONGINT; LABEL 1, 100; VAR Q, W: LONGINT; F :^INTEGER; G :^WORD; R :^LONGINT; BEGIN Q:=DUR-1; CXB(Q); W:=Q MOD 512; CASE FAG OF 1: BEGIN {BYTE ЗАПИСЬ} U[W]:=BAIT; PAKMAN:=0; GOTO 100; END; 2: BEGIN {BYTE ЧТЕНИЕ} PAKMAN:=U[W]; GOTO 100; END; 3: BEGIN {INTEGER ЗАПИСЬ} IF W=511 THEN GOTO 1; F:=ADDR(U[W]); F^:=BAIT; PAKMAN:=0; GOTO 100; END; 4: BEGIN {INTEGER ЧТЕНИЕ} IF W=511 THEN GOTO 1; F:=ADDR(U[W]); PAKMAN:=F^; GOTO 100; END; 7: BEGIN {WORD ЗАПИСЬ} IF W=511 THEN GOTO 1; G:=ADDR(U[W]); G^:=BAIT; PAKMAN:=0; GOTO 100; END; 8: BEGIN {WORD ЧТЕНИЕ} IF W=511 THEN GOTO 1; G:=ADDR(U[W]); PAKMAN:=G^; GOTO 100; END; 9: BEGIN {LONGINT ЗАПИСЬ} IF W>508 THEN GOTO 1; R:=ADDR(U[W]); R^:=BAIT; PAKMAN:=0; GOTO 100; END; 10: BEGIN {LONGINT ЧТЕНИЕ} IF W>508 THEN GOTO 1; R:=ADDR(U[W]); PAKMAN:=R^; GOTO 100; END; END; 1: WRITELN('ВВЕДЕНЫ НЕПРАВИЛЬНЫЕ ДАННЫЕ: ФЛАГ=',FAG,' СМЕЩЕНИЕ=',Q8,' '); SOUND(120);DELAY(2000);SOUND(70);DELAY(1000); 100: END; PROCEDURE PAKIN(UU:STRING;ZZ:LONGINT); VAR Q:LONGINT; W:ARRAY[0..511] OF LONGINT; BEGIN Q8:=0; ASSIGN(Q7,UU); REWRITE(Q7,1); FOR Q:=1 TO ZZ DO BLOCKWRITE(Q7,W,512); CLOSE(Q7); END; PROCEDURE PAKEEV(UU:STRING); BEGIN Q8:=0; ASSIGN(Q7,UU); END; PROCEDURE PAKFIG; VAR W: WORD; BEGIN FOR W:=0 TO 511 DO U[W]:=0; END; PROCEDURE PAKMENT; VAR W:LONGINT; BEGIN W:=Q8*512; RESET(Q7,1); SEEK(Q7,W); BLOCKWRITE(Q7,U,512); CLOSE(Q7); END; BEGIN END. |
![]() ![]() |
![]() |
Текстовая версия | 25.07.2025 8:12 |