пз_грибович / МСИС_2
.docxМинистерство образования Республики Беларусь
Министерство образования Республики Беларусь
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра метрологии и стандартизации
Метрология, стандартизация и сертификация в информационных технологиях
Практическая работа №2
«Метрики Холстеда. Метрики сложности потока данных»
Вариант 16
Выполнила: Студентка группы
972303
Рушева Маргарита
Владиславовна
Проверил: Грибович Александр
Александрович
Минск, 2020
1 ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ
Ввести массив А (8, 8). Найти минимальный элемент в побочной диагонали массива А. Поменять местами столбец, в котором находится данный элемент, с первым столбцом массива А. Вывести максимальный элемент, номера строки и столбца, в которых он находится, исходный и результирующий массивы.
3 ОПИСАНИЕ ПРОГРАММЫ
mas – исходный массив.
new_mas – результирующий массив.
minJ – номер столбца минимального элемента побочной диагонали.
max – максимальный элемент результирующего массива.
maxI – номер строки максимального элемента.
maxJ – номер столбца максимального элемента.
Сначала происходит ввод данных в массив mas, затем поиск минимального элемента побочной диагонали, после чего столбец с этим элементом меняется с первым и записывается в новый массив new_mas. После выводим исходный массив. Выводим результирующий массив и одновременно ищем максимальный элемент, номер его строки и столбца. После выводим ответы.
2 ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ НА ЯЗЫКЕ С++
#include <iostream>
using namespace std;
int main()
{
const int SIZE = 8;
int mas[SIZE][SIZE];
cout << "Введите массив" << endl;
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
{
cin >> mas[i][j];
}
}
int min = mas[0][SIZE - 1];
int minJ = SIZE - 1;
for (int i = 0, int j = SIZE - 1; i < SIZE; i++, j--)
{
if (mas[i][j] < min)
{
min = mas[i][j];
minJ = j;
}
}
int new_mas[SIZE][SIZE];
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
{
new_mas[i][j] = mas[i][j];
}
int change = new_mas[i][j];
new_mas[i][0] = new_mas[i][minJ];
new_mas[i][minJ] = change;
}
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
{
cout << mas[i][j];
cout << " ";
}
cout << endl;
}
int max = new_mas[0][0];
int maxI, maxJ;
cout << "Новый массив" << endl;
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
{
cout << new_mas[i][j];
cout << " ";
if (new_mas[i][j] > max)
{
max = new_mas[i][j];
maxI = i;
maxJ = j;
}
}
cout << endl;
}
cout << "Максимальный элемент : " << max << endl;
cout << "Номер строки : " << maxI << endl;
cout << "Номер столбца : " << maxJ << endl;
}
4 РАСЧЁТ МЕТРИК ХОЛСТЕДА
j |
Оператор |
f1j |
i |
Операнд |
f2i |
|
= |
23 |
|
SIZE |
17 |
|
[][] |
17 |
|
mas |
6 |
|
for |
9 |
|
minJ |
3 |
|
< |
1 |
|
new_mas |
10 |
|
++ |
9 |
|
max |
3 |
|
> |
1 |
|
maxI |
3 |
|
-- |
1 |
|
maxJ |
3 |
|
< |
10 |
8. |
i |
29 |
|
If-else-else if |
2 |
9. |
j |
26 |
|
<< |
1 |
10. |
8 |
1 |
|
>> |
19 |
11. |
0 |
13 |
|
|
|
12. |
-1 |
3 |
1 = 11 |
|
N1 = 93 |
2 = 12 |
|
N2 = 117 |
Словарь программы = 23.
Длина программы N = 230.
Объем программы V =
Метрика сложности потока данных (спен и метрика Чепина)
5 РАСЧЁТ СПЕНА ПРОГРАММЫ
Идентификатор |
SIZE |
mas |
minJ |
new_mas |
max |
maxI |
maxJ |
i |
j |
Суммарный спен программы |
Спен |
16 |
5 |
2 |
9 |
2 |
2 |
2 |
28 |
25 |
91 |
6 РАСЧЁТ ПОЛНОЙ МЕТРИКИ ЧЕПИНА И МЕТРИКИ ЧЕПИНА ВВОДА/ВЫВОДА
|
Полная метрика Чепина |
Метрика Чепина ввода/вывода |
|||||||
Группа переменных |
Р |
М |
С |
Т |
Р |
М |
С |
Т |
|
Переменные, относящиеся к группе |
-- |
SIZE, new_mas, maxI, maxJ, mas |
i,j, minJ, max |
-- |
|
new_mas, maxI, maxJ, mas |
i,j, , max |
-- |
|
Количество переменных в группе |
р = 0 |
m = 5 |
c = 4 |
t = 0 |
р = 0 |
m = 4 |
c = 3 |
t = 0 |
|
Метрика Чепина |
Q = 1*0 + 2*5 + 3*4 + 0,5*0 = 22 |
Q = 1*0 + 2*4 + 3*3 + 0,5*0 = 17 |