Напишите программу на языке Паскаль для решения следующей задачи: вы получили письмо по электронной почте, подписанное

  • 66
Напишите программу на языке Паскаль для решения следующей задачи: вы получили письмо по электронной почте, подписанное аббревиатурой, которая неизвестна вам. В вашем распоряжении имеется список всех возможных отправителей, собранный из предыдущих полученных писем. В списке фигурируют разные люди, но с аббревиатурой не больше 10 человек. Вам необходимо разработать эффективную программу, учитывающую потребление памяти, которая определит всех возможных получателей - людей, чьи ФИО можно сократить до данной аббревиатуры. В результате программа должна выдать ФИО в порядке убывания частоты использования.
Nikolaevna
52
Конечно! Вот программа на языке Паскаль для решения данной задачи:

pascal
program FindRecipients;

const
MAX_PEOPLE_COUNT = 10; // максимальное количество возможных отправителей
MAX_NAME_LENGTH = 50; // максимальная длина имени

type
TPerson = record
FullName: string[MAX_NAME_LENGTH];
Frequency: integer;
end;

var
Abbreviation: string[MAX_NAME_LENGTH];
People: array[1..MAX_PEOPLE_COUNT] of TPerson;
NumPeople: integer;

// Процедура для подсчета количества упоминаний каждого имени
procedure CountFrequencies(var People: array of TPerson);
var
i, j: integer;
begin
for i := 1 to NumPeople do
begin
People[i].Frequency := 0;
for j := 1 to NumPeople do
begin
if (i <> j) and (Pos(People[i].FullName, People[j].FullName) <> 0) then
Inc(People[i].Frequency);
end;
end;
end;

// Процедура сортировки массива приемников по убыванию частоты
procedure SortRecipients(var People: array of TPerson);
var
i, j: integer;
TempPerson: TPerson;
begin
for i := 1 to NumPeople - 1 do
begin
for j := 1 to NumPeople - i do
begin
if People[j].Frequency < People[j+1].Frequency then
begin
TempPerson := People[j];
People[j] := People[j+1];
People[j+1] := TempPerson;
end;
end;
end;
end;

// Основная процедура программы
procedure Main;
var
i: integer;
begin
writeln("Введите аббревиатуру:");
readln(Abbreviation);

// Заполняем список отправителей
writeln("Введите количество возможных отправителей:");
readln(NumPeople);
for i := 1 to NumPeople do
begin
writeln("Введите ФИО отправителя ", i, ":");
readln(People[i].FullName);
end;

CountFrequencies(People); // Подсчет частоты упоминаний
SortRecipients(People); // Сортировка по убыванию частоты

writeln("ФИО возможных получателей в порядке убывания частоты:");

for i := 1 to NumPeople do
writeln(People[i].FullName);

end;

begin
Main; // Вызов основной процедуры программы
end.


Эта программа позволяет решить задачу, предложенную в вашем описании. Она состоит из трех процедур:

1. Процедура `CountFrequencies` отслеживает количество упоминаний каждого имени в списке отправителей, кроме самого себя. Она использует вложенный цикл для сравнения каждого имени с другими и увеличивает счетчик, если оно встречается в другом имени.
2. Процедура `SortRecipients` сортирует список отправителей по убыванию частоты упоминаний. Она выполняет обмен местами элементами массива, чтобы упорядочить их по убыванию их частоты.
3. Основная процедура `Main` выполняет ввод данных (аббревиатуры и списков возможных отправителей) и вызывает остальные процедуры для решения задачи. Затем она выводит ФИО возможных получателей в порядке убывания частоты упоминаний.

Вы можете скомпилировать и запустить эту программу на языке Паскаль, чтобы получить результаты решения задачи. Если у вас возникнут вопросы или потребуется дополнительное объяснение, пожалуйста, не стесняйтесь задавать их!