Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Паскаль программа модульной структуры.

Поиск

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. Отладка программ:

 

Отладка программы блочной структуры:

 

Сначала, я внимательно просмотрел текст программы. В результате были обнаружены следующие ошибки. Отсутствие:

v в нужных местах «;»,

v служебных слов «Begin» и  «End» при кодировании ветвления с двумя операторами на одной ветви

v ветви ELSE в одном из ветвлений

v описания нестандартных текстовых файлов 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

 

Я узнал значение счетчиков при данном наборе тестов.

Очевидно, что все счетчики изменили свои значения, каждая ветвь ветвления и каждый оператор пройдены.

 



Поделиться:


Последнее изменение этой страницы: 2020-03-02; просмотров: 152; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.216.248 (0.008 с.)