Основы алгоритмизации и программирования. Часть четвертая. Файловая система Turbo Pascal. Асламова В.С - 54 стр.

UptoLike

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