Массив работников предприятия имеет следующий вид, представленный в таблице 3.
Таблица 3. Пример данных массива А.
Номер отдела | Табельный номер работника | Год рождения ребенка работника | Месяц рождения ребенка работника | Дата рождения ребенка работника |
(Ai, 1) | (Ai, 2) | (Ai, 3) | (Ai, 4) | (Ai, 5) |
На предприятии работают 5 работников, соответственно в отделе 01 – 2 человека, в отделе 02 – 1 человека, в отделе 03 – 1 человек. Данные по дате рождения ребенка работника приведены в столбцах 3-5.
5. Трассировочная таблица алгоритма для контрольного примера.
Трассировочная таблица представляет собой модель работы процессора, выполняемой вручную. Представим трассировочную таблицу в таблице 4.
Таблица 4. Трассировочная таблица алгоритма
№ шага | Номер блока | Команда алгоритма | N | Y | k | i |
|
|
| Выполняемые действия | |||
Ввод N,Y | |||||||||||||
Вызов подпрограммы 2 | |||||||||||||
2.1 | Для i от 1 до N | i:=1, i≤ 5, да | |||||||||||
2.2 | Для j от 1 до 5 | j:=1, j≤5, да | |||||||||||
|
| Ввод A 1,1, j:= j +1, 2 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:= 2, 2 ≤ 5, да | |||||||||||
|
| Ввод A 1,2, j:= j +1, 3 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=3, 3 ≤ 5, да | |||||||||||
|
| Ввод A 1,3, j:= j +1, 4 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:= 4, 4 ≤ 4, да | |||||||||||
|
| Ввод A 1,4, j:= j +1, 5 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=5, 5 ≤5, да | |||||||||||
|
| Ввод A 1,5, j:= j +1, 6 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=6, 6 ≤5, нет i:= i +1, 2 к блоку 2.1 | |||||||||||
|
| i:=2, 2 ≤ 5, да | |||||||||||
2.2 | Для j от 1 до 5 | j:=1, j≤5, да | |||||||||||
|
| Ввод A 2,1, j:= j +1, 2 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:= 2, 2 ≤ 5, да | |||||||||||
|
| Ввод A 2,2, j:= j +1, 3 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=3, 3 ≤ 5, да | |||||||||||
|
| Ввод A 2,3, j:= j +1, 4 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:= 4, 4 ≤ 4, да | |||||||||||
|
| Ввод A 2,4, j:= j +1, 5 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=5, 5 ≤5, да | |||||||||||
|
| Ввод A 2,5, j:= j +1, 6 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=6, 6 ≤5, нет i:= i +1, 3 к блоку 2.1 | |||||||||||
|
| i:=3, 3 ≤ 5, да | |||||||||||
2.2 | Для j от 1 до 5 | j:=1, j≤5, да | |||||||||||
|
| Ввод A 3,1, j:= j +1, 2 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:= 2, 2 ≤ 5, да | |||||||||||
|
| Ввод A 3,2, j:= j +1, 3 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=3, 3 ≤ 5, да | |||||||||||
|
| Ввод A 3,3, j:= j +1, 4 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:= 4, 4 ≤ 4, да | |||||||||||
|
| Ввод A 3,4, j:= j +1, 5 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=5, 5 ≤5, да | |||||||||||
|
| Ввод A 3,5, j:= j +1, 6 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=6, 6 ≤5, нет i:= i +1, 4 к блоку 2.1 | |||||||||||
|
| i:=4, 4 ≤ 5, да | |||||||||||
2.2 | Для j от 1 до 5 | j:=1, j≤5, да | |||||||||||
|
| Ввод A 4,1, j:= j +1, 2 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:= 2, 2 ≤ 5, да | |||||||||||
|
| Ввод A 4,2, j:= j +1, 3 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=3, 3 ≤ 5, да | |||||||||||
|
| Ввод A 4,3, j:= j +1, 4 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:= 4, 4 ≤ 4, да | |||||||||||
|
| Ввод A 4,4, j:= j +1, 5 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=5, 5 ≤5, да | |||||||||||
|
| Ввод A 4,5, j:= j +1, 6 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=6, 6 ≤5, нет i:= i +1, 5 к блоку 2.1 | |||||||||||
|
| i:=5, 5 ≤ 5, да | |||||||||||
2.2 | Для j от 1 до 5 | j:=1, j≤5, да | |||||||||||
|
| Ввод A 5,1, j:= j +1, 2 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:= 2, 2 ≤ 5, да | |||||||||||
|
| Ввод A 5,2, j:= j +1, 3 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=3, 3 ≤ 5, да | |||||||||||
|
| Ввод A 5,3, j:= j +1, 4 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:= 4, 4 ≤ 4, да | |||||||||||
|
| Ввод A 5,4, j:= j +1, 5 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=5, 5 ≤5, да | |||||||||||
|
| Ввод A 5,5, j:= j +1, 6 к блоку 2.2 | |||||||||||
2.2 | Для j от 1 до 5 | j:=6, 6 ≤5, нет i:= i +1, 6 к блоку 2.1 | |||||||||||
2.1 | Для i от 1 до N | i:=6, 6 ≤ 5, нет, выход из ПП 2, к блоку 3 | |||||||||||
k=1 | K:=1 | ||||||||||||
Пока k=1 или k=2 | K=1или K=2? да, к блоку 5 | ||||||||||||
Ввод k | Вызов подпрограммы 7 | ||||||||||||
|
| S1:=0 | |||||||||||
7.2 | Для i от 1 до N | I:=1, i<=5, да К блоку 7.3 | |||||||||||
7.3 | Y-A13<=14? | 2016-2009<=14, да | |||||||||||
7.4 | S1=S1+1 | S1:=1 | |||||||||||
7.2 | Для i от 1 до N | i:=2, i<=5, да К блоку 7.3 | |||||||||||
7.3 | Y-A23<=14? | 2016-2011<=14, да | |||||||||||
7.4 | S1=S1+1 | S1:=2 | |||||||||||
7.2 | Для i от 1 до N | i:=3, i<=5, да К блоку 7.3 | |||||||||||
7.3 | Y-A33<=14? | 2016-2010<=14, да | |||||||||||
7.4 | S1=S1+1 | S1=3 | |||||||||||
7.2 | Для i от 1 до N | i:=4, i<=5, да К блоку 7.3 | |||||||||||
7.3 | Y-A43<=14? | 2016-2006<=14, да | |||||||||||
7.4 | S1=S1+1 | S1=4 | |||||||||||
7.2 | Для i от 1 до N | i:=5, i<=5, да К блоку 7.3 | |||||||||||
7.3 | Y-A43<=14? | 2016-2006<=14, да | |||||||||||
7.4 | S1=S1+1 | S1=5 | |||||||||||
7.2 | Для i от 1 до N | i:=6, i<=5, нет К блоку 7.5 | |||||||||||
7.5 | Вывод: «Общее количество подарков по предприятию равно», S1, «штук» | Ответ: Общее количество подарков по предприятию равно 5 штук, Выход из ПП 7 | |||||||||||
Программа алгоритма информационно-справочной системы
Текст программы на языке Pascal приведен ниже. Программа включает: главную программу и три подпрограммы, текст которых, для удобства, приведен отдельно для каждого из них. В конце данного пункта приведен листинг программы.
Главная программа
program INFORMATION_SYSTEM_OF_STUDENT;
{Информационно-справочная система}
const Y=2016;
Var
{Входные данные}
N, k, M2: integer;
A: array [1..1000, 1..5] of real;
{1000 – максимально возможное количество работников на предприятии. Принят условно.}
{Выходные данные}
S1, S2: real;
{Промежуточные переменные}
i,j:integer;
{Подпрограмма ввода двумерного массива A(1..1000,1...5)}
procedure Vvod_A();
{Первый запрос: Общее количество подарков по предпрятию}
procedure pr_5;
{Второй запрос: Общее количество подарков по подразделению}
procedure pr_6;
Begin
Vvod_A;
k:=1;
While (k=1) or (k=2) DO
Begin
writeln('Введите номер запроса');
writeln('Выход из программы- любое число, кроме 1,2');
writeln('1 – Общее количество подарков по предприятию');
writeln('2 – Общее количество подарков по подразделению');
readln(k);
Case k of
1:pr_5; {первый запрос}
2:pr_6; {второй запрос}
End;
End;
End.
Описание процедуры Vvod_A
procedure Vvod_A();
var i,j,N:integer;
Begin
write('Введите количество работников на предприятии:');
readln(N);
for i:=1 to N do
Begin
writeln('Введем данные о ', i, '-ом ребенке работника предприятия');
readln;
for j:=1 to 5 do
Begin
write(j, '-ый столбец:');
read (A[i,j]);
end;
end;
end;
Описание процедуры pr_5
procedure pr_5;
var i,j,n:integer;
Begin
S1:=0;
for i:=1 to N do
if Y-A[i,3]<=14 then S1:=S1+ 1;
writeln('Общее количество подарков по предприятию равно ', S1, ' штук');
end;
Описание процедуры pr_6
procedure pr_6;
var i:integer;
Begin
writeln('Введите номер подразделения');
readln(M2);
S2:=0;
for i:=1 to N do
Begin
if A[i,1]=M2 then
Begin
if Y-A[i,3]<=14 then S2:=S2+1;
end;
end;
if S2=0 then write('Данных по указанному условию не найдено') else writeln('Общее количество подарков по подразделению ', M2, ' равно ', S2, ' штук');
end;
Листинг всей программы
program INFORMATION_SYSTEM_OF_STUDENT;
{Информационно-справочная система}
const Y=2016;
Var
{Входные данные}
N, k, M2: integer;
A: array [1..1000, 1..5] of real;
{1000 – максимально возможное количество работников на предприятии. Принят условно.}
{Выходные данные}
S1, S2: real;
{Промежуточные переменные}
i,j:integer;
{Подпрограмма ввода двумерного массива A(1..1000,1...5)}
procedure Vvod_A();
var i,j,N:integer;
Begin
write('Введите количество работников на предприятии:');
readln(N);
for i:=1 to N do
Begin
writeln('Введем данные о ', i, '-ом ребенке работника предприятия');
readln;
for j:=1 to 5 do
Begin
write(j, '-ый столбец:');
read (A[i,j]);
end;
end;
end;
{Первый запрос: Общее количество подарков по предпрятию}
procedure pr_5;
var i,j,n:integer;
Begin
S1:=0;
for i:=1 to N do
if Y-A[i,3]<=14 then S1:=S1+ 1;
writeln('Общее количество подарков по предприятию равно ', S1, ' штук');
end;
{Второй запрос: Общее количество подарков по подразделению}
procedure pr_6;
var i:integer;
Begin
writeln('Введите номер подразделения');
readln(M2);
S2:=0;
for i:=1 to N do
Begin
if A[i,1]=M2 then
Begin
if Y-A[i,3]<=14 then S2:=S2+1;
end;
end;
if S2=0 then write('Данных по указанному условию не найдено') else writeln('Общее количество подарков по подразделению ', M2, ' равно ', S2, ' штук');
end;
{ОСНОВНАЯ ПРОГРАММА}
Begin
Vvod_A;
k:=1;
While (k=1) or (k=2) DO
Begin
writeln('Введите номер запроса');
writeln('Выход из программы- любое число, кроме 1,2');
writeln('1 – Общее количество подарков по предприятию');
writeln('2 – Общее количество подарков по подразделению');
readln(k);
Case k of
1:pr_5; {первый запрос}
2:pr_6; {второй запрос}
End;
End;
End.