МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ
(ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
Типовое задание по информатике
(задача 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. Отладка программы блочной структуры Визуальный контроль В результате я обнаружила следующие ошибки:
Наличие “;” вместо “,” в описании размера типа двумерного массива matr;
В нескольких строках пропущен символ «;».
В функции VOZR обращение к элементам матрицы А осуществлялось с помощью круглых скобок вместо квадратных;
Был пропущен вывод по образцу 1 в тексте основной программы;
Была пропущена точка после служебного слова END, означающая конец программы.
Синтаксический контроль:
Далее я перешла к компиляции программы. Также были выявлены следующие ошибки:
Выявлена ошибка, означающая ввод «;» перед служебным словом “ELSE”;
Не была описана переменная в основной программе.
Семантический контроль: ошибок не обнаружено.
Функциональное тестирование Затем я протестировала программу на подготовленном мной наборе тестовых значений, указанных в разделе 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». В ходе компиляции ошибок не обнаружено.
Семантический контроль: ошибок не обнаружено.
Функциональное тестирование Так как программа модульной структуры создавалась на основе уже отложенных программных единиц блочной структуры, то при тестировании требуется проверить только межмодульную связь.
Протестировав программу на разработанных тестах, я получила корректные результаты. Из чего заключила, что межмодульные связи реализованы правильно.
7. Рекомендации по использованию программ Программа создана для решения довольно специфической задачи, но в отдельности модули паскаль-программы модульной структуры могут быть использованы для решения типовых задач:
Определить номер столбца двумерного массива, в котором все элементы расположены в порядке возрастания.
Сформировать двумерный массив с изменённым порядком следования столбцов на противоположный.
Данная программа выполняет задачу определенного назначения, и не является востребованной в широком кругу пользователей. Пользователю необходимо внимательно изучить внешнюю спецификацию и грамотно вводить исходные данные по требуемым формам ввода. |