Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2013, 17:22   #1
kitsun
 
Регистрация: 14.11.2013
Сообщений: 8
Сообщение Динамическая память

Добрый вечер, прошу составить программу по разделу динамической памяти, необходимо:
1. Изучите алгоритм программы SPISOC, исправьте ошибки. Алгоритм позволяет создавать список информационных объектов (procedure Init). Информационные поля каждого объекта содержат данные об автомобиле (MarcAuto, SpeedMax). Алгоритм
позволяет добавлять объект в список, выводить информацию об объектах, искать объект по запросу.

2. Проверьте работу программы, добавьте к объекту новые поля - цвет авто и номер.

3. Создайте процедуру, позволяющую добавить объект в список после указанного объекта, то есть вставлять объект.

4. Создайте процедуру сортировки объектов по заданному правилу.
Код:
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.
kitsun вне форума Ответить с цитированием
Старый 22.11.2013, 19:38   #2
kitsun
 
Регистрация: 14.11.2013
Сообщений: 8
По умолчанию

Дополнение из-за правил форума:
Язык программирования Delphi (Pascal).
UP.
kitsun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая память Astat Помощь студентам 1 30.06.2010 20:40
Динамическая память PaulSev Общие вопросы Delphi 12 25.03.2010 09:07
динамическая память в си Serjuk Помощь студентам 0 27.12.2009 13:54
Динамическая память. Пaвeл Помощь студентам 16 31.05.2009 21:16
Динамическая память liver1981 Общие вопросы C/C++ 5 22.04.2009 09:16