Проблемма с чтением из файла.Паскаль.

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Hakurei
Сообщения: 4
Зарегистрирован: 27 дек 2008, 19:05

a) Создать файл, содержащий сведения о сдаче студентами 1-го курса кафедры ИСБ сессии: индекс группы, оценки по четырем экзаменам, признак участия в общественной работе: “1” - активное участие, “ - ” - неучастие.
b) Создать файл начисления студентам стипендии. Студент, получивший все оценки “5” и активно участвующий в общественной работе, зачисляется на повышенную стипендию (доплата 50%), не активно участвующие – доплата 25%, студенты, получившие “4” и “5” зачисляются на обычную стипендию. Студент, получивший одну оценку “3”, но активно занимающийся общественной работой, также зачисляется на стипендию. В противном случае зачисление не производится.Индекс группы вводится с терминала.

Выполнить с использованием текстового и типизированного файла. В текстовый файл вывести данные в виде таблицы.

Вот собственно такое. Составил часть программы, проблема возникает со считыванием группы из файла, знаю что считываю неправильно, но как исправить незнаю.
Прошу помощи в исправлении подчёркнутого куска в программе:
Тоесть ввожу с клавы группу(например 1) и если в файле есть студенты из этой группы, то они выводятся в новый файл, если нет то пишет что студентов в такой группе нет.
Ниже приведён код с использованием текстового файла

Код: Выделить всё

program rgr3_2;
 uses crt;
 Type mytip=record
fam:string[10];
group:string[10];
socwork:string[5];
ocenki:record
 oc1,oc2,oc3,oc4:string[10] ;

end;
end;
var f,t:text;
a:mytip;
g:string;
i,n:integer;

procedure sozd(n:integer);
 var f:text;
A:mytip;
i:integer;
 begin
assign (f,'C:\rgr.txt');
rewrite(f);

 for i:=1 to n do begin
with A do
begin
write('wedite FIO:':10);
readln(fam);

repeat
write('Vibirite gruppy (1 or 2): ');
readln(group);
until (group='1') or (group='2');

write('vedite ocenki:');
writeln;
with ocenki do begin

writeln('Matemat: ');
readln(oc1);
writeln('Algoritmi: ');
readln(oc2);
writeln('Informatika: ');
readln(oc3);
writeln('Istoriya: ');
readln(oc4);
{socwork}
writeln('uchastvyet v o.r.? esli da to +, esli net to -:');
 readln(socwork);
   if (socwork='+') then
   writeln('Nalichie Uchastiya v obshestvennoi rabote:da');
if (socwork='-') then
 writeln('Nalichie Uchastiya v obshestvennoi rabote:net');
writeln;
writeln;

if (oc1='5') and (oc2='5') and (oc3='5') and (oc4='5') and (socwork='+')
then writeln(f,'Fiplata: +50% k stipendii');

if (oc1='5') and (oc2='5') and (oc3='5') and (oc4='5') and (socwork='-')
then writeln(f,'Fiplata: +25% k stipendii');

if ((oc1='4') xor (oc1='5')) and ((oc2='4') xor (oc2='5')) and ((oc3='4') xor (oc3='5')) and
((oc4='4') xor (oc4='5'))
then writeln(f, 'Fiplata: zachislen na stipendiyu');

if (oc1='3') or (oc2='3') or (oc3='3') or (oc4='3') and (socwork='+') then
writeln(f,'Fiplata: prosto stip');


writeln(f,'FIO':10,'Gryppa':10,'matem':10,'algor':10,'infor':10,'istor':10,'o.r':5);
writeln(f,fam:10,group:10,oc1:10,oc2:10,oc3:10,oc4:10,socwork:5);


writeln(f,'-----------------------------------------------------------------------');
writeln(f,'-----------------------------------------------------------------------');

 end;
end;
end;
close(f);
end;

BEGIN
 clrscr;

writeln('wedite kol. studentov:');
readln(n);
  sozd(n);

assign(t,'c:\rgrstud.txt');
rewrite(t);
assign(f,'c:\rgr.txt');
reset(f);
writeln('Vvedite gruppu: ');
readln(g);
while not eof(f) do begin
with a do begin
readln(f,group);
readln(f,fam);
readln(f,socwork);

with ocenki do begin
readln(f,oc1);
readln(f,oc2);
readln(f,oc3);
readln(f,oc4);


if ( ((g='1') and (a.group='1')) or ((g='2') and a.group='2')) )  then

begin

if (oc1='5') and (oc2='5') and (oc3='5') and (oc4='5') and (socwork='+')
then writeln(t,'Fiplata: +50% k stipendii');

if (oc1='5') and (oc2='5') and (oc3='5') and (oc4='5') and (socwork='-')
then writeln(t,'Fiplata: +25% k stipendii');

if ((oc1='4') xor (oc1='5')) and ((oc2='4') xor (oc2='5')) and ((oc3='4') xor (oc3='5')) and
((oc4='4') xor (oc4='5'))
then writeln(t, 'Fiplata: zachislen na stipendiyu');

if (oc1='3') or (oc2='3') or (oc3='3') or (oc4='3') and (socwork='+') then
writeln(t,'Fiplata: prosto stip');


writeln(t,'FIO':10,'Gryppa':10,'matem':10,'algor':10,'infor':10,'istor':10,'o.r':5);
writeln(t,fam:10,group:10,oc1:10,oc2:10,oc3:10,oc4:10,socwork:5);


writeln(t,'-----------------------------------------------------------------------');
writeln(t,'-----------------------------------------------------------------------');

end
else
writeln('studentov net');
end;
end;
end;

close(f);
close(t);
   readln;
end.
Hakurei
Сообщения: 4
Зарегистрирован: 27 дек 2008, 19:05

всё, решил)
Ответить