1. Ввести количество студентов (n).
2. Для номера студента (i) от 1 до n выполнить
ввести ведомость [i]
3. Количество_двоечников = 0.
4. Для i от 1 до n выполнить
4.1. колич_2 = 0
4.2. Для j от 1 до 5 выполнить
Если у ведомости [i].оценка[j] < 3, то
колич_2 = колич_2 + 1
4.3. Если колич_2 > 0, то
а) вывести ведомость [i],
б) Количество_двоечников = Количество_двоечников +1
5. Вывести Количество_двоечников.
6. Закончить.
Программа для этого алгоритма будет иметь вид
Program Count_2;
Const
Nmax=40; { Max количество студентов в группе }
Dl=15; { длина фамилии и имени }
M=5; { количество оценок }
Type
Stud = Record
Fam,Im,Ot : String [dl];
Numz : LongInt;
Otm : Array [1..m] Of Integer
End;
Var
Vedom : Array [1..Nmax] Of Stud;
i,j : Integer;
kdv,k2,n : Integer;
Begin
Writeln(’Введите количество студентов’);
Readln(n); {п. 1.}
Writeln(’Вводите информацию о каждом студенте’);
For i:=1 to n Do {п. 2.}
Begin
Write(’Фамилия: ’);
ReadLn(Vedom[i].Fam);
Write(’Имя: ’);
ReadLn(Vedom[i].Im);
Write(’Отчество: ’);
ReadLn(Vedom[i].Ot);
Write(’Номер зачетки: ’);
ReadLn(Vedom[i].Numz);
WriteLn(’Вводите оценки по одной:’);
For j := 1 to m do
Begin
WriteLn(’Введите ’,j,’ –ю оценку’);
ReadLn(Vedom[i].Otm[j]);
End;
End;
kdv := 0; {п. 3.}
Writeln(’Фамилии и номера зачеток двоечников’);
For i:=1 to n Do
Begin
k2 := 0; {п. 4.1.}
For j := 1 to m Do {п. 4.2.}
If Vedom[i].Otm[j] < 3 Then
k2 := k2+1;
If k2 > 0 Then {п. 4.3.}
Begin
kdv := kdv + 1;
Writeln(Vedom[i].Fam:16,Vedom[i].Numz:8)
End;
End;
Writeln(’Количество двоечников в группе - ’,kdv);
WriteLn(’Нажмите Enter...’);
ReadLn;
End.
Для сокращения записи программ с данными типа Record используется оператор With, который в общем случае записывается так:
With Имя_Записи Do
Оператор_1;
В Операторе_1 к полям записи автоматически добавляется Имя_Записи.
С использованием этого оператора цикл ввода данных в приведенной выше программе был бы записан так
For i:=1 to n Do
With Vedom[i] do
Begin
Write(’Фамилия: ’);
ReadLn(Fam);
Write(’Имя: ’);
ReadLn(Im);
Write(’Отчество: ’);
ReadLn(Ot);
Write(’Номер зачетки: ’);
ReadLn(Numz);
WriteLn(’Вводите оценки по одной’);
For j := 1 to m do
Begin
WriteLn(’Введите ’,j,’ –ю оценку’);
ReadLn(Otm[j]);
End;
End; { With }
Пример 2. Ввести в ЭВМ список характеристик N стран мира, содержащий информацию вида (N<=40):
Название, площадь
Составить программу, которая упорядочивает список по убыванию площади и выводит полученный результат на экран.
Общий алгоритм для этой задачи будет такой.
1. Ввести характеристики стран.
2. Упорядочить характеристики по убыванию площади.
3. Вывести полученный список.
4. Закончить.
Применим для упорядочения характеристик стран известный метод пузырька и получим уточненный алгоритм.
1.1. Ввести количество стран (n).
1.2. Для номера страны (i) от 1 до n выполнить
ввести страну [i].
2. Для номера просмотра (k) от 1 до n - 1 выполнить
Для номера страны (i) от 1 до n - k выполнить
Если у Страны[i]. площадь > Страны[i + 1]. площадь, то
Поменять местами Страну[i] и Страну[i + 1].
3. Для номера страны (i) от 1 до n выполнить
ввести у страны [i]. название и площадь.
4. Закончить.
Программа для этого алгоритма имеет вид.
Program Lends;
Const
Nmax=40; { Max количество стран в списке }
Dl=15; { длина названия }
Type
Country = Record
Name : String [15];
Square : Integer;
End;
Var
Count : Array [1..Nmax] Of Country;
Count1: Country;
n, i, k : Integer;
Begin
Writeln(’Введите количество стран’);
Readln(n);
Writeln(’Вводите информацию о каждой стране’);
For i:=1 to n Do
With Count[i] do
Begin
Write(’Название: ’);
ReadLn(Name);
Write(’Площадь: ’);
ReadLn(Square);
End;
{ Сортировка }
For k:=1 to n - 1 Do
For i:=1 to n - k Do
If Count[i].Square > Count[i+1].Square then
Begin
{ Перестановка }
Count1:= Count[i];
Count[i]:= Count[i+1];
Count[i]:= Count1;
End;
Writeln('Характеристики стран');
For i:=1 to n Do
With Count[i] do
Writeln(Count[i].Name:20, Count[i].Square:8);
Writeln('Работа окончена, нажмите Enter');
Readln;
End.