Примеры задач

Массивы записей


Сведения о студентах ВУЗа записаны в массиве и содержат следующую информацию: фамилия, имя, отчество, пол (М или Ж), возраст (от 16 до 35 лет), курс (от 1 до 5). Напишите программу, которая вводит эту информацию и печатает номер курса, на котором наибольший процент мужчин.

Методика решения

Считываем с экрана количество студентов ( n ).
В цикле от 1 до n считываем сведения о студентах и заносим их в массив Baza[i] .
Выводим на экран сведения о студентах в виде ведомости.
Далее просматриваем с помощью цикла каждую запись, подсчитываем количество студентов на каждом курсе и количество мужчин среди них, и заносим эти сведения по каждому курсу в массивы kol (количество студентов) и kolM (количество мужчин). Эти массивы имеют размерность 5, номер элемента массива соответствует номеру курса. Например kol[3] – количество студентов на третьем курсе, kolM[3] – количество мужчин на этом курсе.
Теперь ищем процент мужчин на каждом курсе и находим номер курса с максимальным процентом мужчин.
Для начала переменную max (максимальный процент мужчин) обнуляем.
В цикле от j = 1 до 5 ищем процент мужчин на каждом курсе (по формуле kolM[j]*100/kol[j] ). Сравниваем полученный процент с переменной max . Если процент мужчин больше max , то переменной max присваиваем его значение, а номеру курса, на котором максимальный процент мужчин ( d ) присваиваем j .
После выполнения цикла выводим на экран результат. Если max = 0, то выводим на экран сообщение: 'Среди студентов нет мужчин' , в противном случае выводим – 'Наибольший процент мужчин на ',d,' курсе' .

Листинг программы

Program ex7_1;
Uses Crt;
Type student=record
fio:string;
name:string;
otch:string;
pol:string;
vorast:16..35;
curs:1..5;
End;
Var Baza:array[1..30] of student;
n,i,j,d:integer; max,pr:real;
kol,kolM:array[1..5] of integer;
Begin Clrscr;
Writeln('Введите колличество студентов <=30');
Readln(n);
For i:=1 to n do
With baza[i] do
Begin
Writeln('Введите фамилию ',i,'-го студента');
Readln(fio);
Writeln('Введите имя ',i,'-го студента');
Readln(name);
Writeln('Введите отчество ',i,'-го студента');
Readln(otch);
Writeln('Введите пол ',i,'-го студента (М или Ж)');
Readln(pol);
Writeln('Введите возраст ',i,'-го студента');
Readln(vorast);
Writeln('Введите курс ',i,'-го студента');
Readln(curs);
End;
Writeln;
Writeln('Список студентов');
For i:=1 to 61 do
Write('*');
Writeln;
Writeln('* N * Фамилия * Имя * Отчество * Пол * Возраст * Курс *');
For i:=1 to 61 do
Write('*');
Writeln;
d:=1;
For i:=1 to n do
With baza[i] do
Begin
Writeln ('*',d:3,'*',fio:9,'*',name:9,'*',otch:12,'*',pol:5,'*',vorast:9,'*',curs:6,'*');
d:=d+1
End;
For i:=1 to 61 do
Write('*');
Writeln;
d:=0;
Writeln;
For i:=1 to n do
With baza[i] do
begin
For j:=1 to 5 do
If curs=j then
begin
kol[j]:=kol[j]+1;
If pol='М' then kolM[j]:=kolM[j]+1;
end;
end;
max:=0; d:=1;
For j:=1 to 5 do
If kol[j]>0 then
Begin
pr:=(kolm[j]*100)/kol[j];
If pr>max then
Begin
max:=pr;
d:=j;
end;
End;
If max=0 then Writeln('Среди студентов нет мужчин') Else
Writeln('Наибольший процент мужчин на ',d,' курсе.');
Readkey
End.

Запустить программу






Назад