zadach500.PAS

{* Задача 500 *}

Unit ZADACH500;
Interface
Implementation
Begin
 writeln('Каждая из N библиотек района составляет заявку на приобретение книг. Заявка содержит перечень книг, состоящий из не более 20 наименований. Каждая библиотека в каждой строке заявки указывает название книги, фамилию автора и количество экземпляров. Определить суммарный спрос на каждую из указанных книг. И напечатать общий список книг в порядке убывания спроса. ');
End.

Program zadach500;

Uses zadach500.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключение модулей *}
Var {* В работе нам потребуются переменные: *}
  n   : integer;
  k   : integer;
  i   : integer;
  j   : integer;
  t   : integer;
  l   : boolean;
  c   : char;
  s   : String;
  s1  : String;
  kn  : Array [1..20, 1..2] Of String;
  kn1 : Array [1..100, 1..2] Of String;
  x   : Array [1..20] Of integer;
  x1  : Array [1..100] Of integer;
Begin
  clrscr; {* Очистка экрана *}
  write('Vvedite kolichestvo bibliotek ');
  readln(n);
  t := 1;
  For k := 1 To n Do {* Переменная k увеличивается с 1 до n *}
  Begin
    i := 1;
    writeln('Vvedite zakaz ', k, '-oi biblioteki');
    Repeat   writeln('Vvedite nazvanie ', i, '-oi knigi');
      readln(kn[i, 1]);
    writeln('Vvedite avtora ', i, '-oi knigi');
    readln(kn[i, 2]);
    writeln('Vvedite kolichestvo exzemplyarov');
    readln(x[i]);
    If (i = 1) And (k = 1) Then
    Begin
      kn1[1, 1] := kn[1, 1];
      kn1[1, 2] := kn[1, 2];
      x1[1] := x[1];
    End;
    Else Begin
      l := false;
    For j := 1 To t Do {* Переменная j увеличивается с 1 до t *}
      If (kn1[j, 1] = kn[i, 1]) And (kn1[j, 2] = kn[i, 2]) Then
      Begin
        x1[j] := x1[j] + x[i];
        l := true;
      End;
    If l = false Then
    Begin
      kn1[t + 1, 1] := kn[i, 1];
      kn1[t + 1, 2] := kn[i, 2];
      x1[t + 1] := x[i];
      t := t + 1;
    End;
    
  End;
  If i = 20 Then
    writeln('Vy ischerpali vozmojnosti zakaza')
  Else Begin
    write('Esli hotite vvesti eshe odnu knigu - najmite "y" ');
  readln(c);
  If c = 'y' Then
    i := i + 1
  Else i := 20;
End;
Until i = 20;
End;
For i := 1 To t Do {* Цикл для i => [1 .. t] *}
  Begin
n := x1[i];
k := i;
For j := i + 1 To t Do
  If x1[j] > n Then
Begin
  n := x1[j];
  k := j;
End;
If ki Then
Begin
  n := x1[i];
  s := kn1[i, 1];
  s1 := kn1[i, 2];
  x1[i] := x1[k];
  kn1[i, 1] := kn1[k, 1];
  kn1[i, 2] := kn1[k, 2];
  x1[k] := n;
  kn1[k, 1] := s;
  kn1[k, 2] := s1;
End;

End;
writeln; {* Пропускаем одну строку *}
writeln('Spisok zakazyvaemyh knig');
For i := 1 To t Do {* Цикл для i => [1 .. t] *}
  writeln(kn1[i, 1], ' ', kn1[i, 2], ' ', x1[i], ' exzemplyarov');
readln; {* Ждем подтверждения пользователя *}
End..