Определение метрических характеристик программы (по Холстеду)

Автор работы: Пользователь скрыл имя, 03 Сентября 2015 в 12:24, лабораторная работа

Краткое описание

Цель работы – программа обработки данных, представленной на языке Паскаль, разработать вычислительный алгоритм и варианты программ его реализации на языках программирования Си и Ассемблер. Добиться, чтобы программы на Паскале и Си были работоспособны и давали корректные результаты (это потребуется в дальнейшем при проведении с ними измерительных экспериментов). Для получения ассемблерного представления программы можно либо самостоятельно написать код на ассемблере, реализующий заданный алгоритм, либо установить опцию Code generation/Generate assembler source при компиляции текста программы, представленной на языке Си. При этом в ассемблерном представлении программы нужно удалить директивы описаний и отладочные директивы, оставив только исполняемые операторы.

Вложенные файлы: 1 файл

Лаб 5.doc

— 144.50 Кб (Скачать файл)

Цель работы – программа обработки данных, представленной на языке Паскаль, разработать вычислительный алгоритм и варианты программ его реализации на языках программи-рования Си и Ассемблер. Добиться, чтобы программы на Паскале и Си были работоспособны и давали корректные результаты (это потребуется в дальнейшем при проведении с ними измерительных экспериментов). Для получения ассемблерного представления программы можно либо самостоятельно написать код на ассемблере, реализующий заданный алгоритм, либо установить опцию Code generation/Generate assembler source при компиляции текста программы, представленной на языке Си. При этом в ассемблерном представлении программы нужно удалить директивы описаний и отладочные директивы, оставив только исполняемые операторы.

 

Теоретические сведения

Для каждой из разработанных программ (включая исходную программу на Паскале) определить следующие метрические характеристики (по Холстеду):

1. Измеримые характеристики программ:

- число простых(отдельных)операторов, в данной реализации;

- число простых (отдельных) операндов, в данной реализации;

- общее число всех операторов  в данной реализации;

- общее число всех операндов  в данной реализации;

- число вхождений j-го оператора  в тексте программы;

- число вхождений j-го операнда в тексте программы;

- словарь программы;

- длину программы.

 

  2. Расчетные характеристики  программы:

- длину программы;

- реальный, потенциальный и граничный  объемы программы;

- уровень программы;

- интеллектуальное содержание  программы;

- работа программиста;

- время программирования;

- уровень используемого языка  программирования;

ожидаемое число ошибок в программе.

 

    Для каждой характеристики  следует рассчитать как саму  характеристику, так и ее оценку.

 Расчет оценок программ выполнить  двумя способами:

1) вручную или с помощью одного  из доступных пакетов математических  вычислений DERIVE, MATHCAD или MATLAB.

2) с помощью программы автоматизации  расчета метрик Холстеда, краткая  инструкция по работе с которой  приведена в файле usage.rtf (для С- и Паскаль-версий программ).

 

Для варианта расчета с использованием программы автоматизации желательно провести анализ влияния учета тех или иных групп операторов исследуемой программы на вычисляемые характеристики за счет задания разных ключей запуска.

Результаты расчетов представить в виде таблиц с текстовыми комментариями.

Паскаль

program matr1;

{ pascal program to perform matrix multiplication }

const    rmax    = 5;

    cmax    = 5;

type    ary    = array[1..rmax] of real;

    arys    = array[1..cmax] of real;

    ary2    = array[1..rmax,1..cmax] of real;

    ary2s    = array[1..cmax,1..cmax] of real;

var    y        : ary;

    g        : arys;

    x        : ary2;

    a        : ary2s;

    nrow,ncol    : integer;

procedure get_data(var x: ary2;

        var y: ary;

    var nrow,ncol: integer);

{ get the values for nrow, ncol, and arrays x,y }

var    i,j    : integer;

begin

nrow:=2;

ncol:=2;

for i:=1 to nrow do

begin

    x[i,1]:=1;

    for j:=2 to ncol do

    x[i,j]:=i*x[i,j-1];

    y[i]:=2*i

 end

end;        { procedure get_data }

 

procedure write_data;

{ print out the answers }

var

i,j    : integer;

begin

{ClrScr;}

writeln;

writeln( X Y);

for i:=1 to nrow do

{ LA SUITE DU PROGRAMME}

begin

    for j:=1 to ncol do

    write(x[i,j]:7:1, );

    writeln(:,y[i]:7:1)

end;

writeln( A G);

for i:=1 to ncol do

begin

    for j:=1 to ncol do

    write(a[i,j]:7:1, );

    writeln(:,g[i]:7:1)

end

end;        { write_data }

 

procedure square(x: ary2;

        y: ary;

    var a: ary2s;

    var g: arys;

    nrow, ncol: integer);

{matrix multiplication routine }

{ a= transpose x times x }

{ g= y times x }

var

i,k,l    : integer;

begin        { square }

for k:=1 to ncol do

begin

    for l:=1 to k do

    begin

    a[k,l]:=0;

    for i:=1 to nrow do

    begin

        a[k,l]:=a[k,l]+x[i,l]*x[i,k];

        if k<>l then a[l,k]:=a[k,l]

    end

    end;        { l-loop }

    g[k]:=0;

    for i:=1 to nrow do

    g[k]:=g[k]+y[i]*x[i,k]

end    { k-loop }

end;    { square }

begin    { MAIN program }

get_data(x, y,nrow , ncol);

square(x ,y ,a ,g ,nrow ,ncol);

 write_data

end.

Метрические характеристики

 Операторы

Оператор 

f1j

1

;

44

2

:

46

3

,

34

4

Real 

4

5

()

10

6

Const 

1

7

=

26

8

Integer 

6

9

If then

1

10

:=

20

11

*

4

12

-

1

13

+

2

14

<>

1

15

.

13

16

for to do

16

17

Writeln

5

18

[]

24


 

Операнды

Операнд

f1i

rmax

3

cmax 

5

ary 

4

arys

3

ary2

4

ary2s

3

array

4

ncol

11

nrow

10

y

9

g

7

a

10

x

11

i

22

k

14

0

1

j

9

2

4


 

Число простых операторов ?1= 18

Общее число всех операторов N1= 252

Число простых операндов ? 2= 20

Общее число всех операторов N2=155

Словарь ?=?1+?2=18+20=38

Опытная (экспериментальная) длина Nэ=N1+N2=252+155=407

Теоретическая длина программы NТ = ?1log2 ?1+?2 log2 ?2= 18log218+20log220=

= 18*4.17+20*5.52= 75.05 +86.43 = 161.48

 

| Nэ - NТ|/ Nэ *100% =60%

Объем V=Nэlog2? =407log238=407*5.24=2135.90

Потенциальный объем V*=Nlog2? =(? 1* +? 2*)log2 (? 1* + ? 2*)=(6 + 7) log2(6 +7)=13* log213=13*3.7=48.1

Граничный объем Vгр=(? 1*log2? 1*+? 2*log2? 2* ) log2(? 2* + ? 1*)= (6*log26 +7*log27) log2(6 + 7) = ( 15.50 + 19.65 ) * 3.7 = 130.05

Уровень программы L=V*/V=48.1/2135.90 = 0,02251

Сложность программы S=1/L=1/0,0043=44.40

Оценка уровня программы L=2/ ?1 * ?2/N2=2/18*20/155=0.0143

Информационное (интеллектуальное) содержание программы

I=2?2  /?1N2 *(N1 +N2) log2 (? 1+ ?2) = 2 * 20 / (18 * 155 ) * ( 252 + +155)log238= 2*20/2790*407*5.24= 2*0.0071*2135.90= 30.62

Работа по программированию E=Nlog2 ?/L = V2 /V*=2135.90*2135.90/48.1=94845.50

 Время программирования Tпр =E/S = 94845.50/44.40=2136.15

Уровень языка программирования = V**L=48.1*0,02251=1.0827

 Ожидаемое число ошибок B=E/E0*k=

 

Метрические характеристики (по Холстеду)

 

    Statistics for module outpas.lxm

=====================================

The number of different operators : 25

The number of different operands : 24

The total number of operators : 168

The total number of operands : 141

Dictionary ( D) : 49

Length ( N) : 309

Length estimation ( N) : 226.136

Volume ( V) : 1734.95

Potential volume ( *V) : 19.6515

Limit volume (**V) : 38.2071

Programming level ( L) : 0.0113269

Programming level estimation ( L) : 0.013617

Intellect ( I) : 23.6248

Time of programming ( T) : 8509.49

Time estimation ( T) : 5180.14

Programming language level (lambda) : 0.22259

Work on programming ( E) : 153171

Error ( B) : 0.954252

Error estimation ( B) : 0.578315

Table:

===================================

Operators:

| 1    | 10    | ()

| 2    | 4    | *

| 3    | 2    | +

| 4    | 1    | -

| 5    | 71    | ;

| 6    | 1    | <>

| 7    | 16    | =

| 8    | 18    | []

| 9    | 3    | ary

| 10    | 3    | ary2

| 11    | 2    | ary2s

| 12    | 2    | arys

| 13    | 1    | const

| 14    | 10    | for

| 15    | 2    | get_data

| 16    | 1    | if

| 17    | 6    | integer

| 18    | 3    | procedure

| 19    | 1    | program

| 20    | 4    | real

| 21    | 2    | square

| 22    | 1    | type

| 23    | 1    | write

| 24    | 2    | write_data

| 25    | 1    | writeln

 

Operands:

| 1    | 1    |

| 2    | 1    | :

| 3    | 2    | 0

| 4    | 20    | 1

| 5    | 4    | 2

| 6    | 2    | 5

| 7    | 2    | 7

| 8    | 8    | a

| 9    | 1    | ary

| 10    | 1    | ary2

| 11    | 1    | ary2s

| 12    | 1    | arys

| 13    | 5    | cmax

| 14    | 6    | g

| 15    | 15    | i

| 16    | 5    | j

| 17    | 13    | k

| 18    | 8    | l

| 19    | 1    | matr1

| 20    | 11    | ncol

| 21    | 10    | nrow

| 22    | 3    | rmax

| 23    | 12    | x

| 24    | 8    | y

Summary:

=====================================

The number of different operators : 25

 

Задания:

Вари-ант

Имя

и размеры

 

Задание

Условия и ограни-чения

А (10)

А. Дан целочисленный массив A. Вывести номер первого из тех его элементов A[i], которые удовлетворяют двойному неравенству: A[1] < A[i] < A[10]. Если таких элементов нет, то вывести 0.

-

T (N, M)

Б. Вычислить и запомнить сумму элементов строк и столбцов матрицы. Результаты отпечатать в виде двух столбцов.

N £ 10

M £ 7

 

A (15)

A. Вычислить среднее арифметическое  и геометрическое значения элементов  массива А.

 

A [ i ] ¹ 0

B (3, 3)

Б. В данной матрице в каждой из строк указать индексы элементов с максимальным значением.

 

B [ i ] > 0

 

C (15)

A. Найти максимальный и минимальный  элементы массива и поменять  их местами. Вывести на печать полученный массив.

-

 

С (N, N)

Б. Вычислить сумму и число элементов матрицы, находящихся под главной диагональю и на ней.

 

-1£X[ i ]£1

 

D (12)

A. Переписать элементы массива D в  массив Е и подсчитать в  них количество положительных  чисел.

 

-1£X[ i ]£1

D (3, 4)

Б. Записать на место отрицательных элементов матрицы нули, а на место положительных единицы. Вывести на печать нижнюю треугольную матрицу в общепринятом виде.

 

-

Е (15)

А. Дан целочисленный массив Е. Вывести номер последнего из тех его элементов A[i], которые удовлетворяют двойному неравенству: A[1] < A[i] < A[10]. Если таких элементов нет, то вывести 0.

Е [ i ] > 0

 

E (N, M)

Б. Найти в каждой строке матрицы максимальный и минимальный элементы и поместить их на место первого и последнего элемента строки соответственно. Матрицу напечатать в общепринятом виде.

 

 

N £ 20

M £ 10

A (15)

В (15)

С (N)

А. Даны два целочисленных одномерных массива А и В. Вычислить массив С, который содержит нечетные элементы массива А, которых нет в массиве В.

A [ i ] < 0

B [ i ] > 0

F (4, 4)

Б. Транспонировать матрицу и вывести на печать элементы главной диагонали и элементы, расположенные под ней. Результаты разместить в двух строках.

 

-

G (20)

А. Заменить все элементы массива G, стоящие до максимального, нулями.

 

-

G (3, 4)

Б. Для целочисленной матрицы найти для каждой строки число элементов, кратных пяти, и наибольший из полученных результатов.

-

H (10)

Y (N)

А. Расположить в массиве Y сначала положительные, а затем отрицательные элементы массива Н.

 

-

 

 

H (N, M)

Б. Из положительных элементов матрицы Н сформировать матрицу М(n, КМАХ), располагая их в строках матрицы подряд, где КМАХ - максимальное число положительных элементов строки матрицы Н. Записать нули на место отсутствующих элементов. Отпечатать обе матрицы в общепринятом виде.

 

N £ 5

M £ 7

Е (15)

А. Определить максимальный элемент массива Е и его порядковый номер.

Е [ i ] > 0

E (N, N)

В заданной матрице подсчитать количество 0 ниже главной диагонали.

N £ 5

F (15)

А. Определить минимальный элемент массива F и его порядковый номер.

F [ i ] < 0

F (5, 5)

Б. В заданной матрице определить количество столбцов, где все элементы положительны.

 

-

U (11)

А. Дан целочисленный массив. Преобразовать его, прибавив к четным числам первый элемент. Первый и последний элементы массива не изменять.

-

U (3, 3)

Б. Определить, является ли заданная целая матрица магической, т.е. такой, в которой суммы элементов во всех строках и столбцах одинаковы.

-

 

V (13)

А. В массиве в порядке возрастания модулей упорядочить сначала отрицательные, затем положительные элементы.

 

-

V (N, N)

Б. Найти матрицу, обратную данной матрице V, или установить, что такой нет.

N=5

 

W (13)

А. В массиве вещественных чисел найти минимальный элемент среди положительных и максимальный среди отрицательных.

 

-

W (M,N)

Б. Упорядочить строки целочисленной матрицы W по возрастанию их первых элементов.

M £ 4

N £ 5

 

Х (20)

А. Отдельно сложить отрицательные и положительные элементы массива Х. Результат вывести с комментариями.

 

-

Х (М, N)

Б. Упорядочить строки вещественной матрицы Х по возрастанию их наибольших элементов.

M £ 6

N £ 5

 

Y (10)

Дан символьный массив. Заменить в нем знаки «+» на знаки «-», а знаки «-» на знаки «+».

 

-

Y (N, N)

Б. В заданной матрице вычислить количество строк, где среднее арифметическое их элементов меньше нуля.

N £ 15

 

F (35)

А. Дан символьный массив. Определить, сколько в нем содержится слов, у которых первый и последний символы совпадают.

 

-

F (N, M)

Б. Упорядочить строки матрицы по возрастанию сумм элементов строк.

N £ 15

М³3

А (15)

А. Дан целочисленный массив. Удалить из массива все элементы, встречающиеся более двух раз.

 

-

А (4,4)

Б. Дана символьная матрица. Определить номер строки, содержащей наибольшее количество слов, в которых есть буква «а».

-

В (15)

А. Дан целочисленный массив. Преобразовать его, прибавив к нечетным числам последний элемент. Первый и последний элементы массива не изменять.

-

В (N, M)

Б. Написать программу, которая в каждой строке определяет минимальный элемент и подсчитывает количество нулей среди элементов, расположенных за минимальным элементом.

 

N £ 10

М³4

С (10)

А. Вывести на печать массив С, упорядочив его элементы по убыванию.

 

С (4, 5)

Б. Дана символьная матрица. Найти номер столбца, содержащего наибольшее число слов.

 

D (N)

А. Дан целочисленный массив размера N. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии - количество этих элементов (длина серии может быть равна 1). Вывести массив, содержащий длины всех серий исходного массива. 

 

N£15

А(5,5)

Б. Дана символьная матрица. Найти номер первой по порядку строки, содержащий наибольшее число слов, которые имеют длину более 8 букв.

 

-

J(N, M)

Б. Расположите элементы данного массива по столбцам в обратном порядке Т.е., первый элемент меняется с последним, второй - с предпоследним и т.д., до середины. Если массив содержит нечетное количество элементов, то средний остается без изменения.

N=M≥2


 


Информация о работе Определение метрических характеристик программы (по Холстеду)