Главная страница

тупой архип. Задача 3 Вариант 21 Группа тф1018. Студент Рогожникова О. Е


Скачать 206.5 Kb.
НазваниеЗадача 3 Вариант 21 Группа тф1018. Студент Рогожникова О. Е
Дата16.06.2019
Размер206.5 Kb.
Формат файлаdoc
Имя файлатупой архип.doc
ТипЗадача
#81833


МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ

(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

Типовое задание по информатике

(задача 4.3.3)
Вариант 21

Группа: ТФ-10-18.

Студент: Рогожникова О.Е.

Преподаватель: Архипов О.Г.

МОСКВА (2019)

Оглавление


Оглавление 2

1. Внешняя спецификация. 3

2. Основной алгоритм 5

3. Сегменты. 6

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

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

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

7. Рекомендации по использованию программ 17



Задача

1. Внешняя спецификация.

1.1 Условие


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

1.2 Состав данных


Тип

Имя

Смысл

Структура

Диап.

Точн.

Поле

Исходные данные

Вещ.

M

Заданная матрица

Массив, двумерный,

5 строк,

6 столбцов

|M(I,J)| ≤100.0

0.01

6(2 на др.ч.)

Выходные данные

Цел.

JM

Номер столбца с упорядоченными значениями

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

1≤JM≤6

-

1

Вещ.

M

Изменённая матрица

Массив, двумерный,

5 строк,

6 столбцов

|A(I,J)| ≤100.0

-

1

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

-



1.3 Форма ввода














1.4 Форма вывода



О


бр. 1 25_ РЕЗУЛЬТАТЫ

Обр. 2 30_ 'JM= '

Обр. 3





1.5/6 Метод решения задачи


  • Определить номер столбца двумерного массива, в котором все элементы расположены в порядке возрастания.

  • Сформировать двумерный массив из с изменённым порядком следования столбцов на противоположный.

1.7 Аномалии


Вычислительных аномалий нет. Аномалии, связанные с вводом и выводом данных не анализируются.

1.8 Тесты




Назначение

Контрольные значения исходных данных

Контрольные значения выходных данных

1

Результат решения задачи №1



1.0 3.2 5.3 6.1 1.2 7.4

2.0 6.8 5.9 2.7 2.1 8.3

{M}= 3.5 7.2 1.4 2.8 3.3 6.6

2.9 0.3 7.8 2.2 4.9 2.9

5.0 9.6 3.5 7.4 5.2 1.9

Результаты
JM=5


2

Результат решения задачи №2



1.0 3.2 5.3 6.1 1.2 7.4

2.0 6.8 5.9 2.7 2.1 8.3

{M}= 3.5 7.2 1.4 2.8 3.3 6.6

2.9 0.3 7.8 2.2 4.9 2.9

5.0 9.6 3.5 7.4 1.2 1.9


Результаты

7.4 1.2 6.1 5.3 3.2 1.0

8.3 2.1 2.7 5.9 6.8 2.0

{M}= 6.6 3.3 2.8 1.4 7.2 3.5

2.9 4.9 2.2 7.8 0.3 2.9

1.9 1.2 7.4 3.5 9.6 5.0



2. Основной алгоритм

















Да Нет









3. Сегменты.

3.1 Сегмент 1.1

3.1.1 Внутренняя спецификация к сегменту 1.1.


1.Подзадача.

Определить номер столбца исходной матрицы {B}, в котором все элементы расположены в порядке возрастания.
2. Состав данных.


Тип

Имя

Смысл

Структура

Входные данные

Вещ.

B

Заданная матрица

Массив, двумерный, 5строк, 6 столбцов




Выходные данные

Цел.

k

Номер упорядоченного столбца

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

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

Цел.

I

Номер строки

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

Цел.

J

Номер столбца

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

Цел

f

Счётчик наличия упорядоченного столбца

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



3.1.2 Вспомогательный алгоритм к сегменту 1.1.











































Да Нет





















Нет


































3.2 Сегмент 2.

3.2.1 Внутренняя спецификация к сегменту 2.


1. Подзадача.

Сформировать двумерный массив, с изменённым порядком следования столбцов на противоположный.

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


Тип

Имя

Смысл

Структура

Входные данные

Вещ.

A

Заданная матрица

Массив, двумерный, 5 строк, 6 столбцов

Выходные данные

Вещ.

A

“Отзеркаленная” матрица

Массив, двумерный, 5 строк, 6 столбцов

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

Цел.

I

Номер строки

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

Цел.

J

Номер столбца

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

Вещ.

buf

Буфер для формирования матрицы

Массив, одномерный, 6 элементов

3
.2.2 Вспомогательный алгоритм к сегменту 2.

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


Program TIPOVIK;

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

VAR I,J,JM:integer;

M:matr;

fp1,fp2:text;

FUNCTION VOZR (A:matr):integer;

Var I,J,k,f:integer;

Begin

k:=0;

FOR J:=1 TO 6 DO

begin

f:=0;

I:=1;

REPEAT

IF A[I,J]>A[I+1,J] THEN

f:=f+1;

I:=I+1;

UNTIL (I>4) OR (f>0);

IF f=0 THEN

k:=J;

end;

VOZR:=k;

End;

PROCEDURE ZAM (A:matr);

Var I,J:integer;

buf:array [1..6] of real;

Begin

J:=1;

WHILE J<=(7-J) DO

begin

FOR I:=1 TO 5 DO

buf[I]:=A[I,J];

FOR I:=1 TO 5 DO

A[I,J]:=A[I,7-J];

FOR I:=1 TO 5 DO

A[I,7-J]:=buf[I];

J:=J+1;

end;

FOR I:=1 TO 5 DO

begin

FOR J:= 1 TO 6 DO

write(fp2,A[I,J]:6:2);

writeln(fp2);

end;

End;

BEGIN

ASSIGN (fp1,'isdan1.pas');

ASSIGN (fp2,'vdan1.pas');

RESET(fp1);

REWRITE(fp2);

writeln(fp2,' ':25,'Results');

FOR I:=1 TO 5 DO

FOR J:=1 TO 6 DO

read(fp1,M[I,J]);

JM:=VOZR (M);

if JM=0 then

ZAM(M)

else

writeln (fp2,' ':30,'JM = ',JM);

CLOSE(fp1);

CLOSE(fp2);

END.

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



UNIT OBIVL;

INTERFACE

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

VAR I,J,JM:integer;

M:matr;

fp1,fp2:text;

IMPLEMENTATION

BEGIN

ASSIGN(fp1,'isdan1.pas');

ASSIGN(fp2,'vdan1.pas');

RESET(fp1);

REWRITE(fp2);

END.

UNIT FIRST;

INTERFACE

USES OBIVL;

FUNCTION VOZR (A:matr):integer;

IMPLEMENTATION

FUNCTION VOZR;

Var I,J,k,f:integer;

Begin

k:=0;

FOR J:=1 TO 6 DO

begin

f:=0;

I:=1;

REPEAT

IF A[I,J]>A[I+1,J] THEN

f:=f+1;

I:=I+1;

UNTIL (I>4) OR (f>0);

IF f=0 THEN

k:=J;

end;

VOZR:=k;

End;

END.

UNIT SECOND;

INTERFACE

USES OBIVL;

PROCEDURE ZAM (A:matr);

IMPLEMENTATION

PROCEDURE ZAM

Var I,J:integer;

buf:array [1..6] of real;

Begin

J:=1;

WHILE J<=(7-J) DO

begin

FOR I:=1 TO 5 DO

buf[I]:=A[I,J];

FOR I:=1 TO 5 DO

A[I,J]:=A[I,7-J];

FOR I:=1 TO 5 DO

A[I,7-J]:=buf[I];

J:=J+1;

end;

FOR I:=1 TO 5 DO

begin

FOR J:= 1 TO 6 DO

write(fp2,A[I,J]:6:2);

writeln(fp2);

end;

End;

END.

Program TIPOVIK;

USES OBIVL, FIRST, SECOND

BEGIN

writeln(fp2,' ':25,'Results')

FOR I:=1 TO 5 DO

FOR J:=1 TO 6 DO

read(fp1,M[I,J]);

JM:=VOZR (M);

if JM=0 then

ZAM(M)

else

writeln (fp2,' ':30,'JM = ',JM);

CLOSE(fp1);

CLOSE(fp2);

END.

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

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

Визуальный контроль


В результате я обнаружила следующие ошибки:

  1. Наличие “;” вместо “,” в описании размера типа двумерного массива matr;

  2. В нескольких строках пропущен символ «;».

  3. В функции VOZR обращение к элементам матрицы А осуществлялось с помощью круглых скобок вместо квадратных;

  4. Был пропущен вывод по образцу 1 в тексте основной программы;

  5. Была пропущена точка после служебного слова END, означающая конец программы.

Синтаксический контроль:

Далее я перешла к компиляции программы. Также были выявлены следующие ошибки:

  1. Выявлена ошибка, означающая ввод «;» перед служебным словом “ELSE”;

  2. Не была описана переменная в основной программе.

Семантический контроль: ошибок не обнаружено.

Функциональное тестирование


Затем я протестировала программу на подготовленном мной наборе тестовых значений, указанных в разделе 1.8. При проверке данной программы я использовала метод нисходящего тестирования. Тестирование я начал с основной программы, заменив все подпрограммы «заглушками».
Тест №1:
Заглушка 1 (сегмент 1.1)
FUNCTION VOZR (A:matr):integer;

Var k:integer;

Begin

k:=5;

VOZR:=k;

End;
Заглушка 2 (сегмент 1.2)
Не требуется для данного набора тестов.

При использовании программы с данными заглушками на наборе тестов №1 я получила результат, соответствующий результату тестирования программы с реальными подпрограммами, следовательно, функция работает корректно.

Тест №2:
Заглушка 1 (сегмент 1.1)

FUNCTION VOZR (A:matr):integer;

Var k:integer;

Begin

k:=0;

VOZR:=k

End;
Заглушка 2 (сегмент 1.2)

PROCEDURE ZAM (A:matr);

Begin

A[1,1]:=7.4; A[1,2]:=1.2; A[1,3]:=6.1; A[1,4]:=5.3; A[1,5]:=3.2; A[1,6]:=1.0;
A[2,1]:=8.3; A[2,2]:=2.1; A[2,3]:=2.7; A[2,4]:=5.9; A[2,5]:=6.8; A[2,6]:=2.0;

A[3,1]:=6.6; A[3,2]:=3.3; A[3,3]:=2.8; A[3,4]:=1.4; A[3,5]:=7.2; A[3.6]:=3.5;

A[4,1]:=2.9; A[4,2]:=4.9; A[4,3]:=2.2; A[4,4]:=7.8; A[4,5]:=0.3: A[4,6]:=2.9;

A[5,1]:=1.9; A[5,2]:=1.2; A[5,3]:=7.4; A[5,4]:=3.5; A[5,5]:=9.6; A[5,6]:=5.0

End;
При использовании программы с данными заглушками на наборе тестов №2 я получила результат, соответствующий результату тестирования, следовательно, функция и процедура работают корректно.
В ходе тестирования методом заглушек было установлено, что программа корректна, все процедуры и функции работают исправно.

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

При замене первой заглушки на код подпрограммы VOZR был получен следующий результат: измененная матрица, контрольные значения соответствуют значениям теста №2, что позволяет убедиться в корректности кода данной подпрограммы.

При замене второй заглушки на код подпрограммы ZAM был получен следующий результат: измененная матрица, контрольные значения соответствуют значениям теста №2, что позволяет убедиться в корректности кода данной подпрограммы и, соответственно, основной программы.

Структурное тестирование


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


Значения счетчиков, полученных при тестировании:


№ теста

Основная программа

VOZR

ZAM

SCH1

SCH2

SCH3

SCH4

SCH5

SCH6

SCH7

SCH8

SCH9

SCH 10

SCH 11

SCH12

SCH13

SCH

14

SCH 15

Результат решения задачи №1

1

0

1

1

6

24

24

0

1

0

0

0

0

0

0

Результат решения задачи №2

1

1

0

1

6

24

0

24

0

1

1

3

15

15

15

Сумма показателей счетчиков

2

1

1

2

12

48

24

24

1

1

1

3

15

15

15


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

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

Визуальный контроль:


Мной была допущена орфографическая ошибка в слове ''IMPLEMENTATION''.

Синтаксический контроль:

Был совершён использованием режима компиляции «Make». В ходе компиляции ошибок не обнаружено.

Семантический контроль: ошибок не обнаружено.

Функциональное тестирование


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

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

7. Рекомендации по использованию программ


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

  • Определить номер столбца двумерного массива, в котором все элементы расположены в порядке возрастания.

  • Сформировать двумерный массив с изменённым порядком следования столбцов на противоположный.



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


написать администратору сайта