ВУЗ:
Составители:
Рубрика:
107
Пример использования типа RECORD
и модуля GRAPH
Задание:
Разработать массив записей следующей структуры: фамилия студента,
количество пятёрок, количество четвёрок, количество троек. Вывести на пе-
чать фамилии студентов идущих на красный диплом. Отсортировать массив в
порядке возрастания среднего балла. Представить текущую успеваемость
студентов группы в виде круговой диаграммы.
Текст программы:
Uses Graph,Crt;
type rec= record
fam:string[35];
k5, k4, k3: byte;
SB:real end;
var z:array[1..40] of rec;f:file of rec;
max:rec;
nom, i, j, n,q,k:byte;
vr,p1,p2,p3:real;
gmx,gmy:Integer;
d,x:Array[1..3] of word;
Sta,EndA:word;
procedure Init;
var GraphDriver, GraphMode, ErrorCode:Integer;
begin
GraphDriver:=Detect;
InitGraph (GraphDriver, GraphMode,' ');
errorCode:=GraphResult;
if ErrorCode<>grok then
begin
writeln('ошибка графики:',GraphErrorMsg(ErrorCode));
Writeln('Графический режим не установлен');
halt;
end;
end;
begin
repeat
writeln('1-создание файла;2-работа с файлом');readln(k);
until (k=1)or(k=2);
case k of
1: begin
write('ввод числа студентов в группе');
readln(n);
108
assign(f,'c:\stud.dat'); {связывание логического файла с физиче-
ским}
rewrite(f); {открытие файла для записи}
for i :=1 to n do begin
write ('Вввод фамилии студента'); readln(z[i].fam);
write ('Ввод количества 5-рок'); readln(z[i].k5);
write ('Ввод количества 4-рок'); readln(z[i].k4);
write ('
Ввод количеств 3-ек'); readln(z[i].k3);
z[i].SB:=(z[i].k5*5+z[i].k4*4+z[i].k3*3)/(z[i].k5+z[i].k4+z[i].k3);
max:=z[i];
write(f,max);
end;
close(f);
end;
2: begin
assign(f,'c:\stud.dat');
reset(f);{открытие файла для чтения}
i:=0;
while not eof(f) {пока не конец файла} do begin
read(f,max);
i:=i+1; z[i]:=max;{увеличение счетчика на 1}
end;
close(f);
n:=i;
end; end;{for case}
writeln('Список студентов идущих на красный диплом');
writeln('Фамилия студента: ':30, 'средний балл: ':10);
for i:=1 to n do
begin
if (z[i].SB>=4.75) and (Z[i].k3=0) then
writeln(z[i].fam:30, z[i].SB:6:2);
end;
for i:=1 to n-1 do
begin
max:=z[i];
nom:=i;
for j:=i to n do
if z[j].SB>max.SB then begin
max:=z[j];
nom:=j; end;
if nom<>i then begin
z[nom]:=z[i];
z[i]:=max; end;
end;
Пример использования типа RECORD assign(f,'c:\stud.dat'); {связывание логического файла с физиче- и модуля GRAPH ским} Задание: rewrite(f); {открытие файла для записи} Разработать массив записей следующей структуры: фамилия студента, for i :=1 to n do begin write ('Вввод фамилии студента'); readln(z[i].fam); количество пятёрок, количество четвёрок, количество троек. Вывести на пе- write ('Ввод количества 5-рок'); readln(z[i].k5); чать фамилии студентов идущих на красный диплом. Отсортировать массив в write ('Ввод количества 4-рок'); readln(z[i].k4); порядке возрастания среднего балла. Представить текущую успеваемость write ('Ввод количеств 3-ек'); readln(z[i].k3); студентов группы в виде круговой диаграммы. z[i].SB:=(z[i].k5*5+z[i].k4*4+z[i].k3*3)/(z[i].k5+z[i].k4+z[i].k3); Текст программы: max:=z[i]; Uses Graph,Crt; write(f,max); type rec= record end; fam:string[35]; close(f); k5, k4, k3: byte; end; SB:real end; 2: begin var z:array[1..40] of rec;f:file of rec; assign(f,'c:\stud.dat'); max:rec; reset(f);{открытие файла для чтения} nom, i, j, n,q,k:byte; i:=0; vr,p1,p2,p3:real; while not eof(f) {пока не конец файла} do begin gmx,gmy:Integer; read(f,max); d,x:Array[1..3] of word; i:=i+1; z[i]:=max;{увеличение счетчика на 1} Sta,EndA:word; end; procedure Init; close(f); var GraphDriver, GraphMode, ErrorCode:Integer; n:=i; begin end; end;{for case} GraphDriver:=Detect; writeln('Список студентов идущих на красный диплом'); InitGraph (GraphDriver, GraphMode,' '); writeln('Фамилия студента: ':30, 'средний балл: ':10); errorCode:=GraphResult; for i:=1 to n do if ErrorCode<>grok then begin begin if (z[i].SB>=4.75) and (Z[i].k3=0) then writeln('ошибка графики:',GraphErrorMsg(ErrorCode)); writeln(z[i].fam:30, z[i].SB:6:2); Writeln('Графический режим не установлен'); end; halt; for i:=1 to n-1 do end; begin end; max:=z[i]; nom:=i; begin for j:=i to n do repeat if z[j].SB>max.SB then begin writeln('1-создание файла;2-работа с файлом');readln(k); max:=z[j]; until (k=1)or(k=2); nom:=j; end; case k of if nom<>i then begin 1: begin z[nom]:=z[i]; write('ввод числа студентов в группе'); z[i]:=max; end; readln(n); end; 107 108