Записи. Определить фамилии студенток, возраст и отчество которых являются одновременно самыми распространёнными

Lena

Опишите, используя структуру записи, данные о студентах (фамилия, имя, отчество, возраст). Cоставьте программу , определяющую фамилии (в алфавитном порядке) и инициалы всех студенток , возраст и отчество которых являются одновременно самыми распространёнными.Заранее спасибо.
program Spisok;
uses crt;                            {Подключение модуля экрана}
type  Tspis=record                {тип запись с полями по условию}
           fam:string[20];       {фамилия}
           name:string[20];      {имя}
           otch:string[20];      {отчество}
           voz:integer;          {возраст}  
           pol:string[20];
           end;
var 
s:string;
sp:array [1..50] of Tspis;        {массив записей- данные о студентах}
n,i,j:integer;
begin
    clrscr;                                                                       {Очистка экрана}
    write  ('Количество студентов n=');
    readln(n);
    writeln;
        for i:=1 to n do                                     { Открытие цикла со счетчиком от i:=1,n с шагом 1.}
           begin
               writeln('Студент ',i);                                 {заполняем список данными}
               write ('Фамилия: '); readln(sp[i].fam);
               write ('Имя: '); readln(sp[i].name);
               write ('Отчество: '); readln(sp[i].otch);
               write ('Возраст: '); readln(sp[i].voz);
               write ('Пол: ');readln (sp[i].pol);
               writeln;
           end;
  
  begin
   for i:=1 to n-1 do
  for j:=i+1 to n do
  if sp[i].fam>sp[j].fam then
   begin
    s:=sp[i].fam;
    sp[i].fam:=sp[j].fam;
    sp[j].fam:=s;
   end;
  end;
   writeln('Фамилии студенток в алфавитном порядке чьи возраст и отчество одновременно являются самыми распространёнными:');
 begin
  for i:=1 to n do
  if (sp[i].pol='Ж') and (sp[i].voz=sp[j].voz)and (sp[i].otch=sp[j].otch) then
  writeln (sp[i].fam,' ' ,sp[i].name,' ' ,sp[i].otch,' ')
 end;
 if (sp[i].pol<>'Ж') or (sp[i].voz<>sp[j].voz)or (sp[i].otch<>sp[j].otch) then
  writeln ('Таких студенток нету') 
end.
Считает всё правильно, но при сортировки отчеств в алфавитном порядке имена и фамилии остаются на месте. Помогите доделать
1 ответ

Lena

Смотри у меня была такая же проблема, но только с немного другой задачей, програмный код не напишу, но в словах розкажу что делать. В месте где ты делаеш замену введи ище несколько переменных, которым присваюй значения фамилий и имен, во время проверки отчества(оператор if ) там ничего не дописывай, но после проверки ты делаеш уже саму замену, вот там и допишы ище замену имени и фамилии по переменным.Вот пример того как я делала замену таким образом:
for i:=1 to n-1 do
  begin
    x:=MM1[i].nm;y:=MM1[i].pp;z:=MM1[i].kp;  k:=i;
    for j:=i+1 to n do
      if MM1[j].nm<x then
         begin
           x:=MM1[j].nm;
           y:=MM1[j].pp;
           z:=MM1[j].kp;
           k:=j;
         end;
      x:=MM1[k].nm;  MM1[k].nm:=MM1[i].nm;  MM1[i].nm:=x;
      y:=MM1[k].pp;  MM1[k].pp:=MM1[i].pp;  MM1[i].pp:=y;
      z:=MM1[k].kp;  MM1[k].kp:=MM1[i].kp;  MM1[i].kp:=z;
   end;
У тебя должно получится что-то похожее.