Advertisement
sidorova-math

Spiski_2

May 27th, 2012
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.28 KB | None | 0 0
  1. type
  2.       PRec = ^TRec;   { Тип указатель на запись }
  3.       TRec = record               { Тип записи для базы данных }
  4.         mNumber : integer;      
  5.         mFam    : string[31];
  6.         mNext   : PRec;        
  7.       end;
  8. var   List : PRec;  { Указатель на начало списка}
  9.  
  10.   { Размещение нового элемента в сортированном списке }
  11. procedure AddToSortList(aNumber: integer; const aFam : string);
  12. var p, q : PRec;
  13. begin
  14.   New(p); { Создаем динамическую переменную-запись }
  15.   { Размещаем данные в полях записи }
  16.   p^.mNumber:= aNumber; p^.mFam:= aFam; p^.mNext:=nil;
  17.   { Если список пуст... }
  18.   if List=nil
  19.     then List:= p  { ...голова указывает на новую запись }
  20.     else begin
  21.            q:= List;  { Поиск места вставки начинаем с головы }
  22.            { Двигаемся по списку, пока следующий элемент существует
  23.              и его номер меньше вставляемого }
  24.            while (q^.mNext<>nil) and (q^.mNext^.mNumber < aNumber)
  25.               do q:=q^.mNext;
  26.            if q^.mNumber > aNumber then begin
  27.               { вставка на первое место }
  28.               p^.mNext:=List;      { первый становится вторым }
  29.               List:=p;             { а текущий- первым }
  30.            end else begin
  31.               { вставка в середине или в конце списка }
  32.               p^.mNext:=q^.mNext;  { связываем текущий со следующим }
  33.               q^.mNext:=p;         { связываем предыдущий с текущим }
  34.            end
  35.          end
  36. end;
  37.  
  38. procedure PrintList;    { Распечатка списка }
  39. var P : PRec;
  40. begin
  41.   P:= List;
  42.   while P<>nil do begin
  43.     Writeln(P^.mNumber, '':3, P^.mFam);
  44.     P:= P^.mNext;
  45.   end;
  46. end;
  47.  
  48. function Find(aNumber: integer): PRec;   { Поиск в сортированном списке }
  49. var p : PRec;
  50. begin
  51.   p:= List;  { Поиск начинаем с головы }
  52.   { Двигаемся по списку, пока следующий элемент существует
  53.      и его номер меньше искомого }
  54.   while (p<>nil) and (p^.mNext<>nil) and (p^.mNext^.mNumber <= aNumber)
  55.      do p:=p^.mNext;
  56.   { Если конец списка не достигнут и номер совпадает... }
  57.   if (p<>nil) and (p^.mNumber = aNumber)
  58.     then Find:= p    { ... то успешно! }
  59.     else Find:= nil; { ... а иначе не нашли }
  60. end;
  61.  
  62. var i, N : integer;
  63.        P : PRec;
  64.  
  65. begin   { Главная программа }
  66.   List:= nil;
  67.   for i:=1 to 20 do AddToSortList(100+Random(100), 'Family');
  68.   { Просмотр списка }
  69.   PrintList;
  70.   { Цикл экспериментов по поиску в списке }
  71.   repeat
  72.     Write('Номер авто = '); Readln(N);
  73.     if N>0 then begin
  74.       P:= Find(N);
  75.       if P<>nil
  76.         then Writeln(P^.mNumber, '':3, P^.mFam)
  77.         else Writeln ('Не найден!');
  78.     end;
  79.   until N=0
  80. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement