Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Krutikov06,06,2013.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
58.21 Кб
Скачать

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

Из суммарных показаний счетчиков следует, что при данном наборе тестов выполняется каждая подпрограмма, все циклы завершаются и выполняется проход по каждой ветви ветвлений и полуветвлений алгоритмов, следовательно, количество тестов в наборе подобрано верно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]