Трассировка программы

Аспекты структуры данных, построения и выдачи дерева вызовов процедур. Роль и использование модулей в программе. Их функциональная схема и описание составляющих частей, производимые ими операции. Особенности листинга и результатов работы программы.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 24.04.2009
Размер файла 30,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

17

11

Содержание

1. Задание

2. Использование модулей в программе

3. Структура данных

4. Функциональная схема

5. Описание программы и подпрограмм

6. Листинг программы

7. Результат работы программы

1. Задание

Трассировка программы, не содержащей рекурсивных вызовов и повторяющихся имен процедур, распечатана в виде списка выполняемых процедур. Процедура попадает в список, если к ней произошло обращение из вызывающей процедуры, либо возврат управления из вызванной ей процедуры. Структура программы такова, что каждая вызываемая процедура вложена в вызывающую ее процедуру. Начало и окончание программы должны быть в головной процедуре. Известен объем памяти, который требуется для загрузки каждой процедуры. При выходе из процедуры занимаемая ей память освобождается. Построить и выдать дерево вызовов процедур. Определить размер памяти, необходимый для работы программы, и цепочку вызовов, требующую максимальной памяти.

2. Использование модулей в программе

Модуль Crt содержит процедуры и функции управления тестовым выводом на экран дисплея, и чтения клавиатуры.

Стандартные процедуры (модуля crt)

clrscr - очищает экран и помещает курсор в левый верхний угол.

gotoxy - перемещает курсор по заданным координатам.

textcolor - задает цвет выводимого на экран текста.

textbackground - задает цвет экрана.

readkey- читает символ из буфера клавиатуры.

3. Структура данных

type

ukaz=^derevo;

derevo= record

name: string[20];

pr: char;

memory: integer;

vniz: ukaz;

next:ukaz;

vverh: ukaz;

vpravo: ukaz;

end;

var

t, ver, p, pp, p_p, del_p, p_del, temp,nachalo: ukaz;

znak: boolean;

ch: char;

a:array[1..100] of integer;

mas:array[1..50] of string[3];

b:array[1..50] of string;

c:array[1..40] of string;

Proced:array[1..50] of string;

Ukazat:array[1..50] of ukaz;

s,d,m,w,memorys,most,ind,proverka3,proverka,proverka2,chislo:integer;

str,stroka,most2,koren,st2,filename,st,st1,chislo_str: string;

i, x, y, j, k, n: byte;

mnog: set of byte;

f,f_memory:text;

Derevo- запись с несколькими полями : name- имя вершины дерева; memory- кол-во занимаемой процедурой памяти при её вызове ; pr- признак вершин(листовая или не листовая вершина); vniz, next, vverh, vpravo - указатели связи.

t, ver, p, pp, p_p, del_p, p_del, temp,nachalo- указатели используемые при построении дерева.

znak- логическая переменная используемая для определения признака вершины.

a- массив содержащий длины всех возможных путей обхода нашего дерева.

b- массив содержащий все возможные пути обхода нашего дерева.

c- массив используемый в промежуточных действиях по нахождению путей обхода нашего дерева.

mas- массив используемый в промежуточных действиях по построению дерева.

Proced- массив содержащий трассировку вызова процедур.

Ukazat- массив содержащий указатели на вершины деревьев, используемые для более быстрого перехода на ту или иную вершину при построении дерева.

s,d,m,w,memorys,most,ind,chislo,i, x, y, j, k, n,mnog - целочисленные переменные (счетчики, идентификаторы и т.д.).

proverka3,proverka,proverka2- флаги, используемые при проверке соответствия данных о количестве памяти требуемой при вызове процедур к самим процедурам.

str,most2,koren,stroka,st,st1,chislo_str- переменные используемые при различных операциях над строками(перевод строки в число, получение путей обхода дерева и т.д.).

filename- переменная используемая при вводе имени и пути файла содер-го трассировку.

f,f_memory- текстовые файлы содержащие трассировку и кол-во памяти процедур.

ch- переменная, используемая при запросах на повторение циклов в программе.

4. Функциональная схема

17

11

5. Описание программы и подпрограмм

Программа написана на языке Borland Pascal 7.1. Программа состоит из главной программы и подпрограмм

Описание подпрограмм

Soob : процедура, запрашивающая о дальнейшем действии программы после ошибки ввода пути или имени файла, в котором хранится трассировка вызова подпрограмм: произвести остановку программы или попробовать еще раз ввести правильный путь.

Faile : Процедура ввода пути и имени файла в котором хранится трассировка вызова подпрограмм. Если не было ошибок, трассировка считывается в массив.

Preobraz : Процедура замены строчных букв на прописные.

Poisk_memory : Процедура считывающая из текстового файла кол-во памяти соответствующей той или иной вызываемой процедуре.

New_tree : Процедура построения нашего дерева вызова процедур на основе указателей.

Listing : Процедура прорисовки получившегося дерева для более наглядного вида.

Poisk : Процедура поиска на дереве вызова процедур пути максимального веса.

6. Листинг программы

Procedure soob(mess:string); {Процедура ,запрашивающая о дальнейшем действии}

begin {программы после ошибки ввода пути или имени}

Writeln(mess); {файла ,в котором хранится трассировка вызова}

repeat {подпрограмм: произвести остановку программы}

writeln('Exit Y\N'); {или попробовать еще раз ввести правильный путь}

ch:=readkey;

if (ch<>#121) or (ch<>#110) then GotoXY(1,3);

if ch=#121 then Halt;

if ch=#110 then break;

until false;

end;

Procedure Faile; {Процедура ввода пути и имени файла в котором}

begin {хранится трассировка вызова подпрограмм .Если}

repeat {не было ошибок трассировка считывается в массив.}

clrscr;

Write('Введите путь и имя файла : ');

Readln(filename);

if filename='' then soob ('Файл не задан')

else assign (f,filename);

{$i-}

Reset(f);

{$i+}

if Ioresult=0 then break

else if filename<>'' then soob ('Ошибка открытия или данный файл не существует !');

until false;

m:=1;

while not eof(f) do

begin

readln(f,st);

for i:=1 to length(st) do

begin

if st[i]<>',' then

begin

stroka:=stroka+st[i];

end

else

begin

Proced[m]:=stroka;

m:=m+1;

stroka:='';

end;

end;

Proced[m]:=stroka;

end;

end;

Procedure Poisk; {Процедура поиска на дереве вызова процедур}

begin {пути максималного веса.}

for i:=1 to 2 do

for m:=2 to s-1 do

begin

if a[i]<a[m] then

begin

most:=a[i];

a[i]:=a[m];

a[m]:=most;

most2:=b[i];

b[i]:=b[m];

b[m]:=most2;

end;

end;

end;

Procedure Poisc_memory; {Процедура считывающая из текстового файла}

begin {кол-во памяти соответствующей той или иной}

Assign(f_memory,'c:\memory.txt'); {вызываемой процедуре.}

reset(f_memory);

proverka2:=0;

proverka:=0;

proverka3:=0;

chislo_str:='';

while not eof(f_memory) do

begin

i:=0;

readln(f_memory,st2);

while i<>length(st2) do

begin

i:=i+1;

if st2[i]=proced[ind] then

begin

proverka2:=1;

proverka:=1;

break;

end;

end;

if proverka=1 then break;

end;

if proverka2=0 then

begin

writeln('Для процедуры ',proced[ind],' не задано кол-во памяти!');

ch:=readkey;

proverka3:=1;

exit;

end

else

begin

repeat

i:=i+1;

if st2[i]='(' then

begin

i:=i+1;

while st2[i]<>')' do

begin

if st2[i]='(' then

begin

write('В текстовом файле синтаксическая ошибка!');

ch:=readkey;

exit;

end;

chislo_str:=chislo_str+st2[i];

i:=i+1;

end;

end;

until st2[i]=')';

end;

chislo:=0;

stroka:=chislo_str;

for j:=1 to length(stroka) do

begin

if (ord(stroka[j])>47) and (ord(stroka[j])<58) then chislo:=chislo*10+(ord(stroka[j])-48);

end;

close(F_memory);

end;

Procedure listing; {Процедура прорисовки получившегося дерева}

begin {для более наглядного вида.}

x:=0;

window(1,1,80,25);

clrscr;

stroka:='';

mnog:=[];

pp:=ver;

t:=pp;

writeln(pp^.name);

s:=1;

repeat

if (pp^.vniz<>nil) or (pp^.vpravo<>nil) then

begin

if pp^.vpravo<>nil then

begin

pp:=pp^.vpravo;

b[s]:=b[s]+'-'+pp^.name;

a[s]:=a[s]+pp^.memory;

x:=x+1;

t:=pp^.vverh;

if t^.vniz=nil then mnog:=mnog+[x-1]

else mnog:=mnog-[x-1];

end

else if pp^.vniz<>nil then

begin

stroka:=b[s];

for i:=1 to length(b[s])-1 do

begin

c[i]:=stroka[i];

b[s+1]:=b[s+1]+c[i];

end;

s:=s+1;

a[s]:=a[s-1]-pp^.memory;

pp:=pp^.vniz;

b[s]:=b[s]+pp^.name;

a[s]:=a[s]+pp^.memory;

end;

end

else

begin

w:=1;

s:=s+1;

a[s]:=a[s-1]-pp^.memory;

repeat

w:=w+1;

pp:=t;

a[s]:=a[s]-pp^.memory;

x:=x-1;

if t^.vniz<>nil then mnog:=mnog-[x];

if pp=ver then exit;

repeat

t^.pr:='o';

t:=t^.vverh;

w:=w+1;

until t^.pr='t';

until pp^.vniz<>nil;

if t<>ver then

begin

stroka:=b[s-1];

for i:=1 to length(b[s-1])-w do

begin

c[i]:=stroka[i];

b[s]:=b[s]+c[i];

end;

end;

pp:=pp^.vniz;

b[s]:=b[s]+pp^.name;

a[s]:=a[s]+pp^.memory;

end;

if pp<>t then

begin

for i:=1 to (x-1) do

begin

if (not (i in mnog)) then write('¦ ')

else write(' ');

end;

if pp^.vniz=nil then write('L---<')

else write('+---<');

writeln(pp^.name,'> "',pp^.memory,'"');

end;

until pp=t;

end;

Procedure preobraz; {Процедура замены строчных букв на прописные}

begin

for i:=1 to length(str) do

begin

case ord(str[i]) of

97..122, 160..175: str[i]:=chr(ord(str[i])-32);

224..239: str[i]:=chr(ord(str[i])-80);

241: str[i]:=chr(ord(str[i])-1);

end;

end;

end;

Procedure new_tree; {Процедура построения нашего дерева вызова}

BEGIN {процедур на основе указателей.}

new(p);

ver:=p;

pp:=p;

t:=pp;

t^.pr:='o';

pp^.vniz:=nil;

pp^.vpravo:=nil;

mas[1]:=proced[1];

str:=proced[1];

preobraz;

koren:=str;

pp^.name:=str;

ukazat[1]:=ver;

ind:=1;

REPEAT

for i:=1 to ind do

begin

if mas[i]=proced[ind+1] then znak:=true;

end;

if not znak then

begin

if p^.pr='t' then

begin

p:=p^.vpravo;

pp:=p;

if p^.vniz=nil then

begin

ind:=ind+1;

new(p);

pp^.vniz:=p;

p^.vverh:=pp;

pp:=p;

p^.pr:='o';

str:=proced[ind];

Poisc_memory;

pp^.memory:=chislo;

preobraz;

pp^.name:=str;

pp^.vniz:=nil;

pp^.vpravo:=nil;

mas[ind]:=proced[ind];

ukazat[ind]:=p;

znak:=false;

end

else

begin

repeat

p:=p^.vniz;

until p^.vniz=nil;

pp:=p;

ind:=ind+1;

new(p);

pp^.vniz:=p;

p^.vverh:=pp;

pp:=p;

p^.pr:='o';

str:=proced[ind];

Poisc_memory;

pp^.memory:=chislo;

preobraz;

pp^.name:=str;

pp^.vniz:=nil;

pp^.vpravo:=nil;

mas[ind]:=proced[ind];

ukazat[ind]:=p;

znak:=false;

end;

end

else

begin

p^.pr:='t';

ind:=ind+1;

new(p);

pp^.vpravo:=p;

p^.vverh:=pp;

pp:=p;

p^.pr:='o';

str:=proced[ind];

Poisc_memory;

pp^.memory:=chislo;

preobraz;

pp^.name:=str;

pp^.vniz:=nil;

pp^.vpravo:=nil;

mas[ind]:=proced[ind];

ukazat[ind]:=p;

end;

end

else

begin

j:=0;

repeat

j:=j+1;

until mas[j]=proced[ind+1];

p:=ukazat[j];

pp:=p;

znak:=false;

ind:=ind+1;

end;

UNTIL ind=m;

p:=ver;

p^.pr:='t';

END;

BEGIN {Основная программа.}

textcolor(15);

clrscr;

Faile;

new_tree;

if proverka3=1 then exit;

if (ver^.vpravo<>nil) then listing;

Poisk;

Writeln;

Writeln('Путь занимающий наибольшее кол-во памяти : ',koren+b[1] );

Writeln('Его сумма составляет :',a[1]);

readln;

END.

7. Результат работы программы


Подобные документы

  • Разработка программы, моделирующей игру "Кости". Использование в программе генератора псевдослучайных чисел. Схема иерархии модулей. Описание работы программы. Регистрация игрока, окно программы. Определение языка программирования, основные операторы.

    курсовая работа [3,2 M], добавлен 29.07.2010

  • Проектирование пользовательского интерфейса. Выбор формата представления данных, используемые переменные. Список процедур и макросов, их назначение. Используемые в программе функции. Тестирование и отладка правильной работы программы, схема листинга.

    курсовая работа [28,6 K], добавлен 17.05.2013

  • Разработка полноценной правильно функционирующей игровой программы "Парные картинки", изучение процедур и функций. Использование масштабируемых средств для построения баз данных. Компоненты Delphi в программе. Описание пользовательского интерфейса.

    курсовая работа [1,3 M], добавлен 13.07.2012

  • Изучение условий поставленной задачи и используемых данных для разработки программы хранения информации о рейсах поезда. Описание разработанных функций, листинга, блок-схем алгоритмов и дерева функции. Рассмотрение сценария диалога данной программы.

    курсовая работа [532,7 K], добавлен 20.07.2014

  • Характеристика программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит результаты на экран. Описание переменных в программе, ее блок-схема и алгоритм работы. Листинг программы. Описание входных данных и результат вычислений.

    курсовая работа [721,4 K], добавлен 10.11.2010

  • Особенности работы с процедурами и двумерными массивами, последовательность вызова процедур. Способы описания и использования многомерных массивов, назначение процедур, их описание и обращение к ним. Набор программы, ее отладка и тестирование данных.

    лабораторная работа [112,1 K], добавлен 03.10.2010

  • Использование класса статических массивов структур и базы данных "ODER" при создании программы на языке С++. Основные формы выдачи результатов. Технические и программные средства. Тесты для проверки работоспособности алгоритма создания программы.

    курсовая работа [1,1 M], добавлен 17.03.2015

  • Разработка программы для работы с множеством данных, перечень и работа ее модулей. Проверка работы программы. Реализация поиска элемента в файле по его номеру и добавление элементов в конец уже созданного НД. Возможности и особенности применения программы

    курсовая работа [3,5 M], добавлен 22.06.2012

  • Графическая схема алгоритма выполнения программы определения запасов сырья. Решение задачи с помощью программы MS Excel. Разработка макроса для построения диаграммы. Использование интерфейса программы для работы с таблицей. Разработка базы данных.

    курсовая работа [1,2 M], добавлен 24.04.2014

  • Создание программы, работающей с набором данных на внешнем устройстве. Описание программного комплекса. Обзор структуры главной программы. Процедура добавления новых элементов, поиска и создания на экране вертикального меню. Проверка работы программы.

    курсовая работа [265,6 K], добавлен 28.08.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.