Запись содержит данные о студенте: фамилию и инициалы, номер курса, номер группы, кол-во часов, пропущенных по уважительной и неуважительной причине. Для каждого студента заданной группы определить суммарное число пропущенных часов и выдать список студентов этой группы, пропустивших более 30 часов — Pascal(Паскаль)

uses crt;

const
  n = 50;
  lim = 30;

type
  student = record
    fio: string;
    kurs: byte;
    group, h_uv, h: integer;
  end;

var
  arr: array [1 .. n] of student;
  k, count: byte;

procedure AddRec;
var
  i: byte;
begin
  inc(count);
  if count > n then
  begin
    writeln('Nevozmozhno dobavit zapis!');
    readkey;
    exit;
  end;
  writeln('Record #', count);
  with arr[count] do
  begin
    write('FIO: ');
    readln(fio);
    write('Kurs: ');
    readln(kurs);
    write('Gruppa: ');
    readln(group);
    writeln('Propushenno chasov:');
    write(' - po uvazhitelnoi prichine: ');
    readln(h_uv);
    write(' - bez uvazhitelnoy prichiny: ');
    readln(h);
  end;
  writeln('Ok!');
end;

procedure WriteRec(nomrec: byte);
begin
  writeln('Record #', nomrec);
  with arr[nomrec] do
  begin
    writeln('FIO: ', fio);
    writeln('Kurs: ', kurs);
    writeln('Gruppa: ', group);
    writeln('Propushenno chasov:');
    writeln(' - po uvazhitelnoi prichine: ', h_uv);
    writeln(' - bez uvazhitelnoy prichiny: ', h);
  end;
  writeln('-');
end;

procedure WriteAllRec;
var
  i: byte;
begin
  for i := 1 to count do
    WriteRec(i);
  writeln('Records: ', count);
end;

function AllHours(nomrec: byte): integer;
begin
  with arr[nomrec] do
    AllHours := h_uv + h;
end;

procedure BadStudentsList(nomgroup: byte);
var
  i, kol: byte;
begin
  kol := 0;
  for i := 1 to count do
    if (arr[i].group = nomgroup) and (AllHours(i) > lim) then
    begin
      inc(kol);
      WriteRec(i);
      writeln(' - vsego chasov: ', AllHours(i));
      writeln;
    end;
  if kol > 0 then
    writeln('Records: ', kol)
  else
    writeln('V zadannoi gruppe net takih studentov!');
end;

function Menu: byte;
var
  ch: char;
begin
  ClrScr;
  writeln('1 - dobavit zapis');
  writeln('2 - prosmotr vseh zapisei');
  writeln('3 - prosmotr zadannoi zapisi');
  writeln('4 - spisok studentov, propustivshih >', lim, ' chasov');
  writeln;
  writeln('Esc - Exit');
  writeln;
  write('-> ');
  ch := readkey;
  if not(ch in ['1' .. '4', #27]) then
    writeln('Error!')
  else
    case ch of
      '1':
        Menu := 1;
      '2':
        Menu := 2;
      '3':
        Menu := 3;
      '4':
        Menu := 4;
      #27:
        Halt;
    end;
end;

begin
  count := 0;
  repeat
    case Menu of
      1:
        begin
          ClrScr;
          AddRec;
        end;
      2:
        begin
          ClrScr;
          if count > 0 then
            WriteAllRec
          else
            writeln('Net ne odnoi zapisi!');
          readkey;
        end;
      3:
        begin
          if count > 0 then
          begin
            repeat
              ClrScr;
              write('Zadaite nomer zapisi: ');
              readln(k);
              if (k <= 0) or (k > count) then
              begin
                writeln('Error!');
                readkey;
              end;
            until (k > 0) and (k <= count);
            WriteRec(k);
          end
          else
          begin
            ClrScr;
            writeln('Net ne odnoi zapisi!');
          end;
          readkey;
        end;
      4:
        begin
          ClrScr;
          if count > 0 then
          begin
            write('Zadaite nomer gruppy: ');
            readln(k);
            BadStudentsList(k);
          end
          else
            writeln('Net ne odnoi zapisi!');
          readkey;
        end;
    end;
  until count > n;

end.

Leave a Comment

− 2 = 5