Определить среди всех школьников самого неуспевающего - Pascal ABC
Формулировка задачи:
Помогите написать программу на Pascal ABC.
Вот само задание:
Файл содержит сведения об успеваемости школьников: фамилия, имя, класс, оценка по истории, математике и физике. Выведите сведения об учениках задаваемого класса и определите средний бал каждого. Определите среди всех школьников самого неуспевающего.
Примечание:
Файл с исходными данными необходимо подготовить в текстовом редакторе. Имя файла может быть любым. Сведения, относящиеся к одному объекту, необходимо записывать в одной строке файла. Результаты работы программы должны быть выведены и на экран, и в текстовый файл. Желательно не использовать массивы.
Заранее спасибо.
Решение задачи: «Определить среди всех школьников самого неуспевающего»
textual
Листинг программы
uses crt; type uchen=record fam,name:string[10]; klass:string[3]; ist,mat,fiz:integer end; var a:uchen; f,f1:text; fname,s,dv:string; kl:string[3]; kdv:integer;sr:real; function koldv(dv:uchen):byte; var k:byte; begin k:=0; with dv do begin if ist=2 then inc(k); if mat=2 then inc(k); if fiz=2 then inc(k) end; koldv:=k end; begin clrscr; write('введите имя файла: ');readln(fname); assign(f,fname);reset(f); assign(f1,'output.txt');rewrite(f1); write('класс: ');readln(kl); clrscr; writeln('оценки учеников ',kl,' класса'); writeln(f1,'оценки учеников ',kl,' класса'); writeln('+----------+----------+-------+-------+-------+-------+'); writeln(f1,'+----------+----------+-------+-------+-------+-------+'); writeln('| фамилия | имя |история|математ| физика|средняя|'); writeln(f1,'| фамилия | имя |история|математ| физика|средняя|'); writeln('+----------+----------+-------+-------+-------+-------+'); writeln(f1,'+----------+----------+-------+-------+-------+-------+'); kdv:=0; while not eof(f) do begin readln(f,s); with a do begin fam:=copy(s,1,pos(',',s)-1);delete(s,1,pos(',',s)+1); name:=copy(s,1,pos(',',s)-1);delete(s,1,pos(',',s)+1); klass:=copy(s,1,pos(',',s)-1);delete(s,1,pos(',',s)+1); ist:=ord(s[1])-48;delete(s,1,3); mat:=ord(s[1])-48;delete(s,1,3); fiz:=ord(s[1])-48; sr:=(ist+mat+fiz)/3; if koldv(a)>kdv then begin dv:=a.fam+' '+a.name;kdv:=koldv(a) end else if koldv(a)=kdv then dv:=dv+', '+a.fam+' '+a.name; if kl=klass then begin writeln('|',fam:10,'|',name:10,'|',ist:7,'|',mat:7,'|',fiz:7,'|',sr:7:2,'|'); writeln(f1,'|',fam:10,'|',name:10,'|',ist:7,'|',mat:7,'|',fiz:7,'|',sr:7:2,'|') end end end; writeln('+----------+----------+-------+-------+-------+-------+'); writeln(f1,'+----------+----------+-------+-------+-------+-------+'); if kdv=0 then begin writeln('неуспевающих нет');writeln(f1,'неуспевающих нет') end else begin writeln('неуспевающие по ',kdv,' предметам: ',dv); writeln(f1,'неуспевающие по ',kdv,' предметам: ',dv) end; writeln('результаты работы программы в файле output.txt'); close(f);close(f1) end.
Объяснение кода листинга программы
- В начале кода объявляются переменные и структуры данных, необходимые для выполнения программы.
- Затем происходит чтение имени файла от пользователя.
- Далее открываются два файла: один для записи результатов работы программы (f), другой - для вывода результатов (f1).
- В цикле while происходит чтение данных из файла f. Для каждого введенного имени класса выполняется следующие действия:
- Имя класса (kl) сравнивается с именем класса, указанным в переменной kdv.
- Если имена классов совпадают, то выводится информация об учениках этого класса, включая их фамилию, имя, оценки по истории, математике и физике.
- Если есть неуспевающие ученики, то выводится информация о них, включая их фамилию и имя, а также среднюю оценку.
- После завершения цикла while выводится общая информация о результатах работы программы.
- Наконец, закрываются файлы f и f1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д