Advertisement
LisunovaMaryna

AISD lab1.3

Mar 1st, 2024
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.19 KB | None | 0 0
  1. Program lab1_3;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. Uses
  7.     System.SysUtils;
  8.  
  9. Type
  10.     Data = Record
  11.         Name: String[100];
  12.         Number: String[7];
  13.     End;
  14.  
  15. Type
  16.     PNote = ^TPhone;
  17.  
  18.     TPhone = Record
  19.         Val: Data;
  20.         Next: PNote;
  21.     End;
  22.  
  23. Procedure CreateNote(Var Note: PNote; Var First: PNote);
  24. Var
  25.     IsCorrect, DoBreak: Boolean;
  26. Begin
  27.     New(Note);
  28.     First := Note;
  29.     DoBreak := False;
  30.     IsCorrect := True;
  31.     Writeln('Заполните телефонную книжку. ФИО не более 100 символов, номер = 7 цифрам. Для завершения записи нажмите enter.');
  32.     While DoBreak = False Do
  33.     Begin
  34.         Write('Введите ФИО абонента: ');
  35.         New(Note^.Next);
  36.         Note := Note^.Next;
  37.         Readln(Note^.Val.Name);
  38.         If Note^.Val.Name = '' Then
  39.             Break;
  40.         Write('Введите номер абонента: ');
  41.         Repeat
  42.             Readln(Note^.Val.Number);
  43.         Until IsCorrect;
  44.     End;
  45.     Note^.Next := Nil;
  46.     Write('Конец записи.');
  47. End;
  48.  
  49. Procedure PrintNote(Var Note: PNote; Var First: PNote);
  50. Begin
  51.     Note := First;
  52.     While Note <> Nil Do
  53.     Begin
  54.         Write(Note^.Val.Name, ' ');
  55.         Writeln(Note^.Val.Number);
  56.         Note := Note^.Next;
  57.     End;
  58. End;
  59.  
  60. Procedure MakeSort(Var Note: PNote; Var First: PNote);
  61. Var
  62.     Current: PNote;
  63.     Temp: Data;
  64.     WasSorted: Boolean;
  65. Begin
  66.     WasSorted := True;
  67.  
  68.     While WasSorted = True Do
  69.     Begin
  70.         WasSorted := False;
  71.         Current := First;
  72.         While Assigned(Current^.Next) Do
  73.         Begin
  74.             If Current^.Val.Name > Current^.Next^.Val.Name Then
  75.             Begin
  76.                 Temp := Current^.Val;
  77.                 Current^.Val := Current^.Next^.Val;
  78.                 Current^.Next^.Val := Temp;
  79.                 WasSorted := True;
  80.             End;
  81.             Current := Current^.Next;
  82.         End;
  83.     End;
  84. End;
  85.  
  86. Function Find(Var Note: PNote; Var First: PNote): String;
  87. Var
  88.     Value: Char;
  89.     SomeName, SomeTelephone: String;
  90.     IsCorrect: Boolean;
  91.     Counter: Integer;
  92. Begin
  93.     IsCorrect := True;
  94.     Counter := 0;
  95.     Writeln;
  96.     Writeln('Поиск.');
  97.     Writeln('Введите 0, если хотите найти фамилию, введите 1, если хотите найти номер телефона.');
  98.     Repeat
  99.         Readln(Value);
  100.         If Value = '0' Then
  101.         Begin
  102.             Writeln('Введите неабходимую фамилию: ');
  103.             Readln(SomeName);
  104.             Note := First;
  105.             While Note <> Nil Do
  106.             Begin
  107.                 If Note^.Val.Name = SomeName Then
  108.                 Begin
  109.                     Write(Note^.Val.Name, ' ');
  110.                     Writeln(Note^.Val.Number);
  111.                     Inc(Counter);
  112.                 End;
  113.                 Note := Note^.Next;
  114.             End;
  115.  
  116.             If Counter = 0 Then
  117.                 Write('Ничего не найдено.')
  118.             Else
  119.                 Write('Конец поиска.');
  120.         End
  121.  
  122.         Else If Value = '1' Then
  123.         Begin
  124.             Writeln('Введите неабходимый номер: ');
  125.             Readln(SomeTelephone);
  126.             Note := First;
  127.             While Note <> Nil Do
  128.             Begin
  129.                 If Note^.Val.Number = SomeTelephone Then
  130.                 Begin
  131.                     Write(Note^.Val.Name, ' ');
  132.                     Writeln(Note^.Val.Number);
  133.                     Inc(Counter);
  134.                 End;
  135.                 Note := Note^.Next;
  136.             End;
  137.  
  138.             If Counter = 0 Then
  139.                 Write('Ничего не найдено.')
  140.             Else
  141.                 Write('Конец поиска.');
  142.         End
  143.  
  144.         Else
  145.         Begin
  146.             IsCorrect := False;
  147.             Writeln('Некорректное значение. Повторите ввод.');
  148.         End;
  149.     Until IsCorrect;
  150.  
  151. End;
  152.  
  153. Var
  154.     First, Note: PNote;
  155.  
  156. Begin
  157.     CreateNote(Note, First);
  158.     MakeSort(Note, First);
  159.     PrintNote(Note, First);
  160.     Find(Note, First);
  161.  
  162.     Readln;
  163. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement