Вывести на экран ФИО тех студентов две оценки у которых 3 - Free Pascal
Формулировка задачи:
Составить список из 15 студентов, для каждого указать ФИО и оценки с 4 экзаменов. Составить программу , которая будет вводить данные для каждого студента заносить их в список и делать обработку (Вывести на экран ФИО тех студентов две оценки у которых 3)
Прощу прощение за ошибку в описании темы , там не двоих с тройками, а тех у кого 2 оценки с экзаменов тройки.
Решение задачи: «Вывести на экран ФИО тех студентов две оценки у которых 3»
textual
Листинг программы
uses crt; const n=5;{15 количество студентов} nazvanie:array[1..4] of string=('математика','физика','химия','информатика'); type otmetki=array[1..4] of byte; student=record name:string; ot:otmetki; end; ukaz=^s; s=record inf:student; next:ukaz; end; var u,hv,tmp:ukaz; i,j,k:integer; procedure vivod(head:ukaz); var tmp:ukaz; i:integer; begin write('+'); for i:=1 to 5 do write('-----------+');writeln; write('| фамилия |'); for i:=1 to 4 do write(nazvanie[i]:11,'|');writeln; write('+'); for i:=1 to 5 do write('-----------+');writeln; tmp:=head; while tmp<>nil do begin with tmp^.inf do begin write('|',name:11,'|'); for i:=1 to 4 do write(ot[i]:11,'|');writeln; end; tmp:=tmp^.next end; write('+'); for i:=1 to 5 do write('-----------+');writeln; end; begin clrscr; u:=nil; new(u); u^.next:=nil; with u^.inf do begin writeln('1 студент'); write('Фамилия: ');readln(name); for i:=1 to 4 do begin write(nazvanie[i],': '); readln(ot[i]); end end; clrscr; hv:=u; for i:=2 to n do begin new(tmp); hv^.next:=tmp; tmp^.next:=nil; with tmp^.inf do begin writeln(i,' студент'); write('Фамилия: ');readln(name); for j:=1 to 4 do begin write(nazvanie[j],': ');readln(ot[j]); end; end; hv:=tmp; clrscr; end; writeln('все студенты'); vivod(u); writeln('студенты у которых за экзамены две оценки: 3'); tmp:=u; while tmp<>nil do begin k:=0; with tmp^.inf do begin for i:=1 to 4 do if ot[i]=3 then inc(k); if k=2 then writeln(name) end; tmp:=tmp^.next end; readln end.
Объяснение кода листинга программы
- В начале кода объявлены основные переменные:
- n - количество студентов (5);
- nazvanie - массив из 4 строк, содержащих названия предметов (математика, физика, химия, информатика);
- otmetki - массив из 4 байтов, содержащих оценки студентов;
- student - тип записи, представляющий одного студента (имя и оценки);
- ukaz - указатель на тип записи student;
- s - тип записи, представляющий связный список студентов;
- u, hv, tmp - указатели на тип записи s;
- i, j, k - целочисленные переменные для цикла;
- procedure vivod(head:ukaz) - процедура вывода информации о студентах на экран;
- var tmp:ukaz; - временная переменная для хранения текущего элемента списка;
- begin - начало блока кода;
- writeln('все студенты'); - вывод информации о всех студентах;
- readln('Фамилия: ') - ввод фамилии студента;
- readln(ot[i]:11) - ввод оценок студента;
- if k=2 then writeln(name) - вывод фамилии студента, если у него две оценки 3.
- Код начинается с инициализации переменных и создания первого студента:
- clrscr - очистка экрана;
- u:=nil;
- new(u) - выделение памяти под первого студента;
- u^.next:=nil;
- with u^.inf do - начало блока кода для первого студента;
- writeln('1 студент'); - вывод информации о первом студенте;
- readln(name) - ввод фамилии первого студента;
- readln(ot[i]:11) - ввод оценок первого студента.
- Затем код создает остальных студентов и выводит информацию о них:
- for i:=2 to n do - цикл создания остальных студентов;
- new(tmp) - выделение памяти под текущего студента;
- hv^.next:=tmp - добавление текущего студента в список;
- with tmp^.inf do - начало блока кода для текущего студента;
- writeln(i,' студент'); - вывод информации о текущем студенте;
- readln(name) - ввод фамилии текущего студента;
- readln(ot[i]:11) - ввод оценок текущего студента.
- После этого код проверяет оценки всех студентов и выводит фамилии тех, у кого две оценки 3:
- tmp:=u;
- while tmp<>nil do - цикл по всем студентам;
- begin
- k:=0;
- with tmp^.inf do - начало блока кода для текущего студента;
- for i:=1 to 4 do if ot[i]=3 then inc(k);
- if k=2 then writeln(name);
- end;
- tmp:=tmp^.next;
- readln.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д