![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() |
klem4 |
![]()
Сообщение
#1
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Возникла проблемма.
В программе несколько процедур, все немного запутано, одна процедура в последстыии должна вызвать другую, а та какую нибудть еще и обратно, и еще как нибудь ![]() Но компилятор ругается, если в процедуре B происходит вызов процедуры A , которая описана выше. Вроде можно отключить процесс проверки ошибок на этапе компиляции, но в этом случае программа будет правильно работать ? Можно ли как-то установить последовательность компиляции процедур ? Спасибо. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
klem4
Вообще-то в Паскале принята последовательная компиляция... Хотя я не совсем понял проблему... Пример программы можно? |
Altair |
![]()
Сообщение
#3
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата Но компилятор ругается, если в процедуре B происходит вызов процедуры A , которая описана выше. Он бы тогда не ругался! -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
klem4 |
![]()
Сообщение
#4
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Процедура output вызывает процедуру menu, которая описана ниже output, конечно можно все переделать, но не хотелось бы и интересно можно ли что-то сделать в этом случае.
Код program DataBase; uses crt; const n=30; type STUD=record NAME1 : string; {Имя} NAME2 : string; {Фамилия} NAME3 : string; {Отчество} DOB : string; {Дата рождения} HT : string; {Домашний телефон} MT : string; {Мобильный телефон} EMail : string; {E-mail адрес} ICQ : string; {Номер ICQ} end; var s : stud; i,all : byte; studs : array[1..n] of stud; EndRec : boolean; file_s : file of stud; EndInput : boolean; {-------------------------------------------------} procedure search; var nfind:byte; lastname:string; SearchPoint:boolean; Begin clrscr; assign(file_s,'Data.dat'); reset(file_s); writeln('Введите Фамилию для поиска :'); readln(lastname); SearchPoint:=false; i:=1; nfind:=0; while (not(eof(file_s)))and(not(SearchPoint)) do begin read(file_s,s); with s do if name2=lastname then begin nfind:=i; SearchPoint:=True; end; inc(i); end; writeln('nfind=',nfind); repeat keypressed; until keypressed; exit; end; {-------------------------------------------------} procedure output; Begin clrscr; writeln; assign(file_s,'Data.dat'); reset(file_s); i:=1; while (not(eof(file_s))) do begin read(file_s,s); with s do begin writeln(i,'-й студент :'); write('ФИО : ');writeln(name2,' ',name1,' ',name3); write('Дата рождения :');writeln(dob); write('Домашний телефон :');writeln(ht); write('Мобилный телефон :');writeln(mt); write('ICQ : ');writeln(icq); write('E-mail : ');writeln(email); writeln; inc(i); end; end; close(file_s); repeat keypressed; until keypressed; menu; end; {-------------------------------------------------} procedure if_next; var ch:char; Begin writeln('Будете вводить еще студента [Y/N] ?'); repeat ch:=upcase(readkey); until (ch in ['Y','N']); clrscr; if ch in ['Y'] then begin inc(i); inc(all); EndRec:=true; end else begin close(file_s); exit; EndInput:=true; end; end; {--------------------------------------------------} procedure menu; var ch:char; begin clrscr; close(file_s); writeln('Выберите номер из пункта меню'); writeln; writeln('1). Просмотр информации'); writeln('2). Поиск'); writeln('3). Редактирование'); writeln('4). Выход'); repeat ch:=readkey; until ch in ['1','2','3','4']; case ch of '1': output; '2': search; '3': exit; '4': exit; end; end; {--------------------------------------------------} Begin clrscr; assign(file_s,'Data.dat'); reset(file_s); if not(IOResult<>0) then menu else begin assign(file_s,'Data.dat'); rewrite(file_s); i:=1; all:=1; EndRec:=true; while (i<=n)and(EndRec) do with s do begin writeln('Введите информацию для ',i,'-го студента'); write('Введите Имя : ');readln(name1); write('Введите Фамилию : ');readln(name2); write('Введите Отчество :');readln(name3); writeln('Введите Дату Рождения'); readln(DOB); writeln('Введите Номер Домашнего Телефона'); readln(HT); writeln('Введите Номер Мобильного Телефона'); readln(MT); writeln('Введите E-mail Адрес'); readln(EMail); writeln('Введите Номер ICQ'); readln(ICQ); studs[i]:=s; write(file_s,s); EndRec:=false; if_next; end; end; End. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
klem4 |
![]()
Сообщение
#5
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата Он бы тогда не ругался! Я просто перепутал, которая находится ниже. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Altair |
![]()
Сообщение
#6
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
тогда скомпилировать нельзя
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
klem4
перед описанием Output поставь Код procedure menu; forward; Oleg_Z Правда? ;) Сообщение отредактировано: volvo - 29.01.2005 18:30 |
klem4 |
![]()
Сообщение
#8
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Эхх, плохи мои дела
![]() Компилируется -> меню -> Просмотр информации -> выводит информацию, дальше, по замыслу, после нажатия любой клавиши, опять должна выходить в меню, вот тут и настает грандиозный финал ![]() ![]() и после сёрча тоже хотелось бы меню, но там даже forward уже не катит ![]() придется все переделать я чувствую... ![]() Надо думать дальше. Сообщение отредактировано: klem4 - 29.01.2005 18:42 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
klem4
А знаешь почему? Ты обрабатываешь IOResult? А отмену контроля ввода-вывода ты отключил? (я про {$I-}, что-то я этого не заметил...). В ФАКе выложен материал по директивам компилятора, посмотри, там кое-что есть... |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Плюс к этому, у тебя в процедуре Menu закрывается файл... Это прекрасно, когда ты в первый раз заходишь в Menu. Но вот когда ты возвращаешься туда после Search, этот файл уже закрыт. Естественно, что повторное закрытие файла вызывает Run-Time Error.
Тут ты должен выбрать одно из 3-х:
|
klem4 |
![]()
Сообщение
#11
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Ну вот. Не очень красиво конечно, но работает вроде как по замыслу, осталось только процедуру редактирования написать и дописать поиск.
Если кто-нибудь обнаружит дикие ошибки ![]() Код program DataBase; uses crt; const n=30; type STUD=record NAME1 : string; {Имя} NAME2 : string; {Фамилия} NAME3 : string; {Отчество} DOB : string; {Дата рождения} HT : string; {Домашний телефон} MT : string; {Мобильный телефон} EMail : string; {E-mail адрес} ICQ : string; {Номер ICQ} end; var s : stud; i,all : byte; studs : array[1..n] of stud; EndRec : boolean; file_s : file of stud; EndInput : boolean; {-------------------------------------------------} procedure menu; forward; procedure search; var nfind:byte; lastname:string; SearchPoint:boolean; Begin clrscr; assign(file_s,'Data.dat'); reset(file_s); writeln('Введите Фамилию для поиска :'); readln(lastname); SearchPoint:=false; i:=1; nfind:=0; while (not(eof(file_s)))and(not(SearchPoint)) do begin read(file_s,s); with s do if name2=lastname then begin nfind:=i; SearchPoint:=True; end; inc(i); end; writeln('nfind=',nfind); close(file_s); repeat keypressed; until keypressed; menu; end; {-------------------------------------------------} procedure output; Begin clrscr; writeln; assign(file_s,'Data.dat'); reset(file_s); i:=1; while (not(eof(file_s))) do begin read(file_s,s); with s do begin writeln(i,'-й студент :'); write('ФИО : ');writeln(name2,' ',name1,' ',name3); write('Дата рождения :');writeln(dob); write('Домашний телефон :');writeln(ht); write('Мобилный телефон :');writeln(mt); write('ICQ : ');writeln(icq); write('E-mail : ');writeln(email); writeln; inc(i); end; end; close(file_s); repeat keypressed; until keypressed; menu; end; {-------------------------------------------------} procedure if_next; var ch:char; Begin writeln('Будете вводить еще студента [Y/N] ?'); repeat ch:=upcase(readkey); until (ch in ['Y','N']); clrscr; if ch in ['Y'] then begin inc(i); inc(all); EndRec:=true; end else begin close(file_s); exit; EndInput:=true; end; end; {--------------------------------------------------} procedure rewr; forward; procedure menu; var ch:char; begin clrscr; writeln('Выберите номер из пункта меню'); writeln; writeln('1). Просмотр информации'); writeln('2). Поиск'); writeln('3). Редактирование'); writeln('4). Выход'); repeat ch:=readkey; until ch in ['1','2','3','4']; case ch of '1': output; '2': search; '3': rewr; '4': exit; end; end; {--------------------------------------------------} procedure rewr; begin writeln('тут что-то будет'); repeat keypressed; until keypressed; menu; end; {--------------------------------------------------} Begin clrscr; assign(file_s,'Data.dat'); reset(file_s); if not(IOResult<>0) then begin close(file_s); menu; end else begin assign(file_s,'Data.dat'); rewrite(file_s); i:=1; all:=1; EndRec:=true; while (i<=n)and(EndRec) do with s do begin writeln('Введите информацию для ',i,'-го студента'); write('Введите Имя : ');readln(name1); write('Введите Фамилию : ');readln(name2); write('Введите Отчество :');readln(name3); writeln('Введите Дату Рождения'); readln(DOB); writeln('Введите Номер Домашнего Телефона'); readln(HT); writeln('Введите Номер Мобильного Телефона'); readln(MT); writeln('Введите E-mail Адрес'); readln(EMail); writeln('Введите Номер ICQ'); readln(ICQ); studs[i]:=s; write(file_s,s); EndRec:=false; if_next; end; end; End. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Ну не знаю, как насчет ошибок, а вот условие (в процедуре Search):
Код while (not(eof(file_s)))and(not(SearchPoint)) do можно было бы переписать, как: Код while not(eof(file_s) or SearchPoint) do ;) Но это не главное. Ошибка тоже присутствует (основная программа): Код assign(file_s,'Data.dat'); reset(file_s); if not(IOResult<>0) then... Этот фрагмент закончится аварийно при самом первом запуске (когда еще нет файла "Data.dat"). Исправляем - заключаем Reset в пару соответствующих директив компилятора (заодно исправил и условие, почему тебе так нравится NOT - не понимаю...): Код assign(file_s,'Data.dat'); {$I-} reset(file_s); {$I+} if IOResult = 0 then ... Вот теперь при отсутствии файла программа не "вылетит", и ты сможешь обработать результат ввода/вывода (IOResult)... Еще замечу - допишу... Сообщение отредактировано: volvo - 30.01.2005 17:09 |
APAL |
![]()
Сообщение
#13
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
Кошмар, какое расточительство....
![]() Цитата type STUD=record NAME1 : string; {Имя} NAME2 : string; {Фамилия} NAME3 : string; {Отчество} DOB : string; {Дата рождения} HT : string; {Домашний телефон} MT : string; {Мобильный телефон} EMail : string; {E-mail адрес} ICQ : string; {Номер ICQ} end; а может как нибудь так: Код type STUD=record NAME1 : stringх[10]; {Имя} NAME2 : string[15]; {Фамилия} NAME3 : string[20]; {Отчество} DOB : string[10]; {Дата рождения} HT : string[11]; {Домашний телефон} MT : string[11]; {Мобильный телефон} EMail : string[30]; {E-mail адрес} ICQ : string[10]; {Номер ICQ} end; -------------------- |
klem4 |
![]()
Сообщение
#14
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
2Apal, учту, исправлю.
2Volvo , учту, исправлю, но! Откомпилировал свою программу, поместил exe-шник в пустую папку, запустил и все работает, ввел инфу, а при следующем запуске уже сразу вывелось Меню. и программа нигде не 'вылетает'. Сообщение отредактировано: klem4 - 30.01.2005 17:46 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
klem4
Как видно, у тебя в меню Options -> Compiler отключен пункт "I/O checking"... А ты уверен, что на том компьютере, где программу будут запускать, будут точно такие же установки IDE, как у тебя? А вот используя директивы ты можешь гарантировать, что все будет так, как ты задумал, независимо от настроек среды... :yes: Сообщение отредактировано: volvo - 30.01.2005 17:50 |
klem4 |
![]()
Сообщение
#16
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Я вот что-то не понял, то есть если я на другом компьютере запущу EXE файл
то может вылететь ошибка ? ЗЫ I/O checking стоит крестик ![]() Сообщение отредактировано: klem4 - 30.01.2005 18:07 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Я сейчас запустил EXE (скомпиленный из твоего исходника) в пустой директории - меня выбросило... А когда добавил директивы - все сработало...
|
klem4 |
![]()
Сообщение
#18
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Даа интересно, я исправил, как ты показал, все, пойду философию учить, сдавать 2-го.., спасибо за помошь, я еще вернусь
![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 11:04 |