1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Задача: 1 Сформировать список с полями Улица,№дома,№квартира,кол-во жильцов и вывести на экран в виде таблицы. 2. Найти и вывести на экран кол-во жильцов по заданному пользователем адресу. 3. Отсортировать по кол-ву жильцов. 4. Сформировать новый список не включающий поля "улица". 5. Вывести новый список на экран в виде таблицы.
Заминка вышла в сортировке, у меня сортирует кол-во жильцов, а не по количеству. И при формировании нового списка я извлекаю инф из первого элемента и освобождаю его память, а на экран выводится только второй адрес(из двух) без поля "улица".
Помогите, если не трудно)))
Вот код:
program spisok; uses crt; type sp=^adres; adres=record street:string; dom,kv,zilci:integer; link:sp; end; sp1=^adres1; adres1=record street:string; dom,kv,zilci:integer; link:sp1; end; var begp,endp,pp:sp; begp1,endp1:sp1; i,j:integer; nm:byte; v:boolean;
Procedure vvod(var begp,endp:sp); var pp:sp; begin Writeln('vvedite kolichestvo zap'); readln(nm); for i:=1 to nm do begin new(pp); write('street '); readln(pp^.street); write('# doma '); readln(pp^.dom); write('# kvartiri '); readln(pp^.kv); write('kol-vo zilcov '); readln(pp^.zilci); pp^.link:=nil; if begp=nil then begp:=pp else endp^.link:=pp; endp:=pp; end; end;
procedure vivod(begp,endp:sp); var pp:sp; begin clrscr; write('--------------------------------------------------'); writeln; write('| street | #doma | #kv | kol-vo zilcov |'); for i:=1 to nm do pp:=begp; while pp<>nil do begin writeln; write(pp^.street:12,' '); write(pp^.dom:6, ' ' ,pp^.kv:9, ' ', pp^.zilci:8, ' '); writeln; pp:=pp^.link; end; write('---------------------------------------------------'); writeln; end;
procedure poisk(var begp1,endp1:sp1;begp,endp:sp); var pp:sp; pp1:sp1; begin writeln('Vvedite street, dom, kv cheres enter'); begin readln(pp1^.street); readln(pp1^.dom); readln(pp1^.kv); pp:=begp; while pp<>nil do begin if ((pp1^.street=pp^.street) and (pp1^.dom=pp^.dom)) and (pp1^.kv=pp^.kv) then begin write('Kol-vo zilcov: '); write(pp^.zilci); writeln; v:=true; end; if v=false then writeln('takogo adresa ne naideno'); pp:=pp^.link; end; end; end;
procedure sort(begp,endp:sp); var pp,p1,pt:sp; t,r,g:integer; k:string; begin for i:=1 to nm do pp:=begp; while pp<>endp do begin t:=pp^.zilci; pt:=pp; p1:=pp; while p1^.link<>nil do begin p1:=p1^.link; if p1^.zilci<=pp^.zilci then begin t:=p1^.zilci; pt:=p1; end; end; pt^.zilci:=pp^.zilci; pp^.zilci:=t; pp:=pp^.link; end; end;
procedure vivodsort(begp,endp:sp); var pp:sp; begin write('--------------------------------------------------'); writeln; write('| street | #doma | #kv | kol-vo zilcov |'); for i:=1 to nm do pp:=begp; while pp<>nil do begin writeln; write(pp^.street:12,' '); write(pp^.dom:6, ' ' ,pp^.kv:9, ' ', pp^.zilci:8, ' '); writeln; pp:=pp^.link; end; write('---------------------------------------------------'); writeln; end;
Procedure novmas(var begp,endp:sp); var x:string; pp:sp; begin for i:=1 to nm do x:=begp^.street; pp:=begp; begp:=pp^.link; dispose(pp); end; {Procedure novmas(var begp,endp:sp); var pp:sp; pp1:sp1; begin for i:=1to nm do new(pp1); pp1^.dom:=pp^.dom; pp1^.kv:=pp^.kv; pp1^.zilci:=pp^.zilci; pp1^.link:=nil; begp1:=pp1; endp1:=pp1; end; }
Procedure novmasa(begp,endp:sp); var pp:sp; begin write('-------------------------------------'); writeln; write('| #doma | #kv | kol-vo zilcov |'); pp:=begp; while pp<>nil do begin writeln; write(pp^.dom:6, ' ' ,pp^.kv:8, ' ',pp^.zilci:8, ' '); writeln; pp:=pp^.link; end; write('-------------------------------------'); writeln; readln; end;