Вывести на экран ФИО тех студентов две оценки у которых 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.

Объяснение кода листинга программы

  1. В начале кода объявлены основные переменные:
    • 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.
  2. Код начинается с инициализации переменных и создания первого студента:
    • clrscr - очистка экрана;
    • u:=nil;
    • new(u) - выделение памяти под первого студента;
    • u^.next:=nil;
    • with u^.inf do - начало блока кода для первого студента;
    • writeln('1 студент'); - вывод информации о первом студенте;
    • readln(name) - ввод фамилии первого студента;
    • readln(ot[i]:11) - ввод оценок первого студента.
  3. Затем код создает остальных студентов и выводит информацию о них:
    • for i:=2 to n do - цикл создания остальных студентов;
    • new(tmp) - выделение памяти под текущего студента;
    • hv^.next:=tmp - добавление текущего студента в список;
    • with tmp^.inf do - начало блока кода для текущего студента;
    • writeln(i,' студент'); - вывод информации о текущем студенте;
    • readln(name) - ввод фамилии текущего студента;
    • readln(ot[i]:11) - ввод оценок текущего студента.
  4. После этого код проверяет оценки всех студентов и выводит фамилии тех, у кого две оценки 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы