Реферат: Интерпретация блок-схем

Матрица синтаксических переходов блока “Автоматические действия”


Состояние

Константа str

Константа

Идентифик.

(

[

;

1

2

3

5

Clock

Getch

Kbhit

Strlen

)

NULL

0 . . 1 . . . . . . . . . . . . . .
1 . . . 2\0 . . . 3 . . . . . . . . .
2 . . . . . . . 3 . . . . . . . . .
3 . 4 5 4\3 . . 6 . . 8 13 10 13 4\2 . . .
4 . . . . . 9 . 7 . . . . . . . . .
5 . . . . 4\0 9 . 7 . . . . . . . . .
6 . 4 5 4\3 . . . . . 8 13 . 13 4\2 . . .
7 . 4 5 4\3 . . . . . 8 13 . 13 4\2 . . .
8 . . . 4\3 . . . . . . . . . . . . .
9 . . 1 . . . . . . . . . . . . . Е
10 . . . 11 . . . . . . . . . . . . .
11 . . . . . . . . . . . . . . 12 . .
12 . . . . . 9 . . . . . . . . . . .
13 . . . 14 . . . . . . . . . . . . .
14 . . . . . . . . . . . . . . 4 . .

Матрица синтаксических переходов математического выражения


состояние

идентификатор

Константа str

Константа

1

2

5

Clock

Strlen

(

[

)

NULL

0 1 . 3 4 . 5 6 3\2 3\3 . . . .
1 . . . . 2 . . . . 3\0 Е . .
2 1 . 3 . . 5 6 3\2 3\3 . . . .
3 . . . . 2 . . . . . Е . .
4 1 . 3 . . 5 6 3\2 3\3 . . . .
5 . . . . . . . . 3\3 . . . .
6 . . . . . . . . 7 . . . .
7 . . . . . . . . . . 3 . .

Матрица синтаксических переходов блока “Подпрограмма”


Состояние

Константа str

идентификатор

[

;

,

2

Programm

NULL

0 . 1 . . . . 4 . .
1 . . 2 \ 0 . . 3 . . .
2 . . . . . 3 . . .
3 . . . . . . 4 . .
4 6 5 . . . . . . .
5 . . . . 4 . . . .
6 . . . 7 . . . . .
7 . . . . . . . . Выход

Матрица синтаксических переходов блоков “Метка” и “Безусловный переход”


Состояние

Константа

;

NULL

0 1 . . .
1 . 2 . .
2 . . . Выход

Матрица синтаксических переходов блока “Ветвление по условию”


состояние

Константа str

Константа

Идентификатор

(

[

!

;

NULL

0 . 1 2 3 \ 4 . 4 . . . .
1 . . . . . . 5 6 . .
2 . . . . 3 \ 0 . 5 6 . .
3 . . . . . . 5 6 . .
4 . . 2 . . . . . . .
5 . 1 2 1 \ 4 . 4 . . . .
6 . . . . . . . . . Выход

Вспомогательная матрица синтаксических переходов блока

“ Ветвление по условию ”


состояние

Константа str

Константа

идентификатор

(

[

!

)

NULL

0 . 1 2 3 \ 4 . 4 . . . .
1 . . . . . . 5 Выход . .
2 . . . . 3 \ 0 . 5 Выход . .
3 . . . . . . 5 Выход . .
4 . . 2 . . . . . . .
5 . 1 2 1 \ 4 . 4 . . . .

Матрица синтаксических переходов блока “Стрелка”


состояние

true

false

;

NULL

0 1 1 . . Выход
1 . . 2 . .
2 . . . . Выход

Матрица синтаксических переходов блока “Мультиветвление”


Состояние

Идентификатор

;

NULL

0 1 . . .
1 . 2 . .
2 . . . Выход

Матрица синтаксических переходов блока “Конец”


состояние

Return

;

(

NULL

0 1 . . . .
1 . 3 2 \ 3 . .
2 . 3 . . .
3 . . . . Выход

Приложение 3: Текст основных классов программы


Описание класса блок-схемы алгоритма:


файл описание класса ClassScheme (класс схемы)

разработан для языка блок схем, который используется

в интерпретаторе Basic Block for Windows 95 ver. 2.0.

Copyright(c) by Соловьев А.С., 1998 г., ТГУ, ФПМК,

кафедра программирования


#ifndef __CLASS_SCHEME

#define __CLASS_SCHEME


#ifndef __STRUCT_FILE

#include "struct.h"

#endif


// подключаемые библиотеки


#include

#include

#include

#include


// описатели типов блоков


#define BEGIN_BLOCK 0// блок типа начало

#define END_BLOCK 1// блок типа конец

#define IF_BLOCK 2// блок типа если

#define INPUT_BLOCK 3// блок типа ввод

#define OUTPUT_BLOCK 4// блок типа вывод

#define PP_BLOCK 5// блок типа подпрограмма

#define AD_BLOCK 6// блок типа автоматические действия

#define LABEL_BLOCK 7// блок типа метка

#define BP_BLOCK 8// блок типа безусловный переход на метку

#define MULTI_BLOCK 9// блок типа мультиветвление

#define VETV_BLOCK 10// блок типа ветвь

#define UP_BLOCK 11// блок стрелка вверх

#define DOWN_BLOCK 12// блок стрелка вниз

#define UP_RIGHT_BLOCK 13// блок стрелка вверх и направо

#define UP_LEFT_BLOCK 14// блок стрелка вверх и налево

#define DOWN_LEFT_BLOCK 15// блок стрелка вниз и налево

#define DOWN_RIGHT_BLOCK 16// блок стрелка вниз и направо

#define LEFT_BLOCK 17// блок стрелка налево

#define RIGHT_BLOCK 18// блок стрелка направо

#define RIGHT_UP_BLOCK 19// блок стрелка направо и вверх

#define LEFT_UP_BLOCK 20// блок стрелка налево и вверх

#define LEFT_DOWN_BLOCK 21// блок стрелка налево и вниз

#define RIGHT_DOWN_BLOCK 22// блок стрелка направо и вниз


// описатели типов стрелок


class ClassScheme

{

public:

bool TypeOfProgramm;// тип программы (подпрограмма==true)

char *FileNameScheme;// имя файла с которым мы работаем

struct BLOCK* HeapBlock;// указатель на вершину списка блоков схемы

struct SVERTKA* SvertkaBlock;// указатель на свертку блока

struct BLOCK* Buffer;// указатель на блок сидящий в буффере

struct VARIABLE* HeapVariable;// указатель на вершину таблицы переменных

struct CONSTANTA* HeapConst;//указатель на таблицу констант

struct Rects RectPl;// параметры планшета схемы

struct CONSTANTA* MultiConst;// свертка блока мультиветвления

bool FlagRun;// признак выполняется программа или нет


// вспомогательные функции


int Poisk_Function(char *,int ,char* []);//поиск функции//Ok

void DeleteVariable(struct VARIABLE* );//удалить таблицу переменных//Ok

void DeleteSvertka(struct SVERTKA*);//удалить свертку//Ok

void DeleteConst(struct CONSTANTA* );//удалить таблицу констант//Ok

int ClassSimbol(const char&);//класс символа//Ok

int LenTextBlock(char*);//длинна текста блока// Ok

void DeleteScheme(struct BLOCK*); //Удалить схему// Ok

void CopyStrToStr(char *,char *); //Копировать строку в строку//Ok

int AddStringToTextBlock(struct BLOCK *,char *);//Добавить строку к

//тексту блока//Ok

void GetsStringFromFile(FILE *,char *);//Прочитать строку из файла//Ok


// конструкторы


ClassScheme();


// функции для чтения записи схемы


unsigned char LoadFromFile(char *);// функция для считывания файла

// с диска //Ok

unsigned char SaveToFile(char *); // функция для записи файла на

// диск // Ok


// функции для интерпретации блок-схемы


struct VARIABLE* PoiskVar(char* );//поиск переменной по имени//Ok

struct VARIABLE* CreateVar(char*, char,unsigned int,unsigned int*,int);

//создать переменную с параметрами//Ok

struct CONSTANTA* CreateConst(unsigned char,char*);//создание константы//Ok

unsigned char TextBlockToSvertka(char *, int);//функция для построения

// свертки блока//Ok

int ClassSvertka(struct SVERTKA* ,int [][2],int ,int ,int );// класc свертки//Ok

void UnarOperation(struct SVERTKA*);// определяет унарные

// операции которые обозначены как n-арные(+,-)//Ok

struct SVERTKA* Insetr(struct SVERTKA* ,unsigned char);//вставка

// оператора в начала последовательности и после ';' //Ok

unsigned char Sintacsis(struct SVERTKA*,int [][2],int,int,int,int*,

int*);// проверка синтаксиса свертки//Ok

struct SVERTKA* SintacsisHelp(struct SVERTKA*,int [][2],int,int,int,

int*,int*);// проверка синтаксиса свертки//Ok

struct SVERTKA* Polis(struct SVERTKA*);//построение полиза//Ok

struct SVERTKA* Stek(struct SVERTKA* ,int);//поиск элемента стека если

// его нет то создание его//Ok

struct SVERTKA* Run(unsigned char,int&,struct SVERTKA*,int,

struct SVERTKA*);//

// выполнение конкретной операции

unsigned char Run(struct SVERTKA* );//функция выполнения

//команд полиза//Ok

unsigned char RunBegin(struct SVERTKA*);//выполнение команд блока начало//Ok

unsigned char Translation1(void);//Первый этап трансляции//Ok

unsigned char Translation2(void);//второй этап трансляции//Ok

unsigned char Translation3(void);//Третий этап трансляции

struct BLOCK* BpFunction(struct BLOCK*);//выполнение связки БП//Ok

float Trigonometria(struct SVERTKA*,int&);

// обработчик тригонометрических функций//Ok

struct SVERTKA* NewSvertka(int&,unsigned char,unsigned char);

// построение новой свертки//Ok


// функции поиска блока


struct BLOCK *Poisk(struct BLOCK *);// поиск блока по адресу//Ok

struct BLOCK *Poisk(int,int);// поиск блока по заданным координатам//Ok

struct BLOCK *Poisk(unsigned int);// поиск блока по типу блока//Ok


// функции создания, добавления, вырезания и удаления блока из схемы


void Add(struct BLOCK*);//добавить блок к схеме//Ok

struct BLOCK *Create(unsigned int,int,int,int,int,int,int,char *);

// создать блок по параметрам//Ok

struct BLOCK* Cut(struct BLOCK* );//вырезать блок из схемы//Ok

void DelBlock(struct BLOCK* );//удалить блок из схемы по адресу//Ok

void DelBlock(int ,int );//удалить блок из схемы по координатам//Ok


// функции для работы с буфером обмена блоков схемы


void CopyBuffer(struct BLOCK*);//скопировать блок в буфер обмена

//по адресу//Ok

void CopyBuffer(int x,int y);//скопировать блок в буфер обмена

//по заданным координатам//Ok

void CutBuffer(struct BLOCK*);//вырезать блок из схемы и занести

//в буффер обмена по адресу //Ok

void CutBuffer(int x, int y);//вырезать блок из схемы и занести

//в буффер обмена по координатам //Ok

void PasteFromBuffer(int, int);//добавить блок в схему в позицию x,y/Ok


// функции вычисления размеров планшета(минимальных)


void SizeOfPlanhet( void );//Ok


// Функции алгоритма Ли


void AddNumber(int*,int,int,int,int,int);//добавить число//Ok

int Maximum(int*,int,int,int,int);//найти максимум//Ok

float Rastoanie(int,int,int,int);//Вычислить расстояние//Ok

void Index(int*,int,int,int,int,int,int,int,int &,int &);//Определение

//индекса//Ok

bool Algoritm(int*,int,int,int,int,int,int);//Алгоритм//Ok

int* MatrLee( int&,int&,int,int,int,int);// построение матрицы//Ok

bool StartLee(int,int,int,int);//стартовая функция Ли//Ok


// деструкторы


~ClassScheme();

};

#endif


Файл объявления основных структур программы:


Файл описание основных структур используемых интерпретатором

языка блок-схем Basic Block for Windows 95 ver 2.0.

Copyright(c) 1998, Соловьев А.С. 1998/1999 гг.


#ifndef __STRUCT_FILE

#define __STRUCT_FILE


struct NameOfVar

{

char* name;

struct NameOfVar* next;

};

struct Rects

{

int Left;

int Top;

int Right;

int Bottom;

};


struct BLOCK

{

unsigned int type; // тип блока

int x; // координата блока по оси x

int y; // координата блока по оси y

char *text; // текст блока

int true_x; // переход по ИСТИНЕ по оси x на планшете

int true_y; // переход по ИСТИНЕ по оси y на планшете

int false_x;// переход по ЛЖИ по оси x на планшете

int false_y;// переход по ЛЖИ по оси y на планшете

struct BLOCK *next; // указатель на следующий элемент схемы

bool StopRun;// прнизнак точки входа в программу

bool ErrorFlag;// признак наличия ошибок в данном блоке

bool RunBlock;// признак выполнимого блока в текущий момент

struct SVERTKA* Poliz;// полиз текста блока с учетом свертки

};


struct VARIABLE

{

AnsiString Hint; // подсказка при индексации

char* name; // имя переменной

char type; // тип переменной

unsigned int Size; // размерность массива если Size == 0,

// то это переменная

unsigned int* SizeN; // массив значений размерностей,

// если это переменная то SizeN == NULL

char* ready; // признак готовности к работе переменной

int* __int; // значение переменной типа int

long int* __long_int; // значение переменной типа long int

char* __char; // значение переменной типа char

float* __float; // значение переменной типа float

double* __double; // значение переменной типа double

struct VARIABLE* next;// указатель на следующий элемент таблицы

// переменной

};


struct CONSTANTA

{

unsigned char type;// тип константы

int __long_int; // константа типа long int

int __int; // константа типа int

char __char; // константа типа char

float __float; // константа типа float

double __double; // константа типа double

char* __string; // константа типа string

struct CONSTANTA* next;// указатель на следующий элемент таблицы

};


struct SVERTKA

{

unsigned char type; // тип свертки

unsigned char intype; // подтип свертки (номер операции, функции,

// процедуры в списке функций)

struct VARIABLE* variable;// если это не переменная то variable==NULL

// если переменной не существует в таблице

// переменных то variable == NULL

struct CONSTANTA* constanta;//указатель на таблицу констант

// если это не константа то constanta==NULL

// если такой константы не существует в таблице

// констант то constanta == NULL

struct SVERTKA* next; // указатель на следующий элемент свертки

int result; // счетчик числа операндов операции или функции

};


#endif


Защита информации в системах дистанционного обучения с монопольным ...
АННОТАЦИЯ Данная диссертация посвящена вопросам построения систем защиты информации для программных пакетов, используемых в монопольном доступе. В ...
Блок 3 помещает в виртуальный регистр или переменную (обозначим ее как A3) константу, участвующую в преобразовании.
#define BLOCK_START(num) const static int block_##num [
Раздел: Рефераты по информатике, программированию
Тип: реферат
Контроллеры
Введение Одной из характерных особенностей нынешнего этапа научно-технического прогресса является все более широкое применение микроэлектроники в ...
[3] Перечисляемые переменные ("enum") размещаются с использованием наиболее короткого возможного типа данных, определяемого диапазоном перечисляемых констант - от "char" до "int".
static bit unsigned char Usvic_Ok @ 0x50;
static bit unsigned char Vpr_Ok @ 0x52;
Раздел: Рефераты по информатике, программированию
Тип: реферат
Технический словарь
A.........................................................................................2 B ...
программирование в машинном коде
удалять, "вырезать" (в экранных редакторах и машинной графике)
Раздел: Топики по английскому языку
Тип: топик
Object Pascal
1. Основы языка Object Pascal 1.1. Алфавит языка Основными символами языка Object Pascal являются: - символы _ - 26 больших и 26 малых латинских букв ...
Полный программный текст любого модуля также имеет свою структуру, которая может включать блоки определения констант, внутренних структур описания типов, тексты процедур, функций и ...
(Sender as TButton).Caption := '&Ok'; //свойству Caption переменной
Раздел: Рефераты по информатике, программированию
Тип: реферат
Объектно-ориентированное программирование на Borland C++
Объектно-ориентированное программирование на Borland C++ Тексты лекций, прочитанных в Московском государственном университете экономики, статистики и ...
Описание объединения строится по той же схеме, что и описание структуры, но вместо ключевого слова struct используется слово union, например, объединение uword позволяет ...
Для форматного вывода служит функция int printf ( char *format, ... ), имеющая список параметров переменной длины, количество дополнительных параметров должно соответствовать числу ...
Раздел: Рефераты по информатике, программированию
Тип: учебное пособие