Задание 4 Вариант 3 Самостоятельная работа 5 ГДЗ Рабочая тетрадь Босова 11 класс (Информатика)
- Провели опрос $$N$$ студентов литературного института, каждый из которых назвал фамилии двух своих любимых писателей. Напишите программу, определяющую, сколько разных писателей было названо и сколько раз был назван каждый из них. Запишите текст программы.
Для подсчёта разных писателей удобно использовать множество: в него нельзя добавить одинаковый элемент дважды. Сначала последовательно считываем фамилии всех студентов и заносим новые фамилии в множество и в дополнительный массив. Затем для каждой фамилии из массива считаем, сколько раз она встретилась среди всех введённых данных.
program s5_v3_4;
const
n = 5;
type
avtor = record
fam: string;
kol: integer;
end;
var
a: array [1..2 * n] of string;
i, j, k: integer;
m: set of string;
b: array [1..2 * n] of avtor;
begin
k := 0;
m := [];
for i := 1 to 2 * n do
begin
readln(a[i]);
if not (a[i] in m) then
begin
m := m + [a[i]];
k := k + 1;
b[k].fam := a[i];
end;
end;
writeln(‘Количество разных писателей k=’, k);
for i := 1 to k do
begin
b[i].kol := 0;
for j := 1 to 2 * n do
if b[i].fam = a[j] then inc(b[i].kol);
writeln(b[i].fam, ‘ названо ‘, b[i].kol, ‘ раз’);
end;
end.
Во второй версии программы используется запись, где для каждого писателя хранятся фамилия и количество упоминаний. Это удобно, если дальше нужно обрабатывать результаты.
program s5_v3_4;
const
n = 5;
type
avtor = record
fam: string;
kol: integer;
end;
var
a: array [1..2 * n] of string;
i, j, k: integer;
m: set of string;
b: array [1..2 * n] of avtor;
begin
k := 0;
m := [];
for i := 1 to 2 * n do
begin
readln(a[i]);
if not (a[i] in m) then
begin
m := m + [a[i]];
k := k + 1;
b[k].fam := a[i];
end;
end;
writeln(‘Количество разных писателей k=’, k);
for i := 1 to k do
begin
b[i].kol := 0;
for j := 1 to 2 * n do
if b[i].fam = a[j] then inc(b[i].kol);
writeln(b[i].fam, ‘ названо ‘, b[i].kol, ‘ раз’);
end;
end.
Ответ
Программа определяет количество разных писателей и число упоминаний каждого из них.

