Автор работы: Пользователь скрыл имя, 03 Сентября 2015 в 12:24, лабораторная работа
Цель работы – программа обработки данных, представленной на языке Паскаль, разработать вычислительный алгоритм и варианты программ его реализации на языках программирования Си и Ассемблер. Добиться, чтобы программы на Паскале и Си были работоспособны и давали корректные результаты (это потребуется в дальнейшем при проведении с ними измерительных экспериментов). Для получения ассемблерного представления программы можно либо самостоятельно написать код на ассемблере, реализующий заданный алгоритм, либо установить опцию Code generation/Generate assembler source при компиляции текста программы, представленной на языке Си. При этом в ассемблерном представлении программы нужно удалить директивы описаний и отладочные директивы, оставив только исполняемые операторы.
Цель работы – программа обработки данных, представленной на языке Паскаль, разработать вычислительный алгоритм и варианты программ его реализации на языках программи-рования Си и Ассемблер. Добиться, чтобы программы на Паскале и Си были работоспособны и давали корректные результаты (это потребуется в дальнейшем при проведении с ними измерительных экспериментов). Для получения ассемблерного представления программы можно либо самостоятельно написать код на ассемблере, реализующий заданный алгоритм, либо установить опцию Code generation/Generate assembler source при компиляции текста программы, представленной на языке Си. При этом в ассемблерном представлении программы нужно удалить директивы описаний и отладочные директивы, оставив только исполняемые операторы.
Теоретические сведения
Для каждой из разработанных программ (включая исходную программу на Паскале) определить следующие метрические характеристики (по Холстеду):
1. Измеримые характеристики
- число простых(отдельных)
- число простых (отдельных) операндов, в данной реализации;
- общее число всех операторов в данной реализации;
- общее число всех операндов в данной реализации;
- число вхождений j-го оператора в тексте программы;
- число вхождений j-го операнда в тексте программы;
- словарь программы;
- длину программы.
2. Расчетные характеристики программы:
- длину программы;
- реальный, потенциальный и граничный объемы программы;
- уровень программы;
- интеллектуальное содержание программы;
- работа программиста;
- время программирования;
- уровень используемого языка программирования;
ожидаемое число ошибок в программе.
Для каждой характеристики следует рассчитать как саму характеристику, так и ее оценку.
Расчет оценок программ
1) вручную или с помощью одного
из доступных пакетов
2) с помощью программы
Для варианта расчета с использованием программы автоматизации желательно провести анализ влияния учета тех или иных групп операторов исследуемой программы на вычисляемые характеристики за счет задания разных ключей запуска.
Результаты расчетов представить в виде таблиц с текстовыми комментариями.
Паскаль
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=
Время программирования 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 |
Информация о работе Определение метрических характеристик программы (по Холстеду)