![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
Reber |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 44 Репутация: ![]() ![]() ![]() |
Разве так нельзя писать?
Type a=array[1..n] of integer Пишет Error 133... -------------------- Играйте в футбол
|
![]() ![]() |
SKVOZNJAK |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 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. |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 16:45 |