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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2013, 13:28   #1
kitsun
 
Регистрация: 14.11.2013
Сообщений: 8
По умолчанию Создание процедур в динамической памяти

Добрый день, прошу помочь с решением:
Код:
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. Создайте процедуру сортировки объектов по заданному правилу.
kitsun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация динамической памяти MrBlackD C++ Builder 1 19.10.2012 22:39
Массив в динамической памяти (С++) druger Помощь студентам 0 05.12.2011 10:13
Кольцевая очередь на массиве в статической памяти с элементами в динамической памяти ]tach[ Общие вопросы C/C++ 1 19.01.2011 13:16
Проблема выделения динамической памяти в С++ oxygen90 Помощь студентам 3 14.09.2009 21:47
Вставка по динамической памяти в Delphi Schakhmaev Помощь студентам 1 24.06.2008 01:27