Advertisement
anticlown

Lists - 1.3(2 sem)

Apr 9th, 2023 (edited)
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.98 KB | None | 0 0
  1. Program AiSD_1_3;
  2.  
  3. {$APPTYPE CONSOLE}
  4. {$R *.res}
  5.  
  6. Uses
  7.   System.SysUtils;
  8.  
  9. Type
  10.     TString = String[20];
  11.     User = ^TUser;
  12.  
  13.     TUser = Record
  14.         UserName: TString;
  15.         PhoneNumber: Integer;
  16.         Next: User;
  17.     End;
  18.  
  19. Function InputList(Count: Integer): User;
  20. Var
  21.     Element, Head, Start: User;
  22.     I: Integer;
  23.     IsCorrect: Boolean;
  24.     Temp: String;
  25.     LowerTemp: String[20];
  26. Begin
  27.     New(Element);
  28.     Head := Element;
  29.     Start := Element;
  30.     I := 0;
  31.     While I < Count Do
  32.     Begin
  33.         IsCorrect := True;
  34.         Start := Head;
  35.         Writeln('Абонент №', I + 1, ':');
  36.         Repeat
  37.             Readln(Element^.UserName);
  38.         Until Length(Element^.UserName) < 21;
  39.  
  40.         Element^.UserName[1] := UpCase(Element^.UserName[1]);
  41.         LowerTemp := Copy(Element^.UserName, 2, Length(Element^.UserName));
  42.         Delete(Element^.UserName, 2, Length(Element^.UserName));
  43.         Element^.UserName := Element^.UserName + LowerCase(LowerTemp);
  44.  
  45.         Writeln('Номер телефона: ', I + 1);
  46.         Repeat
  47.             IsCorrect := True;
  48.             Try
  49.                 Readln(Temp);
  50.                 Element^.PhoneNumber := StrToInt(Temp);
  51.             Except
  52.                 IsCorrect := False;
  53.                 Writeln('Проверьте корректность данных!');
  54.             End;
  55.             If IsCorrect And (Length(Temp) <> 7) Then
  56.             Begin
  57.                 IsCorrect := False;
  58.                 Writeln('Введите семизначное число!');
  59.             End;
  60.         Until IsCorrect;
  61.  
  62.         While (Start^.Next <> Element^.Next) And IsCorrect Do
  63.         Begin
  64.             If (Start^.UserName = Element^.UserName) And
  65.                 (Start^.PhoneNumber = Element^.PhoneNumber) Then
  66.                 IsCorrect := False;
  67.             Start := Start^.Next;
  68.         End;
  69.         If IsCorrect Then
  70.         Begin
  71.             New(Element^.Next);
  72.             Element := Element^.Next;
  73.             Inc(I);
  74.         End
  75.         Else
  76.             Writeln('Проверьте корректность данных!');
  77.     End;
  78.     Element^.Next := Nil;
  79.     Result := Head;
  80. End;
  81.  
  82. Procedure SortList(Count: User);
  83. Var
  84.     Temp, Start: User;
  85.     TempSwap: String[20];
  86.     PhoneSwap: Integer;
  87. Begin
  88.     Start := Count;
  89.     While Start^.Next <> Nil Do
  90.     Begin
  91.         Temp := Start^.Next;
  92.         While Temp^.Next <> Nil Do
  93.         Begin
  94.             If Temp^.UserName < Start^.UserName Then
  95.             Begin
  96.                 TempSwap := Temp^.UserName;
  97.                 Temp^.UserName := Start^.UserName;
  98.                 Start^.UserName := TempSwap;
  99.  
  100.                 PhoneSwap := Temp^.PhoneNumber;
  101.                 Temp^.PhoneNumber := Start^.PhoneNumber;
  102.                 Start^.PhoneNumber := PhoneSwap;
  103.  
  104.             End;
  105.             Temp := Temp^.Next;
  106.         End;
  107.         Start := Start^.Next;
  108.     End;
  109. End;
  110.  
  111. Procedure OutputList(Count: User);
  112. Var
  113.     Start: User;
  114. Begin
  115.     Start := Count;
  116.     While Start^.Next <> Nil Do
  117.     Begin
  118.         Write(Start^.UserName + '–' + IntToStr(Start^.PhoneNumber), #13#10);
  119.         Start := Start^.Next;
  120.     End;
  121. End;
  122.  
  123. Procedure FindFromNumber(Count: User);
  124. Var
  125.     Start: User;
  126.     Temp: String;
  127.     TempInt: Integer;
  128.     IsCorrect: Boolean;
  129. Begin
  130.     Repeat
  131.         IsCorrect := True;
  132.         Try
  133.             Readln(Temp);
  134.             TempInt := StrToInt(Temp);
  135.         Except
  136.             IsCorrect := False;
  137.             Writeln('Проверьте корректность данных!');
  138.         End;
  139.         If IsCorrect And (Length(Temp) <> 7) Then
  140.         Begin
  141.             IsCorrect := False;
  142.             Writeln('Введите семизначное число!');
  143.         End;
  144.     Until IsCorrect;
  145.     Start := Count;
  146.     While Start^.Next <> Nil Do
  147.     Begin
  148.         If (Start^.PhoneNumber = TempInt) Then
  149.             Writeln(Start^.UserName);
  150.         Start := Start^.Next;
  151.     End;
  152. End;
  153.  
  154. Procedure FindFromUserName(Count: User);
  155. Var
  156.     Start: User;
  157.     Temp: TString;
  158. Begin
  159.     Writeln('Введите имя абонента:');
  160.     Repeat
  161.         Readln(Temp);
  162.     Until Length(Temp) < 21;
  163.     Start := Count;
  164.     While Start^.Next <> Nil Do
  165.     Begin
  166.         If (Start^.UserName = Temp) Then
  167.             Writeln(Start^.PhoneNumber);
  168.         Start := Start^.Next;
  169.     End;
  170. End;
  171.  
  172. Function InputChoice(): String;
  173. Var
  174.     Str: String;
  175.     IsCorrect: Boolean;
  176.     Numb: Integer;
  177. Begin
  178.     Repeat
  179.         IsCorrect := True;
  180.         Try
  181.             Readln(Str);
  182.             Numb := StrToInt(Str);
  183.         Except
  184.             IsCorrect := False;
  185.             Writeln('Повторите ввод!');
  186.         End;
  187.         If IsCorrect And ((Numb > 3) Or (Numb < 1)) Then
  188.     Until IsCorrect;
  189.  
  190.     Result := Str;
  191. End;
  192.  
  193. //Main
  194. Var
  195.     IsIncorrect: Boolean;
  196.     Count: Integer;
  197.     Head: User;
  198.     Number: Integer;
  199.     Str: TString;
  200. Begin
  201.     Write('Введите количество абонентов (от 2 до 6): ');
  202.     Repeat
  203.         IsInCorrect := True;
  204.         Try
  205.             Readln(Count);
  206.         Except
  207.             IsInCorrect := False;
  208.             Writeln('Проверьте корректность данных!');
  209.         End;
  210.         If IsIncorrect And ((Count > 6) Or (Count < 2)) Then
  211.         Begin
  212.             IsIncorrect := False;
  213.             Writeln('Проверьте корректность данных!');
  214.         End;
  215.     Until IsIncorrect;
  216.  
  217.     Head := InputList(Count);
  218.     SortList(Head);
  219.     OutputList(Head);
  220.  
  221.     Repeat
  222.         Writeln('Нажмите', #13#10, '1 для поиска фамилии по номеру телефона', #13#10, '2 для поиска телефона по фамилии', #13#10, '3 чтобы выйти');
  223.         Str := InputChoice();
  224.         If Str = '1' Then
  225.             FindFromNumber(Head)
  226.         Else If Str = '2' Then
  227.             FindFromUserName(Head);
  228.     Until StrToInt(Str) = 3;
  229. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement