Лаб. 4 УКПО
.docxЛабораторная работа №4
Метрики Маккейба
using System;
namespace KURS_4_C_SHARP
{
class Program
{
static void Main()
{
Console.Write("Введите A: ");
string AString = Console.ReadLine();
Console.Write("Введите B: ");
string BString = Console.ReadLine();
int A, B;
bool error = false;
bool found = false;
if (!int.TryParse(AString, out A))
{
Console.WriteLine("Ошибка: Введённое значение A не является целым числом!");
error = true;
}
if (!int.TryParse(BString, out B))
{
Console.WriteLine("Ошибка: Введённое значение B не является целым числом!");
error = true;
}
if (error)
{
return;
}
if (999999 < A || A < 100000)
{
Console.WriteLine("Ошибка: Введённое значение A не является шестизначным числом!");
error = true;
}
if (999999 < B || B < 100000)
{
Console.WriteLine("Ошибка: Введённое значение B не является шестизначным числом!");
error = true;
}
if (A > B)
{
Console.WriteLine("Ошибка: Введённое значение A больше введённого значения B!");
error = true;
}
if (error)
{
return;
}
for (int num = A; num <= B; num++)
{
string s = num.ToString();
int sumFirst = (s[0] - '0') + (s[1] - '0') + (s[2] - '0');
int sumLast = (s[3] - '0') + (s[4] - '0') + (s[5] - '0');
if (sumFirst == sumLast)
{
Console.WriteLine(num);
found = true;
}
}
if (!found)
{
Console.WriteLine("Требуемых чисел нет");
}
}
}
}
Первый критерий:
Минимальный набор маршрутов, проходящих через каждый оператор ветвления и по каждой дуге:
m1 = 1-2-3-5-7-23; p1 = 3
m2 = 1-2-3-4-5-6-7-8-10-12-14-23; p2 = 7
m3 = 1-2-3-5-7-8-9-10-11-12-13-14-15-16-17-18-19-20-16-17-18-20-16-21-22-23; p3 = 13
m4 = 1-2-3-5-7-8-10-12-14-15-16-21-23; p4 = 9
Уровень сложности:
S1 = p1 + p2 + p3 + p4 = 32
Второй критерий:
Z = nв + 1 = 10 + 1 = 11
Ациклические маршруты:
m1 = 1-2-3-5-7-23; p1 = 3
m2 = 1-2-3-4-5-6-7-8-10-12-14-23; p2 = 7
m3 = 1-2-3-5-7-8-9-10-11-12-13-14-15-16-21-22-23; p3 = 9
m4 = 1-2-3-5-7-8-10-12-14-15-16-21-23; p4 = 9
Циклические маршруты:
m5 = 16-17-18-19-20; p5 = 2
Уровень сложности:
S2 = p1 + p2 + p3 + p4 + p5 = 30
Матрица смежности:
Матрица достижимости:
Вывод:
Исходя из полученных результатов расчёта метрик структурной сложности можно сделать вывод, что программа, характеризуемая представленным графом управления, имеет высокую алгоритмическую сложность, так как количество используемых в тексте операторов условий 10.
Метрика Маккейба:
Алгоритмическая сложность:
Z = m – n + 2 = 32 – 23 + 2 = 11
Вывод:
Таким образом, в соответствии со значением цикломатического числа в полученном графе управления программой можно выделить одиннадцать независимых контуров, которые определяют одиннадцать управляющих маршрутов, ведущих из начальной вершины в конечную. Значение цикломатического числа для полученного графа превышает значение 10, что говорит об очень высокой сложности разработанного алгоритма.
