Московский Государственный Технический Университет им.
Факультет “Информатика и системы управления”
Кафедра “Компьютерные системы и сети”
Лабораторная работа №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).


