Добрый день, прошу помочь с решением:
Код:
Program SPISOC;
uses crt;
Type
PoleSv: ^Auto; {определён тип - указатель на тип Auto-список}
Str: string[15]; {определён тип - строка длиной 15}
Auto = record {определение типа - запись}
MarcAuto:Str; {поле - марка автомобиля }
SpeedMax:real; {поле - максимальная скорость}
Next: PoleSv {поле связи со следующим объектом списка - указатель на список}
end;
var P1,P2:PoleSv; {Указатель на список}
S:Str;
procedure Init(var u:PoleSv); {процедура создания списка}
var x,y:PoleSv;
i,n:integer;
begin
WriteLn('Инициализация списка: ');
WriteLn('Введите количество элементов списка:'); ReadLn(n);
u:=Nil ; {пустой указатель}
for i:=1 to n do
begin
New(y);
Write('Введите марку авто: ');
ReadLn(y^.MarcAuto);
Write('Введите максимальную скорость: ');
ReadLn(y^.SpeedMax);
y^.Next:=Nil;
if u=Nil Then u:=y
Else
begin x^.Next:=y; x:=y; end;
end;
end;
procedure AddFirst(var u:PoleSv);
{процедура добавления элемента в начало списка }
var x:PoleSv;
begin
WriteLn('Добавим элемент в начало списка:'); New(x);
Write('Введите марку авто: ');
ReadLn(x^.MarcAuto);
Write('Введите максимальную скорость: '); ReadLn(x^.SpeedMax);
x^.Next:=u;
u:=x;
end;
procedure Wr_Spisok(var u:PoleSv);
{процедура вывода списка}
var x:PoleSv;
begin
WriteLn('Вывод списка:');
x:=u;
While x<> Nil do begin
WriteLn('марка авто: ',x^.MarcAuto);
WriteLn('максимальная скорость: ',x^.SpeedMax:5:1);
x:=x^.Next;
end;
end;
Function FindName(F_n:str;var u:PoleSv):PoleSv;
{Функция ищет в списке объект, поле MarcAuto которого совпадает с параметром F_n}
var
Curr:PoleSv; {Переменная для прохода по связанному списку}
begin
WriteLn('Поиск данных об автомобиле по его марке:'); Curr:=u;
While Curr<> Nil do {поиск завершится, когда список закончится }
if Curr^.MarcAuto=F_n then
begin
FindName:=Curr; {нашли объект, возвращаем в основную программу значение
и завершаем функцию}
Exit;
end
else Curr:=Curr^.Next; {иначе переходим к следующему объекту}
FindName:=Nil {цикл завершился значит нет такого объекта,
возвращаем свободный указатель}
end;
begin {начало основной программы}
clrscr;
Init(P1); {создаем список}
Wr_Spisok(P1); {выводим значения информационных полей объектов списка}
AddFirst(P1); {добавляем объект в начало списка} Wr_Spisok(P1);
{выводим значения информационных полей объектов списка}
WriteLn('Введите марку автомобиля для поиска: ');
ReadLn(S); {вводим информацию для поиска объекта}
P2:=FindName(S,P1); {запоминаем результат-указатель на найденный объект }
if P2<>Nil then {анализируем результат поиска и выводим его}
begin
WriteLn('марка авто:',P2^.MarcAuto);
WriteLn('максимальная скорость:',P2^.SpeedMax:5:1)
end
else WriteLn('Нет данных в списке.');
readln
end.
1. Изучите алгоритм программы SPISOC, исправьте ошибки. Алгоритм позволяет создавать список информационных объектов (procedure Init). Информационные поля каждого объекта содержат данные об автомобиле (MarcAuto, SpeedMax). Алгоритм
позволяет добавлять объект в список, выводить информацию об объектах, искать объект по запросу.
2. Проверьте работу программы, добавьте к объекту новые поля - цвет авто и номер.
3. Создайте процедуру, позволяющую добавить объект в список после указанного объекта, то есть вставлять объект.
4. Создайте процедуру сортировки объектов по заданному правилу.