Определение метрик по модели Маккейба
Автор: micangelaz • Март 4, 2022 • Лабораторная работа • 809 Слов (4 Страниц) • 430 Просмотры
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«Омский государственный технический университет»
ОТЧЁТ
по дисциплине «Измерительные средства аналитики программных систем и технологий»
на тему:
«Определение метрик по модели Маккейба»
Выполнил:
Студент группы ПИ – 192
Будзинская Н.Е.
Проверил:
Зубарев А.А.
Омск 2020
Метрика Маккейба
Для метрики Маккейба необходимо построить управляющий граф линейной последовательности операторов.
[pic 1]
Рисунок 1 – Управляющий граф
Теперь необходимо посчитать количество вершин и дуг графа
Вершин – n = 44
Дуг – m = 61
Рассчитаем оптимальность по формуле Z = m – n + 2 = 61 – 44 + 2 = 15
15 < 10 следовательно, задача алгебраически сложнее обычного и код может быть написан боле оптимально.
Текст программы:
- #include "pch.h"//объявление библиотек, необходимых для успешной компиляции программы
- #include <stdio.h>
- #include <conio.h>
- #include <iostream>
- #include <locale.h>
- using namespace std;//объявление пространства имён «std», необходимого для работы с потоками ввода вывода данных
- int i, j, k, n;//объявление глобальных переменных
- int main()//функция – точка входа в программу
- { setlocale(LC_ALL, "RUS");//объявление русской локали, необходимой для корректного вывода символов кирилицы
- const int siz1 = 6, siz2 = 8, len1 = 3, len2 = 4;//размеры массивов
- int k = 1, z = 0;
- int A[siz1] = { 7,-9,8,1,-6,-5 },//начальные массивы
- B[siz2] = { -9,4,-2,20,35,-5,-7,10 };//
- int A2[len1],
- B2[len2];
- otrelements(A, A2, B, B2, len1, len2, siz1, siz2);//вызов функции отбора отрицательных элементов из начальных массивов
- printf(" Массив отрицательных элементов А2:\n");
- for (i = 0; i < 3; i++)//цикл вывода массива А2 из отсортированных элементов
- {//
- printf("%2d", A2[i]); //
- }//
- for (i = 0; i < len1; i++)//цикл нахождения суммы и произведения всех элементов этого массива
- {
- z += A2[i];
- k *= A2[i];
- }
- printf("\nCумма элементов А2 = %d\n", z); //вывод суммы
- printf("Произведение элементов А2 = %d\n", k); //вывод произведения
- printf("\n Массив отрицательных элементов B2:\n");
- for (i = 0; i < 4; i++)//цикл вывода массива В2 из отсортированных элементов
- {//
- printf("%d", B2[i]); //
- }//
- z = 0; //обнуление переменных для дальнейшего их использования
- k = 1; //
- for (i = 0; i < len2; i++)//цикл нахождения суммы и произведения всех элементов массива В2
- {//
- z += B2[i]; //
- k *= B2[i]; //
- }//
- printf("\nCумма элементов B2 = %d\n", z); //вывод суммы
- printf("Произведение элементов B2 = %d\n", k); //вывод произведения
- printf("\n Массив А(модифицированный)\n");
- polelements_(A, siz1); //вызов функции удаления отсортированных элементов из первого массива
- for (i = 0; i < 3; i++)//вывод обработанного массива через цикл
- {//
- printf("%3d", A[i]); //
- }//
- z = 0; //обнуление переменных для дальнейшего их использования
- k = 1; //
- for (i = 0; i < 3; i++)//цикл нахождения суммы и произведения всех элементов массива А
- {//
- z += A[i]; //
- k *= A[i]; //
- }//
- printf("\nCумма элементов А = %d\n", z); //вывод суммы
- printf("Произведение элементов А = %d\n", k); //вывод произведения
- printf("\n Массив B(модифицированный)\n");
- polelements(B, siz2); //вызов функции удаления отсортированных элементов из второго массива
- for (i = 0; i < 4; i++)//вывод обработанного массива через цикл
- {//
- printf("%3d", B[i]); //
- }//
- z = 0; //обнуление переменных для дальнейшего их использования
- k = 1; //
- for (i = 0; i < 4; i++)//цикл нахождения суммы и произведения всех элементов массива В
- {//
- z += B[i]; //
- k *= B[i]; //
- }//
- printf("\nCумма элементов А = %d\n", z); //вывод суммы
- printf("Произведение элементов А = %d\n", k); //вывод произведения
- }
- int otrelements(int* A, int * A2, int* B, int* B2, int len1, int len2, int siz1, int siz2)
- { //тело функции отбора отрицательных
- int j = 0; //объявление переменных - счётчиков
- int k = 0; //
- int n = 0; //
- for (int i = 0; i < 8; i++)//цикл отбора отрицательных элементов в новые массивы
- {
- if (B[i] < 0) //для массива В
- { B2[n] = B[i]; n++; }
- if (j < 6) //для массива А
- { if (A[j] < 0)
- {A2[k] = A[j]; k++;}
- } j++; }
- return 0;}
- int polelements(int* B, int siz2)
- { //тело функции удаления отсортированных элементов из второго массива
- int i = 0;
- int j = 0;
- while (i < siz2) // цикл обработки массива
- { if (B[i] < 0) //поиск отрицательного элемента
- { for (j = i; j < siz2; j++)//
- B[j] = B[j + 1]; j++;// сдвиг всех последующих элементов на одну позицию назад
- siz2--; }//
- else i++; }
- return siz2; }
- int polelements_(int* A, int siz1) //тело функции удаления отсортированных элементов из второго массива
- { int i = 0;
- int j = 0;
- while (i < siz1) // цикл обработки массива
- {
- if (A[i] < 0)
- {
- for (j = i; j < siz1; j++)
- A[j] = A[j + 1]; //сдвиг всех последующих элементов на одну позицию назад
- j++; siz1--; }
- else i++; }
- return siz1;}
...