Запись содержит данные о студенте: фамилию и инициалы, номер курса, номер группы, кол-во часов, пропущенных по уважительной и неуважительной причине
Категория: Delphi/Pascal
2012-01-04 16:49:49
Для каждого студента заданной группы определить суммарное число пропущенных часов и выдать список студентов этой группы, пропустивших более 30 часов.
code: #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.
автор: delpas
Поделиться: