Advertisement
THOMAS_SHELBY_18

AISD LAB 1_3

Feb 22nd, 2024 (edited)
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.70 KB | Source Code | 0 0
  1. program Lab2;
  2.  
  3. Uses
  4.     System.SysUtils;
  5.  
  6. Type
  7.     TPointer = ^NumberList;
  8.     NumberList = record
  9.         Number: Integer;
  10.         Name: String;
  11.         SecondName: String;
  12.         FatherName: String;
  13.         NextPointer: TPointer;
  14.     end;
  15.  
  16. Function ReadNum(): Integer;
  17. Var
  18.     N: Integer;
  19.     IsCorrect: Boolean;
  20. Begin
  21.     Repeat
  22.         IsCorrect := True;
  23.         Try
  24.             Readln(N);
  25.         Except
  26.             IsCorrect := False;
  27.             Writeln('Некорректный ввод! Введите семизначный номер!');
  28.         End;
  29.         If (IsCorrect) And ((N > 9999999)Or (N < 1000000)) then
  30.         Begin
  31.             IsCorrect := False;
  32.             Writeln('Некорректный ввод! Введите семизначный номер!');
  33.         End;
  34.         ReadNum := N;
  35.     Until IsCorrect;
  36. End;
  37.  
  38. Function ReadChoice(Min, Max: Integer): Integer;
  39. Var
  40.     N: Integer;
  41.     IsCorrect: Boolean;
  42. Begin
  43.     Repeat
  44.         IsCorrect := True;
  45.         Try
  46.             Readln(N);
  47.         Except
  48.             IsCorrect := False;
  49.             Writeln('Некорректный ввод! Попробуйте еще раз!');
  50.         End;
  51.         If(IsCorrect) And ((N > Max) Or (N < Min)) then
  52.         Begin
  53.             IsCorrect := False;
  54.             Writeln('Некорректный ввод! Попробуйте еще раз!');
  55.         End;
  56.         ReadChoice := N;
  57.     Until IsCorrect;
  58. End;
  59.  
  60. Procedure CreateNewRecord(Pointer: TPointer; Name, SecondName, FatherName: String; Number: Integer);
  61. Begin
  62.     Pointer^.Name := Name;
  63.     Pointer^.SecondName := SecondName;
  64.     Pointer^.FatherName := FatherName;
  65.     Pointer^.Number := Number;
  66. End;
  67.  
  68. Procedure OutputNumberRecord(Header: TPointer; Number: Integer);
  69. var
  70.     IsFinded: Boolean;
  71.     NextPointer: TPointer;
  72. Begin
  73.     IsFinded := False;
  74.     NextPointer := Header^.NextPointer;
  75.     While(NextPointer^.NextPointer <> nil) do
  76.     Begin
  77.         if NextPointer^.Number = Number then
  78.         Begin
  79.             Writeln(NextPointer^.SecondName);
  80.             IsFinded := True;
  81.         End;
  82.         NextPointer := NextPointer^.NextPointer;
  83.     End;
  84.  
  85.     //последний элемент списка, у него NextPointer = nil
  86.     if NextPointer^.Number = Number then
  87.     Begin
  88.         Writeln(NextPointer^.SecondName);
  89.         IsFinded := True;
  90.     End;
  91.  
  92.     if Not IsFinded then
  93.         Writeln('Совпадений не найдено!');
  94. End;
  95.  
  96. Procedure OutputSecondNameRecord(Header: TPointer; SecondName: String);
  97. var
  98.     IsFinded: Boolean;
  99.     NextPointer: TPointer;
  100. Begin
  101.     IsFinded := False;
  102.     NextPointer := Header^.NextPointer;
  103.     While(NextPointer^.NextPointer <> nil) do
  104.     Begin
  105.         if NextPointer^.SecondName = SecondName then
  106.         Begin
  107.             Writeln(NextPointer^.Number);
  108.             IsFinded := True;
  109.         End;
  110.         NextPointer := NextPointer^.NextPointer;
  111.     End;
  112.  
  113.     //последний элемент списка, у него NextPointer = nil
  114.     if NextPointer^.SecondName = SecondName then
  115.     Begin
  116.         Writeln(NextPointer^.Number);
  117.         IsFinded := True;
  118.     End;
  119.  
  120.  
  121.     if not IsFinded then
  122.         Writeln('Совпадений не найдено!');
  123. End;
  124.  
  125.  
  126.  
  127. Var
  128.     Number, Choice: Integer;
  129.     Name, SecondName, FatherName: String;
  130.     Header, ListElemPointer: TPointer;
  131. begin
  132.     New(Header);
  133.     Header^.NextPointer := nil;
  134.  
  135.     ListElemPointer := Header;
  136.  
  137.     Repeat
  138.         Writeln('Добавить новую запись - 1, завершить ввод - 0:');
  139.         Writeln('-----------------------------------------------------');
  140.         Choice := ReadChoice(0, 1);
  141.  
  142.         if Choice <> 0 then
  143.         Begin
  144.             New(ListElemPointer^.NextPointer);
  145.             ListElemPointer := ListElemPointer^.NextPointer;
  146.  
  147.             Write('Введите фамилию: ');
  148.             Readln(SecondName);
  149.  
  150.             Write('Введите имя: ');
  151.             Readln(Name);
  152.  
  153.             Write('Введите отчество: ');
  154.             Readln(FatherName);
  155.  
  156.             Write('Введите семизначный номер телефона: ');
  157.             Number := ReadNum();
  158.  
  159.             CreateNewRecord(ListElemPointer, SecondName, Name, FatherName, Number);
  160.         End
  161.         Else
  162.             ListElemPointer^.NextPointer := Nil;
  163.         Writeln('-----------------------------------------------------');
  164.     Until Choice = 0;
  165.  
  166.  
  167.  
  168.     Writeln('Выберите действие со списком:');
  169.     Repeat
  170.         Writeln('0 - выход, 1 - поиск по фамилии, 2 - поиск по номеру:');
  171.         Writeln('-----------------------------------------------------');
  172.         Choice := ReadChoice(0, 2);
  173.         case Choice of
  174.             1:
  175.             Begin
  176.                 If Header^.NextPointer = nil then
  177.                     Writeln('Список номеров пуст!')
  178.                 Else
  179.                 Begin
  180.                     Write('Введите фамилию: ');
  181.                     Readln(SecondName);
  182.                     OutputSecondNameRecord(Header, SecondName);
  183.                 End;
  184.             End;
  185.             2:
  186.             Begin
  187.                 If Header^.NextPointer = nil then
  188.                     Writeln('Список номеров пуст!')
  189.                 Else
  190.                 Begin
  191.                     Write('Введите номер: ');
  192.                     Number := ReadNum();
  193.                     OutputNumberRecord(Header, Number);
  194.                 End;
  195.             End;
  196.         end;
  197.         Writeln('-----------------------------------------------------');
  198.     Until Choice = 0;
  199. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement