Отображение динамических структур данных в графическом режиме

Разработка программы, моделирующей использование стека для анализа правильности записи скобочного выражения, вводимого пользователем. Описание используемых в программе структур данных (панель элементов, функции). Алгоритм функций в виде псевдокода.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 21.05.2014
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования Российской Федерации

Тверской государственный технический университет

Кафедра электронных вычислительных машин

Отображение динамических структур данных

в графическом режиме

Выполнил: студент группы

ИВТ-126-13

Воронков Р. В.

Принял: Рачишкин А. А.

Тверь, 2014

Задание на выполнение работы

Вариант задания на выполнение №8

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

Теоретический материал по используемым динамическими структурам данных и средствам разработки приложений с графическим интерфейсом на С#

Windows Forms

Стек (англ. stack -- стопка) -- структура данных, в которой доступ к элементам организован по принципу LIFO (англ. last in -- first out, «последним пришёл -- первым вышел»). Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю. программа стек скобочный псевдокод

Добавление элемента, называемое также проталкиванием (push), возможно только в вершину стека (добавленный элемент становится первым сверху). Удаление элемента, называемое также выталкиванием (pop), тоже возможно только из вершины стека, при этом второй сверху элемент становится верхним.

Стеки широко применяются в вычислительной технике. Например, для отслеживания точек возврата из подпрограмм используетсястек вызовов, который является неотъемлемой частью архитектуры большинства современных процессоров. Языки программирования высокого уровня также используют стек вызовов для передачи параметров при вызове процедур.

Арифметические сопроцессоры, программируемые микрокалькуляторы и язык Forth используют стековую модель вычислений.

В ЦВК стек называется магазином -- по аналогии с магазином в огнестрельном оружии (стрельба начнётся с патрона, заряженного последним)

Windows Forms

Windows Forms -- название интерфейса программирования приложений(API), отвечающего заграфический интерфейс пользователя и являющегося частью Microsoft.NET Framework. Данный интерфейс упрощает доступ к элементам интерфейса Microsoft Windows за счет создания обертки для существующего Win 32 API в управляемом коде. Причем управляемый код -- классы, реализующие API для Windows Forms, не зависят от языка разработки. То есть программист одинаково может использовать Windows Forms как при написании ПО на C#, С++, так и на VB.Net, J# и др.

С одной стороны Windows Forms рассматривается как замена более старой и сложной библиотеке MFC, изначально написанной на языке C++, но с другой стороны, WF не предлагает парадигму, сравнимую с MVC. Для исправления этой ситуации и реализации данного функционала в WF существуют сторонние библиотеки. Одной из наиболее используемых подобных библиотек является User Interface Process Application Block, выпущенная специальной группой Microsoft, занимающейся примерами и рекомендациями, для бесплатного скачивания. Эта библиотека также содержит исходный код и обучающие примеры для ускорения обучения.

Внутри .NET Framework, Windows Forms реализуется в рамках пространства имён System.Windows.Forms.

Приложение Windows Forms представляет собой событийно- ориентированное приложение, поддерживаемое Microsoft .NET Framework. В отличие от пакетных программбольшая часть времени тратится на ожидание от пользователя каких-либо действий, как например, ввод текста в текстовое поле или клика мышкой по кнопке.

Описание используемых в программе структур данных

Панель элементов

· Надпись-Введите скобочное выражение

· Текстовое поле

· Кнопка Ок-вызов функции toolStripButton1_Click()

Функции

· Ф-ция Draw-рисует строку

· Ф-ция Draw_stak-рисует стек

· Ф-ция timer1_Tick-таймер с задержкой 1 секунда. выполняет основную работу

Алгоритм всех функций программы в виде псевдокода

Color blak = Color.Black

число k

Color red= Color.Red

число num = -1

Стек<символ> C

строка s

Graphics g1, g2

Конструктор Form1()

InitializeComponent()

Конец конструктора

Начало функции toolStripButton1_Click(object sender,

EventArgs e)

k = 0

C = новый стек<символ>()

s = toolStripTextBox1.Text

если (Proverka() != true)

вернуть

всё если

label1.Text = "Стек"

panel1.BorderStyle =

System.Windows.Forms.BorderStyle.Fixed3D

timer1.Enabled = true

конец функции toolStripButton1_Click(object sender,

EventArgs e)

начало функция Proverka()

если (s == "")

показать сообщение("Вы не ввели строку")

вернуть false

всё если

для i = 0; i < s.Length с шагом +1

если (s[0] == ')'||s[0] == '}'||s[0]== ']')

Показать сообщение("В начале стоит

закрывающая скобка!!!")

вернуть false

всё если

если (s[i] != '(' && s[i] != ')' && s[i] != '['

&& s[i] != ']' && s[i] != '{' && s[i] != '}')

показать сообщение("Вы ввели не только

скобки!!!")

вернуть false

всё если

Всё для i

вернуть true

конец функции Proverka()

начало функции Draw_stak()

g1.Clear(Color.White)

g1 = panel1.CreateGraphics()

стек<символ>S=новый стек<символ>()

пока (C.Count != 0)

S.Push(C.Pop())

Всё пока

число i = 0

пока (S.Count != 0)

C.Push(S.Peek())

g1.DrawString(S.Pop().ToString(),

new Font("Arial", 11), new SolidBrush(blak),

new Point(panel1.Width / 2 - 8, panel1.Height-

i*17-25))

i++

всё пока

Конец функции Draw_stak()

Ничало функции Draw()

Если (s != null)

g2.Clear(Color.White)

g2 = panel2.CreateGraphics()

для i = 0; i < s.Length; с шагом +1

если (num == i)

g2.DrawString(s[i].ToString(),

new Font("Arial", 11),

new SolidBrush(red), new Point(i * 8, 0))

иначе

g2.DrawString(s[i].ToString(),

new Font("Arial", 11),

new SolidBrush(blak), new Point(i* 8, 0))

всё если

Всё для i

Всё если

Конец функции Draw()

Начало функции timer1_Tick(object sender, EventArgs e)

если (s == null)

timer1.Enabled = false

вернуть

всё если

g1 = panel1.CreateGraphics()

g2 = panel2.CreateGraphics()

если(C != null&k!=s.Length)

если (s[k] == '('||s[k == '[' || s[k] == '{')

num = k;

C.Push(s[k])

Draw()

Draw_stak()

k++;

timer1.Enabled = true

всё если

иначе

если ((s[k] == ')' && C.Peek() == '(')

|| (s[k] == ']' && C.Peek() == '[') ||

(s[k] == '}' && C.Peek() == '{'))

num = k

C.Pop()

Draw()

Draw_stak()

k++

timer1.Enabled = true

всё если

иначе

num = k

Draw()

timer1.Enabled = false

Показать сообщение (Не верный тип

закрывающих скобок"

вернуть

всё иначе

всё иначе

если (C.Count != 0 && k == s.Length)

timer1.Enabled = false

Показать сообщение("Не хватает

закрывающих скобок")

вернуть

всё если

если (C.Count == 0 && k != s.Length &&

s[k] != '(' && s[k] != '{' && s[k] != '[')

timer1.Enabled = false

показать сообщение("Не хватает

открывающих скобок")

вернуть

всё если

если (C.Count == 0 && k == s.Length)

Показать сообщение("Записано верно")

timer1.Enabled = false

return

всё если

всё если

Конец функции timer1_Tick(object sender, EventArgs e)

Начало функции panel2_Paint(object sender, PaintEventArgs

e)

если (s!=null)

Draw()

всё если

конец функции panel2_Paint(object sender, PaintEventArgs

e)

Начало функции panel1_Paint(object sender,

PaintEventArgs e)

если (C!=null&&C.Count != 0)

Draw_stak()

всё если

конец функции panel1_Paint(object sender,

PaintEventArgs e)

Пример работы программы

Добавление

Добавили

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication8

{

public partial class Form1 : Form

{

Color blak = Color.Black;

int k;

Color red = Color.Red;

int num = -1;

Stack<char> C;

string s;

Graphics g1, g2;

public Form1()

{

InitializeComponent();

}

private void toolStripButton1_Click(object sender, EventArgs e)

{

k = 0;

C = new Stack<char>();

s = toolStripTextBox1.Text;

if (Proverka() != true)

{

return;

}

label1.Text = "Стек";

panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;

timer1.Enabled = true;

}

private bool Proverka()

{

if (s == "")

{

MessageBox.Show("Вы не ввели строку");

return false;

}

for (int i = 0; i < s.Length; i++)

{

if (s[0] == ')' || s[0] == '}' || s[0] == ']')

{

MessageBox.Show("В начале стоит закрывающая скобка!!!");

return false;

}

if (s[i] != '(' && s[i] != ')' && s[i] != '[' && s[i] != ']' && s[i] != '{' && s[i] != '}')

{

MessageBox.Show("Вы ввели не только скобки!!!");

return false;

}

}

return true;

}

private void Draw_stak()

{

g1 = panel1.CreateGraphics();

g1.Clear(Color.White);

Stack<char> S = new Stack<char>();

while (C.Count != 0)

{

S.Push(C.Pop());

}

int i = 0;

while (S.Count != 0)

{

C.Push(S.Peek());

g1.DrawString(S.Pop().ToString(), new Font("Arial", 11), new SolidBrush(blak), new Point(panel1.Width / 2 - 8, panel1.Height - i * 17 - 25));

i++;

}

}

private void Draw()

{

if (s != null)

{

g2 = panel2.CreateGraphics();

g2.Clear(Color.White);

for (int i = 0; i < s.Length; i++)

{

if (num == i)

{

g2.DrawString(s[i].ToString(), new Font("Arial", 11), new SolidBrush(red), new Point(i * 8, 0));

}

else

{

g2.DrawString(s[i].ToString(), new Font("Arial", 11), new SolidBrush(blak), new Point(i * 8, 0));

}

}

}

}

private void timer1_Tick(object sender, EventArgs e)

{

if (s == null)

{

timer1.Enabled = false;

return;

}

g1 = panel1.CreateGraphics();

g2 = panel2.CreateGraphics();

if (C != null & k != s.Length)

{

if (s[k] == '(' || s[k] == '[' || s[k] == '{')

{

num = k;

C.Push(s[k]);

Draw();

Draw_stak();

k++;

timer1.Enabled = true;

}

else

{

if ((s[k] == ')' && C.Peek() == '(') || (s[k] == ']' && C.Peek() == '[') || (s[k] == '}' && C.Peek() == '{'))

{

num = k;

C.Pop();

Draw();

Draw_stak();

k++;

timer1.Enabled = true;

}

else

{

num = k;

Draw();

timer1.Enabled = false;

MessageBox.Show("Не верный тип закрывающих скобок");

return;

}

}

if (C.Count != 0 && k == s.Length)

{

timer1.Enabled = false;

MessageBox.Show("Не хватает закрывающих скобок");

return;

}

if (C.Count == 0 && k != s.Length && s[k] != '(' && s[k] != '{' && s[k] != '[')

{

timer1.Enabled = false;

MessageBox.Show("Не хватает открывающих скобок");

return;

}

if (C.Count == 0 && k == s.Length)

{

MessageBox.Show("Записано верно");

timer1.Enabled = false;

return;

}

}

}

private void panel2_Paint(object sender, PaintEventArgs e)

{

if(s!=null)

{

Draw();

}

}

private void panel1_Paint(object sender, PaintEventArgs e)

{

if (C!=null&&C.Count != 0)

{

Draw_stak();

}

}

}

}

Размещено на Allbest.ru

...

Подобные документы

  • Изучение условий поставленной задачи и используемых данных для разработки программы хранения информации о рейсах поезда. Описание разработанных функций, листинга, блок-схем алгоритмов и дерева функции. Рассмотрение сценария диалога данной программы.

    курсовая работа [532,7 K], добавлен 20.07.2014

  • Представление (построение, создание) списка данных в виде линейного однонаправленного списка. Формирование массива данных. Вывод данных на экран. Алгоритм удаления, перемещения данных. Сортировка методом вставки. Алгоритм загрузки данных из файла.

    курсовая работа [2,1 M], добавлен 16.05.2015

  • Исследование существующих методов организации динамических структур данных. Методы реализации мультисписковых структур используя особенности языка C++. Физическая структура данных для сохранения в файл. Разработка алгоритмов и реализация основных функций.

    курсовая работа [504,1 K], добавлен 25.01.2015

  • Понятие стека как структуры данных, где элемент, занесенный первым, извлекается последним. Порядок добавления и удаления элементов списка. Реализация функций стека. Использование стека в алгоритме быстрой сортировки. Основные требования к элементам стека.

    презентация [591,2 K], добавлен 22.10.2013

  • Разработка и тестирование программы класса Точка. Спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров функций программы. Текст программы на языке C++. Особенности тестирования программы.

    лабораторная работа [43,1 K], добавлен 21.07.2012

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

    курсовая работа [537,9 K], добавлен 28.06.2011

  • Разработка алгоритмов на динамических структурах данных. Описание структуры данных "стек". Процедуры добавления и удаления элемента, очистки памяти. Код распечатки содержимого всего стека. Инструкция пользователя, код программы, контрольный пример.

    курсовая работа [22,9 K], добавлен 19.10.2010

  • Разработка программы для изображения в графическом режиме на экране структуры модели вычислительной машины и демонстрация функционирования при выполнении программы вычисления. Описание процесса разработки, обоснование структур данных и их форматов.

    курсовая работа [170,3 K], добавлен 07.06.2019

  • Проблемы с организацией данных. Определение и классификация динамических структур данных. Линейные односвязные, двухсвязные, кольцевые списки. Очередь, стеки. Описание основных типов данных и функции для работы с ними. Листинг программы, пример ее работы.

    контрольная работа [290,6 K], добавлен 17.07.2012

  • Создание на языке C базы данных "Стадионы города", требования к программе. Осуществление загрузки базы данных в массив и вывод главного меню в основной программе. Алгоритм работы программы в виде блок-схемы. Описание функций программы и ее листинг.

    курсовая работа [183,6 K], добавлен 06.10.2010

  • Размещение центров и синтез абонентских сетей дистанционного обучения в классе радиальных структур. Локальное перестроение дерева Штейнера, процедура объединения свободных ребер. Разработка программы: описание структур данных, настройка алгоритма.

    научная работа [677,3 K], добавлен 24.01.2010

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

    курсовая работа [135,9 K], добавлен 28.12.2012

  • Рассмотрение правил записи, способов ввода и вывода, использования функций обработки символьных данных в Pascal. Описание алгоритмизации и программирования файловых структур данных, проектирования структуры файла. Ознакомление с работой данных массива.

    курсовая работа [336,2 K], добавлен 27.06.2015

  • Анализ характеристик объекта компьютеризации. Разработка структур данных, алгоритмов и программного обеспечения системы управления базой данных. Особенности синтеза структур данных. Разработка алгоритмов системы и оценка результатов тестирования.

    курсовая работа [37,0 K], добавлен 07.12.2010

  • Порядок проектирования программы, демонстрирующей принцип заполнения очереди и стека и принцип удаления элементов из очереди и стека. Определение класса и всех необходимых функций. Программа на языке С, описание возможностей, используемых для алгоритма.

    курсовая работа [254,3 K], добавлен 20.05.2013

  • Использование метода абстракции в программировании на примере построения польской записи выражения с помощью стека. Абстрактные типы данных. Анализ классов реализации списков. Вставка и удаление элемента в список. Вычисление значения выражения на стеке.

    презентация [166,7 K], добавлен 19.10.2014

  • Разработка программы в Turbo C++ Explorer для вычислений геометрических данных фигуры. Атрибуты объекта и представление данных в программе. Подпрограмма создания набора данных. Реализация защиты и правильности ввода данных и дополнительных функции.

    курсовая работа [5,9 M], добавлен 22.02.2014

  • Разработка программы "Игроки КХЛ 2012-2013" на языке С++ с использованием классов списков структур для обработки данных. Описание глобальных переменных, разработанных функций. Главное меню программы. Чтение данных из файла, их просмотр и сохранение.

    курсовая работа [2,2 M], добавлен 17.03.2016

  • Создание информационной системы учета стран, поставляющих продукты в крупные фирмы. Схема данных и ее описание. Создание таблиц программы. Проектирование базы данных. Главная кнопочная форма. Рисунки структур запросов для отчетов в режиме конструктора.

    курсовая работа [2,9 M], добавлен 04.02.2013

  • Формальная постановка задачи и спецификация программы. Сценарий диалога с пользователем. Разработка структур данных и алгоритмов. Таблица параметров и текст программы на языке C++. Тестирование программы с целью определения корректности ее работы.

    контрольная работа [27,5 K], добавлен 07.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.