О группе студентов из след. Данных 1) кол-во студентов, 2) дата рождения, 3) кол-во...

0 голосов
33 просмотров

О группе студентов из след. Данных 1) кол-во студентов, 2) дата рождения, 3) кол-во экзаменов, 4) фамилия и имя каждого студента, 5) пол студента, 6) отметка получен. На экзамене
А) Напишите программу, которая выведит на экран список студентов заложников. Б) Программу, которая выводит на экран список студентов, которым исполнилось 20 лет.


Информатика (143 баллов) | 33 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

// PascalABC.Net 3.0, сборка 1052
const
  nstud=100;
  npred=10;
type
  date=record
    den:byte;
    mes:byte;
    god:integer
  end;
  St=record
    datr:date;
    famnam:string;
    gender:0..1;
    ball:array[1..npred] of 2..5
  end;
var
  ns,np,nd,i,j:byte;
  R:array[1..nstud] of St;
  Dolg,flagp:boolean;
  cdate:date;
begin
  Write('Количество студентов: '); Read(ns);
  Write('Количество предметов: '); Read(np);
  Writeln('Вводите данные по каждому студенту');
  Writeln('В первой строке через пробел дата рождения ДД ММ ГГГГ');
  Writeln('Во второй строке фамилия, пробел, имя');
  Writeln('В третьей строке пол (0 - мужской, 1 - женский)');
  Writeln('В четвертой строке полученные баллы через пробел');
  for i:=1 to ns do begin
    Writeln('*** Студент ',i,' ***');
    With R[i] do begin
      Readln(datr.den,datr.mes,datr.god);
      Readln(famnam); Readln(gender);
      for j:=1 to np do Read(ball[j])
    end
  end;
  { *********** 1 *************** }
  Writeln;
  Writeln('Список студентов-задолжников');
  nd:=0;
  for i:=1 to ns do begin
    With R[i] do begin
      j:=1; Dolg:=false;
      repeat
        if ball[j]=2 then begin Dolg:=true; Inc(nd) end;
        Inc(j)
      until Dolg or (j>np);
      if Dolg then Writeln(famnam)
    end
  end;
  if nd=0 then Writeln('Задолжников нет!');
  { *********** 2 *************** }
  Writeln;
  Writeln('Введите дату запроса в формате ДД, ММ, ГГГГ: ');
  Read(cdate.den,cdate.mes,cdate.god);
  Writeln;
  Writeln('Список студентов, которым исполнилось 20 лет');
  nd:=0;
  for i:=1 to ns do begin
    With R[i] do begin
      flagp:=false;
      if cdate.god-datr.god>20 then flagp:=true
      else
        if cdate.god-datr.god=20 then begin
          if cdate.mes>datr.mes then flagp:=true
          else begin
            if cdate.mes=datr.mes then flagp:=(cdate.den>=datr.den)
          end
        end;
      if flagp then begin Writeln(famnam); Inc(nd) end;
    end
  end;
  if nd=0 then Writeln('Нет студентов, которым исполнилось 20 лет!');
end.

Тестовое решение:
Количество студентов: 5
Количество предметов: 4
Вводите данные по каждому студенту
В первой строке через пробел дата рождения ДД ММ ГГГГ
Во второй строке фамилия, пробел, имя
В третьей строке пол (0 - мужской, 1 - женский)
В четвертой строке полученные баллы через пробел
*** Студент 1 ***
5 10 1996
Иванов Иван
0
4 3 5 5
*** Студент 2 ***
12 8 1997
Петров Петр
0
3 2 3 4
*** Студент 3 ***
9 10 1998
Сидорова Наталья
1
3 4 4 2
*** Студент 4 ***
6 9 1994
Козлова Ирина
1
5 4 4 5
*** Студент 5 ***
12 3 1995
Тарасов Константин
0
3 5 5 4

Список студентов-задолжников
Петров Петр
Сидорова Наталья

Введите дату запроса в формате ДД, ММ, ГГГГ:
2 11 2015

Список студентов, которым исполнилось 20 лет
Козлова Ирина
Тарасов Константин



(142k баллов)