Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Arkhipov.docx
Скачиваний:
26
Добавлен:
31.03.2015
Размер:
68.91 Кб
Скачать

2). Состав данных.

Тип

имя

Смысл

структура

Задаваемые данные

Цел.

X

массив из колвава неотрицательных элементов в столбцах

Массив одномерный n элем.

Цел.

n

Количество элементов в матрице {X}

Простая переменная

Передаваемые данные

Цел.

MIN

Минимальный элемент массива

Простая переменная

Промежуточные данные

Цел.

I

Номер элемента {X}

Простая переменная

Процедура MINIM(X,n, MIN )

Вход. Дан. Выход.Дан

3).

4). Внутренних аномалий нет.

II. Вспомогательный алгоритм 3.

1

2

Начало

Задать: {X},n

MIN:=X(1)

I:=2

MIN:=X(I)

I:=I+1

3

4

X(i)<MIN

ДА 5 НЕТ

6

7

I>n

НЕТ 8

ДА

Передать: MIN

Конец

9

10

III. Паскаль – программа.

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

PROGRAM TRV9B;

type odn=array[1..100]of integer;

dvum=array[1..50,1..50] of real;

var a:dvum; b:dvum; kp:odn; t,i,j,m,n:integer;

f1,f2:text;

FUNCTION MINIM(var x; n:integer ):integer;

type mas=array[1..10922] of integer;

var min,i:integer;

Begin

min:=Mas(x)[1];

for i:=1 to n do

if (mas(x)[i] < min) then

min:= mas(x)[i];

minim:=min;

end;

PROCEDURE IZM(var t;m,n:integer;var Y);

type mat=array[1..50,1..50] of real;

var i,j,p,o:integer;

Begin

for j:=1 to n do

begin

o:=0;

p:=1;

for i:=1 to m do

if mat(t)[i,j]>0 then

begin

mat(y)[p,j]:=mat(x)[i,j];

p:=p+1

end

else

begin

mat(y)[m-o,j]:=mat(x)[i,j];

o:=o+1;

end;

end;

End;

PROCEDURE POL(var x,y;m,n:integer;);

type mas=array[1..10922] of integer; mat=array[1..50,1..50] of real;

var i,j,sh:integer;

Begin

for j:=1 to n do

begin

sh:=0;

for i:=1 to m do

if mat(x)[i,j]>0 then

sh:=sh+1;

mas(y)[j]:=sh;

end;

end;

BEGIN

assign(f1,'yltris1.pas');

assign(f2,'yltrvd1.pas');

reset (f1);

rewrite(f2);

writeln(f2,' ':35,'РЕЗУЛЬТАТЫ');

read(f1,m);

read(f1,n);

readln(f1);

for i:=1 to m do

begin

for j:=1 to n do

read(f1,a[i,j]);

readln(f1);

end;

izm(a,m,n,b);

pol(b,m,n,kp);

t:=minim(kp,n);

If t=0 then

write(f2,'Нет строк, не имеющих отрицательных элементов')

else

for i:=1 to t do

begin

for j:=1 to n do

write(f2,b[i,j]:3:2,' ');

writeln(f2);

end;

close(f1);

close(f2);

END.

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

UNIT DAN;

INTERFACE

TYPE ma=array[1..5,1..5]of real;

mas=array[1..5] of real;

VAR a:ma;

z:mas;

y,i,j,k:integer;

f1,f2:text;

w,w1,w2:real;

IMPLEMENTATION

BEGIN

assign(f1,'is.pas');

assign(f2,'v.pas');

reset(f1);

rewrite(f2);

writeln(f2,' ':35,'РЕЗУЛЬТАТЫ');

for i:=1 to 5 do

begin

for j:=1 to 5 do

read(f1,a[i,j]);

readln(f1);

end;

END.

UNIT unit2;

INTERFACE

USES DAN;

FUNCTION srarifm(var a:mа):real;

IMPLEMENTATION

FUNCTION srarifm;

Begin

W1:=0;

for i:=1 to 5 do

begin

for j:=1 to 5 do

w1:=w1+a[i,j];

end;

w1:=w1/25;

end;

END.

UNIT unit3;

INTERFACE

USES vvod;

PROCEDURE kol(var a:ma; var z; VAR P);

TYPE mas=array[1..10922] of real;

IMPLEMENTATION

Procedure kol;

Var y:integer;

Begin

P :=0;

for j:=1 to 5 do

begin

Y:=0;

for i:=1 to 5 do

if a[i,j]<0 then

begin

P: =P+1;

Y: =Y+1;

end;

mas(z)[j]:=Y;

end;

end;

END.

UNIT unit4;

INTERFACE

USES vvod;

FUNCTION maxotr(var Z):integer;

TYPE ma=array[1..10922] of real;

IMPLEMENTATION

Function maxotr;

Begin

max:=MAS(z)[1];

k:=0;

for j:=2 to m do

if maS(z)[j]>max then

begin

max:=MAS(z)[j];

k:=j;

end;

maxotr:=k;

end;

END.

UNIT unit5;

INTERFACE

USES VVOD, UNIT4;

PROCEDURE IZM(var a:matr; k:integer);

IMLEMENTATION

Procedure IZM;

Begin

for i:=1 to 5 do

begin

for j:=(1+k) to 5 do

if a[i,j]<0 then

a[i,j]:=ABS(a[i,j]);

end;

end;

End.

PROGRAM TR_v_19_M;

USES VVOD, unit2, unit3, unit4, unit5;

BEGIN

SRARIFM(a,W1);

KOL(A,Z);

If P=0 then

Writeln(f2,’ ‘:25 ‘отрицательных элементов нет’)

else

begin

k : =maxotr(z);

IZM(a,k);

SRARIFM(a,W2);

W:=W2-W1;

if W=0 then

begin

if K=5 then

writeln(f2,’ ‘:10 ‘столбец с макс. кол-вом отриц. эл-ов находится последним’)

else

writeln(f2,’ ‘:10 ‘после столбца с макс. кол-вом отриц. эл-ов нет отриц. эл-ов ‘);

end;

end;

writeln(f2,' ':15, ’среднее арифметическое изменилось на величину =’ s:0:5);

close(f1);

close(f2);

END.

4. Отладка программ.

4.1. Отладка Паскаль – программы блочной структуры.

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

  1. В некоторых местах пропущены символы «;», «=»,«:»;

  2. Во время набора программы пропущены некоторые строчки

  3. Лишняя пара begin и end;

С помощью компиляции (использовался режим Compile и make) мною был проведен синтаксический контроль корректности программы. Компилятор ошибок не выдал, что и позволяет говорить о 1-ом уровне корректности программы.

Затем было проведено тестирование на тестах, подготовленных заранее. На положительные и отрицательные результаты

Далее я воспользовался комбинированным методом тестирования, при котором были созданы “заглушки”, и “счётчики” которые описаны далее.

Проверка основной программы.

Оставшиеся подпрограммы я заменил заглушками.

Текст программы для первого набора исходных данных:

PROGRAM TR_v_19;

TYPE ma=array[1..5,1..5] of real;

mas=array[1..5] of real;

VAR a:ma;

z:mas;

p,i,j,k:integer;

f1,f2:text;

w,w1,w2:real;

PROCEDURE srarifm(var a:ma; var w:real);

Begin

w:=0;

for i:=1 to 5 do

begin

for j:=1 to 5 do

w1:=w1+a[i,j];

end;

w1:=w1/25;

end;

PROCEDURE KOL(var a:ma; var z);

……………

Begin

z[1]:=0;

z[2]:=3;

z[3]:=1;

z[4]:=0;

z[5]:=0;

end;

FUNCTION maxotr(var z):integer;

Type mas=array[1..10922] of real;

…………….

Begin

k:=2;

maxotr:=k;

end;

PROCEDURE IZM(var a:ma; k:integer);

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]:=-1; A[3,3]:=5; A[3,4]:=2; A[3,5]:=1; A[4,1]:=4; A[4,2]:=-1; A[4,3]:=-1; A[4,4]:=1; A[4,5]:=1; A[5,1]:=5; A[5,2]:=-1; A[5,3]:=6; A[5,4]:=1; A[5,5]:=2;

end;

Главная программа(сокращена)

BEGIN

…….

END.

Тестирование основной программы дало положительные результаты.

Так же корректные результаты были получены и для остальных исходных данных.

Далее я провел тестирование сегментов программы. Каждая «заглушка» по очереди была заменена на реальный код программы.

Тестирование всех сегментов программы, для которых были составлены “заглушки”, прошло успешно, а из этого следует, что все процедуры и функция работают корректно.

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

Текст программы с счетчиками (сокращ.):

PROGRAM TR_v_19;

TYPE ma=array[1..5,1..5] of real;

mas=array[1..5] of real;

VAR a:ma;

z:mas;

c1,c2,c3,c4,c5,с6.p,i,j,k:integer;

f1,f2:text;

W,W1,W2:real;

…..

BEGIN

c1:=0;

c2:=0;

c3:=0;

c4:=0;

c5:=0;

c6:=0;

assign(f1,'is.pas');

assign(f2,'vd.pas');

reset(f1);

rewrite(f2);

writeln(f2,' ':35,'РЕЗУЛЬТАТЫ');

for i:=1 to 5 do

begin

for j:=1 to 5 do

read(f1,a[i,j]);

readln(f1);

end;

SRARIFM(a,W1);

KOL(A,Z);

If P=0 then

Begin

C1:=c1+1;

Writeln(f2,’ ‘:25, ‘отрицательных элементов нет’);

End

else

begin

c2:=c2+1;

k : =maxotr(z);

IZM(a,k);

SRARIFM(a,W2);

W:=W2-W1;

if W=0 then

begin

if K=5 then

begin

c3:=c3+1;

writeln(f2,’ ‘:10, ‘столбец с макс. кол-вом отриц. эл-ов находится последним’);

end

else

begin

c4:=c4+1;

writeln(f2,’ ‘:10, ‘после столбца с макс. кол-вом отриц. эл-ов нет отриц. эл-ов ‘);

end;

end

else

begin

c5:=c5+1;

writeln(f2,' ':15, ’среднее арифметическое изменилось на величину =’ W:0:5);

end;

end;

c6:=c6+1;

writeln(f2, ‘c1,’ ‘,c2,’ ‘,c3,’ ’,c4,’ ‘,c5,’ ’,c6);

close(f1);

close(f2);

END.

Показания счётчиков

c1

c2

c3

c4

c5

c6

0

1

0

0

1

1

1

0

0

0

0

1

0

1

0

1

0

1

0

1

1

0

0

1

Суммарное показание счётчиков

1

3

1

1

1

4

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

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

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

Сначала мной был проведен визуальный контроль корректности программы, хотя большая часть ошибок была исправлена в ходе отладки программы блочной структуры, совсем без ошибок не обошлось:

2. В разделе USES забыл описать используемый модуль.

3.Мною было пропущено служебное слово IMPLEMENTATION в одном из модулей.

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

С помощью компиляции (использовался режим Compile и make) мною был проведен синтаксический контроль корректности программы. Компилятор ошибок не выдал, что и позволяет нам говорить о 1-ом уровне корректности программы.

Я провел тестирование на ранее подготовленных тестах на положительные и отрицательные значения, которые описаны ранее.

Далее я воспользовалась комбинированным методом тестирования, при котором были созданы “заглушки” и “счётчики”, которые описаны далее.

В модуле VVOD нет ни процедур, ни функций, так что “заглушками” там заменять нечего.

Проверка основной программы.

Оставшиеся подпрограммы я заменила заглушками.

Текст программы для первого набора исходных данных:

UNIT proc;

INTERFACE

USES vvod;

PROCEDURE srarifm(var a:ma; var W:real);

IMPLEMENTATION

PROCEDURE srarifm;

Begin

W1:=0;

for i:=1 to 5 do

begin

for j:=1 to 5 do

w1:=w1+a[i,j];

end;

w1:=w1/25;

end;

END.

UNIT proc_1;

INTERFACE

USES vvod;

PROCEDURE KOL(var a:ma; var z);

TYPE ma=array[1..10922] of real;

IMPLEMENTATION

Procedure KOL;

z[1]:=0;

z[2]:=3;

z[3]:=1;

z[4]:=0;

z[5]:=0;

END.

UNIT unit2;

INTERFACE

USES vvod;

FUNCTION maxotr(var Z):integer;

TYPE ma=array[1..10922] of real;

IMPLEMENTATION

Function maxotr;

Begin

k:=2;

maxotr:=k;

end;

END.

UNIT unit4;

INTERFACE

USES vvod, unit2;

PROCEDURE izm(var a:ma; k:integer);

IMLEMENTATION

Procedure izm;

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]:=-1; A[3,3]:=5; A[3,4]:=2; A[3,5]:=1; A[4,1]:=4; A[4,2]:=-1; A[4,3]:=-1; A[4,4]:=1; A[4,5]:=1; A[5,1]:=5; A[5,2]:=-1; A[5,3]:=6; A[5,4]:=1; A[5,5]:=2;

end;

END.

PROGRAM TR_v_19_M;

USES VVOD, unit2, unit3, unit4, unit5;

BEGIN

…..

END.

Тестирование основной программы на первом тесте дало ожидаемые результаты.

Так же корректные результаты были получены и для остальных исходных данных.

Тестирование всех сегментов программы, для которых были составлены “заглушки”, прошло успешно, а из этого следует, что все процедуры и функция работают корректно.

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

Текст программы с счетчиками (текст программы сокращен):

UNIT vvod;

INTERFACE

TYPE ma=array[1..5,1..5]of real;

mas=array[1..5] of real;

VAR a:ma;

z:mas;

p,i,j,k c1,c2,c3,c4,c5,с6:integer;

f1,f2:text;

w,w1,w2:real;

IMPLEMENTATION

BEGIN

assign(f1,'is.pas');

assign(f2,'vd.pas');

reset(f1);

rewrite(f2);

writeln(f2,' ':35,'РЕЗУЛЬТАТЫ');

for i:=1 to 5 do

begin

for j:=1 to 5 do

read(f1,a[i,j]);

readln(f1);

end;

END.

………

PROGRAM TR_v_19_M;

USES vvod, unit2, unit3, unit4, unit5;

BEGIN

c1:=0;

c2:=0;

c3:=0;

c4:=0;

c5:=0;

c6:=0;

SRARIFM(a,w1);

KOL(A,Z);

If P=0 then

Begin

C1:=c1+1;

Writeln(f2,’ ‘:25, ‘отрицательных элементов нет’);

End

else

begin

c2:=c2+1;

k : =maxotr(z);

izm(a,k);

SRARIFM(a,w2);

w:=w2-w1;

if w=0 then

begin

if K=5 then

begin

c3:=c3+1;

writeln(f2,’ ‘:10, ‘столбец с макс. кол-вом отриц. эл-ов находится последним’);

end

else

begin

c4:=c4+1;

writeln(f2,’ ‘:10, ‘после столбца с макс. кол-вом отриц. эл-ов нет отриц. эл-ов ‘);

end;

end

else

begin

c5:=c5+1;

writeln(f2,' ':15, ’среднее арифметическое изменилось на величину =’ w:0:5);

end;

end;

c6:=c6+1;

writeln(f2, c1,’ ‘,c2,’ ‘,c3,’ ’,c4,’ ‘,c5,’ ’,c6);

close(f1);

close(f2);

END.

Показания счётчиков

c1

c2

c3

c4

c5

c6

0

1

0

0

1

1

1

0

0

0

0

1

0

1

0

1

0

1

0

1

1

0

0

1

Суммарное показание счётчиков

1

3

1

1

1

4

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

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

5. Заключение.

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

23

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