Продолжаю выкладывать свои давние лабораторные работы.
цель работы:
— проверка с помощью ЭВМ понимания выполнения программ с данными комбинированных типов;
— знакомство с сообщениями транслятора об обнаруженных ошибках в описаниях данных комбинированных типов и в обращениях к элементам этих данных;
— получение практических навыков по отладке программ с данными комбинированных типов.
Графическая схема алгоритма программы TEST5A:
Из графической схемы алгоритма видно, что условие задачи, решаемой программой TEST5A: упорядочить по алфавиту список имён с датами.
Таблица исходных данных и результатов выполнения программы TEST5A:
Исходные данные | Результат (анализ) | Результат (выполнение) | |||
Имя | Дата | Имя | Дата | Имя | Дата |
Jack | 01 01 2004 | Christopher | 20 06 1900 | Christopher | 20 06 1900 |
John | 22 11 1957 | Jack | 01 01 2004 | Jack | 01 01 2004 |
Scorpion | 17 01 1999 | John | 22 11 1957 | John | 22 11 1957 |
Walter | 15 12 1900 | Scorpion | 17 01 1999 | Scorpion | 17 01 1999 |
Christopher | 20 06 1900 | Walter | 15 12 1900 | Walter | 15 12 1900 |
Текст программы TEST5B:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
program TEST5B; { Library } type Person = record Name : record Name : Word, Name : Word end; Degree : 1..3; Org : String end; Book = record Auther : Person Title : String; Publ : record City:1..5; Year:integer end; Subj = array [1..10] of Word end; String = string[80]; Word = string[16]; var Books : array [1..100] of Book; I,J,N : integer; begin Readln (n); if f 100 then n:=100; for I:=1 to N do with Books[i], Auther, Publ do begin Readln (Auther.Name, Degree); Readln (Org); Readln (Title); Readln (City, Year); J:=1; repeat Readln (Subj[J]); J:=J+1 until Subj [J-1]=' end; for I:=1 to n do Books [I], Subj[1]:= 'computer' end. |
При компиляции были получены следующие сообщения о ошибках:
“;” expected
Dublicate identifier (Name).
“;” expected.
“:” expected.
“BEGIN” expected.
Unknown identifier.
String constant exceeds line.
Исправленный текст программы TEST5B:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
program TEST5B; { Library } type Str = string[80]; wrd = string[16]; Person = record Name:wrd; Org:str; Degree : 1..3; end; Book = record Auther : Person; Title : String; Publ : record City:1..5; Year:integer end; Subj : array [1..10] of Wrd; end; var Books : array [1..100] of Book; I,J,N : integer; begin Readln (n); if n > 100 then n:=100; for I:=1 to N do with Books[i], Auther, Publ do begin Readln (Auther.Name, Degree); Readln (Org); Readln (Title); Readln (City, Year); J:=1; repeat Readln (Subj[J]); J:=J+1 until Subj [J-1]='' end; for I:=1 to n do begin Books [I].Subj[1]:= 'computer' end; end. |
Индивидуальное задание.
Вариант 9.
Написать программу, вычисляющую студента с максимальным средним баллом аттестата. Предусмотреть в программе ввод количества студентов и их оценок по 6 предметам с клавиатуры.
Графическая схема алгоритма программы:
По этой графической схеме алгоритма была составлена программа:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Program lab5; uses crt; type student = record name:string[16]; srball:real; ocenki:array [1..6] of byte; end; var students:array[1..100] of student; n,m,k,j:byte; x:real; begin Textcolor(0); textbackground(white); clrscr; Write('Input number of students...');readln(k); for n:=1 to k do begin Write('Input name of student number ',n, '... '); readln(students[n].name);x:=0; for m:=1 to 6 do begin write('Input valuation ',m,' of student ',students[n].name,'... '); readln(students[n].ocenki[m]); x:=x+students[n].ocenki[m] ; end; x:=x / 6; students[n].srball:=x; end; m:=1; for n:=1 to k do begin if students[n].srball>students[m].srball then m:=n; end; Writeln('Name ',#124,' valuatoins ',#124,' average valuation'); for n:=1 to k do begin Write(students[n].name:16,#124); for j:=1 to 6 do Write(students[n].ocenki[j]:2); Write(#124:4,students[n].srball:6:2);Writeln; end; Writeln('Student with maximum average valuation is ',Students[m].name); While not keypressed do end. |
Для проверки работоспособности программы была составлена следующая таблица входных и выходных даннах:
Входные данные | Входные данные | Результат(анализ) | Результат (реально) | Результат (анализ/реально) |
Имя | Баллы | Средний балл | Средний балл | Максимальный средний балл |
Имя1 | 5 5 5 5 5 5 | 5,00 | 5,00 | Max/max |
Имя2 | 5 4 5 5 4 4 | 4,50 | 4,50 | |
Имя3 | 3 4 3 3 4 4 | 3,50 | 3,50 | |
Имя4 | 5 5 3 4 3 3 | 3,83 | 3,83 | |
Имя5 | 3 4 4 3 3 3 | 3,33 | 3,33 |