Задание 4 Вариант 3 Самостоятельная работа 5 ГДЗ Рабочая тетрадь Босова 11 класс (Информатика)
program s5_v3_4m;
const
n = 5;
var
a: array [1..2 * n] of string;
i, j, k,c: integer;
m: set of string; //множество из строк
b: array[1..2 * n] of string;
begin
k := 0;
m := [];//обнуление множества
writeln(‘Ввод и заполнение множества’);
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] := a[i]
end;
end;
Writeln(‘Количество разных писателей k=’, k);
//определение, сколько раз писатель была назван
for i := 1 to k do
begin
c := 0;
for j := 1 to 2 * n do
if b[i] = a[j] then inc(c);
writeln(b[i], ‘ названо ‘, c ,’ раз’)
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 := [];//обнуление множества
writeln(‘Ввод и заполнение множества’);
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.
Во второй версии программы используется запись, где для каждого писателя хранятся фамилия и количество упоминаний. Это удобно, если дальше нужно обрабатывать результаты.
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.
Ответ
Программа определяет количество разных писателей и число упоминаний каждого из них.