0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 5

Редактор блок-схем C++

23.04.2019, 10:59. Показов 3852. Ответов 8

Author24 — интернет-сервис помощи студентам
Здравствуйте! Стоит задача написать курсовую работу - редактор блок схем программ на языке С++.
Условия и рекомендации под спойлером.
Кликните здесь для просмотра всего текста
Написать редактор для блок-схем (структурного проектирования
программы), который позволял бы редактировать блок-схемы.
Первоначально в схеме есть блоки "начало" и "конец".
Команды редактора: вставить блок после текущего/в левую/в правую ветвь, удалить текущий блок, изменить
текст в блоке, сохранить и считать блок-схему в файле.
Для упрощения программы рекомендуется управление с помощью
клавиатуры (движение стрелками по блокам: вниз/вверх -
следующий/предыдущий блок, влево/вправо - левая/правая ветвь, если
есть или следующий блок). Рекомендуется хранить указатель на текущий блок.
Для представления блок-схемы рекомендуется класс со свойствами
тип блока
текст, выводимый в блоке
левая ветка // отсутствует у простых блоков
правая ветка // -//-
следующий блок
предыдущий блок
блок, в котором находится ветка с этим блоком
выч. высоту изображения блока с ветками
выч. ширину -//-
нарисовать блок и его ветки в (x,y)
Для упрощения рисования рекомендуется левую ветвь рисовать
всегда вниз и принять стандартный размер блока.

Накидал немного кода для реализации и проверок схем. Естественно правильно не работает и не дописано.
Решил, что блок будет реализован на подобии лин. списка/дерева, то есть в узле(блоке) будут указатели на левого и правого потомка, и на предка. Для начала сделал без указателей,все было нормально, за исключением того, что в схеме всего 2 элемента могло быть. Только начал использовать указатели - полезли ошибки и сложности в реализации.
Собственно прошу подсказать/написать кусочки кода/направить в нужном направлении по след. вопросам:
-Как правильно реализовать конструктор, чтобы создание было подобно спискам? Грубо говоря создавался головной блок
-Как правильно реализовать указатель на след блок и сам след. блок?
-Как правильно реализовать перемещение по блокам? По принципу лин. списков. Создать какой-то объект/указатель на объект класса и как в списках вложить в него голову схемы, а потом гонять по схеме вверх-вниз(в левую или правую вевть от блока)
Мои навыки работы с памятью и указателями для сложных(для меня) структур и объектов хромают, списки и деревья простые через структуры я писал,как работают я понимаю.
Буду безмерно благодарен откликнувшимся! А то застрял, не могу сдвинуться с мертвой точки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class Block
{
   public:
   int Type;
   string Text;
   Block* prev, next;
   Block();
   Block(int);
   void Drawxy(int x, int y);
   void Add(int t);
};
Block::Block()
  {
     Type=-1;
     next=NULL;
  }
Block::Block(int t)
   {
      Type=t;
      next=NULL;
   }
void Block::Drawxy(int x, int y)
   {
      switch (Type)
      {
         case 0:
            setcolor(WHITE);
            moveto(x-WIDTH/2,y-HEIGHT/2);
            lineto(x+WIDTH/2,y-HEIGHT/2);
            lineto(x+WIDTH/2,y+HEIGHT/2);
            lineto(x-WIDTH/2,y+HEIGHT/2);
            lineto(x-WIDTH/2,y-HEIGHT/2);
         break;
         case 1:
            setcolor(WHITE);
            moveto(x-WIDTH/2,y);
            lineto(x,y-HEIGHT/2);
            lineto(x+WIDTH/2,y);
            lineto(x,y+HEIGHT/2);
            lineto(x-WIDTH/2,y);
         break;
      }
      if(next==NULL)
         return;
      next->Drawxy(x,y+80);
   }
   void Block::Add(int t)
      {
         next = new Block;
         next->Type=t;
         next->next=NULL;
      }
int main()
{
   initwindow(640,480);
   Block *a;
   a->Type=1;
   a->Add(1);
   a=a->next;
   a->Add(0);
   a->Drawxy(100,100);
   getch();
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.04.2019, 10:59
Ответы с готовыми решениями:

Редактор принципиальных схем на GTK+
Получил задание "Редактор принципиальных схем на GTK+". С GTK раньше не работал, не знаю с чего начать. Вижу два возможных пути...

Составление блок схем
1 шахматной доски определяется парой чисел 1-8 номер столбца и строки. Заданы две клетки. Определить может ли шахматный слон попасть с...

Создания блок-схем
Как правильно создавать блок-схемы ? Скажите правильно ли я сделал,если нет,то исправьте пожалуйста. Снизу приложен скрин кода и...

8
Злостный нарушитель
 Аватар для Verevkin
9881 / 5408 / 1231
Регистрация: 12.03.2015
Сообщений: 25,229
23.04.2019, 11:19
Цитата Сообщение от niXXon Посмотреть сообщение
Накидал немного кода для реализации и проверок схем. Естественно правильно не работает и не дописано.
Ой, только не говори, что это консольное приложение с графическим модулем!
1
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 5
23.04.2019, 11:26  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Ой, только не говори, что это консольное приложение с графическим модулем!
Графическая библиотека "graphics.h") Ну, таково задание. Сказано использовать только ее, и никак иначе
0
Злостный нарушитель
 Аватар для Verevkin
9881 / 5408 / 1231
Регистрация: 12.03.2015
Сообщений: 25,229
23.04.2019, 11:42
Цитата Сообщение от niXXon Посмотреть сообщение
Графическая библиотека "graphics.h") Ну, таково задание. Сказано использовать только ее, и никак иначе
Соболезную.
1
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 5
23.04.2019, 11:46  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Соболезную.
Спасибо. Только вот с графическим модулем проблем никаких, что там, из примитив накидать простенький интерфейс, отрисовывать блоки. Я ведь лишь попросил помощи именно с реализацией указательной конструкции ветвей блок схемы.
0
Злостный нарушитель
 Аватар для Verevkin
9881 / 5408 / 1231
Регистрация: 12.03.2015
Сообщений: 25,229
23.04.2019, 12:01
Цитата Сообщение от niXXon Посмотреть сообщение
Я ведь лишь попросил помощи именно с реализацией указательной конструкции ветвей блок схемы.
Начни с написания иерархии классов этих самых блоков.
Отрисовка с масштабированием и прокруткой - это отдельная подзадача.
Хранение всей схемы в файле - это ещё одна подзадача.
--------
Одна из самых простых БС моего дипломного проекта была вот такой:



На ней и отлаживай.
0
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 5
23.04.2019, 20:22  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Отрисовка с масштабированием и прокруткой - это отдельная подзадача.
Масштабирования нет в требуемом функционале, отрисовку с прокруткой я сделаю - не проблема. Мне сейчас нужно сделать именно класс блоков и реализацию схемы, остальные подзадачи у меня не вызывают таких трудностей.
0
Злостный нарушитель
 Аватар для Verevkin
9881 / 5408 / 1231
Регистрация: 12.03.2015
Сообщений: 25,229
23.04.2019, 20:29
Цитата Сообщение от niXXon Посмотреть сообщение
Мне сейчас нужно сделать именно класс блоков
Не класс, а иерархию классов.
0
0 / 0 / 0
Регистрация: 16.04.2019
Сообщений: 5
27.04.2019, 22:10  [ТС]
Вопрос еще актуален.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2019, 22:10
Помогаю со студенческими работами здесь

Создания блок схем
Не могу разобраться в создании блок схем для программ так как не изучали,хелп. #include <fstream> #include <iostream> ...

Составить блок-схем, с Благодарностью
Подкину 30-40р на киви, в кач-ве благодарности за помощь #include <stdio.h> #include <math.h> #include <locale.h> #include...

Создание блок-схем к программе
//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { ...

Построение блок-схем по коду
За день необходимо построить блок-схемы по коду к лабараторным работам кому не сложно помогите пожалуйсто , одному неуправиться да и не...

C++ Построение блок-схем по коду
помогите построить блок схему. #include <iostream> using namespace std; int main() { int N; cin >> N;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru