Advertisement
Old_But_Gold

ExamSecondSemester

Jun 3rd, 2023
1,315
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 20.55 KB | None | 1 0
  1. program ExamSecondSemester;
  2.  
  3. {Задача 1. Найти количество различных символов в строке.
  4.  
  5. Function DifferentSymbols(Str: String): Byte;
  6. Var
  7.     S: Set of Char;
  8.     I: Integer;
  9. Begin
  10.     S := [];
  11.     Result := 0;
  12.     For I := 1 to Length(Str) do
  13.         If Not(Str[I] In S) Then
  14.         Begin
  15.             //Include(S, AnsiChar(Str[I]));
  16.             S := S + [Str[I]];
  17.             Inc(Result);
  18.         End;
  19. End;
  20.  
  21. Var
  22.     Str: String;
  23.     F: TextFile;
  24. begin
  25.     AssignFile(F, 'Test.txt');
  26.     Reset(F);
  27.     Readln(F, Str);
  28.     CloseFile(F);
  29.     Writeln(DifferentSymbols(Str));
  30.     Readln;
  31. end.}
  32.  
  33.  
  34.  
  35. {Задача 2. Самый долгий вызов.
  36.  
  37. Type
  38.     TInfo = Record
  39.         Index, Long, Cost: Byte
  40.     End;
  41.     TArr = Array of TInfo;
  42.  
  43. Const N = 5;
  44.  
  45. Function GetHighest(Arr: TArr): Byte;
  46. Var
  47.     I: Integer;
  48.     Temp: Integer;
  49. Begin
  50.     Result := 0;
  51.     Temp := Arr[0].Long * Arr[0].Cost;
  52.     For I := 1 to High(Arr) do
  53.         If Temp < Arr[I].Long * Arr[I].Cost Then
  54.         Begin
  55.             Result := I;
  56.             Temp := Arr[I].Long * Arr[I].Cost;
  57.         End;
  58. End;
  59.  
  60. Var
  61.     Arr: TArr;
  62.     F: TextFile;
  63.     Index: Byte;
  64.     I: Integer;
  65. begin
  66.     SetLength(Arr, N);
  67.     AssignFile(F, 'Test.txt');
  68.     Reset(F);
  69.     For I := 0 to High(Arr) do
  70.     Begin
  71.         Readln(F, Arr[I].Index);
  72.         Readln(F, Arr[I].Long);
  73.         Readln(F, Arr[I].Cost);
  74.     End;
  75.     CloseFile(F);
  76.     Index := GetHighest(Arr);
  77.     Writeln(Arr[Index].Index, ' ', Arr[Index].Long, ' ', Arr[Index].Cost, ' ');
  78.     Readln;
  79. end.}
  80.  
  81. {Задача 3. Найти самую дешевую книгу.
  82.  
  83. Type
  84.     TInfo = Record
  85.         Name, Author: ShortString;
  86.         Cost, Amount, Isi: Integer;
  87.     End;
  88.     TArr = Array of TInfo;
  89.  
  90. Const N = 5;
  91.  
  92. Function GetLowestPrice(Arr: TArr): Integer;
  93. Var
  94.     I, Temp: Integer;
  95. Begin
  96.     Result := 0;
  97.     Temp := Arr[0].Cost * Arr[0].Amount + Arr[0].Isi;
  98.     For I := 1 to High(Arr) do
  99.         If Temp > Arr[I].Cost * Arr[I].Amount + Arr[I].Isi Then
  100.         Begin
  101.             Temp := Arr[I].Cost * Arr[I].Amount + Arr[I].Isi;
  102.             Result := I;
  103.         End;
  104. End;
  105.  
  106. Var
  107.     F: TextFile;
  108.     I: Integer;
  109.     Arr: TArr;
  110. begin
  111.     SetLength(Arr, N);
  112.     AssignFile(F, 'Test.txt');
  113.     Reset(F);
  114.     For I := 0 to High(Arr) do
  115.     Begin
  116.         Readln(F, Arr[I].Cost);
  117.         Readln(F, Arr[I].Amount);
  118.         Readln(F, Arr[I].Isi);
  119.         Readln(F, Arr[I].Name);
  120.         Readln(F, Arr[I].Author);
  121.     End;
  122.     CloseFile(F);
  123.     Writeln(Arr[GetLowestPrice(Arr)].Name);
  124.     Readln;
  125. end.}
  126.  
  127. {Задача 4. Сумма элементов массива от 1 до K.
  128.  
  129. Const N = 8;
  130.  
  131. Type
  132.     TArr = Array[1.. N] of Integer;
  133.  
  134. Function SumInArray(Arr: TArr; Count: Integer): Integer;
  135. Var
  136.     I: Integer;
  137. Begin
  138.     Result := 0;
  139.     For I := 1 to Count do
  140.         Inc(Result, Arr[I]);
  141. End;
  142.  
  143. Var
  144.     Arr: TArr;
  145.     F: TextFile;
  146.     Count, I: Integer;
  147. begin
  148.     AssignFile(F, 'Test.txt');
  149.     Reset(F);
  150.     For I := 1 to High(Arr) do
  151.         Read(F, Arr[I]);
  152.     Readln(F, Count);
  153.     CloseFile(F);
  154.     Writeln(SumInArray(Arr, Count));
  155.     Readln;
  156. end.}
  157.  
  158. {Задача 5. Дан массив размером M на N. Написать процедуру сравнения 1й строки со всеми остальными. Вывести количество совпадений
  159.  
  160. Const
  161.     Row = 5;
  162.     Cols = 5;
  163.  
  164. Type
  165.     TMatrix = Array[1..Row, 1..Cols] of Integer;
  166.  
  167. Function AmountOfSimilar(Matrix: TMatrix): Integer;
  168. Var
  169.     I, J: Integer;
  170.     IsSimilar: Boolean;
  171. Begin
  172.     Result := 0;
  173.     For I := 2 to High(Matrix) do
  174.     Begin
  175.         IsSimilar := True;
  176.         J := 1;
  177.         While IsSimilar and (J <= High(Matrix[1])) do
  178.         Begin
  179.             IsSimilar := Matrix[1, J] = Matrix[I, J];
  180.             Inc(J);
  181.         End;
  182.         If IsSimilar Then
  183.             Inc(Result);
  184.     End;
  185. End;
  186.  
  187. Var
  188.     Matrix: TMatrix;
  189.     F: TextFile;
  190.     I, J: Integer;
  191. begin
  192.     AssignFile(F, 'Test.txt');
  193.     Reset(F);
  194.     For I := 1 to High(Matrix) do
  195.         For J := 1 to High(Matrix[1]) do
  196.             Read(F, Matrix[I, J]);
  197.     CloseFile(F);
  198.     Writeln(AmountOfSimilar(Matrix));
  199.     Readln;
  200. end.}
  201.  
  202. {Задача 6. Занулить между min и max
  203.  
  204. Const N = 8;
  205.  
  206. Type
  207.     TArr = Array[1.. N] of Integer;
  208.  
  209.  
  210. Procedure GetMinAndMax(Arr: TArr; Var Min, Max: Integer);
  211. Var
  212.     Temp, I: Integer;
  213. Begin
  214.     Min := 1;
  215.     Max := 1;
  216.     For I := 2 to High(Arr) do
  217.     Begin
  218.         If Arr[Min] > Arr[I] Then
  219.             Min := I;
  220.         If Arr[Max] < Arr[I] Then
  221.             Max := I;
  222.     End;
  223.     If Min > Max Then
  224.     Begin
  225.         Temp := Min;
  226.         Min := Max;
  227.         Max := Temp;
  228.     End;
  229. End;
  230.  
  231. Procedure MakeZeroInArr(Var Arr: TArr; Min, Max: Integer);
  232. Var
  233.     I: Integer;
  234. Begin
  235.     For I := Min + 1 to Max - 1 do
  236.         Arr[I] := 0;
  237. End;
  238.  
  239. Var
  240.     Arr: TArr;
  241.     F: TextFile;
  242.     I, Min, Max: Integer;
  243. begin
  244.     AssignFile(F, 'Test.txt');
  245.     Reset(F);
  246.     For I := 1 to High(Arr) do
  247.         Read(F, Arr[I]);
  248.     GetMinAndMax(Arr, Min, Max);
  249.     MakeZeroInArr(Arr, Min, Max);
  250.     For I := 1 to High(Arr) do
  251.         Write(Arr[I]:4);
  252.     CloseFile(F);
  253.     Readln;
  254. end.}
  255.  
  256. {Задача 7. задана матрица М на N , нужно посчитать строки , где все элементы идут по возрастанию
  257.  
  258. Const
  259.     Row = 5;
  260.     Cols = 5;
  261.  
  262. Type
  263.     TMatrix = Array[1..Row, 1..Cols] of Integer;
  264.  
  265. Function AmountOfIncreasing(Matrix: TMatrix): Integer;
  266. Var
  267.     I, J: Integer;
  268.     IsSimilar: Boolean;
  269. Begin
  270.     Result := 0;
  271.     For I := 1 to High(Matrix) do
  272.     Begin
  273.         IsSimilar := True;
  274.         J := 1;
  275.         While IsSimilar and (J < High(Matrix[1])) do
  276.         Begin
  277.             IsSimilar := Matrix[I, J] < Matrix[I, J + 1];
  278.             Inc(J);
  279.         End;
  280.         If IsSimilar Then
  281.             Inc(Result);
  282.     End;
  283. End;
  284.  
  285. Var
  286.     Matrix: TMatrix;
  287.     F: TextFile;
  288.     I, J: Integer;
  289. begin
  290.     AssignFile(F, 'Test.txt');
  291.     Reset(F);
  292.     For I := 1 to High(Matrix) do
  293.         For J := 1 to High(Matrix[1]) do
  294.             Read(F, Matrix[I, J]);
  295.     CloseFile(F);
  296.     Writeln(AmountOfIncreasing(Matrix));
  297.     Readln;
  298. end.}
  299.  
  300. {Задача 8. Поменять элементы местами, четные индексы с нечетными индексами.
  301.  
  302. Const N = 10;
  303.  
  304. Type
  305.     TArr = Array[1..N] of Integer;
  306.  
  307. Function SwapElements(Var Arr: TArr): Integer;
  308. Var
  309.     I: Integer;
  310.     Temp: Integer;
  311. Begin
  312.     I := 1;
  313.     While I < High(Arr) do
  314.     Begin
  315.         Temp := Arr[I];
  316.         Arr[I] := Arr[I + 1];
  317.         Arr[I + 1] := Temp;
  318.         Inc(I, 2);
  319.     End;
  320. End;
  321.  
  322. Var
  323.     Arr: TArr;
  324.     F: TextFile;
  325.     Count, I: Integer;
  326. begin
  327.     AssignFile(F, 'Test.txt');
  328.     Reset(F);
  329.     For I := 1 to High(Arr) do
  330.         Read(F, Arr[I]);
  331.     CloseFile(F);
  332.     SwapElements(Arr);
  333.     For I := 1 to High(Arr) do
  334.         Write(Arr[I]:4);
  335.     Readln;
  336. end.}
  337.  
  338.  
  339. {Задача 9. Дан массив размера N. В нем указаны поля: <Фамилия студента>, <Номер группы>, <Год поступления>.
  340. Найти и вывести группу с наибольшим количеством студентов. Если групп таких несколько, то вывести последнюю из них.
  341.  
  342. Const N = 5;
  343.  
  344. Type
  345.     TInfo = Record
  346.         Name: ShortString;
  347.         Group, Year: Integer;
  348.     End;
  349.     TArr = Array[1..N] of TInfo;
  350.  
  351. Function GetHighestIndexGroup(Arr: TArr): Integer;
  352. Var
  353.     Count, Temp, I, J: Integer;
  354. Begin
  355.     Count := 0;
  356.     For I := 1 to High(Arr) do
  357.     Begin
  358.         Temp := 0;
  359.         For J := 1 to High(Arr) do
  360.             If Arr[I].Group = Arr[J].Group Then
  361.                 Inc(Temp);
  362.         If Temp >= Count Then //>= для последней, > для первой
  363.         Begin
  364.             Count := Temp;
  365.             Result := Arr[I].Group;
  366.         End;
  367.     End;
  368. End;
  369.  
  370. Var
  371.     Arr: TArr;
  372.     F: TextFile;
  373.     I: Integer;
  374. begin
  375.     AssignFile(F, 'Test.txt');
  376.     Reset(F);
  377.     For I := 1 to High(Arr) do
  378.     Begin
  379.         Readln(F, Arr[I].Name);
  380.         Readln(F, Arr[I].Group);
  381.         Readln(F, Arr[I].Year);
  382.     End;
  383.     CloseFile(F);
  384.     Writeln(GetHighestIndexGroup(Arr));
  385.     Readln;
  386. end.}
  387.  
  388. {Задача 10. Дан массив из n элементов, n > 5. В каждом компоненте массива записано имя человека, кол-во лайков и сообщений и друзей.
  389. //Вывести 5 человек, у которых наибольшее количество лайков
  390.  
  391. Type
  392.     TInfo = Record
  393.         Name: ShortString;
  394.         Likes, Messages, Friends: Integer;
  395.     End;
  396.     TArr = Array of TInfo;
  397.  
  398. Const N = 7;
  399.  
  400.  
  401. Procedure Swap(Arr: TArr; I, J: Integer);
  402. Var
  403.     Temp: TInfo;
  404. Begin
  405.     Temp := Arr[I];
  406.     Arr[I] := Arr[J];
  407.     Arr[J] := Temp;
  408. End;
  409.  
  410. Function Partition(Arr: TArr; Left, Right: Integer): Integer;
  411. Var
  412.     Pivot, I, J: Integer;
  413. Begin
  414.     Pivot := Arr[Left].Likes;
  415.     J := Left;
  416.     For I := J + 1 to Right do
  417.         If Arr[I].Likes >= Pivot Then  //сортировка по невозрастанию
  418.         Begin
  419.             Inc(J);
  420.             Swap(Arr, I, J);
  421.         End;
  422.     Swap(Arr, Left, J);
  423.     Result := J;
  424. End;
  425.  
  426. Procedure QSort(Arr: TArr; Left, Right: Integer);
  427. Var
  428.     Temp: Integer;
  429. Begin
  430.     While Left < Right do
  431.     Begin
  432.         Temp := Partition(Arr, Left, Right);
  433.         QSort(Arr, Left, Temp - 1);
  434.         Left := Temp + 1;
  435.     End;
  436. End;
  437.  
  438. Var
  439.     F: TextFile;
  440.     Arr: TArr;
  441.     I: Integer;
  442. begin
  443.     AssignFile(F, 'Test.txt');
  444.     Reset(F);
  445.     SetLength(Arr, N);
  446.     For I := 0 to High(Arr) do
  447.     Begin
  448.         Readln(F, Arr[I].Name);
  449.         Readln(F, Arr[I].Likes);
  450.         Readln(F, Arr[I].Messages);
  451.         Readln(F, Arr[I].Friends);
  452.     End;
  453.     CloseFile(F);
  454.     QSort(Arr, Low(Arr), High(Arr));
  455.     For I := 0 to 4 do
  456.         Write(Arr[I].Name, ' ', Arr[I].Likes, ' ', Arr[I].Messages, ' ', Arr[I].Friends);
  457.     Readln;
  458. end.}
  459.  
  460.  
  461. {Задача 11. Дан массив точек А , точка В, найти точку с минимальной длиной до точки В. Точки заданы координатами X и Y.
  462. //Массив считывать из текстового файла, все кроме вывода в подпрограмме
  463.  
  464. Const N = 10;
  465.  
  466. Type
  467.     TCoord = Record
  468.         X, Y: Real;
  469.     End;
  470.     TArr = Array[1..N] of TCoord;
  471.  
  472. Function FindTheClosest(ArrA: TArr; DotB: TCoord): Integer;
  473. Var
  474.     Index, I: Integer;
  475.     XDiffPrev, YDiffPrev: Real;
  476.     XDiffCurr, YDiffCurr: Real;
  477. Begin
  478.     Index := 1;
  479.     For I := 2 to High(ArrA) do
  480.     Begin
  481.         XDiffPrev := ArrA[Index].X - DotB.X;
  482.         YDiffPrev := ArrA[Index].Y - DotB.Y;
  483.         XDiffCurr := ArrA[I].X - DotB.X;
  484.         YDiffCurr := ArrA[I].Y - DotB.Y;
  485.         If Sqrt(XdiffPrev * XDiffPrev + YDiffPrev * YDiffPrev) > Sqrt(XdiffCurr * XDiffCurr + YDiffCurr * YDiffCurr) Then
  486.             Index := I;
  487.     End;
  488.     Result := Index;
  489. End;
  490.  
  491. Var
  492.     ArrA: TArr;
  493.     DotB: TCoord;
  494.     F: TextFile;
  495.     Index, I: Integer;
  496. begin
  497.     AssignFile(F, 'Test.txt');
  498.     Reset(F);
  499.     For I := 1 to High(ArrA) do
  500.     Begin
  501.         Read(F, ArrA[I].X);
  502.         Read(F, ArrA[I].Y);
  503.     End;
  504.     Read(F, DotB.X);
  505.     Read(F, DotB.Y);
  506.     CloseFile(F);
  507.     Index := FindTheClosest(ArrA, DotB);
  508.     Writeln(ArrA[Index].X, ' ', ArrA[Index].Y);
  509.     Readln;
  510. end.}
  511.  
  512. {Задача 12. дан массив А размера N, сформировать и вывести новый массив того же размера
  513. //где каждый элемент B[k] равен сумме всех элементов исходного массива с номерами от 1 до k.
  514.  
  515. Const N = 10;
  516.  
  517. Type
  518.  
  519.     TArr = Array[1..N] of Integer;
  520.  
  521. Function GetNewArr(Arr: TArr): TArr;
  522. Var
  523.     ArrNew: TArr;
  524.     I, J: Integer;
  525. Begin
  526.     For I := 1 to High(Arr) do
  527.     Begin
  528.         ArrNew[I] := 0;
  529.         For J := 1 to I do
  530.             Inc(ArrNew[I], Arr[J]);
  531.     End;
  532.     Result := ArrNew;
  533. End;
  534.  
  535. Var
  536.     Arr, ArrNew: TArr;
  537.     F: TextFile;
  538.     Index, I: Integer;
  539. begin
  540.     AssignFile(F, 'Test.txt');
  541.     Reset(F);
  542.     For I := 1 to High(Arr) do
  543.         Read(F, Arr[I]);
  544.     CloseFile(F);
  545.     ArrNew := GetNewArr(Arr);
  546.     For I := 1 to High(ArrNew) do
  547.         Write(ArrNew[I]:4);
  548.     Readln;
  549. end.}
  550.  
  551. {Задача 13. Дан массив размера N. Найти два соседних элемента, сумма которых максимальна, и вывести эти элементы в порядке
  552. //возрастания их индексов
  553.  
  554. Const N = 10;
  555.  
  556. Type
  557.     TArr = Array[1..N] of Integer;
  558.  
  559. Function MaxSumIndex(Arr: TArr): Integer;
  560. Var
  561.     I, Sum: Integer;
  562. Begin
  563.     Sum := Arr[1] + Arr[2];
  564.     Result := 1;
  565.     For I := 2 to High(Arr) - 1 do
  566.         If Arr[I] + Arr[I + 1] > Sum Then
  567.         Begin
  568.             Sum := Arr[I] * Arr[I + 1];
  569.             Result := I;
  570.         End;
  571. End;
  572.  
  573. Var
  574.     Arr: TArr;
  575.     F: TextFile;
  576.     Index, I: Integer;
  577. begin
  578.     AssignFile(F, 'Test.txt');
  579.     Reset(F);
  580.     For I := 1 to High(Arr) do
  581.         Read(F, Arr[I]);
  582.     CloseFile(F);
  583.     Index := MaxSumIndex(Arr);
  584.     Write(Arr[Index]:4, ' ', Arr[Index + 1]:4);
  585.     Readln;
  586. end. }
  587.  
  588. {Задача 14. Дана матрица размера M и N и целое число K (1 <= K <= M). Найти сумму и произведение элементов K-ой строки
  589.  
  590. Const
  591.     Row = 5;
  592.     Cols = 5;
  593.  
  594. Type
  595.     TMatrix = Array[1..Row, 1..Cols] of Integer;
  596.  
  597. Function MultiplicationInRow(MAtrix: TMatrix; K: Integer): Integer;
  598. Var
  599.     I: Integer;
  600. Begin
  601.     Result := 1;
  602.     For I := 1 to High(Matrix) do
  603.         Result := Result * Matrix[K, I];
  604. End;
  605.  
  606. Var
  607.     Matrix: TMatrix;
  608.     F: TextFile;
  609.     I, J, K: Integer;
  610. begin
  611.     AssignFile(F, 'Test.txt');
  612.     Reset(F);
  613.     For I := 1 to High(Matrix) do
  614.         For J := 1 to High(Matrix[1]) do
  615.             Read(F, Matrix[I, J]);
  616.     Read(F, K);
  617.     CloseFile(F);
  618.     Writeln(MultiplicationInRow(Matrix, K));
  619.     Readln;
  620. end.}
  621.  
  622. {Задача 15. Дано число N, L, K (1 < L <= K <= N) и массив (N элементов), найти сумму элементов массива, индексы которых не входят в промежуток от L до K включительно
  623.  
  624. Const N = 10;
  625.  
  626. Type
  627.     TArr = Array[1..N] of Integer;
  628.  
  629. Function GetSum(Arr: TArr; L, K: Integer): Integer;
  630. Var
  631.     I: Integer;
  632. Begin
  633.     Result := 0;
  634.     For I := 1 to L - 1 do
  635.         Inc(Result, Arr[I]);
  636.     For I := K + 1 to High(Arr) do
  637.         Inc(Result, Arr[I]);
  638. End;
  639.  
  640. Var
  641.     Arr: TArr;
  642.     F: TextFile;
  643.     L, K, I: Integer;
  644. begin
  645.     AssignFile(F, 'Test.txt');
  646.     Reset(F);
  647.     For I := 1 to High(Arr) do
  648.         Read(F, Arr[I]);
  649.     Read(F, L);
  650.     Read(F, K);
  651.     CloseFile(F);
  652.     Write(GetSum(Arr, L, K));
  653.     Readln;
  654. end.}
  655.  
  656. {Задача 16. Дан массив из N элементов. Заменить каждый элемент массива значение среднего арифметического его самого и его соседей.
  657. //Под вопросом
  658.  
  659. Const N = 10;
  660.  
  661. Type
  662.     TArr = Array of Real;
  663.  
  664. Procedure ChangeArr(Var Arr: TArr);
  665. Var
  666.     I: Integer;
  667.     ArrFinal: TArr;
  668. Begin
  669.     SetLength(ArrFinal, N);
  670.     For I := 0 to High(ArrFinal) do
  671.         ArrFinal[I] := Arr[I];
  672.     ArrFinal[0] := (ArrFinal[0] + ArrFinal[1]) / 2;
  673.     ArrFinal[High(ArrFinal)] := (ArrFinal[High(ArrFinal)] + ArrFinal[High(ArrFinal) - 1]) / 2;
  674.     For I := 1 to High(ArrFinal) - 1 do
  675.         ArrFinal[I] := (Arr[I - 1] + Arr[I] + Arr[I + 1]) / 3;
  676.     Arr := ArrFinal;
  677. End;
  678.  
  679. Var
  680.     Arr: TArr;
  681.     F: TextFile;
  682.     I: Integer;
  683. begin
  684.     AssignFile(F, 'Test.txt');
  685.     Reset(F);
  686.     SetLength(Arr, N);
  687.     For I := 0 to High(Arr) do
  688.         Read(F, Arr[I]);
  689.     CloseFile(F);
  690.     ChangeArr(Arr);
  691.     For I := 0 to High(Arr) do
  692.         Write(Arr[I]:4);
  693.     Readln;
  694. end.}
  695.  
  696. {Задача 17. Дана матрицы M*N, найти строку с максимальной суммой элементов, вывести эту сумму и номер строки.
  697.  
  698. Const
  699.     Row = 5;
  700.     Cols = 5;
  701.  
  702. Type
  703.     TMatrix = Array[1..Row, 1..Cols] of Integer;
  704.  
  705. Function GetSumInRow(Matrix: TMatrix; Index: Integer): Integer;
  706. Var
  707.     I: Integer;
  708. Begin
  709.     Result := 0;
  710.     For I := 1 to High(Matrix[1]) do
  711.         Inc(Result, Matrix[Index, I]);
  712. End;
  713.  
  714. Function FindRowWithMaxSum(Matrix: TMatrix): Integer;
  715. Var
  716.     I: Integer;
  717. Begin
  718.     Result := 1;
  719.     For I := 2 to High(Matrix) do
  720.         If GetSumInRow(Matrix, I) > GetSumInRow(Matrix, Result) Then
  721.             Result := I;
  722. End;
  723.  
  724. Var
  725.     Matrix: TMatrix;
  726.     F: TextFile;
  727.     I, J, Index: Integer;
  728. begin
  729.     AssignFile(F, 'Test.txt');
  730.     Reset(F);
  731.     For I := 1 to High(Matrix) do
  732.         For J := 1 to High(Matrix[1]) do
  733.             Read(F, Matrix[I, J]);
  734.     CloseFile(F);
  735.     Index := FindRowWithMaxSum(Matrix);
  736.     Writeln(GetSumInRow(Matrix, Index));
  737.     Writeln(Index);
  738.     Readln;
  739. end.}
  740.  
  741. {Задача 18. Есть массив записи студентов. Каждая запись имеет фамилию, дату, изучаемый язык.
  742. //Найти студента с самым большим кол-вом языков, если одинаковы, вывести любого студента.
  743.  
  744. Const N = 10;
  745.  
  746. Type
  747.     TInfo = Record
  748.         Surname, Language: ShortString;
  749.         Year: Integer;
  750.     End;
  751.     TArr = Array[1..N] of TInfo;
  752.  
  753. Function FindStudent(Arr: TArr): TInfo;
  754. Var
  755.     Index, I, J, Temp: Integer;
  756.  
  757. Begin
  758.     Index := 0;
  759.     For I := 1 to High(Arr) do
  760.     Begin
  761.         Temp := 0;
  762.         For J := 1 to High(Arr) do
  763.             If Arr[I].Surname = Arr[J].Surname Then
  764.                 Inc(Temp);
  765.         If Temp > Index Then
  766.             Index := I;
  767.     End;
  768.     Result := Arr[Index];
  769. End;
  770.  
  771. Var
  772.     Arr: TArr;
  773.     F: TextFile;
  774.     I: Integer;
  775.     Temp: TInfo;
  776. begin
  777.     AssignFile(F, 'Test.txt');
  778.     Reset(F);
  779.     For I := 1 to High(Arr) do
  780.     Begin
  781.         Readln(F, Arr[I].Surname);
  782.         Readln(F, Arr[I].Language);
  783.         Readln(F, Arr[I].Year);
  784.     End;
  785.     CloseFile(F);
  786.     Temp := FindStudent(Arr);
  787.     Write(Temp.Surname, ' ', Temp.Language, ' ', Temp.Year);
  788.     Readln;
  789. end.}
  790.  
  791. //Задача 19. Есть запись. В ней фамилия, отдел работы, год принятия на работу, зарплата. Имеется массив таких записей. Найти максимальный выгодный отдел. Т.е
  792. //где средняя зарплата самая высокая. Вывести этот отдел и среднюю зарплату.
  793.  
  794. Const N = 7;
  795.  
  796. Type
  797.     TInfo = Record
  798.         Surname, Department: ShortString;
  799.         Year, Salary: Integer;
  800.     End;
  801.     TArr = Array[1..N] of TInfo;
  802.  
  803. Function GetDepartmentName(Arr: TArr): ShortString;
  804. Var
  805.     Index, I, J, Count: Integer;
  806.     Sum, Temp: Real;
  807. Begin
  808.     Sum := 0;
  809.     Index := 1;
  810.     For I := 1 to High(Arr) do
  811.     Begin
  812.         Temp := 0;
  813.         Count := 0;
  814.         For J := 1 to High(Arr) do
  815.             If Arr[J].Department = Arr[I].Department Then
  816.             Begin
  817.                 Temp := Temp + Arr[J].Salary;
  818.                 Inc(Count);
  819.             End;
  820.         Temp := Temp / Count;
  821.         If Temp > Sum Then
  822.         Begin
  823.             Index := I;
  824.             Sum := Temp;
  825.         End;
  826.     End;
  827.     Result := Arr[Index].Department;
  828. End;
  829.  
  830. Function GetAverageSalary(Arr: TArr; Department: ShortString): Real;
  831. Var
  832.     I, Count: Integer;
  833. Begin
  834.     Result := 0;
  835.     Count := 0;
  836.     For I := 1 to High(Arr) do
  837.         If Arr[I].Department = Department Then
  838.         Begin
  839.             Inc(Count);
  840.             Result := Result + Arr[I].Salary;
  841.         End;
  842.     Result := Result / Count;
  843. End;
  844.  
  845. Var
  846.     Arr: TArr;
  847.     F: TextFile;
  848.     I: Integer;
  849.     Department: ShortString;
  850. begin
  851.     AssignFile(F, 'Test.txt');
  852.     Reset(F);
  853.     For I := 1 to High(Arr) do
  854.     Begin
  855.         Readln(F, Arr[I].Surname);
  856.         Readln(F, Arr[I].Department);
  857.         Readln(F, Arr[I].Year);
  858.         Readln(F, Arr[I].Salary);
  859.     End;
  860.     CloseFile(F);
  861.     Department := GetDepartmentName(Arr);
  862.     Writeln(Department);
  863.     Writeln(GetAverageSalary(Arr, Department));
  864.     Readln;
  865. end.
  866.  
  867.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement