Московский Государственный Технический Университет им.

Факультет “Информатика и системы управления”

Кафедра “Компьютерные системы и сети”

Лабораторная работа №3

по курсу “Технология программирования”

Оценка эффективности и качества программы.

Выполнил:

Группа: ВИУ6-71

Проверил: .

Москва 2007

Цель работы - изучить известные критерии оценки и способы повышения эффективности и качества программных продуктов.

Вариант №7

Программа должна генерировать массив вещественных чисел в диапазоне от –10 до 10 и определять все минимальные положительные элементы (программа - v7.pas).

Исходный код оригинальной программы

Листинг 1.

{Определение минимального положительного элемента}

Program cd;

Uses crt;

Const Nm=100;

Type Tmas=array [1..Nm,1..Nm] of integer;

Procedure MinPol(var Mt; N:integer; var min:integer);

var

i, j:integer;

M: Tmas absolute Mt;

begin

// Задаем начальное значение

for i:=1 to N do

for j:=1 to N do

if M[i, j]>0 then

begin

min:= M[i, j];

i:=N;

j:=N;

end;

// Определяем минимальный положительный

for i:=1 to N do

for j:=1 to N do

if( (M[i, j]<min) and (M[i, j]>0 )) then

min:=M[i, j];

end;

Var S:real; i, j,min, C,n:integer;

M:Tmas; x, y:integer;

begin

clrscr;

textcolor(14);

write('Введите N: ');

readln(N);

randomize;

for i:=1 to N do

for j:=1 to N do

M[i, j]:=random(20)-10;

MinPol(M, N,min);

x:=5; y:=8;

for i:=1 to N do

begin

for j:=1 to N do

begin

if M[i, j]=min then

C:=15

else

C:=10;

textcolor(C);

gotoxy(x, y);

НЕ нашли? Не то? Что вы ищете?

write(M[i, j]);

x:=x+7;

end;

y:=y+1;

x:=5;

end;

readkey;

end.

Исходный код оптимизированной программы

Листинг 2.

{Определение минимального положительного элемента}

Program cd;

Uses crt, baseunix;

Const Nm=100;

Type Tmas=array [1..Nm,1..Nm] of integer;

Procedure MinPol(const M: Tmas; N:integer; var min:integer);

var

i, j:integer;

begin

// Задаем начальное значение

for i:=1 to N do

for j:=1 to N do

if M[i, j]>0 then

begin

min:= M[i, j]; break;

end;

// Определяем минимальный положительный

for i:=1 to N do

for j:=1 to N do

if( (M[i, j]<min) and (M[i, j]>0 )) then

min:=M[i, j];

end;

Var i, j,min, C,n:integer;

M:Tmas;

begin

clrscr;

textcolor(14);

write('Введите N: ');

readln(N);

if((N<=0) and (N>Nm)) then

begin

writeln('Не верное значение N');

fpexit(1);

end;

randomize;

for i:=1 to N do

for j:=1 to N do

M[i, j]:=random(20)-10;

MinPol(M, N,min);

for i:=1 to N do

begin

for j:=1 to N do

begin

if M[i, j]=min then

C:=15

else

C:=10;

textcolor(C);

write(M[i, j]:5);

end;

writeln;

end;

readkey;

end.

Различия между оригинальным и оптимизированным кодом

Листинг 3

@@ -1,19 +1,15 @@

{Определение минимального положительного элемента}

Program cd;

-Uses crt;

+Uses crt, baseunix;

Const Nm=100;

-

Type Tmas=array [1..Nm,1..Nm] of integer;

-

-Procedure MinPol(var Mt; N:integer; var min:integer);

+Procedure MinPol(const M: Tmas; N:integer; var min:integer);

var

i, j:integer;

- M: Tmas absolute Mt;

begin

-

// Задаем начальное значение

for i:=1 to N do

for j:=1 to N do

@@ -35,21 +28,27 @@

end;

-Var S:real; i, j,min, C,n:integer;

- M:Tmas; x, y:integer;

-

+Var i, j,min, C,n:integer;

+ M:Tmas;

+

begin

+

clrscr;

textcolor(14);

write('Введите N: ');

readln(N);

+ if((N<=0) and (N>Nm)) then

+ begin

+ writeln('Не верное значение N');

+ fpexit(1);

+ end;

randomize;

for i:=1 to N do

for j:=1 to N do

M[i, j]:=random(20)-10;

+

MinPol(M, N,min);

- x:=5; y:=8;

for i:=1 to N do

begin

for j:=1 to N do

@@ -59,14 +58,10 @@

else

C:=10;

textcolor(C);

- gotoxy(x, y);

- write(M[i, j]);

- x:=x+7;

+ write(M[i, j]:5);

end;

- y:=y+1;

- x:=5;

+ writeln;

end;

-

readkey;

end.

Таблица 1. Оценка эффективности.

Исходная программа

Улучшенная программа

 

Критерий оценки

Недостатки

Колич-я

оценка

Улучшения

Колич-я

оценка

 

Время выполнения

Функция MinPol:

T=t=+ta[i, j]+2*t=

Печать результата

T=tgoto+t=+t++5+n*(2t=+3t+)

32

Tgoto+9+10n

Функция MinPol:

T=t=+ta[i,]j]

Печать результата

28

0

 

Оперативная память

Не используемые переменные – S:real (6 байт)

940Кб

Убраны не нужные переменные S:real (6 байт) x, y:integer (2 байта)

940Кб

Внешняя память

Отсутствуют

1189 байт

Отсутсвуют

1095 байт

Таблица 2. Оценка качества.

Правильность

Универсальность

Проверяемость

Точность

результатов

Недостатки

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

Входные данные не проверяются

Точность не требуется

Оценка


Заключение

Изучены известные критерии оценки и способы повышения эффективности и качества программных продуктов. Исследован пример рабочей программы (см. листинг 1) с целью определения ее эффективности и качества. Определены основные критерии оценки и количественные характеристики для заданной программы (см табл.1 ). Результаты оценки качества приведены в табл. 2.Предложен вариант повышения эффективности и улучшения качества для заданного примера (см листинг 2 и 3).