Міністерство освіти і науки України
Національний технічний університет України
“Київський політехнічний інститут”
Кафедра ОТ
ЗВІТ
про виконання лабораторної роботи № 7
з дисципліни
“Основи програмування та алгоритмічні мови”
Тема: ЗАПИСИ
Варіант 28
Постановка задачі
Ввести масив записів, кожен з яких складається з наступних елементів: факультет, курс, група, прізвище та ім’я студента, його екзаменаційні оцінки. Визначити факультет і групу, у якій найбільше відмінників.
Аналітичні викладки
Блок-схема алгоритму розв’язання задачі
Текст програми
program lab_7;
uses crt;
const max = 25;
type
yeartype = 1..6;
marktype = 2..5;
perf = record
g : string[6];
p : byte;
end;
pbs = array [0..10] of perf;
Student = record
fac : string[5];
year : yeartype;
group : string[6];
FIO : string [16];
marks : record
OP : marktype;
ODM : marktype;
MA : marktype;
end;
perf : boolean;
end;
mas = array[0..25] of Student;
var b:mas; {baza dannih}
k {kolichestvo grupp}
,l {nomer gruppi s naib. kol. otlichnikov}
,n:byte; {kolichestvo studentov}
pb:pbs; {massiv grupp}
procedure inp(var m:mas; var n:byte);
var i:byte;
begin
i := 1;
while not eof do
begin
with m[i] do
begin
{ writeln ('Student ', i);}
{ write ('FAC(5): ');}
read (FAC);
{ write ('year(1-6): ');}
read (year);
{ write ('group(5): ');}
read (group);
read (FIO);
with marks do
begin
{writeln('3 x marks(3-5): ');}
read (OP, ODM);
readln(MA);
end;
if (marks.OP=5) and (marks.ODM=5) and (marks.MA=5) then perf := True else perf := False;
end;
i := i + 1;
end;
i := i - 1;
n := i;
end;
procedure output(const m:mas; const n:byte);
var i:byte;
begin
writeln ('fac:':7, 'year':5, 'group':7, 'FIO':18, 'OP':4, 'ODM':4, 'MA':4, 'Otl':6);
for i := 1 to n do
with b[i] do
begin
write (fac:7,year:5,group:7,FIO:18);
with marks do
write (OP:4,ODM:4,MA:4);
write (perf:6);
writeln;
end;
end;
procedure swap(var a, b: Student);
var c : Student;
begin
c := a;
a := b;
b := c;
end;
procedure sort(var m : mas; const n:byte);
var i, j, k: byte;
begin
For k:=1 to n-1 do
for j := 1 to n-k do
if m[j].group > m[j+1].group
then swap(m[j],m[j+1]);
end;
procedure getpb(const m:mas; var pb:pbs; var k:byte);
var i:byte;
begin
k := 0;
for i := 1 to n do
begin
if m[i].group<>m[i-1].group then
begin
k := k + 1;
pb[k].g := m[i].group;
end;
if m[i].perf=True then pb[k].p := pb[k].p + 1;
end;
end;
function getb(const pb:pbs; const k:byte):byte;
var i, b, ps:byte;
begin
ps := 0;
for i:=1 to k do
if pb[i].p > ps then
begin
ps := pb[i].p;
b := i;
end;
getb := b;
end;
begin
TextColor(0);
TextBackGround(7);
clrscr;
assign (input, '7in.txt');
reset (input);
inp(b, n);
output(b, n);
sort (b, n);
output (b, n);
getpb(b, pb, k);
l := getb(pb, k);
writeln ('Bolshe vsego otlichnikov v gruppe ', pb[l].g);
readkey;
close (input);
end.
Результати виконання програми
/
Висновок
Під час виконання лабораторної роботи я вивчив особливості організації роботи з записами.
Програма працює правильно і виводить групу з найбільшою кількістю відмінників