Помощь - Поиск - Пользователи - Календарь
Полная версия: Файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Guest
Помогите!!! переделать задачу.

Вот условия:
Составить программу назначения степендиии студентам по результатам сессии
используя следующие правила.

1) Если все оценки 5 назначается повышенная степендия
2) Если все оценки 4 и 5 назначается обычная степендия
3) Еслиоцени 3 стипендия не назначается

В результате работы программы должен быть напечатат список с оценкой
и средним баллом каждого студента
Во втором списке фамилии (назначенные на повышенную и обычную стипендию)



program stude;
uses crt;
type
student=record
kod:byte;
fam:string[20];
im:string[10];
ot:string[15];
gr:string[6];
kurs:byte;
m:array[1..5] of byte;
end;
var
m:array[1..5] of byte;
ysp:integer;
i:byte;
fstud:file of student;
rab:student;
flag:boolean;
fio:string[25];
key:0..4;
procedure vvod; {Ввод данных с клавиатуры}
begin
clrscr;
with rab do
begin
write('Фамилия: ');
readln(fam);
if fam='9999' then exit;
write('Имя: ');
readln(im);
write('Отчество: ');
readln(ot);
write('Группа: ');
readln(gr);
write('Курс: ');
readln(kurs);
write('Успеваемость: ');
readln(m[1],m[2],m[3],m[4],m[5]);
kod:=i;
end {with}
end; {vvod}
procedure vivod; {Ввывод на экран­}
begin
with rab do
begin
fio:=fam+' '+im[1]+' '+ot[1]+' ';
write(kod:4,fio:18);
writeln(gr:8,kurs:8,m[1]:8,m[2]:2,m[3]:2,m[4]:2,m[5]:2);
end
end;
procedure form; {формировать массив}
begin
rewrite(fstud);
i:=1;
vvod;
while rab.fam<>'9999' do
begin
write(fstud,rab);
i:=i+1;
vvod
end;
close(fstud)
end;
procedure print; {Печать}
begin
reset(fstud);
writeln('-----------------------------------------------------------------------------------');
writeln('I № I Фио I Группа  I Курс I Успеваемость I Степендия I Ср. бал');
writeln('-----------------------------------------------------------------------------------');
while not eof (fstud) do
begin
read(fstud,rab);
vivod
end ;
writeln('-----------------------------------------------------------------------------------');
readkey;
close(fstud)
end;
procedure print2; {Печать}
begin
reset(fstud);
writeln('------------------------------------------------------------');
writeln('I Повышенная степендия I Обычная степендия ');
writeln('------------------------------------------------------------');
while not eof (fstud) do
begin
read(fstud,rab);
with rab do
if (m[1]=2)or(m[2]=2)or(m[3]=2)or(m[4]=2)or(m[5]=2)then vivod;
end ;
writeln('------------------------------------------------------------');
readkey;
close(fstud)
end;
begin
flag:=false;
assign(fstud,'Студенты');
repeat
clrscr;
writeln('Выберите пункт меню');
writeln;
writeln('1-Формировать массив');
writeln('2-Печать всего массива');
writeln('3-Печать на повышен. и обычн. степендию');
writeln('0-выход');
readln(key);
case key of
1:form;
2:print;
3:print2;
0:flag:=true
end;
until flag;
end.

klem4
А что конкретно не работает ?
Guest
Этот код который я дал записывает такие данные

Фамилия
Имя
Отчество
Группа
Курс
Успеваемость

Затем Выводит всех студентов и Всех доишников

Мне нужно чтобы она еще
находила среднюю оценку и какая будет степендия
Затем выводила всех студентов и студентов с повышенной и обычной степендией.
klem4
один из вариантов :

в запись добавляешь например такую штуку
Level : 0..3;

потом, когда начинаешь вводить данные по дефолту ставь всем

students[i].Level:=3;


после того, как ввел оценки делаешь так :

i:=1;
while(i<=5) do
with ...[i] do begin
if m[i]=4 then level:=2
else if m[i]=3 then
level:=1
else
if m[i]=2 then level:=0;
if level=0 then break
else inc(i);
end;


ну а потом уже когда будешь выводить можешь вибирать у кого лавел=3 тот отличник, у кого 2 хорошист и у кого 1 - троечник, у кого 0 - отчислен.
volvo
klem4 blink.gif
function min(a, b: integer): integer;
begin
min := b; if a < b then min := a;
end;

...
with rab do
for i := 1 to 5 do
level := min(level, m[i] - 2);

Далее - по твоему тексту... Не проще?
Guest

program stude;
uses crt;
type
student=record
kod:byte;
fam:string[20];
im:string[10];
ot:string[15];
gr:string[6];
kurs:byte;
m:array[1..5] of byte;
end;
var
m:array[1..5] of byte;
ysp:integer;
i:byte;
fstud:file of student;
rab:student;
flag:boolean;
fio:string[25];
key:0..4;,
Level : 0..3;
procedure vvod; {Ввод данных с клавиатуры}
begin
clrscr;
with rab do
begin
write('Фамилия: ');
students[i].Level:=3;
readln(fam);
if fam='9999' then exit;
write('Имя: ');
students[i].Level:=3;
readln(im);
write('Отчество: ');
students[i].Level:=3;
readln(ot);
write('Группа: ');
students[i].Level:=3;
readln(gr);
write('Курс: ');
students[i].Level:=3;
readln(kurs);
write('Успеваемость: ');
students[i].Level:=3;
readln(m[1],m[2],m[3],m[4],m[5]);

i:=1;
while(i<=5) do
with ...[i] do begin
if m[i]=4 then level:=2
else if m[i]=3 then
level:=1
else
if m[i]=2 then level:=0;
if level=0 then break
else inc(i);
end;

kod:=i;
end {with}
end; {vvod}
procedure vivod; {Ввывод на экран}
begin
with rab do
begin
fio:=fam+' '+im[1]+' '+ot[1]+' ';
write(kod:4,fio:18);
writeln(gr:8,kurs:8,m[1]:8,m[2]:2,m[3]:2,m[4]:2,m[5]:2);
end
end;
procedure form; {формировать массив}
begin
rewrite(fstud);
i:=1;
vvod;
while rab.fam<>'9999' do
begin
write(fstud,rab);
i:=i+1;
vvod
end;
close(fstud)
end;
procedure print; {Печать}
begin
reset(fstud);
writeln('-----------------------------------------------------------------------------------');
writeln('I № I Фио I Группа I Курс I Успеваемость I Степендия I Ср. бал');
writeln('-----------------------------------------------------------------------------------');
while not eof (fstud) do
begin
read(fstud,rab);
vivod
end ;
writeln('-----------------------------------------------------------------------------------');
readkey;
close(fstud)
end;
procedure print2; {Печать}
begin
reset(fstud);
writeln('------------------------------------------------------------');
writeln('I Повышенная степендия I Обычная степендия ');
writeln('------------------------------------------------------------');
while not eof (fstud) do
begin
read(fstud,rab);
with rab do
if (m[1]=2)or(m[2]=2)or(m[3]=2)or(m[4]=2)or(m[5]=2)then vivod;
end ;
writeln('------------------------------------------------------------');
readkey;
close(fstud)
end;
begin
flag:=false;
assign(fstud,'Студенты');
repeat
clrscr;
writeln('Выберите пункт меню');
writeln;
writeln('1-Формировать массив');
writeln('2-Печать всего массива');
writeln('3-Печать на повышен. и обычн. степендию');
writeln('0-выход');
readln(key);
case key of
1:form;
2:print;
3:print2;
0:flag:=true
end;
until flag;
end.


Так? че-то не прет...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.