Advertisement
Ewerlost

AISD1_3

Feb 28th, 2024
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.24 KB | None | 0 0
  1. program Project2;
  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. procedure InsertInList(RecordOfMan: NumberList; Header : TPointer);
  126. var
  127.     Temp: TPointer;
  128.     IsInsert: Boolean;
  129. begin
  130.     IsInsert := False;
  131.     while Not IsInsert do
  132.     begin
  133.         if (Header^.NextPointer = nil) or (RecordOfMan.SecondName < Header^.NextPointer^.SecondName) then
  134.         begin
  135.             Temp := Header^.NextPointer;
  136.             New(Header^.NextPointer);
  137.             Header := Header^.NextPointer;
  138.             Header^.SecondName := RecordOfMan.SecondName;
  139.             Header^.Name := RecordOfMan.Name;
  140.             Header^.FatherName := RecordOfMan.FatherName;
  141.             Header^.Number := RecordOfMan.Number;
  142.             Header^.NextPointer := Temp;
  143.             IsInsert := True;
  144.         end
  145.         else
  146.             Header := Header^.NextPointer;
  147.     end;
  148. end;
  149.  
  150. Procedure WriteSingleList(Header: TPOinter);
  151. var
  152.     Y, FirstListEl: TPointer;
  153.     NextNum: String;
  154. begin
  155.     Header := Header.NextPointer;
  156.     New(FirstListEl);
  157.     FirstListEl^.NextPointer := nil;
  158.     while Header <> nil do
  159.     begin
  160.         InsertInList(Header^, FirstListEl);
  161.         Header := Header^.NextPointer;
  162.     end;
  163.  
  164.     FirstListEl := FirstListEl.NextPointer;
  165.  
  166.     while FirstListEl <> nil do
  167.     Begin
  168.         Write('Фамилия: ', FirstListEl^.SecondName,' ', 'Имя: ', FirstListEl^.Name,' ','Отчество: ', FirstListEl^.FatherName,' ', 'Номер телефона:',' ', FirstListEL^.Number);
  169.         FirstListEl := FirstListEl.NextPointer;
  170.         Writeln;
  171.     End;
  172. end;
  173.  
  174.  
  175.  
  176. Var
  177.     Number, Choice: Integer;
  178.     Name, SecondName, FatherName: String;
  179.     Header, ListElemPointer: TPointer;
  180. begin
  181.     New(Header);
  182.     Header^.NextPointer := nil;
  183.  
  184.     ListElemPointer := Header;
  185.  
  186.     Repeat
  187.         Writeln('Добавить новую запись - 1, завершить ввод - 0:');
  188.         Writeln('-----------------------------------------------------');
  189.         Choice := ReadChoice(0, 1);
  190.  
  191.         if Choice <> 0 then
  192.         Begin
  193.             New(ListElemPointer^.NextPointer);
  194.             ListElemPointer := ListElemPointer^.NextPointer;
  195.  
  196.             Write('Введите фамилию: ');
  197.             Readln(SecondName);
  198.  
  199.             Write('Введите имя: ');
  200.             Readln(Name);
  201.  
  202.             Write('Введите отчество: ');
  203.             Readln(FatherName);
  204.  
  205.             Write('Введите семизначный номер телефона: ');
  206.             Number := ReadNum();
  207.  
  208.             CreateNewRecord(ListElemPointer, Name, SecondName, FatherName, Number);
  209.         End
  210.         Else
  211.             ListElemPointer^.NextPointer := Nil;
  212.         Writeln('-----------------------------------------------------');
  213.     Until Choice = 0;
  214.  
  215.  
  216.     WriteSingleList(Header);
  217.  
  218.     Writeln('Выберите действие со списком:');
  219.     Repeat
  220.         Writeln('0 - выход, 1 - поиск по фамилии, 2 - поиск по номеру:');
  221.         Writeln('-----------------------------------------------------');
  222.         Choice := ReadChoice(0, 2);
  223.         case Choice of
  224.             1:
  225.             Begin
  226.                 If Header^.NextPointer = nil then
  227.                     Writeln('Список номеров пуст!')
  228.                 Else
  229.                 Begin
  230.                     Write('Введите фамилию: ');
  231.                     Readln(SecondName);
  232.                     OutputSecondNameRecord(Header, SecondName);
  233.                 End;
  234.             End;
  235.             2:
  236.             Begin
  237.                 If Header^.NextPointer = nil then
  238.                     Writeln('Список номеров пуст!')
  239.                 Else
  240.                 Begin
  241.                     Write('Введите номер: ');
  242.                     Number := ReadNum();
  243.                     OutputNumberRecord(Header, Number);
  244.                 End;
  245.             End;
  246.         end;
  247.         Writeln('-----------------------------------------------------');
  248.     Until Choice = 0;
  249. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement