Файл, содержащий сведения о животных зоопарка: – Имя, – Название, – Номер вольера (клетки), – Имя родителя. Построить для каждого животного дерево потомков.
Программа должна выполнять следующие операции обработки данных: ввод новых данных, поиск данных по заданному значению, сортировка данных, редактирование данных. Также программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе.
Нужна помощь в построение для каждого жтвотного дерева потомков.
Личтинг программы:
Спойлер(Показать/Скрыть)
program kursovaya; uses crt; type tinf=record imya,nazv,nom,imyarod:string; end; list=^Tlist; Tlist=record data:Tinf; next:List; end; var znom:tinf; zn:string; spis:list; str:string; I,j:integer; ch:char; f,g:text; procedure addelem(var spis1:list;znom1:Tinf); var tmp:list; begin if spis1=nil then begin getmem(spis1,sizeof(Tlist)); tmp:=spis1; end else begin tmp:=spis1; while tmp^.next<>nil do tmp:=tmp^.next; getmem(tmp^.next,sizeof(tlist)); tmp:=tmp^.next; end; tmp^.next:=nil; tmp^.data:=znom1; end;
procedure files(var spis1:list); var tmp:list; begin if spis1=nil then begin writeln('spisok pyst'); exit; end else tmp:=spis1; while tmp<>nil do begin writeln(g,tmp^.data.imya,' ',tmp^.data.nazv,' ',tmp^.data.nom,' ',tmp^.data.imyarod); tmp:=tmp^.next; end; end;
procedure vivod(spis1:list); begin writeln; if spis1=nil then begin writeln('spisok pyst'); exit; end; while spis1<>nil do begin writeln(spis1^.data.imya,' ',spis1^.data.nazv,' ',spis1^.data.nom,' ',spis1^.data.imyarod); spis1:=spis1^.next; end; writeln; end;
procedure freestek(spis1:list); var tmp:list; begin while spis1<>nil do begin tmp:=spis1; spis1:=spis1^.next; freemem(tmp,sizeof(tList)); end; end;
procedure poisk(spis1:list;znom1:string); begin while (spis1<>nil) do begin if spis1^.data.imya=znom1 then writeln(spis1^.data.imya,' ',spis1^.data.nazv,' ',spis1^.data.nom,' ',spis1^.data.imyarod); spis1:=spis1^.next; end; writeln; end; procedure delelem(var spis1:list;tmp:list); var tmpi:list; begin if (spis1=nil) or (tmp=nil) then exit; if tmp=spis1 then begin spis1:=tmp^.next; freemem(tmp,sizeof(Tlist)); end else begin tmpi:=spis1; while tmpi^.next<>tmp do tmpi:=tmpi^.next; tmpi^.next:=tmp^.next; freemem(tmp,sizeof(Tlist)); end; end; procedure delete(var spis1:list;posi:integer); var i:integer; tmp:list; begin if posi<1 then exit; if spis1=nil then begin writeln('spisok pyst'); exit end; i:=1; tmp:=spis1; while (tmp<>nil) and (i<>posi) do begin tmp:=tmp^.next; inc(i) end; delelem(spis1,tmp); end;
procedure sortirovka(nom:list); var tmp,rab:list; tmps:tinf; begin getmem(tmp,sizeof(Tlist)); rab:=nom; while rab<>nil do begin tmp:=rab^.next; while tmp<>nil do begin if tmp^.data.imya<rab^.data.imya then begin tmps:=tmp^.data; tmp^.data:=rab^.data; rab^.data:=tmps; end; tmp:=tmp^.next end; rab:=rab^.next end; end; procedure rednazv(var spis1:list;posi:integer); var i:integer; tmp:list; st:string; begin if posi<1 then exit; if spis1=nil then begin write('spisok pyst'); end; i:=1; tmp:=spis1; while (tmp<>nil) and (i<>posi) do begin tmp:=tmp^.next; inc(i); end; writeln('vvedite nazvanie'); readln(st); tmp^.data.nazv:=st; end; procedure rednom(var spis1:list;posi:integer); var i:integer; tmp:list; st:string; begin if posi<1 then exit; if spis1=nil then begin write('spisok pyst'); end; i:=1; tmp:=spis1; while (tmp<>nil) and (i<>posi) do begin tmp:=tmp^.next; inc(i); end; writeln('vvedite nomer'); readln(st); tmp^.data.nom:=st; end; procedure redimyarod(var spis1:list;posi:integer); var i:integer; tmp:list; st:string; begin if posi<1 then exit; if spis1=nil then begin write('spisok pyst'); end; i:=1; tmp:=spis1; while (tmp<>nil) and (i<>posi) do begin tmp:=tmp^.next; inc(i); end; writeln('vvedite imya roditelya'); readln(st); tmp^.data.imyarod:=st; end;
procedure redimya(var spis1:list;posi:integer); var i:integer; tmp:list; st:string; begin if posi<1 then exit; if spis1=nil then begin write('spisok pyst'); end; i:=1; tmp:=spis1; while (tmp<>nil) and (i<>posi) do begin tmp:=tmp^.next; inc(i); end; writeln('vvedite imya'); readln(st); tmp^.data.imya:=st; end; begin spis:=nil; clrscr; assign(f,'D:\files.txt'); reset(f); while not eof(f) do begin readln(f,str); znom.imya:=copy(str,1,6); znom.nazv:=copy(str,8,4); znom.nom:=copy(str,14,5); znom.imyarod:=copy(str,19,2); addelem(spis,znom); end; repeat writeln('1-dobavlenie elementa'); writeln('2-vivod'); writeln('3-sortirovka'); writeln('4-clrscr'); writeln('5-poisk'); writeln('6-delete'); writeln('7-redaktirovanie'); writeln('8-zapisat v fail'); writeln('9-vihod'); readln(ch); case ch of '1':begin writeln('vvedite imya'); readln(znom.imya); writeln('vvedite nazvanie'); readln(znom.nazv); writeln('vvedite nomer voliera'); readln(znom.nom); writeln('vvedite imya roditelya'); readln(znom.imyarod); addelem(spis,znom); end; '2':begin clrscr; vivod(spis); end; '3':begin sortirovka(spis); end; '4':begin clrscr; end; '5':begin if spis=nil then writeln('Spisok pyst') else begin writeln('Vvedite imya'); readln(str); poisk(spis,str); end; end; '6':begin writeln('vvedite nomer elementa kootoriy nado ydalit'); readln(i); delete(spis,i); end; '7':begin writeln('vvedite nomer elementa kotoriy hotite redaktirovat'); readln(i); writeln('4to vi hotite redaktirovat? 1-imya,2-nazvanie,3-nomer voliera,4-imya roditelya'); readln(j); case j of 1:begin redimya(spis,i); end; 2:begin rednazv(spis,i); end; 3:begin rednom(spis,i); end; 4:begin redimyarod(spis,i); end; end; end; '8':begin assign(g,'D:\file2.txt'); rewrite(g); files(spis); writeln('Vvedite nazvanie faila v formate D:\***.txt'); readln(str); rename(g,str); close(g); end;
end; until ch='9'; close(f); freestek(spis); spis:=nil; end.
Автор: volvo 10.09.2010 15:47
Можно показать пример файла данных, или просто примерный список животных? В частности, меня интересует, что записано в поле "Имя родителя" у того, чьи родители в зоопарке не присутствуют? Есть ли животные одного вида, принадлежащие разным "генеалогическим деревьям" (или, скажем, все лисы - между собой родственники и все обезьяны - тоже родственники между собой)? Да и потом, какое дерево ты хочешь построить, если у тебя для каждого животного есть имя только одного предка?
Автор: Offside 11.09.2010 19:47
Спасибо, но надобность в этом уже отпала) Теперь нужно, чтобы выводе данных из текстового файла - всё выводилось в табличке. Примерно так
Код
----------------------------------------------------------------------- имя название номер вольера имя родителя ----------------------------------------------------------------------- имя1 назв1 номер1 имярод1 имя2 назв2 номер2 имярод2 -----------------------------------------------------------------------
можно и др. варианты.
Автор: Offside 12.09.2010 23:28
Пока тут дождешься ответа) Уже всё сам сделал
Автор: volvo 13.09.2010 0:13
Цитата
Пока тут дождешься ответа)
А ты своим предыдущим ответом сам же все и испортил. Тебе хотели помочь - ты заявил, что уже не надо. Вот я и решил подождать, может и это тоже не надо будет. Ибо МНЕ это точно не надо - написать, а потом ответ типа "а я сам сделал". Сделал - делай дальше. Меньше потом претензий будет.
Автор: Lapp 13.09.2010 3:58
Цитата(Offside @ 11.09.2010 16:47)
надобность в этом уже отпала) Теперь нужно, чтобы
Цитата
Пока тут дождешься ответа)
У остальных надобность (если таковая была) в тебе тоже отпала. А что тебе действительно нужно - это поиметь побольше уважения к отвечающим..