Приложение 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 <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h>
// описатели типов блоков
#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
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|