Задание 4 Вариант 3 Самостоятельная работа 5 ГДЗ Рабочая тетрадь Босова 11 класс (Информатика)
Решение #1
Рассмотрим вариант решения задания из учебника Босова, Босова, Аквилянов 11 класс, Бином:
4. Провели опрос N студентов литературного института, каждый из которых назвал фамилии двух своих любимых писателей. Напишите программу, определяющую, сколько разных писателей было названо и сколько раз был назван каждый из них. Запишите текст программы.
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.
Похожие решебники
Популярные решебники 11 класс Все решебники
*размещая тексты в комментариях ниже, вы автоматически соглашаетесь с пользовательским соглашением