Выяснить, в каких классах насчитывается 35 учащихся - PascalABC.NET
Формулировка задачи:
3)Сведения об ученике состоят из его имени и фамилии и наименование класса (года обучения и буквы), в котором он учится. Дан файл f, содержащий сведения об учениках школы:
выяснить, в каких классах насчитывается 35 учащихся
Решение задачи: «Выяснить, в каких классах насчитывается 35 учащихся»
textual
Листинг программы
type TKlass=record
nm:integer; {номер класса}
bk:char; {буква класса}
kl:integer;{количество учеников}
end;
var f:text;
k:array of TKlass;
n,i,j:integer;
s:string;
s1,s2:string[20];
begin
assign(f,'f.txt'); //файл f.txt в папке с программой
reset(f);
n:=0;
while not seekeof(f) do
begin
readln(f,s);
while pos(' ',s)>0 do
delete(s,1,pos(' ',s));
s1:='';
while s[1] in ['0'..'9'] do
begin
s1:=s1+s[1];
delete(s,1,1);
end;
if n=0 then
begin
inc(n);
setlength(k,n);
k[n-1].nm:=strtoint(s1);
k[n-1].bk:=s[1];
k[n-1].kl:=1;
end
else
begin
j:=-1;
i:=1;
while(i<n)and(j=-1)do
if(strtoint(s1)=k[i].nm)and(s[1]=k[i].bk)then j:=i
else inc(i);
if j>-1 then inc(k[j].kl)
else
begin
inc(n);
setlength(k,n);
k[n-1].nm:=strtoint(s1);
k[n-1].bk:=s[1];
k[n-1].kl:=1;
end;
end;
end;
close(f);
writeln('Классы в которых 35 учащихся');
j:=0;
for i:=0 to n-1 do
if k[i].kl=35 then
begin
writeln(k[i].nm,k[i].bk);
j:=1;
end;
if j=0 then write('Таких классов нет');
end.
Объяснение кода листинга программы
- Объявление переменных и массива:
- f: текстовый файл для чтения данных;
- k: массив объектов типа TKlass для хранения информации о классах;
- n, i, j: целочисленные переменные для подсчёта количества классов и обработки данных;
- s: строковая переменная для хранения прочитанной строки;
- s1, s2: строки типа string[20] для обработки строк.
- Открытие файла f.txt для чтения.
- Инициализация первого класса:
- Если n=0, то увеличивается счётчик классов n;
- Массив k выделяется памятью под новый элемент;
- k[n-1].nm присваивается значение strtoint(s1) - номер класса;
- k[n-1].bk присваивается значение s[1] - буква класса;
- k[n-1].kl присваивается значение 1 - количество учеников в классе.
- Обработка всех строк в файле:
- Если n>0, то для каждого нового класса проверяется наличие учеников с помощью функции seekeof.
- Для каждого класса проверяется соответствие номера класса и буквы класса.
- Если соответствие найдено, то к количеству учеников в классе добавляется единица.
- Если класс пуст, то создается новый класс с номером n и одним учеником.
- Закрытие файла f.txt.
- Вывод на экран классов, в которых 35 учеников.
- Если таких классов нет, то выводится сообщение
Таких классов нет.
- Если таких классов нет, то выводится сообщение