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.