Примеры задач
Массивы записей
Сведения о студентах ВУЗа записаны в массиве и содержат следующую информацию: фамилия, имя, отчество, пол (М или Ж), возраст (от 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.