Сделай Сам Свою Работу на 5

Построение блок-схемы кода, состоящего из конструкций “Cледование”, операторов if и while





ВВЕДЕНИЕ

 

В работе программиста часто возникает необходимость описания используемых алгоритмов. Существуют следующие способы описания алгоритмов:

1) запись на естественном языке (словесное описание);

2) изображение в виде схемы (графическое описание);

3) запись на алгоритмическом языке (составление программы).

Графический способ представления алгоритмов является более компактным и наглядным по сравнению со словесным описанием.

При графическом исполнении алгоритм изображается в виде последовательности связанных между собой символов, каждый из которых соответствует выполнению одного из действий. Такое графическое представление называется схемой алгоритма или блок-схемой. В блок-схеме каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий, управлению повторением действий, окончанию обработки и т.п.) соответствует геометрическая фигура, представленная в виде блочного символа. Блочные символы соединяются линиями переходов, определяющими очередность выполнения действий.

Понятие графический способ описания алгоритмов так же достаточно обширное. Существует несколько способов графического описания, но наиболее распространенными считаются следующие:



1) в соответствии с ГОСТ 19.701-90;

2) метод Дамке;

3) схемы Насси-Шнейдермана.

Однако только блок-схемы по ГОСТ 19.701-90 являются допустимыми в соответствии с Единой системой программной документации. Согласно ГОСТ все символы, используемые в блок-схемах, разделены на 4 группы: символы данных, символы процесса, символы линий, специальные символы.

Из символов данных в схемах алгоритмов позволяется использовать только символ “Данные”.

Из символов процесса следующие символы:

1) символ “Процесс”;

2) символ “Предопределенный процесс”;

3) символ “Решение”;

4) символ “Граница цикла”.

Из специальных символов следующие символы:

1) символ “Соединитель”;

2) символ “Терминатор”;

3) символ “Комментарий”.

Также в схемах алгоритмов позволяется использовать следующие символы линии:

1) символ “Линия”;

2) символ “Пунктирная линия”.

Как видно из данной классификации ГОСТ 19.701-90 имеет чёткую структуру и представляет собой систему правил для представления алгоритма с помощью графического описания.



В тоже время запись на алгоритмическом языке является наиболее простой для восприятия алгоритма компьютером, а язык программирования Pascal, также как и ГОСТ 19.701-90, обладает чёткой системой правил для представления алгоритма.

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

В рамках данной курсовой работы будет разработано программное средство для построения блок-схем алгоритмов по исходному коду на языке программирования Pascal.


ПОСТАНОВКА ЗАДАЧИ

 

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

1. Анализ и разбиение исходного кода на отдельные операторы, языковые конструкции.

2. Построение блок-схемы кода, состоящего из конструкций “Cледование”, операторов if и while.

3. Анализ конструкций с операторными скобками.

4. Анализ кода, содержащего операторы repeat и for.

5. Анализ кода, содержащего оператор case.

6. Анализ кода и выделение тел процедур и функций, основной программы. Построение блок-схем кода, содержащего подпрограммы.

7. Сохранение блок-схем в виде изображений, структурированных файлов. Чтение блок-схем из файлов.

8. Сохранение и чтение исходного кода из текстовых файлов.



9. Изменение внешнего вида блок-схемы.

ПРОЕКТИРОВАНИЕ ПРОГРАММНОГО СРЕДСТВА

 

Анализ и разбиение исходного кода на отдельные операторы, языковые конструкции

 

В рамках данного этапа необходимо определить границы отдельных операторов и языковых конструкций для их дальнейшего анализа. Для этих целей можно использовать тот факт, что для обозначения конца оператора в языке Pascal используется символ ‘;’. Однако следует учесть, что синтаксис языка программирования позволяет опускать или даже запрещает использовать данный символ в некоторых ситуациях, как то: факультативность знака ‘;’ перед ключевым словом end или запрет его использования перед ключевым словом else. Так же следует отметить отсутствие знака ‘;’ между заголовками составных операторов и вложенными в них командами, которые так же было бы удобно отделить для прощения дальнейшей обработки исходного кода.

Реализацией данного пункта в программе является функция Simply модуля TextAnalizerUnit. Текст данной функции:

function Simply (code:string):TStringList;

var

i:Integer;

//Позиция комбинации “end.” в исходной строке

posit:Integer;

//Временная строка, используемая при выделении текущего //оператора

t:string;

begin

Result:=TStringList.Create;

 

//Исключение из рассмотрения текста после комбинации “end.”, так как //данный текст должен игнорироваться компилятором и не должен //быть включен в блок-схему.

posit:=Pos('end.',AnsiLowerCase(code));

code:=Copy(code,1,posit+4);

 

//Вставка ';' до некоторых ключевых слов таких как else и end. Так как //согласно синтаксису языка Pascal “;” перед ними факультатива или //не позволительна, но при этом они не являются частью предыдущего //оператора

for i:= 1 to Length(BeforeSemic) do

code:=RePlace(code,BeforeSemic[i],';'+BeforeSemic[i]);

 

// Вставка ';' после некоторых ключевых слов таких как do, then и //другие. Эти слова не отделяются от следующих за нами операторов //символом “;”, но при этом не являются их частью

for i:= 1 to Length(AfterSemic) do

code:=RePlace(code,AfterSemic[i],AfterSemic[i]+';');

 

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

code:=DelComments(code);

 

//Разбиение кода на операторы используя символ ‘;’ в качестве //разделителя. Таким образом каждый оператор может быть рассмотрен //на следующих этапах отдельно от контекста.

Posit:=Pos(';',code);

while Posit <> 0 do

begin

//Добавление оператора

t:= Trim(Copy(code,1,Posit-1));

Result.Append(t);

//Удаление оператора из входной строки, так как его только //что рассмотрели

Delete(code,1,Posit);

//Переход к следующему символу ';'

Posit:=Pos(';',code);

end;

 

//Добавление кода от последней ';' до '.'. Так как он не //закрывается символом “;”, но при этом является частью //исходного кода и используется компилятором

Result.Append(Trim(Copy(code,1,Pos('.',code)-1)));

end.

 

Построение блок-схемы кода, состоящего из конструкций “Cледование”, операторов if и while

 

В рамках данного этапа необходимо из структуры, полученной на предыдущем шаге, выделить операторы if и while, конструкции “Следование”, конструкции, используемые в языке программирования, но не отображаемые в блок-схемах алгоритмов (ключевое слово uses, блок var и т.д.). Для этого используется тот факт, что в структуре, полученной в результате выполнения этапа 2.1, каждый оператор и заголовок составного оператора являются отдельными элементами списка. А значит можно утверждать, что оператор while был встречен тогда, когда первые 5 символов очередного элемента списка составляют слово “while”. Оператор if – когда первые 2 символа элемента списка составляют слово “if”. И некий оператор как часть конструкции “Следования” иначе. Для исключения из рассмотрения конструкций, не отображаемых в блок-схемах алгоритмов, используется тот факт, что все такие конструкции находятся за пределами операторных скобок begin-end, выделяющих раздел операторов.

Для построения схем после анализа исходного кода описаны следующие типы данных:

- TElSimple – блок “Процесс”;

- TElTerminater – блок “Терминатор”;

- TElSolve – блок “Решение”;

- TElInput – блок “Ввод-вывод”;

- TElIf – оператор if;

- TElOpenCycleBorder – блок “Граница цикла” открывающий;

- TElCloseCycleBorder – блок “Граница цикла” закрывающий;

- TElCycleWhile – оператор while.

Непосредственно для построения схемы используются типы TScheme(схема, последовательность блоков, имеющая название) и TElList (список блоков). Схема создаётся с использованием свойства Canvas типа TBitmap и отрисовывается на форме с помощью элемента управления TImage.

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.