Advertisement
SmnVadik

Lab "АиСД" №1

Mar 9th, 2023
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.26 KB | None | 0 0
  1. program Lab1_AiSD;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. uses
  8.   System.SysUtils, Windows;
  9.  
  10. Type pt = ^elem;
  11.     Elem = Record
  12.         Data: Record
  13.             Abonent, Number: String[30];
  14.         End;
  15.         Next: pt;
  16.         Prev: pt;
  17.     End;
  18.  
  19.     Pt2 = ^Elem2;
  20.     Elem2 = Record
  21.         Data: Record
  22.             Abon, Num: String[30];
  23.         end;
  24.         Next: Pt2;
  25.         Prev: Pt2;
  26.     End;
  27.     TString = String[30];
  28.  
  29. Var
  30.     SPservice: Integer;
  31.     First, Y: pt;
  32.     First2, Z: pt2;
  33.     Correct: Boolean;
  34.  
  35. Procedure Input (var x: pt);
  36. Var
  37.     y: pt;
  38.     I, Count: Integer;
  39. Begin
  40.     Writeln('Введите количество номеров');
  41.     Readln(Count);
  42.     New(X);
  43.     first := x;
  44.     x^.prev := nil;
  45.     For I := 1 to Count do
  46.     Begin
  47.         Write('Имя: ');
  48.         Y := X;
  49.         Readln(y^.data.Abonent);
  50.         Write('Телефонный номер: ');
  51.         Readln(y^.data.Number);
  52.         If i <> Count Then
  53.         Begin
  54.             New(X);
  55.             y^.next := x;
  56.             x^.prev := y;
  57.         End
  58.         Else
  59.             y^.next := nil;
  60.     End;
  61. End;
  62.  
  63. Procedure Overwriting (var F: Boolean; var First; var Y: pt; var Z: pt2; var First2: pt2; var Service: Integer);
  64. Begin
  65.     Service := 0;
  66.     F := False;
  67.     new (z);
  68.     first2 := z;
  69.     Writeln;
  70.     Writeln('Список номеров телефонов');
  71.     While y <> nil do
  72.     Begin
  73.         If Length(y^.data.Number) = 7 Then
  74.         Begin
  75.             F := True;
  76.             new (z^.next);
  77.             z := z^.next;
  78.             z^.data.Abon := y^.data.Abonent;
  79.             z^.data.num := y^.data.Number;
  80.         End;
  81.         Writeln(y^.data.Abonent, ' ', y^.data.Number);
  82.         If Length(y^.data.Number) = 3 Then inc(Service);
  83.         y := y^.prev;
  84.     End;
  85.     z^.next := nil;
  86. End;
  87.  
  88. Procedure Sort (var Z, First2: pt2);
  89. var
  90.     i, j, k: Integer;
  91.     S1, S2: TString;
  92. Begin
  93.     k := 0;
  94.     z := first2;
  95.     while z <> nil do
  96.     Begin
  97.         inc(k);
  98.         z := z^.next;
  99.     End;
  100.     For J := 1 to K - 1 do
  101.     Begin
  102.         z := first2;
  103.         For I := 1 to K - J do
  104.         Begin
  105.             If z^.data.Num > z^.next^.data.Num Then
  106.             Begin
  107.                 S1 := z^.data.Num;
  108.                 S2 := z^.data.Abon;
  109.                 z^.data.Num := z^.next^.data.Num;
  110.                 z^.data.Abon := z^.next^.data.Abon;
  111.                 z^.next^.data.num := S1;
  112.                 z^.next^.data.Abon := S2;
  113.             End;
  114.             z := z^.next;
  115.         End;
  116.     End;
  117. End;
  118.  
  119.  
  120. procedure output2 (var F: Boolean; var z: pt2);
  121. begin
  122.     Z := First2;
  123.     Writeln;
  124.     Write('Список номеров абонентов:');
  125.     While z <> nil do
  126.     Begin
  127.         Writeln(z^.data.Abon, ' ', z^.data.Num);
  128.         Z := z^.next;
  129.     End;
  130.     Writeln;
  131.     If SPservice <> 0 Then
  132.         Writeln('В списке ', SPservice, ' номер(а) спецслужб(ы).');
  133.     If F = False Then
  134.         Writeln('В списке нет ни одного номера абонентов.');
  135. end;
  136.  
  137. Begin
  138.     setconsoleCP(1251);
  139.     setconsoleoutputCP(1251);
  140.     Input(Y);
  141.     Overwriting (Correct, First, Y, Z, First2, SPservice);
  142.     Sort (Z, First2);
  143.     output2 (Correct, Z);
  144.     readln
  145. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement