bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [236]
Форма входа
Поиск
Статистика

Онлайн всего: 3
Гостей: 3
Пользователей: 0
Файловый архив
Файлы » ИТиУвТС » Другое

ИТиУвТС (з.), Метрология и стандартизация, Лабораторная работа №2, вар.22, 2015
Подробности о скачивании 05.10.2016, 18:30
Учреждение образования
«Белорусский государственный университет
информатики и радиоэлектроники»

Факультет заочного обучения

Кафедра программного обеспечения информационных технологий

ЛАБОРАТОРНАЯ РАБОТА №2
«МЕТРИКИ ХОЛСТЕДА. МЕТРИКИ СЛОЖНОСТИ ПОТОКА ДАННЫХ»

по дисциплине«Метрология, стандартизация и сертификация в информационных технологиях»

Минск 2015

Задание
Для разработанной в лабораторной работе 1 схемы алгоритма написать исходный текст программы. В программе предусмотреть вывод на экран всех входных и выходных данных. Программа должна быть хорошо прокомментирована.
На основании разработанного исходного текста программы рассчитать метрики Холстеда:
- шесть базовых метрик Холстеда (результат свести в таблицу);
- словарь программы;
- длина программы;
- объём программы.
Рассчитать метрики сложности потока данных:
- спены идентификаторов и суммарный спен программы (результаты свести в таблицу);
- полная метрика Чепина и метрика Чепина ввода/вывода (результаты свести в таблицу);

Вариант 22


Ход работы
Исходный текст программы:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>

#include <math.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
int i, j, n, k, m, l, t, y;// переменные для работы с массивом
int imin, min, max, kmax;//переменные для нахождения максимального и //минимального элементов, запоминания их положения
int masa[4][5], masb [5][7], masaa[4][5], masbb [5][7] ;//массивы
cout<<"Vvedite elementi massiva 1";//ввод элементов массива А
cout << endl;
for ( i=0; i<4;i++){
for ( j=0; j<5;j++){
cin>>masa[i][j]; }}
//первый массив введён
cout<<"Vvedite elementi massiva 2";//ввод элементов массива В
for ( n=0; n<5;n++){
for ( k=0; k<7;k++){
cin>>masb[n][k]; }}
//второй массив введён
//ищем минимальный элемент в первом массиве
for ( i=0; i<4;i++){
for ( j=0; j<5;j++){
min=0;//присваиваем начальные значения переменной, которая будет содержать //минимальный элемент
imin=0;//будет содержать индекс строки с минимальным элементом
if (masa[i][j]<min){//если элемент массива <min
min=masa[i][j];// то присваиваем min значение этого элемента
imin=i;//запоминаем номер строки, содержащей минимальный элемент
}}}

//ищем максимальный элемент во втором массиве
for ( n=0; n<5;n++){
for ( k=0; k<7;k++){
max=0; //присваиваем начальные значения переменной, которая будет содержать //максимальный элемент
kmax=0; //будет содержать индекс строки с максимальным элементом
if (masb[n][k]>max){// если элемент массива >max
max=masb[n][k]; // то присваиваем max значение этого элемента
kmax=k+1; //запоминаем номер столбца, содержащей максимальный элемент
}}}

//меняем местами строку и столбец массивов с мин и макс элем
for (l=0; l<4;l++){//используем пустые массивы для записи в них
for (m=0;m<5;m++){
for (t=0; t<5;t++){
for (y=0;y<7;y++){
masaa[l][m]=masa[i][j];//элементам masaa присваиваем элементы masa
masaа[imin][m]=masb[n][kmax]; //строке с индексом минимального элемента //присваиваем значения столбца с индексом максимального элемента
masbb[t][y]=masb[n][k];//элементам masbb присваиваем элементы masb
masbb[t][kmax]=masa[imin][j]; //столбцу с индексом максимального элемента //присваиваем значения строки с индексом минимального элемента
}}}}
//выводим полученные значения на экран
cout << "Massiv 1" << endl;
for ( n=0; n<5;n++){
for ( k=0; k<7;k++)
cout << masa[i][j] << " " ;
cout << endl; }
cout << "Massiv 2" << endl;
for ( n=0; n<5;n++){
for ( k=0; k<7;k++)
cout << masb[n][k] << " " ;
cout << endl; }
cout<<”Minimalnyi element”<< min<<"nomer stroky"<<imin<<endl;
cout<< “Maximalnyi element”<<max<< "nomer stolbca"<<kmax << endl;
cout << " Massiv 1 posle perestonovki” << endl;
for (l=0; l<4;l++){
for (m=0;m<5;m++)
cout << masaa[l][m] << " " ;
cout<< endl;}
cout << "Massiv 2 posle perestonovki”<< endl;
for (t=0; t<5;t++){
for (y=0;y<7;y++)
cout << masaa[t][y] << " " ;
cout<< endl;
}
system("pause");
return 0;
}
//---------------------------------------------------------------------------



Рисунок 1. Результат работы программы

Рассчитаем Метрики Холстеда.
Основу метрик Холстеда составляют 6 базовых метрик программы:
1 – словарь операторов;
2 – словарь операндов;
N1 – общее число операторов в программе;
N2 – общее число операндов в программе;
f1j – число вхождения j-го оператора, j =1,2, …, 1;
f2i – число вхождения i-го оператора, i =1,2, …, 2;
Словарь программы (общее число уникальных операторов и операндов программы):
=1+2
Длина программы (общее количество операторов и операндов программы):
N=N1+N2
Объём программы (число логических единиц информации, необходимых для записи программы):
V=Nlog2
Расчёт базовых метрик Холстеда для программы по варианту:
Таблица1
j Оператор f1j i Операнд f2i
1. ; 54 1. i 10
2. = 20 2. j 10
3. + 2 3. n 10
4. ++ 8 4. k 10
5. > 1 5. m 6
6. < 9 6. l 5
7. >> 2 7. t 6
8. << 34 8. y 5
9. () 10 9. imin 6
10. [] 44 10. kmax 6
11. , 13 11. min 5
12. {} 12 12. max 5
13. If 2 13. masa 7
14. for () 8 14. masb 7
15. msaaa 4
16. masbb 4
17. 0 12
18. 4 4
19. 5 8
20. 7 4
1=14 N1=219 2=20 N2=134

Словарь программы: =14+20=34
Длина программы: N=219+144=363
Объём программы: V=363log234=1847

Рассчитаем метрики сложности потока данных.
Спен идентификатора – число повторных появлений идентификатора, после его первого появления, в тексте программы.
Метрики Чепина базируются на анализе характера использования переменных в программе. Рассмотрим множество переменных программы, разбив их на четыре функциональные группы:
Р – вводимые переменные, содержащие исходную информацию, но не модифицируемые в программе и не являющиеся управляющими переменными;
М – вводимые модифицируемые переменные и создаваемые внутри программы константы и переменные, не являющиеся управляющими переменными;
С – переменные, участвующие в управлении работой программы (управляющие переменные);
Т – не используемые в программе переменные.
Значение метрики Чепина определяется по формуле
Q=a1p+a2m+a3c+a4t
a1=1,a2=2,a3=3,a4=0,5 – весовые коэффициенты. С учётом этого формула примет вид:
Q=1p+2m+3c+0,5t

Спен программы Таблица 2
i j n k m l t y imin kmax min max masa masb masaa masbb
10 10 10 10 6 5 6 5 6 6 5 5 7 7 4 4
Суммарный спен программы 106.
Метрики Чепина программы Таблица 3
Переменные Полная метрика Чепина Метрика Чепина ввода/вывода
Группа переменных Р М С Т Р М С Т
Переменные, относящиеся к группе i, j, n, k,l, m, t, y i, j, n, k, l, m, t, y, imin, kmax, masaa, masbb masa, min, masb, max - - imin, kmax, masaa, masbb masa, min, masb, max -
Количество переменных в группе P=8 M=12 C=4 T=0 P=0 M=4 C=4 T=0
Метрика Чепина Q=1*8+2*12+3*4+0.5*0=44 Q=1*0+2*4+3*4+0.5*0=20

Выводы:
В ходе лабораторной программы был написан исходный код в соответствии с заданием. Так же были изучены и рассчитаны метрики Холстеда и метрики сложности потока данных.
Категория: Другое | Добавил: masher2161
Просмотров: 1889 | Загрузок: 10
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]