Записи о студентах: вывести номер курса, на котором больше всего мужчин - Turbo Pascal
Формулировка задачи:
- uses crt;
- type bible=record
- imya: string[20];
- familiya: string[20];
- otchestvo: string[20];
- pol: string[10];
- vozrast: string[10];
- kurs: integer;
- end;
- var ppl: array [1..100] of bible;
- a, k, n, max, p, d: integer;
- i, j:byte;
- amax, c:string;
- s:bible;
- begin
- writeln('Добро пожаловать в мобильную базу данных отдела кадров.');
- writeln('Пожалуйста, заполните слудующие данные:');
- write('Количество студентов: ');
- readln(n);
- writeln;
- write('Вносимых в БД кадров: ', n, '.');
- writeln;
- for i:=1 to n do
- begin
- writeln;
- writeln('Введите сведения о ',i,'-м студенте');
- write('Фамилия: ');
- readln(ppl[i].familiya);
- write('Имя: ');
- readln(ppl[i].imya);
- write('Отчество: ');
- readln(ppl[i].otchestvo);
- writeln('Пол(муж/жен):');
- readln(ppl[i].pol);
- writeln('Возраст(число):');
- readln(ppl[i].vozrast);
- writeln('Курс(номер): ');
- readln(ppl[i].kurs);
- end;
- writeln;
- repeat
- textcolor(7);
- writeln('Нумерация условий: a) = 1, б) = 2, в) = 3, г) = 4, Выход = 0');
- write('Введите номер условия для обработки списка: ');
- readln(k);
- writeln;
- if k > 4 then
- begin
- textcolor(4);
- writeln('ОШИБКА!');
- writeln('Введен неверный номер');
- writeln;
- end;
- until k<4;
- repeat
- textcolor(7);
- if k=1 then // ПЕРВОЕ УСЛОВИЕ
- begin
- end;
- textcolor(7);
- if k=2 then // ВТОРОЕ УСЛОВИЕ
- with ppl[i] do
- begin
- max:=1;
- i:=1;
- while i<n do
- begin
- a:=1;
- j:=i+1;
- while j<=n do
- if ppl[j].imya=ppl[i].imya then
- begin
- a:=a+1;
- if j=n then n:=n+1
- else
- begin
- for p:=j to n-1 do
- ppl[p].imya:=ppl[p+1].imya;
- n:=n-1;
- end;
- end
- else j:=j+1;
- if a>max then
- begin
- max:=a;
- amax:=ppl[i].imya;
- end;
- i:=i+1;
- end;
- if max=1 then
- writeln('Одинаковых имен нет')
- else
- writeln('Самое распространенное имя:',amax,'. Количестов студентов с таким именем ', max);
- end;
- textcolor(7);
- if k=3 then // ТРЕТЬЕ УСЛОВИЕ
- begin
- for i:=1 to n-1 do
- for j:=i+1 to n do
- if ppl[i].familiya>ppl[j].familiya then
- begin
- s:=ppl[i];
- ppl[i]:=ppl[j];
- ppl[j]:=s;
- end;
- for I:=1 to n do
- writeLn(ppl[i].familiya:10);
- end;
- textcolor(14);
- if k=4 then // ЧЕТВЕРТОЕ УСЛОВИЕ
- begin
- end;
- writeln;
- textcolor(7);
- if k=0 then exit;
- textcolor(7);
- write('Введите следующий номер условия. Для отмены - "0"): ');
- readln(k);
- writeln;
- until k=0;
- end.
Решение задачи: «Записи о студентах: вывести номер курса, на котором больше всего мужчин»
- uses
- crt;
- const
- n=100;{максимальное количество студентов}
- type
- tStr=string[20];
- tData=record
- Fam,Nam,Sur,Sex,Age,Krs:tStr;
- end;
- var
- a:array[0..n]of tData;
- b:tData;
- c:char;
- z:integer;
- {подпрограммма ввода}
- procedure pInput;
- var
- c:tStr;
- begin
- repeat
- writeln('I N P U T D A T A');
- write(b.Fam,':');
- readln(c);
- if length(c)>0 then
- begin
- inc(z);
- a[z].Fam:=c;
- write(b.Nam,':');
- readln(c);
- a[z].Nam:=c;
- write(b.Sur,':');
- readln(c);
- a[z].Sur:=c;
- write(b.Sex,':');
- readln(c);
- a[z].Sex:=c[1];
- write(b.Age,':');
- readln(c);
- a[z].Age:=c;
- write(b.Krs,':');
- readln(c);
- a[z].Krs:=c[1];
- end;
- until length(c)=0;
- end;
- {подпрограмма получения значения записи}
- function Fild(c:tStr;d:integer):tStr;
- begin
- with a[d] do
- begin
- if c=b.Fam then Fild:=Fam;
- if c=b.Nam then Fild:=Nam;
- if c=b.Sur then Fild:=Sur;
- if c=b.Sex then Fild:=Sex;
- if c=b.Age then Fild:=Age;
- if c=b.Krs then Fild:=Krs;
- end
- end;
- {подпрограмма поиска по заданию а}
- procedure pFind;
- var
- c,d,e,f,g:integer;
- begin
- f:=0;
- for d:=1 to z do
- begin
- e:=0;
- for c:=1 to z do
- if(Fild('Sex',c)='m')and(Fild('Kurs',c)=Fild('Kurs',d))then inc(e);
- if e>f then
- begin
- f:=e;
- g:=d;
- end;
- end;
- Write('Kurs = ',a[g].Krs,' : ',f);
- ReadKey
- end;
- {подпрограмма просмотра всех записей}
- procedure pList;
- var
- c:integer;
- begin
- for c:=1 to z do
- with a[c]do
- writeln(Fam,',',Nam,',',Sur,',',Sex,',',Age,',',Krs);
- ReadKey
- end;
- {основная программа}
- begin
- {setup data}
- b.Fam:='Familya';
- b.Nam:='Name';
- b.Sur:='Surname';
- b.Sex:='Sex';
- b.Age:='Age';
- b.Krs:='Kurs';
- z:=0;
- {меню}
- repeat
- ClrScr;
- writeln('0 - exit');
- writeln('1 - input data');
- writeln('2 - find data');
- writeln('3 - list data');
- c:=ReadKey;
- case c of
- '1':pInput;
- '2':pFind;
- '3':pList;
- end
- until c='0'
- end.
Объяснение кода листинга программы
В данном коде используется язык программирования Turbo Pascal. Он содержит структуру данных tData, которая представляет запись о студенте. Эта структура содержит поля Fam (семья), Nam (имя), Sur (фамилия), Sex (пол), Age (возраст) и Krs (курс). Для хранения информации о студентах используется массив a, который содержит n записей о студентах. Функция Fild используется для получения значения поля записи по его имени. Процедура pFind используется для поиска студента по полу и курсу. Она изменяет переменные f и g, которые представляют номер найденного студента и его пол. Процедура pList используется для вывода информации о всех студентах. Она проходит по всем записям в массиве a и выводит информацию о студенте. Основная программа начинается с инициализации структуры данных tData и переходит к меню, которое предлагает пользователю выбрать действие. В зависимости от выбранного действия выполняется соответствующая процедура. Код использует подпрограмму ввода данных, которая запрашивает у пользователя информацию о студентах и записывает ее в массив a. Вложенных списков в данном коде нет.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д