Вывести на экран ФИО тех студентов две оценки у которых 3 - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Составить список из 15 студентов, для каждого указать ФИО и оценки с 4 экзаменов. Составить программу , которая будет вводить данные для каждого студента заносить их в список и делать обработку (Вывести на экран ФИО тех студентов две оценки у которых 3)
Прощу прощение за ошибку в описании темы , там не двоих с тройками, а тех у кого 2 оценки с экзаменов тройки.

Решение задачи: «Вывести на экран ФИО тех студентов две оценки у которых 3»

textual
Листинг программы
  1. uses crt;
  2. const n=5;{15 количество студентов}
  3.       nazvanie:array[1..4] of string=('математика','физика','химия','информатика');
  4. type otmetki=array[1..4] of byte;
  5.      student=record
  6.         name:string;
  7.         ot:otmetki;
  8.        end;
  9.      ukaz=^s;
  10.      s=record
  11.         inf:student;
  12.         next:ukaz;
  13.        end;
  14. var u,hv,tmp:ukaz;
  15.     i,j,k:integer;
  16. procedure vivod(head:ukaz);
  17. var tmp:ukaz;
  18.     i:integer;
  19. begin
  20.  write('+');
  21.  for i:=1 to 5 do write('-----------+');writeln;
  22.  write('|  фамилия  |');
  23.  for i:=1 to 4 do write(nazvanie[i]:11,'|');writeln;
  24.  write('+');
  25.  for i:=1 to 5 do write('-----------+');writeln;
  26.  tmp:=head;
  27.  while tmp<>nil do
  28.   begin
  29.    with tmp^.inf do
  30.     begin
  31.      write('|',name:11,'|');
  32.      for i:=1 to 4 do write(ot[i]:11,'|');writeln;
  33.     end;
  34.   tmp:=tmp^.next
  35.   end;
  36.  write('+');
  37.  for i:=1 to 5 do write('-----------+');writeln;
  38. end;
  39.  
  40. begin
  41.  clrscr;
  42.  u:=nil;
  43.  new(u);
  44.  u^.next:=nil;
  45.  with u^.inf do
  46.   begin
  47.    writeln('1 студент');
  48.    write('Фамилия: ');readln(name);
  49.    for i:=1 to 4 do
  50.     begin
  51.      write(nazvanie[i],': ');
  52.      readln(ot[i]);
  53.     end
  54.   end;
  55.  clrscr;
  56.  hv:=u;
  57.  for i:=2 to n do
  58.   begin
  59.    new(tmp);
  60.    hv^.next:=tmp;
  61.    tmp^.next:=nil;
  62.    with tmp^.inf do
  63.     begin
  64.      writeln(i,' студент');
  65.      write('Фамилия: ');readln(name);
  66.      for j:=1 to 4 do
  67.       begin
  68.        write(nazvanie[j],': ');readln(ot[j]);
  69.       end;
  70.     end;
  71.    hv:=tmp;
  72.    clrscr;
  73.   end;
  74.  writeln('все студенты');
  75.  vivod(u);
  76.  writeln('студенты у которых за экзамены две оценки: 3');
  77.  tmp:=u;
  78.  while tmp<>nil do
  79.   begin
  80.    k:=0;
  81.    with tmp^.inf do
  82.     begin
  83.      for i:=1 to 4 do if ot[i]=3 then inc(k);
  84.      if k=2 then writeln(name)
  85.     end;
  86.    tmp:=tmp^.next
  87.   end;
  88.  readln
  89. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы