Перейти на главную страницу
Дисциплина МПО
Кафедра МОЭВМ
Вариант №6
Выполнили : Воробьёв А.В.
Группа № 4305
Проверила : Выговская А.С.
«Выполнено» «____» _______ ____
Подпись преподавателя __________________
В заданных на Паскале вариантах программ обработки данных важен только вычислительный алгоритм, реализуемый программой. Поэтому для получения более корректных оценок характеристик программ следует учитывать только вычислительные операторы и по возможности исключить операторы, обеспечивающие интерфейс с пользователем и выдачу текстовых сообщений.
В сути алгоритма, реализуемого программой, нужно разобраться достаточно хорошо для возможности внесения в программу модификаций, выполняемых в дальнейшем с целью проведения измерений и улучшения характеристик качества программы.
Для измеряемых версий программ в дальнейшем нужно будет исключить операции ввода данных с клавиатуры и вывода на печать, потребляющие основную долю ресурса времени при выполнении программы. Поэтому можно уже в этой работе предусмотреть соответствующие преобразования исходной программы.
Для каждой из разработанных программ (включая исходную программу на Паскале) определить следующие метрические характеристики (по Холстеду):
1. Измеримые характеристики программ:
- число простых(отдельных)операторов, в данной реализации;
- число простых (отдельных) операндов, в данной реализации;
- общее число всех операторов в данной реализации;
- общее число всех операндов в данной реализации;
- число вхождений j-го оператора в тексте программы;
- число вхождений j-го операнда в тексте программы;
- словарь программы;
- длину программы.
- длину программы;
- реальный, потенциальный и граничный объемы программы;
- уровень программы;
- интеллектуальное содержание программы;
- работа программиста;
- время программирования;
- уровень используемого языка программирования;
-ожидаемое число ошибок в программе.
Для каждой характеристики следует рассчитать как саму характеристику, так и ее оценку.
Расчет оценок программ выполнить двумя способами:
1) вручную или с помощью одного из доступных пакетов математических вычислений DERIVE, MATHCAD или MATLAB.
2) с помощью программы автоматизации расчета метрик Холстеда.
{ adapted from 'Introduction to PASCAL',
R.Zaks, Sybex, 1980 }
var no_change : boolean;
j : integer;
var hold : real;
begin
hold:=p;
q:=hold
repeat
for j:=1 to n-1 do
begin
if a[j]>a[j+1] then
swap(a[j],a[j+1]);
no_change:=false
end
until no_change
end; { procedure sort }
Общие сведения
Сортировка методом пузырька
Сравниваем первый и второй элементы массива. Если первый элемент больше, чем второй, то меняем их местами.
Сравниваем второй и третий элементы массива. Если второй элемент больше, чем третий, то меняем их местами.
...
В результате самым последним элементом в массиве у нас окажется самый большой элемент.
Повторяем вышеуказанные действия для части массива, начиная с 1 позиции до N-1.
Второй шаг сортировки методом пузырька
Сравниваем первый и второй элементы массива. Если первый элемент больше, чем второй, то меняем их местами.
Сравниваем второй и третий элементы массива. Если второй элемент больше, чем третий, то меняем их местами.
...
В результате предпоследний элемент в массиве у нас тоже будет на своем, "отсортированном" месте.
Повторяем вышеуказанные действия для части массива, начиная с 1 позиции до N-2, а потом для диапазона 1..N-3 и так далее до диапазона 1..2.
На этапе отладки, в программе использовался диалог с пользователем и вывод информации на экран. В финальной версии, в соответствие с требованиями к лабораторной работе, данные функции были удалены.
program lab1;
type ary = array [1..10] of real;
procedure sort(var a: ary; n: integer);
var no_change : boolean;
j : integer;
var hold : real;
begin
hold:=p;
q:=hold
repeat
for j:=1 to n-1 do
begin
if a[j]>a[j+1] then
swap(a[j],a[j+1]);
no_change:=false
end
until no_change
end;
var mass: ary; i: integer;
begin
sort(mass, 10);
end.
C
typedef float ary[10];
{
float hold = p;
q = hold;
}
void sort(ary a, int n)
{
int change;
change = 0;
for (int j=0; j {
if (a[j] > a[j+1])
{
swap(a[j],a[j+1]);
change=1;
}
}
while (change);
}
void main()
{
ary mass;
sort(mass,10);
}
Assembler
;
; void swap(float &p;,float &q;)
assume cs:_TEXT
@swap$qrft1 proc near
push bp
sub sp,4
push di
mov di,word ptr [bp+6]
;
; {
;
fld dword ptr [si]
;
; p = q;
fld dword ptr [di]
fstp dword ptr [si]
;
; q = hold;
fwait
mov dx,word ptr [bp-4]
mov word ptr [di+2],ax
mov word ptr [di],dx
;
; }
pop di
mov sp,bp
pop bp
ret
;
; void sort(ary a, int n)
assume cs:_TEXT
@sort$qpfi proc near
push bp
sub sp,4
push di
@2@30:
; {
; do {
;
mov word ptr [bp-2],0
; for (int j=0; j ;
xor si,si
jmp short @2@170
@2@86:
; {
;
mov bx,si
shl bx,cl
fld dword ptr [bx+di]
mov bx,si
inc bx
mov cl,2
fcomp dword ptr [bx+di]
fstsw word ptr [bp-4]
fwait
sahf
;
; {
;
mov ax,si
mov cl,2
mov dx,di
add dx,ax
push dx
mov cl,2
mov dx,di
add dx,ax
push dx
pop cx
;
; change=1;
mov word ptr [bp-2],1
@2@142:
inc si
mov ax,word ptr [bp+6]
dec ax
cmp ax,si
;
; }
; }
;
cmp word ptr [bp-2],0
;
; }
pop di
mov sp,bp
pop bp
ret
;
; void main()
assume cs:_TEXT
_main proc near
push bp
sub sp,42
push si
;
; {
; for (int i=0; i<10; i++) mass[9-i] = i+1;
;
xor si,si
@3@58:
inc ax
fild word ptr [bp-2]
mov bx,9
sub bx,si
mov cl,2
shl bx,cl
lea ax,word ptr [bp-42]
add bx,ax
fstp dword ptr [bx]
fwait
@3@114:
jl short @3@58
;
; sort(mass,10);
mov ax,10
push ax
lea ax,word ptr [bp-42]
call near ptr @sort$qpfi
pop cx
pop cx
; }
pop si
pop bp
end
Операторы |
Операнды | ||||
№ |
Оператор |
Число вхождений |
№ |
Операнд |
Число вхождений |
1 |
() или begin end |
5 |
1 |
1 |
6 |
2 |
+ |
2 |
2 |
10 |
3 |
3 |
- |
2 |
3 |
11 |
1 |
4 |
; |
17 |
4 |
a |
5 |
5 |
:= |
8 |
5 |
i |
4 |
6 |
> |
1 |
6 |
j |
6 |
7 |
[] |
5 |
7 |
n |
2 |
8 |
for |
2 |
8 |
p |
3 |
9 |
if |
1 |
9 |
q |
3 |
10 |
program |
1 |
10 |
true |
1 |
11 |
repeat |
1 |
11 |
false |
1 |
12 |
sort |
2 |
12 |
no_change |
4 |
13 |
swap |
2 |
13 |
mass |
3 |
14 |
type |
1 |
14 |
lab1 |
1 |
15 |
array |
1 |
15 |
hold |
3 |
|
|
|
16 |
ary |
1 |
|
Итого: |
51 |
|
Итого: |
47 |
Операторы |
Операнды | ||||
№ |
Оператор |
Число вхождений |
№ |
Операнд |
Число вхождений |
1 |
() или {} |
7 |
1 |
0 |
3 |
2 |
+ |
3 |
2 |
1 |
5 |
3 |
- |
2 |
3 |
9 |
1 |
4 |
; |
16 |
4 |
10 |
3 |
5 |
= |
8 |
5 |
a |
5 |
6 |
> |
1 |
6 |
i |
5 |
7 |
[] |
5 |
7 |
j |
7 |
8 |
++ |
2 |
8 |
p |
3 |
9 |
< |
2 |
9 |
q |
3 |
10 |
do while |
1 |
10 |
n |
2 |
11 |
for |
2 |
11 |
mass |
3 |
12 |
if |
1 |
12 |
hold |
2 |
13 |
main |
1 |
13 |
change |
4 |
14 |
sort |
2 |
|
|
|
15 |
swap |
2 |
|
|
|
16 |
typedef |
1 |
|
|
|
17 |
ary[] |
1 |
|
|
|
18 |
& |
2 |
|
|
|
|
Итого: |
59 |
|
Итого: |
46 |
Операторы |
Операнды | ||||
№ |
Оператор |
Число вхождений |
№ |
Операнд |
Число вхождений |
1 |
jmp @2@170 |
1 |
1 |
bp |
12 |
2 |
jbe @2@142 |
1 |
2 |
sp |
9 |
3 |
jg @2@86 |
1 |
3 |
si |
23 |
4 |
jne @2@30 |
1 |
4 |
cs |
3 |
5 |
jmp @3@114 |
1 |
5 |
di |
10 |
6 |
jl @3@58 |
1 |
6 |
ax |
22 |
7 |
call ptr @sort$ |
1 |
7 |
dx |
8 |
8 |
callptr @swap$ |
1 |
8 |
cl |
10 |
9 |
assume |
3 |
9 |
bx |
10 |
10 |
push |
12 |
10 |
cx |
4 |
11 |
mov |
32 |
11 |
[bp+4] |
2 |
12 |
sub |
4 |
12 |
[bp+6] |
2 |
13 |
fld |
3 |
13 |
[bp-4] |
4 |
14 |
fstp |
2 |
14 |
[bp-2] |
6 |
15 |
fwait |
3 |
15 |
[di+2] |
1 |
16 |
pop |
12 |
16 |
[bx+di] |
2 |
17 |
ret |
3 |
17 |
[bp-42] |
2 |
18 |
end |
1 |
18 |
10 |
2 |
19 |
xor |
2 |
19 |
9 |
1 |
20 |
shl |
5 |
20 |
4 |
2 |
21 |
inc |
5 |
21 |
42 |
1 |
22 |
fcomp |
1 |
22 |
2 |
5 |
23 |
fstsw |
1 |
|
|
|
24 |
sahf |
1 |
|
|
|
25 |
add |
3 |
|
|
|
26 |
dec |
1 |
|
|
|
27 |
cmp |
3 |
|
|
|
28 |
fild |
1 |
|
|
|
29 |
lea |
2 |
|
|
|
30 |
, |
51 |
|
|
|
|
Итого: |
159 |
|
Итого: |
141 |
|
Pascal |
C |
Assembler |
Формула |
Число уникальных операторов (n1): |
15 |
18 |
30 |
|
Число уникальных операндов (n2): |
16 |
13 |
22 |
|
Общее число операторов (N1): |
51 |
59 |
159 |
|
Общее число операндов (N2): |
47 |
46 |
141 |
|
словарь программы (n): |
31 |
31 |
52 |
n= n1+ n2 |
Экспериментальная длина программы (Nэ): |
98 |
105 |
300 |
Nэ= N1+ N2 |
| ||||
Теоретическая длина программы ( ![]() |
122,60 |
123,16 |
245,31 |
![]() |
Объём программы (V): |
485,51 |
520,19 |
1710,13 |
V = Nэ log2 n |
Потенциальный объём (V*): |
15,51 |
15,51 |
15,51 |
V* = (2+ 2*) log2( 2+ 2*) (2=4 – количество параметров) |
Граничный объем (Vгр ) |
25,85 |
25,85 |
25,85 |
![]() |
Уровень программы (L): |
0,032 |
0,030 |
0,009 |
L = ![]() |
Сложность программы (S): |
31,30 |
33,54 |
110,26 |
![]() |
Оценка уровня программы (L^): |
0,045 |
0,031 |
0,010 |
![]() |
Интеллект программы (I): |
22,04 |
16,33 |
17,79 |
![]() ![]() |
Работа по программированию (Е): |
15198 |
17446 |
188561 |
E = ![]() |
Время программирования (T): |
1520 |
1745 |
18856 |
T= ![]() |
Ожидание времени кодирования (T^): |
1338 |
1943 |
13443 |
![]() |
Уровень языка программирования (): |
0,495 |
0,462 |
0,141 |
= LV* |
Ожидаемое число ошибок (В): |
0,16 |
0,17 |
0,57 |
B= V / 3000 |
Вычисления проводились при ETA=4 (две процедуры по два параметра)
Table:
Operators:
| 1 | 5 | ()
| 2 | 2 | +
| 3 | 2 | -
| 4 | 21 | ;
| 5 | 7 | =
| 6 | 1 | >
| 7 | 5 | []
| 8 | 2 | for
| 9 | 1 | if
| 10 | 1 | program
| 11 | 1 | repeat
| 12 | 2 | sort
| 13 | 2 | swap
| 14 | 1 | type
Operands:
| 1 | 6 | 1
| 2 | 3 | 10
| 3 | 1 | 11
| 4 | 5 | a
| 5 | 1 | ary
| 6 | 1 | false
| 7 | 3 | hold
| 8 | 3 | i
| 9 | 5 | j
| 10 | 1 | lab1
| 11 | 3 | mass
| 12 | 2 | n
| 13 | 4 | no_change
| 14 | 3 | p
| 15 | 3 | q
| 16 | 1 | true
Summary:
=====================================
The number of different operators : 14
The number of different operands : 16
The total number of operators : 53
The total number of operands : 45
Dictionary ( D) : 30
Length ( N) : 98
Length estimation ( ^N) : 117.303
Volume ( V) : 480.875
Potential volume ( *V) : 15.5098
Limit volume (**V) : 25.8496
Programming level ( L) : 0.0322532
Programming level estimation ( ^L) : 0.0507937
Intellect ( I) : 24.4254
Time of programming ( T) : 828.299
Time estimation ( ^T) : 629.555
Programming language level (lambda) : 0.50024
Work on programming ( E) : 14909.4
Error ( B) : 0.201923
Error estimation ( ^B) : 0.160292
C
Table:
Operators:
| 1 | 6 | ()
| 2 | 3 | +
| 3 | 2 | ++
| 4 | 4 | ,
| 5 | 2 | -
| 6 | 20 | ;
| 7 | 2 | <
| 8 | 8 | =
| 9 | 1 | >
| 10 | 5 | []
| 11 | 1 | _[]
| 12 | 2 | __&
| 13 | 1 | dowhile
| 14 | 2 | for
| 15 | 1 | if
| 16 | 1 | main
| 17 | 2 | sort
| 18 | 2 | swap
| 19 | 1 | typedef
Operands:
| 1 | 3 | 0
| 2 | 5 | 1
| 3 | 3 | 10
| 4 | 1 | 9
| 5 | 5 | a
| 6 | 4 | change
| 7 | 2 | hold
| 8 | 5 | i
| 9 | 7 | j
| 10 | 3 | mass
| 11 | 2 | n
| 12 | 3 | p
| 13 | 3 | q
Summary:
=====================================
The number of different operators : 19
The number of different operands : 13
The total number of operators : 66
The total number of operands : 46
Dictionary ( D) : 32
Length ( N) : 112
Length estimation ( ^N) : 128.816
Volume ( V) : 560
Potential volume ( *V) : 15.5098
Limit volume (**V) : 25.8496
Programming level ( L) : 0.027696
Programming level estimation ( ^L) : 0.0297483
Intellect ( I) : 16.659
Time of programming ( T) : 1123.31
Time estimation ( ^T) : 1202.84
Programming language level (lambda) : 0.429559
Work on programming ( E) : 20219.5
Error ( B) : 0.247396
Error estimation ( ^B) : 0.186667
Выводы
В результате выполнения лабораторной работы заданный алгоритм сортировки был реализован на различных языках программирования (Pascal, C, Assembler). Для созданных программ были оценены метрические характеристики (измеримые и расчетные) по Холстеду.
Расчёт метрических характеристик качества разработки программ по метрикам Холстеда
15 12 2014
1 стр.
Изучение назначения, принципа действия, устройства и характеристик тензорезисторов; экспериментальное определение их характеристик
13 10 2014
1 стр.
Овладеть методикой снятия вольт-амперных характеристик (вах) нелинейных элементов
11 10 2014
1 стр.
23 09 2014
1 стр.
12 09 2014
1 стр.
Назначение метрического анализа программ. Понятие метрики. Типы метрик и шкал. Понятие критерия оценки качества. Функциональные и конструктивные критерии оценки качества программ
15 12 2014
9 стр.
Что должно быть получено в результате его выполнения
14 10 2014
1 стр.
Становки для экспериментального исследования работы оптрона на постоянном и переменном токе. Излагается последовательность выполнения измерений при снятии характеристик оптрона
14 12 2014
1 стр.