Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Приложение 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...