Загрузка данных


program PharmacyData;

type
  TLekarstvo = record
    naimenovanie: string;    { наименование лекарства }
    proizvoditel: string;    { фирма-изготовитель }
    nomerApteki: integer;    { номер аптеки }
    kolichestvo: integer;    { количество упаковок }
    cena: real;              { стоимость одной упаковки }
  end;

var
  apteki: array[1..100] of TLekarstvo;
  n, i, j: integer;
  temp: TLekarstvo;
  
  { Переменные для пункта б }
  searchName: string;
  searchQty: integer;
  foundAny: boolean;

begin
  // 1. Ввод количества записей
  write('Введите количество записей о лекарствах: ');
  readln(n);
  
  for i := 1 to n do
  begin
    writeln('--- Запись № ', i, ' ---');
    write('Наименование лекарства: '); readln(apteki[i].naimenovanie);
    write('Фирма-изготовитель: ');   readln(apteki[i].proizvoditel);
    write('Номер аптеки: ');         readln(apteki[i].nomerApteki);
    write('Количество упаковок: ');  readln(apteki[i].kolichestvo);
    write('Стоимость упаковки: ');   readln(apteki[i].cena);
  end;

  // =========================================================================
  // ПУНКТ а) Вывести сведения в алфавитном порядке по названиям фирм-изготовителей
  // =========================================================================
  { Сортировка пузырьком по полю производитель }
  for i := 1 to n - 1 do
    for j := 1 to n - i do
      if apteki[j].proizvoditel > apteki[j + 1].proizvoditel then
      begin
        temp := apteki[j];
        apteki[j] := apteki[j + 1];
        apteki[j + 1] := temp;
      end;

  writeln;
  writeln('=== ПУНКТ А: Сведения в алфавитном порядке по фирмам-изготовителям ===');
  for i := 1 to n do
  begin
    writeln('Фирма: ', apteki[i].proizvoditel, 
            ' | Лекарство: ', apteki[i].naimenovanie, 
            ' | Аптека №: ', apteki[i].nomerApteki, 
            ' | Кол-во: ', apteki[i].kolichestvo, 
            ' | Цена: ', apteki[i].cena:0:2);
  end;

  // =========================================================================
  // ПУНКТ б) Получить список аптек, где можно купить N упаковок лекарства
  // (сортировка по возрастанию цены)
  // =========================================================================
  writeln;
  writeln('=== ПУНКТ Б: Поиск лекарства ===');
  write('Введите наименование лекарства для поиска: ');
  readln(searchName);
  write('Введите необходимое количество (N): ');
  readln(searchQty);

  { Сначала отсортируем весь массив по возрастанию цены }
  for i := 1 to n - 1 do
    for j := 1 to n - i do
      if apteki[j].cena > apteki[j + 1].cena then
      begin
        temp := apteki[j];
        apteki[j] := apteki[j + 1];
        apteki[j + 1] := temp;
      end;

  { Вывод подходящих аптек }
  writeln;
  writeln('Список аптек (отсортирован по возрастанию цены):');
  foundAny := false;
  
  for i := 1 to n do
  begin
    { Проверяем совпадение названия и наличие нужного количества }
    if (apteki[i].naimenovanie = searchName) and (apteki[i].kolichestvo >= searchQty) then
    begin
      writeln('Аптека №: ', apteki[i].nomerApteki, 
              ' | Доступно упаковок: ', apteki[i].kolichestvo, 
              ' | Цена за упаковку: ', apteki[i].cena:0:2,
              ' | Производитель: ', apteki[i].proizvoditel);
      foundAny := true;
    end;
  end;

  if not foundAny then
    writeln('Лекарство "', searchName, '" в количестве ', searchQty, ' шт. не найдено ни в одной аптеке.');

  readln;
end.