Консультация № 161778
01.03.2009, 23:47
0.00 руб.
0 0 0
Уважаемые эксперты,доброго времени суток. Написал две программы по одно и двусвязному списку(работают нормально). Проверьте пожалуйста структуру программ, не слепил ли "гибрида" .
Т.к. даже после написания программ не понял смысла этих указателей. Закомментируйте пожалуйста участки кода заключенные в квадратные скобки.


Приложение:
{
Односвязный список
--------------------------------------------------------------------------
Автомобиль
--------------------------------------------------------------------------
Марка
Фирма-производитель
Класс автомобиля
Год запуска в производство
--------------------------------------------------------------------------
Фирма-производитель <Mersedes>
Год запуска - 2000

}

uses crt;
type
TPointerCityRecord = ^CityRecordType;
CityRecordType = record
mark:string[20];
firm:string[20];
class:string[20];
year:string[20];
NextCity : TPointerCityRecord;
end;


var
FCity, LCity : TPointerCityRecord;
f : text;
p : TPointerCityRecord;
Smark : string;
sfirm:string;
sclass:string;
syear:string;
z_f,z_y:string;
CurrCity : TPointerCityRecord;
n,i,m:integer;

begin
clrscr;
FCity := nil;
LCity := nil;
write('Vvedite kol-vo avto: ');
readln(n);
writeln;
writeln('-------------------------------------------',
'-----------------------------------');
writeln('| Марка | Фирма производитель|',
' Класс автомобиля | Год издания |');
writeln('-------------------------------------------',
'-----------------------------------');
for i:=1 to n do
begin
write('| | |',
' | |');
gotoxy(2,5+i);
readln(smark);
gotoxy(3 + 20,5+i);
readln(sfirm);
gotoxy(4+20+20,5+i);
readln(sclass);
gotoxy(5+20+20+20,5+i);
readln(syear);
New(p);
if FCity=nil then
FCity := p
else
[[[ LCity^.NextCity := p;
p^.mark := Smark;
p^.year := syear;
p^.class := Sclass;
p^.firm := sfirm;
LCity := p; ]]]
end;
if FCity = nil then Exit;
CurrCity := FCity;
z_f:='Mersedes';
z_y:='2000';
writeln('Viborka avto soglasno usloviyu');
writeln('-------------------------------------------',
'-----------------------------------');
writeln('| Марка | Фирма производитель|',
' Класс автомобиля | Год издания |');
writeln('-------------------------------------------',
'-----------------------------------');
m:=n;
for i:=1 to n do
begin
if (CurrCity^.firm=z_f) and (CurrCity^.year=z_y) then
begin
write('| | |',
' | |');
gotoxy(2,9+i+m);
writeln(CurrCity^.mark);
gotoxy(3 + 20,9+i+m);
writeln(CurrCity^.firm);
gotoxy(4 + 40,9+i+m);
writeln(CurrCity^.class);
gotoxy(5 + 60,9+i+m);
Writeln(CurrCity^.year);
[[[ CurrCity := CurrCity^.NextCity;]]]
end
else
begin
[[[ CurrCity := CurrCity^.NextCity; ]]]
dec(m);
end;

{

Двусвязный список
--------------------------------------------------------------------------
Автобус
--------------------------------------------------------------------------
Номер маршрута
Количество остановок
Названия конечных остановок
--------------------------------------------------------------------------
Количество остановок больше 6, но меньше 12
}

uses crt;
type
TPointerCityRecord = ^CityRecordType;
CityRecordType = record
nom:string[20];
kol:integer;
ost:string[20];

NextCity,PrevCity : TPointerCityRecord;
end;


var
FCity, LCity,Ecity : TPointerCityRecord;
f : text;
p : TPointerCityRecord;
Snom : string;
skol:integer;
sost:string;


CurrCity : TPointerCityRecord;
n,i,m:integer;

begin
clrscr;
FCity := nil;
LCity := nil;
Ecity:=nil;
write('Vvedite kol-vo marshrutov: ');
readln(n);
writeln;
writeln('-------------------------------------------',
'-----------------------------------');
writeln('| Номер маршрута |Количество остановок|',
' Названия кон. ост. |');
writeln('-------------------------------------------',
'-----------------------------------');
for i:=1 to n do
begin
write('| | |',
' |');
gotoxy(2,5+i);
readln(snom);
gotoxy(3 + 20,5+i);
readln(skol);
gotoxy(4+20+20,5+i);
readln(sost);
New(p);
if FCity=nil then
FCity := p
else
eCity^. prevcity:=LCity^.NextCity
LCity^.NextCity := p;
p^.nom := Snom;
p^.kol := skol;
p^.ost := Sost;
LCity := p;
end;
if FCity = nil then Exit;
CurrCity := FCity;
writeln('Viborka marshrutov soglasno usloviyu');
writeln('-------------------------------------------',
'-----------------------------------');
writeln('| Номер маршрута |Количество остановок|',
' Названия кон. ост. |');
writeln('-------------------------------------------',
'-----------------------------------');
m:=n;
for i:=1 to n do
begin
if (CurrCity^.kol>6) and (CurrCity^.kol<12) then
begin
write('| | |',
' |');
gotoxy(2,9+i+m);
writeln(CurrCity^.nom);
gotoxy(3 + 20,9+i+m);
writeln(CurrCity^.kol);
gotoxy(4 + 40,9+i+m);
writeln(CurrCity^.ost);
CurrCity := CurrCity^.NextCity;
end
else
begin
CurrCity := CurrCity^.NextCity;
dec(m);
end;
end;
dispose(p);
readkey;
end.




end;
dispose(p);
readkey;
end.

Обсуждение

Форма ответа