Показать сообщение отдельно
Старый 29.05.2014, 22:28   #1 (permalink)
julia.avdes
Новичок
 
Регистрация: 29.05.2014
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Паскаль, программа, помощь в корректировке

Здравствуйте!
Задание:
Сводная ведомость результатов экзаменационной сессии студенческой группы находится в файле на диске и для каждого студента содержит фамилию, инициалы и оценки по пяти предметам. Количество студентов в группе не превышает 20 человек.
Составить программу, с помощью которой можно корректировать и дополнять список и получать:
• список студентов;
• список студентов, сдавших экзамены только на «5»;
• список студентов, имеющих тройки;
• список студентов, имеющих двойки.
При этом студент, имеющий более чем одну двойку, исключается из списка.


есть наработки:

Вариант 1:

Program curs;
uses crt;
Type
student = record
n : byte ;
f,ini: string[10] ;
bal : array [1..5] of byte;
end;
Var spisok : student ;
sp : file;
a: integer;

procedure vvod;
var i,j:byte;
f:text;
begin
assign (sp,'Vedom.txt');
rewrite ( sp);
with spisok do
For i:=1 to 2 do
begin
n:=i;
write(sp);
writeln (' Введите фамилию - ' ); readln (f);
writeln (' Введите инициалы - ' ); readln (ini);
writeln (' Введите 5 оценкок ' );
For j:= 1 to 5 do readln ( bal [j] );
write (sp , spisok);
end;
close (sp);
end;

procedure print;
var j : byte;
begin
reset ( sp);
writeln (' Список студентов: ');
while not eof (sp) do
with spisok do
begin
Read (sp, spisok);
writeln (f,' ',ini);
For j:= 1 to 5 do write (' ', bal [j],' ' );
writeln ;
end;
readln;
close (sp) ;
end;

procedure otl;
var j : byte;k:=0;
begin
reset ( sp);
writeln (' Cписок студентов, сдавших экзамены только на «5» ');
while not eof (sp) do
with spisok do
begin
Read (sp, spisok);
For j:= 1 to 5 do
if bal[j]=5 then k:=k+1;
if k=5 then write ( f, ' ' ,ini );
k:=0;
writeln ;
end;
readln;
close (sp) ;
end;

procedure ydov;
var j : byte;begin
reset ( sp);
writeln (' Cписок студентов,имеющих тройки ');
while not eof (sp) do
with spisok do
begin
Read (sp, spisok);
For j:= 1 to 5 do begin
if bal[j]=3 then begin
write (f,' ' ,ini );
break;
end;
end;
writeln ;
end;
readln;
close (sp) ;
end;

procedure dva;
var j : byte;
begin
reset ( sp);
writeln (' Cписок студентов,имеющих двойки');
while not eof (sp) do
with spisok do
begin
Read (sp, spisok);
For j:= 1 to 5 do begin
if bal[j]=2 then begin
write (f,' ' ,ini );
break;
end;

writeln ;
end;
readln;
close (sp) ;
end;end;



begin
assign (sp,'Vedom.txt');
repeat
writeln('_________________________________________ ____________________________________');
writeln('========================================= ====================================');
writeln('_____Внести фамилии, инициалы и оценки студентов в базу________________/1 ___');
writeln('_____Посмотреть список всех студентов__________________________________/2____');
writeln('_____Посмотреть список студентов, сдавших экзамены только на «5»_______/3____');
writeln('_____Посмотреть список студентов,имеющих тройки________________________/4____');
writeln('_____Посмотреть список студентов,имеющих двойки________________________/5____');
writeln('_____Посмотреть список студентов, сдавших экзамены без 2_______________/6____');
writeln('========================================= ====================================');
writeln('_________________________________________ ____________________________________');
read (a);
case a of
1: Vvod;
2: print;
3: otl;
4: ydov;
5: dva;

end;
until a=0;
end.


проблема в записи в файл, получаю не верные символы. Нужно исправить, чтобы в сохраненном файле показывалось список группы и оценки.


Вариант 2:

uses crt;
const
n=3;
Type
Tstudent=record (*Тип студент*)
LastName:string[10];
FIO:string[10];
Mark:array[1..5] of byte;
end;
VAr
Student:array[1..n] of Tstudent;(*Массив з 20 студентами*)
I,j:integer;
F:text;
Ch:char;

Procedure Refresh; (*Процедура ввода информации о студентах*)
var I,j:integer;
begin
for i:=1 to n do
Begin
Writeln;
Write('Фамилия: ');
Readln(student[i].LastName);
Write('Ф.И.О: ');
Readln(student[i].FIO);
for j:=1 to 5 do
Begin
Write('Оценка: ');
Readln(student[i].mark[j]);
end;
end;
end;

Procedure Write_File;(*Запись информации в файл о студентах*)
var I,j:integer;
begin
Assign(f,'q.txt');
Rewrite(f);
for i:=1 to n do
Begin
Writeln(f,student[i].LastName);
Writeln(f,Student[i].FIO);
for j:=1 to 5 do
Writeln(f,student[i].mark[j]);
end;
Close(f);
end;
Procedure Read_File;(*Чтение информации из файла о студентах*)
var I,j:integer;
Begin
Assign(f,'q.txt');
Reset(f);
i:=0;
Repeat
inc(i);
Readln(f,student[i].LastName);
Readln(f,Student[i].FIO);
for j:=1 to 5 do
Readln(f,student[i].mark[j]);
until (eof(f))or(i>=n);
Close(f);
end;


записывает в файл, но не могу додумать как составить процедуру вывода всех студентов, студентов отличников итд.

Буду благодарна любой помощи, даже маленькой подсказки.
julia.avdes вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070