Санкт-Петербургский государственный электротехнический университет
Кафедра
МОЭВМ
Лабораторная
работа №1
Построение
операционных графовых моделей (ОГМ)
последовательных программ
Выполнил:
Виноградов М.Н.
Группа:
1382
Преподаватель:
Кирьянчиков В.А.
Санкт-Петербург
2006
-
Задание
Для
рассматривавшегося в лабораторных
работах курса «Метрология программного
обеспечения» (или курса "Качество и
надежность программного обеспечения")
индивидуального задания разработать
операционную модель управляющего графа
программы на основе схемы алгоритма и
ассемблерного представления программы.
При выполнении работы рекомендуется
для упрощения обработки графа и ПЦМ
исключить диалог при выполнении операций
ввода-вывода данных, а также привести
программу к структурированному виду.
Выбрать
вариант графа с нагруженными вершинами,
каждая из которых должна представлять
фрагмент программы, соответствующий
линейному участку или ветвлению. При
расчете вероятностей ветвлений, зависящих
от распределения данных, принять
равномерное распределение обрабатываемых
данных в ограниченном диапазоне
(например, [0,100] - для положительных чисел
или [-100,100] - для произвольных чисел). В
случае ветвлений, вызванных проверкой
выхода из цикла, вероятности рассчитываются
исходя априорных сведений о числе
повторений цикла. Сложные
случаи оценки вероятностей ветвлений
согласовать с преподавателем.
В
качестве параметров, характеризующих
потребление ресурсов, использовать
времена выполнения команд соответствующих
участков программы, задаваемые в тактах
процессора. Выполнить оценку времен
выполнения каждого линейного участка
и каждого ветвления в графе программы.
Оценку времен выполнения участков
производить либо с использованием
монитора (например, Sampler
или Vtune),
либо прямым подсчетом по тексту программы.
В последнем случае времена исполнения
команд процессора (в тактах) следует
выбирать из файла InstrX86.tim в соответствии
с типом и параметрами компьютера,
выбираемыми по номеру в списке группы.
-
Текст программы (Pascal)
Программа вычисляет корень уравнения
x2–2=0 методом Ньютона.
program
newdr1;
var x,x2 :
real;
alldone :
boolean;
error :
boolean;
procedure
func(x: real;
var
fx,dfx: real);
begin
fx:=x*x-2.0;
dfx:=2.0*x
end; {
func }
procedure
newton(var x: real);
const
tol = 1.0E-6;
var fx,dfx,dx,x1: real;
begin {
newton }
repeat
x1:=x;
func(x,fx,dfx);
if(abs(dfx)<tol)
then
begin
if(dfx>=0.0)
then dfx:=tol
else
dfx := -tol
end;
dx:=fx/dfx;
x:=x1-dx;
writeln('x=',x1,',fx=',fx,',dfx=',dfx);
until
abs(dx)<=abs(tol*x)
end; {
newton }
begin {
main program }
alldone:=false;
repeat
writeln;
write('First
guess (999. to exit): '); { first guess }
readln(x);
if
x=999. then alldone:=true
else
begin
newton(x);
writeln;
writeln('The
solution is ',x);
writeln
end
until
alldone
end.