Пусть в файле фамилий ffam находятся фамилии студентов(одна запись - одна фамилия), в файле оценок fnote - в том же порядке оценки студентов( одна запись - массив оценок одного студента), в файле fchg - изменения к файлу оценок(структура записи:номер студента, совпадающий с номером фамилии в файле ffam, номер изменённой оценки, новая оценка). Записи упорядочены по номеру студента. Распечатайте список фамилий студентов, сдавших сессию на 4 и 5. Файлы ffam, fnote, fchg читаются один раз.
- Код: Выделить всё
- program file_stipendiya_n23;
 uses    crt;
 type    fam=record
 f:string[20]
 end;
 note=record
 a:array[1..10] of byte
 end;
 chg=record
 ns,no,new:byte
 end;
 var     ffam:file of fam;
 fnote:file of note;
 fchg:file of chg;
 p,f:string[20];
 i,j,exam,kolstud:integer;
 mark:byte;
 b:boolean;
 fam1:fam;
 note1:note;
 chg1:chg;
 a:array[1..10] of byte;
 begin   clrscr;
 writeln('введтите путь к файлу, содержащему фамилии студентов');
 readln(p);
 assign(ffam,p);
 rewrite(ffam);
 writeln('введите фамилии студентов, окончание ввода - "0"');
 kolstud:=0;
 repeat readln(f);
 if f<>'0' then begin write(ffam,fam(f));
 kolstud:=kolstud+1
 end;
 until f='0';    close(ffam);
 reset(ffam);
 writeln('введтите путь к файлу, содержащему оценки студентов');
 readln(p);
 assign(fnote,p);
 writeln('введите количество экзаменов');
 readln(exam);
 writeln('введите оценки каждого студента');
 rewrite(fnote);
 for i:=1 to kolstud do
 begin writeln('оценки студента № ',i,':');
 for j:=1 to exam do
 readln(a[j]);
 write(fnote,note(a));
 end;  close(fnote);
 reset(fnote);
 writeln('введтите путь к файлу, содержащему изменения к файлу оценок');
 readln(p);
 assign(fchg,p);
 rewrite(fchg);
 with chg1 do
 repeat writeln('введите номер студента, номер изменённой оценки и новую оценку, окончание ввода - "0"');
 readln(ns);
 readln(no);
 readln(new);
 if (ns<>0)and(no<>0)and(new<>0) then write(fchg,chg1);
 until (ns=0)and(no=0)and(new=0);     close(fchg);
 reset(fchg);
 b:=true; j:=0;
 writeln('студенты, получающие стипендию:');
 while not eof(ffam) do {считывание данных}
 begin j:=j+1;
 read(ffam,fam(f));
 read(fnote,note(a));
 for i:=1 to exam do
 if a[i]<4 then with chg1 do
 begin b:=false;
 while eof(fchg) do
 begin read(fchg,chg1);
 if (ns=j)and(no=i)and(new>3) then b:=true
 end;
 close(fchg);
 reset(fchg);
 end;
 if b=true then writeln(f);
 end;
 end.