![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
QDe5n1K |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Дело вот в чем:
Я создаю список рейсов, заполняю каждый из них пассажирами и инфой о них... Далее я создаю еще один рейс... Вся инфа о пассажирах, введенная ранее пропадает... ![]() Код type Ppass=^reis; reis=record name,prizn,punkt:string; next:ppass; end; Preis=^allreis; allreis=record number:ppass; name:string[10]; next:preis; end; ......................... procedure add_reis(var pr:preis); var number:string; pp,last,nach:preis; begin clrscr; writeln('Na danniy moment sushestvuyut reisi:'); printallreis(pr); readln; repeat clrscr; gotoxy(1,1); writeln('Vvedite nomer novogo reisa:'); readln(number); if (number<>'') then begin new(pp); pp^.name:=number; pp^.next := nil; if pr = nil then pr := pp else last^.next := pp; last := pp; end; until number=''; clrscr; writeln('Na danniy moment sushestvuyut reisi:'); nach:=pr; printallreis(pr); while assigned(pr) do begin pr^.number^.next:=nil; pr:=pr^.next; end; pr:=nach; end; procedure add_pass(var pr:preis; var test:boolean); label repet,end1,repet2; var ppas,pp,nachpass:ppass; number,s:string; b:boolean; i,n:integer; nachreis:preis; begin repet: nachreis:=pr; printallreis(pr); searchreis(pr,b); {эта процедура возвращает уже нажный мне рейс, тот, куда я буду заносить пассажирова} if not b then begin repeat; warning; writeln('Takogo reisa net. y - povtorit, n - vihod'); if readkey='y' then begin goto repet; pr:=nachreis; end else if readkey='n' then begin textcolor(white); goto end1; end; until readkey=#1; end; begin pp:=pr^.number; while pp^.next<> nil do pp:=pp^.next; new(ppas); repeat write('Name: '); readln(ppas^.name); until ppas^.name<>''; repeat write('Info: '); readln(ppas^.prizn); until ppas^.prizn<>''; repeat write('Fly to: '); readln(ppas^.punkt); until ppas^.punkt<>''; ppas^.next:=nil; pp^.next:=ppas; pp:=pr^.number^.next; end; nachpass:=pr^.number^.next; printpass(pr^.number^.next); pr^.number^.next:=nachpass; test:=true; end1: pr:=nachreis; end; Сообщение отредактировано: QDe5n1K - 9.12.2004 0:48 |
![]() ![]() |
QDe5n1K |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Похожая проблема с теме же кусками.
Дело в том что после создания списка рейсов и при попытке заполнить один из них пассажирами, заполняются все... Попробовал урезать код на столько , чтобы можно было заполнять только 1 рейс, однако проблема остается... 2 и последующий рейсы я не трогаю, а они заполняются... Код type Ppass=^reis; reis=record name:string; next:ppass; end; Preis=^allreis; allreis=record number:ppass; name:string[10]; next,prev:preis; end; Нижеследующий код на мой взгляд не таит в себе ошибок, но кто знает... Код procedure add_reis(var pr1:preis); var number:string; pr2,prnach:preis; ok:boolean; begin repeat clrscr; prnach:=pr1; name(number,2); {vozvrashaet number} searchreis(pr1,ok,number); {ishet reis pod nomerrom "number" vozvrashaet nujniy element spiska i ok=true - esli uje est' takoy reis, ili esli takogo reisa eshe net, to ok=false} pr1:=prnach; if (number<>'') and not ok then begin new(pr2); pr2^.next:=nil; pr2^.name:=number; pr2^.number:=nil; if pr1=nil then pr1:=pr2 else begin prnach:=pr1; while pr1^.next<>nil do pr1:=pr1^.next; pr1^.next:=pr2; pr1:=prnach; end; end; until number=''; end; И наибольшие сомнения у меня вызывает вот эта процедура. Но ошибки не вижу... хоть убей... Код procedure add_pass(var pr:preis); var ppas,pp:ppass; nachreis:preis; begin pp:=pr^.number; while pp^.next<> nil do pp:=pp^.next; new(ppas); write('Name: '); readln(ppas^.name); ppas^.next:=nil; pp^.next:=ppas; end; И еще, если можете, напишите, ваш вариант второй процедуры (add_pass) Спасибо... ![]() Сообщение отредактировано: QDe5n1K - 13.12.2004 13:13 |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 11:40 |