- •3.2 Сегмент 1.2.
- •4. Паскаль программа блочной структуры.
- •3.2.1Внутренняя спецификация к сегменту 1.2.
- •3.2.2 Вспомогательный алгоритм к сегменту 1.2.
- •3.3 Сегмент 1.3.
- •3.3.1Внутренняя спецификация к сегменту 1.3.
- •3.3.2 Вспомогательный алгоритм к сегменту 1.3.
- •3.4 Сегмент 1.4.
- •3.4.1Внутренняя спецификация к сегменту 1.4.
- •3.4.2 Вспомогательный алгоритм к сегменту 1.4.
- •5. Паскаль программа модульной структуры.
- •6. Отладка программ:
- •Визуальный контроль корректности программы:
- •Синтаксический контроль корректности программы:
- •Семантический контроль корректности программы
5. Паскаль программа модульной структуры.
UNIT OBIVL;
INTERFACE
TYPE MATRICA=array[1..5,1..6] of real;
MASSIV=array[1..6] of real;
VAR A,B:MATRICA;
K:MASSIV;
i,j:integer;
f1,f2:text;
IMPLEMENTATION
BEGIN
assign(f1,'isdan.pas');
assign(f2,'vdan.pas');
reset(f1);
rewrite(f2);
END.
UNIT PART1;
INTERFACE
USES OBIVL;
Procedure NEWMATR(Var A:MATRICA; Var K:MASSIV);
Function STR(Var K:integer):integer;
IMPLEMENTATION
Procedure NEWMATR;
Var i,j:integer;
Begin
For i:=1 to 5 do
begin
K[i]:=0;
For j:=1 to 6 do
begin
if A[i,j]<0 then
K[i]:=K[i]+1
end
end
End;
End;
Function STR(Var K:integer):integer;
Type MURRAY=array[1..10922] of integer;
Var i,imax,n:integer;
Begin
n:=MURRAY(K)[1];
imax:=1;
For i:=1 to 5 do
If MURRAY(K)[i]>=n Then
begin
n:=MURRAY(K)[i];
imax:=i
end;
STR:=imax
End;
END.
UNIT PART2;
INTERFACE
USES OBIVL;
Function SRED(Var A:MATRICA):real;
Procedure NEWMATR(Var A:MATRICA;Var B:MATRICA);
IMPLEMENTATION
Function SRED;
Var i,j:integer;
SR,S:real;
Begin
S:=0;
For i:=1 to 5 do
For j:=1 to 6 do
S:=S+A[i,j];
SR:=S/30;
SRED:=SR
End;
Procedure NEWMATR;
Var i,j:integer;
Begin
For i:=1 to 5 do
begin
For j:=1 to 6 do
begin
If A[i,j]<0 then
B[i,j]:=abs(A[i,j])
Else
B[i,j]:=A[i,j]
end
end
End;
Program tipovik_v2_mod;
USES OBIVL,PART1,PART2;
Begin
For i:=1 to 5 do
begin
For j:=1 to 6 do
Read(f1,A[i,j]);
Readln(f1)
end;
Writeln(f2,' ':35,'Результаты');
Writeln(f2);
MASK(A,K);
If STR(K,6)=1 Then
begin
NEWMATR(A,B);
Writeln(f2,' ':20,'SR1=',SR1:6:1,' ':15,'SR2=',SR2:6:1);
end
else
Write(f2,’Наибольшее кол-во эл-тов не в первой строке');
close(f1);
close(f2)
End.
6. Отладка программ:
Отладка программы блочной структуры:
Сначала, я внимательно просмотрел текст программы. В результате были обнаружены следующие ошибки. Отсутствие:
в нужных местах «;»,
служебных слов «Begin» и «End» при кодировании ветвления с двумя операторами на одной ветви
ветви ELSE в одном из ветвлений
описания нестандартных текстовых файлов f1 и f2 в разделе описания переменных.
Далее мной была проведена компиляция программы с использованием компилятора, которая прошла успешно.
Таким образом, мной был достигнут 1-ый уровень корректности программы.
Затем я протестировал программу на подготовленном мной наборе тестовых значений и приступил к проверке программы методом нисходящего тестирования, который начинается с проверки основной программы, а вызываемые из нее подпрограммы я заменил «заглушками»:
Тест №1:
PROGRAM tipovik_v2;
TYPE MATRICA=array[1..5,1..6] of real;
MASSIV=array[1..6] of real;
VAR A,B:MATRICA;
K:MASSIV;
i,j:integer;
f1,f2:text;
Procedure MASK(Var A:MATRICA; Var K:MASSIV);
Begin
K[1]:=4; K[2]:=2; K[3]:=0; K[4]:=1; K[5]:=1
End;
Function STR(Var K:integer):integer;
Var i,imax,n:integer;
Begin
imax:=1;
STR:=imax
End;
Function SRED(Var A:MATRICA):real;
SR,S:real;
Begin
SR:=0.53;
SRED:=SR
End;
Procedure NEWMATR(Var A:MATRICA;Var B:MATRICA);
Begin
B[1,1]:=1; B[1,2]:=1; B[1,3]:=2; B[1,4]:=0; B[1,5]:=3; B[1,6]:=4;
B[2,1]:=1; B[2,2]:=0; B[2,3]:=0; B[2,4]:=2; B[2,5]:=2; B[2,6]:=0;
B[3,1]:=1; B[3,2]:=1; B[3,3]:=1; B[3,4]:=1; B[3,5]:=1; B[3,6]:=1;
B[4,1]:=1; B[4,2]:=2; B[4,3]:=5; B[4,4]:=1; B[4,5]:=4; B[4,6]:=3;
B[5,1]:=2; B[5,2]:=0; B[5,3]:=1; B[5,4]:=1; B[5,5]:=4; B[5,6]:=5;
End;
BEGIN
assign(f1,'isdan.pas');
assign(f2,'vdan.pas');
reset(f1);
rewrite(f2);
For i:=1 to 5 do
begin
For j:=1 to 6 do
Read(f1,A[i,j]);
Readln(f1)
end;
Writeln(f2,' ':35,'РЕЗУЛЬТАТЫ');
Writeln(f2);
MASK(A,K);
If STR(K,5)=1 Then
begin
NEWMAS(A,B);
Writeln(f2,' ':20,'SR1=',SR1:6:1,' ':15,'SR2=',SR2:6:1);
end
else Write(f2,’наибольшее кол-во эл-тов не в первой строке');
close(f1);
close(f2)
END.
Тест №2:
PROGRAM tipovik_v2;
TYPE MATRICA=array[1..5,1..6] of real;
MASSIV=array[1..6] of real;
VAR A,B:MATRICA;
K:MASSIV;
i,j:integer;
f1,f2:text;
Procedure MASK(Var A:MATRICA; Var K:MASSIV);
Begin
K[1]:=1; K[2]:=4; K[3]:=0; K[4]:=0; K[5]:=0
End;
Function STR(Var K:integer):integer;
Var i,imax,n:integer;
Begin
imax:=2;
STR:=imax
End;
Function SRED(Var A:MATRICA):real;
SR,S:real;
Begin
SR:=-0.23;
SRED:=SR
End;
Procedure NEWMATR(Var A:MATRICA;Var B:MATRICA);
Begin
B[1,1]:=1; B[1,2]:=1; B[1,3]:=1; B[1,4]:=1; B[1,5]:=0; B[1,6]:=0;
B[2,1]:=2; B[2,2]:=2; B[2,3]:=1; B[2,4]:=3; B[2,5]:=4; B[2,6]:=5;
B[3,1]:=0; B[3,2]:=0; B[3,3]:=0; B[3,4]:=0; B[3,5]:=0; B[3,6]:=0;
B[4,1]:=0; B[4,2]:=0; B[4,3]:=0; B[4,4]:=0; B[4,5]:=0; B[4,6]:=0;
B[5,1]:=0; B[5,2]:=0; B[5,3]:=0; B[5,4]:=0; B[5,5]:=0; B[5,6]:=0;
End;
BEGIN
assign(f1,'isdan.pas');
assign(f2,'vdan.pas');
reset(f1);
rewrite(f2);
For i:=1 to 5 do
begin
For j:=1 to 6 do
Read(f1,A[i,j]);
Readln(f1)
end;
Writeln(f2,' ':35,'результаты');
Writeln(f2);
MASK(A,K);
If STR(K,5)=1 Then
begin
NEWMAS(A,B);
Writeln(f2,' ':20,'SR1=',SR1:6:1,' ':15,'SR1=',SR1:6:1);
end
else Write(f2,’наибольшее кол-во эл-тов не в первой строке');
close(f1);
close(f2)
END.
Тестирование главной программы прошло успешно. Далее было проведено тестирование сегментов-процедур (заглушки я заменял текстами соответствующих подпрограмм, пока не были устранены все заглушки).
Результаты полученные в программе на том же наборе тестов не отличаются от результатов которые я посчитал - следовательно все подпрограммы работают корректно.
Я использовал метод структурного тестирования, чтобы убедиться что при данном наборе тестовых данных в тестируемой программе выполняется любой оператор, и при разных тестовых данных проходит все ветвления. Для этого я реализовал метод тестовых счетчиков. Я поместил счетчики на каждую ветвь ветвления, в начало и конец алгоритма.
PROGRAM tipovik_v2;
TYPE MATRICA=array[1..5,1..6] of real;
MASSIV=array[1..6] of real;
VAR A,B:MATRICA;
K:MASSIV;
i,j,sch1,sch2,sch3:integer;
f1,f2:text;
Procedure MASK(Var A:MATRICA; Var K:MASSIV);
Var i,j:integer;
Begin
For i:=1 to 5 do
begin
K[i]:=0;
For j:=1 to 6 do
begin
if A[i,j]<0 then
K[i]:=K[i]+1
end
end
End;
Function STR(Var K:integer):integer;
Type MURRAY=array[1..10922] of integer;
Var i,imax,n:integer;
Begin
n:=MURRAY(K)[1];
imax:=1;
For i:=1 to 5 do
If MURRAY(K)[i]>=n Then
begin
n:=MURRAY(K)[i];
imax:=i;
end;
STR:=imax
End;
Function SRED(Var A:MATRICA):real;
Var i,j:integer;
SR,S:real;
Begin
S:=0;
For i:=1 to 5 do
For j:=1 to 6 do
S:=S+A[i,j];
SR:=S/30;
SRED:=SR
End;
Procedure NEWMATR(Var A:MATRICA;Var B:MATRICA);
Var i,j:integer;
Begin
For i:=1 to 5 do
begin
For j:=1 to 6 do
begin
If A[i,j]<0 then
B[i,j]:=abs(A[i,j])
Else
B[i,j]:=A[i,j]
end
end
End;
BEGIN
sch1:=0;
sch2:=0;
sch3:=0;
assign(f1,'isdan.pas');
assign(f2,'vdan.pas');
reset(f1);
rewrite(f2);
For i:=1 to 5 do
begin
For j:=1 to 6 do
Read(f1,A[i,j]);
Readln(f1)
end;
Writeln(f2,' ':35,'Результаты');
Writeln(f2);
MASK(A,K);
If STR(K,5)=1 Then
begin
sch1:=sch1+1;
NEWMAS(A,B);
Writeln(f2,' ':20,'SR1=',SR1:6:1,' ':15,'SR2=',SR2:6:1);
end
else
begin
sch2:=sch2+1;
Write(f2, ‘Наибольшее кол-во эл-тов не в первой строке');
end;
sch3:= sch3+3;
writeln(f2);
write(f2,sch1,’ ’,sch2,’ ’,sch3);
close(f1);
close(f2)
END.
Значения счетчиков, полученных при тестировании:
1) 1 0 1
2) 0 1 1
Складываем:
1 1 2
Я узнал значение счетчиков при данном наборе тестов.
Очевидно, что все счетчики изменили свои значения, каждая ветвь ветвления и каждый оператор пройдены.
Достигнут 3-ий уровень корректности программы.
Отладка программы модульной структуры:
Как и в отладке программы блочной структуры я начал с визуального контроля, но большая часть ошибок уже была мной исправлена. Я заметил, что перепутал местами служебные слова INTERFACE и IMPLEMENTATION, тем самым допустив синтаксическую ошибку.
Далее я осуществил синтаксический контроль программы, используя тип компиляции make. Компиляция прошла с ошибкой. я забыл исправить синтаксические ошибки, которые по моей невнимательности перешли из блочной структуры в модульную.
Проведя метод нисходящего тестирования, я провел тестирование на наборе подготовленных мною тестов. Для отладки программы модульной структуры был использован тот же набор тестов, что и для программы блочной структуры.
Компиляция прошла успешно – ошибок не выявлено, следовательно, мной достигнут первый уровень корректности программы.
Мною была проверена основная программа, а подпрограммы заменены «заглушками»:
Проверка основной программы:
UNIT OBIVL;
INTERFACE
TYPE MATRICA=array[1..5,1..6] of real;
MASSIV=array[1..6] of real;
VAR A,B:MATRICA;
K:MASSIV;
i,j:integer;
f1,f2:text;
IMPLEMENTATION
BEGIN
assign(f1,’isdan.pas');
assign(f2,'vdan.pas');
reset(f1);
rewrite(f2);
END.
UNIT PART1;
INTERFACE
USES OBIVL;
Procedure NEWMATR(Var A:MATRICA; Var K:MASSIV);
Function STR(Var K:integer):integer;
IMPLEMENTATION
Procedure NEWMATR;
Begin
K[1]:=1; K[2]:=4; K[3]:=0; K[4]:=0; K[5]:=0
End;
Function STR(Var K:integer):integer;
Begin
imax:=1;
STR:=imax
End
END;
Program tipovik_v2_mod;
USES OBIVL,PART1,PART2;
Begin
For i:=1 to 5 do
begin
For j:=1 to 6 do
Read(f1,A[i,j]);
Readln(f1)
end;
Writeln(f2,' ':35,'Результаты');
Writeln(f2);
MASK(A,K);
If STR(K,6)=1 Then
begin
NEWMATR(A,B);
Writeln(f2,' ':20,'SR1=',SR1:6:1,' ':15,'SR2=',SR2:6:1);
end
else
Write(f2,'Наибольшее кол-во эл-тов не в первой строке');
close(f1);
close(f2)
End.
Тестирование главной программы прошло успешно. Далее было проведено тестирование сегментов-процедур (заглушки я заменял текстами соответствующих подпрограмм, пока не были устранены все заглушки).
Результаты полученные в программе на том же наборе тестов не отличаются от результатов которые я посчитал - следовательно все подпрограммы работают корректно.
Я использовал метод структурного тестирования, чтобы убедиться что при данном наборе тестовых данных в тестируемой программе выполняется любой оператор, и при разных тестовых данных проходит все ветвления. Для этого я реализовал метод тестовых счетчиков. Я поместил счетчики на каждую ветвь ветвления, в начало и конец алгоритма.
Program tipovik_v2_mod;
USES OBIVL,PART1,PART2;
VAR sch1,sch2,sch3:integer;
BEGIN
sch1:=0;
sch2:=0;
sch3:=0;
assign(f1,'isdan.pas');
assign(f2,'vdan.pas');
reset(f1);
rewrite(f2);
For i:=1 to 5 do
begin
For j:=1 to 6 do
Read(f1,A[i,j]);
Readln(f1)
end;
Writeln(f2,' ':35,'Результаты');
Writeln(f2);
MASK(A,K);
If STR(K,6)=1 Then
Begin
sch1:= sch1+1;
NEWMATR(A,B);
Writeln(f2,' ':20,'SR1=',SR1:6:1,' ':15,'SR2=',SR2:6:1);
end
else
begin
sch2:= sch2+1;
Write(f2,‘Наибольшее кол-во эл-тов не в первой строке')
end;
sch3:= sch3+3;
writeln(f2);
write(f2,sch1,’ ’,sch2,’ ’,sch3);
close(f1);
close(f2)
End.
Значения счетчиков, полученных при тестировании:
1) 1 0 1
2) 0 1 1
Складываем:
1 1 2
Я узнал значение счетчиков при данном наборе тестов.
Очевидно, что все счетчики изменили свои значения, каждая ветвь ветвления и каждый оператор пройдены.
Достигнут 3-ий уровень корректности программы.
