Пусть в файле фамилий 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<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.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
Напиши комментарии к этой части своей программы. Что у тебя здесь что?
Данные реально в файлы записываются?
Еще надо разбить по функциям, в такой помойке сам разобраться не можешь.
И программа не соответствует условияс задачи Файлы ffam, fnote, fchg читаются один раз
Отладчиком ты умеешь пользоваться?
Ошибочная логика, оценка может измениться и с хорошей на плохую.
здесь ты читаешь файл больше одного раза и нарушаешь условия задачи.
Правильно будет читать этот файл вмести с другими файлами. Смотреть, если номер меньше текущего студента, то надо считывать из него следующую запись. Если равен, то это изменения иначе пока ничего не счиытывать.
Что такое j у тебя?
b становится true только при наличие изменений в оценке. Фактически ты выводишь всех кто перездал тройки на более высокую оценку по всем экзаменам.
Ответь на остальные вопросы из предыдущего поста:)
Опять студенты не могут сдать зачеты по паскалю…
Сам за деньги им делаю.
Только меня не упрашивать, у меня и так график напряженный :D