- •Расчетное задание по информатике. Вариант 8.
- •1. Внешняя спецификация программы
- •2. Проект алгоритма основной программы.
- •3. Внутренняя спецификация сегментов. Внутренняя спецификация сегмента 1.
- •3.1.2 Состав данных:
- •3.2.2. Состав данных:
- •3.3.2. Состав данных
- •4.Проекты алгоритмов сегментов.
- •5. Паскаль-программы.
- •5.1.Паскаль-программа блочной структуры.
- •5.2. Паскаль-программа модульной структуры.
- •6. Отладка программ
- •6.1 Отладка программы блочной структуры
- •6.2 Отладка программы модульной структуры
- •7. Рекомендации по использованию программы.
5.2. Паскаль-программа модульной структуры.
PROGRAM TR_v8;
USES one,symmetry,zeroing,tender;
BEGIN
for I:=1 to k do
begin
for J:=1 to k do
begin
read(t1,A[I,J]);
read(t1);
end;
readln(t1);
end;
writeln(t2,' ':35,'Результаты');
if sym(A,k) then
begin
zero(A,k);
writeln(t2,' ':30,'S= ',sum(A,k));
end
else writeln(t2,' ':25, ’Матрица не симметрична’');;
close(t1);
close(t2);
end.
Unit one;
Interface
CONST k=5;
Type mas=array[1..k,1..k] of integer;
Var A:mas;
I,J:integer;
t1,t2:text;
Implementation
Begin
assign(t1,'isdan1.pas');
assign(t2,'vdan1.pas');
reset(t1);
rewrite(t2);
End.
Unit symmetry;
Interface
Uses one;
Function sym(var A:mas; N:integer):boolean;
Implementation
Function sym;
Var LG:Boolean;
Begin
FL:=True;
LG:=True;
I:=1;
While LG do
Begin
J:=I+1;
Repeat
IF A[J,I]<>A[I,J] then
Begin
FL:=False;
LG:=False;
End;
J:=J+1;
Until (J>N)OR(not LG);
I:=I+1;
IF I>(N-1) then
LG:=False;
End;
sym:=FL;
End;
end.
UNIT zeroing;
INTERFACE
USES ONE;
PROCEDURE zero(var A:mas;N:integer);
IMPLEMENTATION
PROCEDURE zero;
Begin
for I:= 1 to (N-1) do
for J:=(I+1) to N do A[I,J]:=0;
end;
END.
UNIT tender;
INTERFACE
USES ONE;
Function sum(var A:mas;N:integer):integer;
IMPLEMENTATION
Function sum;
Begin
sum:=0;
for J:=1 to (N-1) do
for I:=(1+J) to N do
sum:=sum+A[I,J];
end;
END.
Для компиляции Паскаль-программы модульной структуры использовался режим Make, поскольку этот компилятор требует минимальное время компиляции всей программы.
6. Отладка программ
6.1 Отладка программы блочной структуры
Визуальный контроль корректности программ.
1)Обращение к данным.
В описании данных основной программы переменной A был ошибочно присвоен тип
‘real’, хотя это массив двумерный целого типа. Ошибка была устранена.
В функции sum переменные I(номер строки) и J(номер столбца) были по ошибки переставлены местами.
2)Описание данных
В тексте программы было пропущено описание простой переменной LG в функции sym .
3)Планирование ввода – вывода данных
Был пропущен вывод по обр.1 в тексте основной программы. Задание и размещение значений исходных данных соответствует их описанию в программе. Была допущена орфографическая ошибка в слове «симметрична».
4)Вычисления
В функции sum был размещен знак вычитания вместо знака сложения в выражении: sum:=sum+A[I,J];.Это приводило к некорректным результатам.
5)Управление вычислениями
В процедуре sym была пропущена подготовка цикла к повторному выполнению: пропущен оператор I:=I+1. Был устранен неправильная обработка данных в функции sum, матрица обрабатывалась не по столбцам, а по строкам.
Синтаксический контроль корректности программ.
В некоторых местах были пропущены «:», «;», «‘», «.».В итоге, компилятор программы turbo pascal 7.0 не обнаружил ошибок, что говорит о достижении программы первого уровня корректности.
Семантический контроль корректности программ.
Были описаны переменные неиспользованные ни разу.
Была описана лишняя переменная целого типа S в тексте основной программы блочной структуры, поскольку без этой переменной можно обойтись непосредственным использованием функции sum при выводе.
Далее проводится тестирование на ранее подготовленных тестах. Используется метод нисходящего тестирования, поскольку метод восходящего тестирования имеет существенный недостаток – проверка программы начинается с тестирования сегментов-процедур.
С помощью «заглушек» осуществляется проверка основной программы блочной структуры.
Заглушки для теста 1.
1.Заглушка для получения значения входных данных.
Begin
A[1,1]:=1; A[1,2]:=2; A[1,3]:=3; A[1,4]:=4; A[1,5]:=5;
A[2,1]:=2; A[2,2]:=3; A[2,3]:=4; A[2,4]:=5; A[2,5]:=6;
A[3,1]:=3; A[3,2]:=4; A[3,3]:=5; A[3,4]:=6; A[3,4]:=7;
A[4,1]:=4; A[4,2]:=5 A[4,3]:=6; A[4,4]:=7; A[4,5]:=8;
A[5,1]:=5; A[5,2]:=6; A[5,3]:=7; A[5,4]:=8; A[5,5]:=9;
End.
2. Заглушка для function sym(var a:mas; N:integer):Boolean;
Begin
sym:=true;
End.
3. Заглушка для PROCEDURE zero(var A:mas; N:integer);
A[1,2]:=0; A[1,3]:=0; A[1,4]:=0; A[1,5]:=0;
A[2,3]:=0; A[2,4]:=0; A[2,5]:=0;
A[3,4]:=0; A[3,4]:=0;
A[4,5]:=0;
4. Заглушка для Function sum(A:mas; N:integer):integer;
Begin
S:=50;
End.
Заглушки для теста 2.
1.Заглушка для получения значения входных данных.
Begin
A[1,1]:=1; A[1,2]:=2; A[1,3]:=3; A[1,4]:=4; A[1,5]:=5;
A[2,1]:=2; A[2,2]:=3; A[2,3]:=4; A[2,4]:=5; A[2,5]:=6;
A[3,1]:=3; A[3,2]:=4; A[3,3]:=5; A[3,4]:=6; A[3,4]:=7;
A[4,1]:=4; A[4,2]:=5 A[4,3]:=6; A[4,4]:=7; A[4,5]:=8;
A[5,1]:=5; A[5,2]:=6; A[5,3]:=7; A[5,4]:=0; A[5,5]:=9;
End.
2. Заглушка для function sym(var a:mas; N:integer):Boolean;
Begin
sym:=false;
End.
Тестирование основной программы нисходящим методом с помощью «заглушек» прошел успешно.
Далее провел тестирование подпрограмм последовательной заменой «заглушек» на исходные тексты подпрограмм.
Чтобы проверить структуру программы и ее алгоритма проводится структурное тестирование, реализованное на методе тестовых счетчиков.
Метод тестовых счётчиков.
Создаём массив одномерный С целого типа, элементы которого будут отражать показания счётчиков. Расположение счётчиков в алгоритме показаны на страницах 5,8-10.
Значения счетчиков в результате тестирования:
Тест №1
0 10 1 3 10 10 1 0
Тест №2
1 9 1 3 0 0 0 1
1 19 2 6 10 10 1 1
Из суммарных показаний счетчиков следует, что при данном наборе тестов выполняется каждая подпрограмма, все циклы завершаются и выполняется проход по каждой ветви ветвлений и полуветвлений алгоритмов, следовательно, количество тестов в наборе подобрано верно.
