• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Работа с файлами в паскале

  • Автор темы Автор темы Intersap
  • Дата начала Дата начала
I

Intersap

Вот такой вопрос:
Написать две программы.

Первая программа должна формировать начальные ведомости про студентов и записывать их в типизированный файл.
Вроде бы так:
Код:
program lab14;
uses crt;
type Stud = record
Name,Group: String;
Data: Integer;
Gender: String;
end;
Ispit1 = record
Teormeh,Mathematica,Phisics,Geometry:Integer;
end;
Ispit2 = record
Teormeh,Mathematica,Sopromat:Integer;
end;
var i,mat0,mat,phys0,phys,meh0,meh,geom0,geom,porivn1,porivn2,predmet: Integer;
Student:Stud;
Exam1:Ispit1;
Exam2:Ispit2;
ft: text;
begin
clrscr;
writeln;
for i:=1 to 17 do begin
textcolor(14);
write(i);
textcolor(white);
write(' ФИО студента:	');
readln(Student.Name);
write(' Группа:			 ');
readln(Student.Group);
write(' Дата рождения: ');
readln(Student.Data);
write(' Пол студента:	');
readln(Student.Gender);
writeln(' Оценки за первую сессию:');
write('	 Физика:							 ');
readln(Exam1.Phisics);
write('	 Математика:					  ');
readln(Exam1.Mathematica);
write('	 Теоретическая механика:  ');
readln(Exam1.Teormeh);
write('	 Начертательная геометрия: ');
readln(Exam1.Geometry);
writeln(' Оценки за вторую сессию:');
write('	 Математика:						');
readln(Exam2.Mathematica); 
write('	 Теоретическая механика:	');
readln(Exam2.Teormeh);
write('	 Сопротивление материалов: ');
readln(Exam2.Sopromat);
writeln;
end;
assign(ft,'stud.txt');
rewrite(ft);
for i:=1 to 17 do
begin
writeln(ft,i,' ФИО:				 ',Student.Name);
writeln(ft,'  Группа:			 ',Student.Group);
writeln(ft,'  Дата рождения: ',Student.Data);
writeln(ft,'  Пол:				 ',Student.Gender);
writeln(ft,'  Оценки за первую сессию:');
writeln(ft,'		 Физика:							 ',Exam1.Phisics);
writeln(ft,'		 Математика:					  ',Exam1.Mathematica);
writeln(ft,'		 Теоретическая механика:  ',Exam1.Teormeh);
writeln(ft,'		 Начертательная геометрия: ',Exam1.Geometry);
writeln(ft,'  Оценки за вторую сессию:');
writeln(ft,'		 Математика:						',Exam2.Mathematica);
writeln(ft,'		 Теоретическая механика:	',Exam2.Teormeh);
writeln(ft,'		 Сопротивление материалов: ',Exam2.Sopromat);
writeln;
end;
close(ft);
end.

Вторая программа должна считывать информацию с типизированного файла (созданого первой программой), находить предмет, который суденты сдали лучше всего, а результаты записывать в текстовый файл.
Программа сделана не до конца:
Код:
program lab14;
uses crt;
type Ispit1 = record
Teormeh,Mathematica,Phisics,Geometry:Integer;
end;
var Exam1:Ispit1;
ft: text;
i,mat0,mat,phys0,phys,meh0,meh,geom0,geom,porivn1,porivn2,predmet:Integer;
begin
clrscr;
writeln;
assign(ft,'stud.txt');
reset(ft);

считать данные - ?	 

mat0:=0;
phys0:=0;
meh0:=0;
geom:=0;
for i:=1 to 17 do begin
phys:=Exam1.Phisics;
phys0:=phys0+phys;
mat:=Exam1.Mathematica;
mat0:=mat0+mat;
meh:=Exam1.Teormeh;
meh0:=meh0+meh;
geom:=Exam1.Geometry;
geom0:=geom0+geom;
end;
if (mat0>phys0) then porivn1:=mat0
else porivn1:=phys0;
if (meh0>geom0) then porivn2:=meh0
else porivn2:=geom0;
if (porivn1>porivn2) then predmet:=porivn1
else predmet:=porivn2;
if (predmet=phys0) then N:='Лучше стали физику'
if (predmet=mat0) then N:='Лучше стали математику';
if (predmet=meh0) then N:='Лучше стали механику';
if (predmet=geom0) then N:='Лучше стали графику';
writeln(ft,N);
readkey;
close(ft);
end.

Помогите чем могите
 
sax_ol
прав, конечно =)

Добавлено: вместо for i:=1 to 17 do begin
что-то типа такого:
while not EOF(ft) do begin
ну, это было написано после 12 ночи =) посыпаю голову пеплом)
 
1 часть Марлезонского балета:

Код:
program lab14;
uses crt;
type Stud = record
Name,Group: String[100];
Data: Byte;
Gender: Char;
Teormeh1,Mathematica1,Phisics,Geometry:Byte;
Teormeh2,Mathematica2,Sopromat:Byte;
end;
var i: Integer;
Student:Stud;
ft: file of Stud;
begin
clrscr;
writeln;
assign(ft,'stud.txt');
rewrite(ft);
for i:=1 to 2 do
begin
textcolor(14);
write(i);
textcolor(white);
write(' ФИО студента:	');
readln(Student.Name);
write(' Группа:			 ');
readln(Student.Group);
write(' Дата рождения: ');
readln(Student.Data);
write(' Пол студента:	');
readln(Student.Gender);
writeln(' Оценки за первую сессию:');
write('	 Физика:							 ');
readln(Student.Phisics);
write('	 Математика:					  ');
readln(Student.Mathematica1);
write('	 Теоретическая механика:  ');
readln(Student.Teormeh1);
write('	 Начертательная геометрия: ');
readln(Student.Geometry);
writeln(' Оценки за вторую сессию:');
write('	 Математика:						');
readln(Student.Mathematica2); 
write('	 Теоретическая механика:	');
readln(Student.Teormeh2);
write('	 Сопротивление материалов: ');
readln(Student.Sopromat);
writeln;
write(ft,Student);
end;
close(ft);
end.

2 часть Марлезонского балета:

Код:
program lab14;
uses crt;
type Stud = record
Name,Group: String[100];
Data: Byte;
Gender: Char;
Teormeh1,Mathematica1,Phisics,Geometry:Byte;
Teormeh2,Mathematica2,Sopromat:Byte;
end;
var Student:Stud;
ft: file of Stud;
i,mat0,mat,phys0,phys,meh0,meh,geom0,geom,porivn1,porivn2,predmet:byte;
begin
clrscr;
writeln;
assign(ft,'stud.txt');
mat0:=0;
phys0:=0;
meh0:=0;
geom:=0;
for i:=1 to 2 do begin
read(ft,Student);
phys:=Student.Phisics;
phys0:=phys0+phys;
mat:=Student.Mathematica1;
mat0:=mat0+mat;
meh:=Student.Teormeh1;
meh0:=meh0+meh;
geom:=Student.Geometry;
geom0:=geom0+geom;
end;
if (mat0>phys0) then porivn1:=mat0
else porivn1:=phys0;
if (meh0>geom0) then porivn2:=meh0
else porivn2:=geom0;
if (porivn1>porivn2) then predmet:=porivn1
else predmet:=porivn2;
if (predmet=phys0) then writeln ('Физика');
if (predmet=mat0) then writeln ('Математика');
if (predmet=meh0) then writeln ('Механика');
if (predmet=geom0) then writeln ('Графика');
readkey;
close(ft);
end.
 
так вроде должно быть)))
assign(ft,'stud.txt');
Reset(ft);

Добавлено: и дальше
while not EOF(ft) do begin // for - не надо
...
end;
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!