Среда программирования Turbo Pascal 7.1
Стек в ООП со всеми стандартными операциями: добавление элемента, взятие вершины, проверка на пустоту и заполнение, вывод содержимого стека на экран. Список, в каждом узле которого содержится один стек. Реализация основного меню для удобства работы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 22.11.2013 |
Размер файла | 30,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Постановка задачи
стек елемент вершина содержимое заполнение
Реализовать хранилище стеков, с операциями добавления, поиска, удаления стеков, а так же со всеми стандартными операциями внутри отдельного стека. Среда программирования Turbo Pascal 7. 1.
Ход решения
1. Реализовать стек в ООП со всеми стандартными операциями: добавление элемента, взятие вершины, проверки на пустоту и заполнение, вывод содержимого стека на экран.
2. Реализовать список, в каждом узле которого содержится стек.
3. В основной программе реализовать меню, для удобства работы.
Стек
Структура данных - это множество элементов данных и связей между ними. Они разделяются на статические и динамические. Статические формируются в памяти одномоментно до начала работы со структурами и во время своего существования не меняют свои размеры и место положения в памяти. Примерами являются массивы и записи. Динамические структуры данных могут менять свои размеры и расположение, их состав может постоянно меняться в ходе работы с программой. Они в свою очередь делятся на линейные (списки, стеки, очереди) и нелинейные (деревья, графы). В линейных структурах элементы идут один за другим, в нелинейных - возможно ветвление.
Рассмотрим подробнее линейные структуры данных, а именно списки. Списки бывают односвязными, двусвязными, циклическими. В каждом элементе односвязного списка содержится указатель на следующий элемент, двусвязного - на следующий и предыдущий, в циклическом последний элемент содержит указатель на первый.
В списке в любой момент времени можно обратиться к любому его элементу. Для ряда задач произвольность доступа является недопустимой, для этого введено понятие дисциплины обработки данных (стек, очередь, дек). Дисциплина определяет к какому элементу и каким образом пользователь может обратиться в данный момент времени.
Стек - это дисциплина обработки данных, имеющая линейную структуру, доступ в которой разрешается только к последнему добавленному элементу (вершине стека). Стек работает по принципу LIFO (Last In, First Out. Последний вошёл, первый вышел). Простым примером использования стека может послужить ситуация, когда мы просматриваем множество данных и составляем список особых данных, которые должны обрабатываться позднее. Когда первоначальное множество обработано, мы возвращаемся к этому списку и выполняем обработку, удаляя элементы, пока наш список не станет пустым. Например, рекурсивные функции, пока не обработан последний вызов, все предыдущие вызовы находятся в своеобразном стеке. Стек активно используется в архитектуре компьютера, в ней преобладает стековая адресация.
Рассмотрим основные функции обработки стека:
Push - добавление в вершину стека, в процедуру передаётся добавляемое значение.
Pop - взятие элемента из вершины стека, возвращает содержимое вершины
IsEmpty - проверка на пустоту, возвращает True или False.
IsFull - проверка на заполнение, максимальное число элементов в стеке определяет константа MaxStack, возвращает True или False.
Top - указатель на вершину стека
Рассмотрим структуру узла стека:
type
pStackEl = ^StackEl;
data = Integer;
StackEl = record
Value: data;
Prev: pStackEl;
End;
Value - значение узла стека (data = Integer; указывает, что стек числовой)
Prev - указатель на предыдущий элемент.
Для реализации хранилища стеков использован односвязный список с указателем на начало и конец. Рассмотрим узел списка:
type
pNode = ^listEl;
ListEl = record
Name: string;
Stack: StackOfData;
Next: pNode;
End;
Name - имя стека
Stack - непосредственно стек, описанный как объект в модуле UStack.
Next - указатель на следующий элемент списка.
Рассмотрим функции обработки данного списка:
AddNode - добавление узла, в процедуру передаётся имя нового стека.
DelNode - удаление узла, в процедуру передаётся указатель на удаляемый узел
Find - поиск стека, возвращает указатель на узел
ChangeStack - процедура обработки отдельного стека, в процедуру передаётся указатель на узел с обрабатываемым стеком.
Процедура ChangeStack вызывает соответствующие процедуры обработки стека из модуля со стеком, посредством активного меню:
Процедура Find выводит все стеки, поиск осуществляется посредством активного меню, которое организованно следующим образом: считается количество стеков, далее с нажатием клавиш вверх и вниз, на экране передвигается стрелка, изменяется значение переменной m, которая указывает на порядковый номер стека в списке. Затем снова отсчитывается стек с порядковым номером m и возвращается указатель на него.
После добавлений и удалений стеков, которые происходит в основной программе, список изменяется:
Остальные функции обработки стеков и списка реализованы по стандартным алгоритмам.
Как работать с программой
Интерфейс программы так же содержит меню, заголовки соответствуют выполняемым функциям. Например, добавляем стек:
Далее, чтобы добавить элементы в новый стек выбираем опцию CHANGE STACK:
Выбираем нужный стек и вносим изменения, как описано выше:
Наш стек пока ещё пуст, добавляем в него элементы опцией PUSH. Необходимо вводить число:
Удаление из стека осуществляет опция DELETE STACK:
Чтобы завершить работу с программой выбираем EXIT.
Программа написана в Turbo Pascal 7. 1, чтобы подключить модули, нужно скопировать файлы UList. TPU и UStack. TPU в директорию компилятора BIN\.
Код программы
Модуль «Стек»
Unit UStack;
Interface
Const
MaxStack = 7;
type
pStackEl = ^StackEl;
data = Integer;
StackEl = record
Value: data;
Prev: pStackEl;
End;
StackOfData = object
public
procedure Create;
function IsEmpty: boolean;
function IsFull: boolean;
procedure Push (val: data) ;
function Pop: data;
procedure Print;
private
Top: pStackEl;
End;
Implementation
Var
i: Integer;
stack1: stackOfData;
{///////////////////////////////////////////////}
procedure StackOfData. Create;
Begin
Top: =Nil;
End;
{///////////////////////////////////////////////}
function StackOfData. IsEmpty: boolean;
Begin
If Top = Nil Then
IsEmpty: =True
Else
IsEmpty: =False;
End;
{///////////////////////////////////////////////}
function StackOfData. IsFull: boolean;
Var
count: Integer;
PSE: PstackEl;
Begin
PSE: =Top;
count: =0;
While PSE<>Nil Do
Begin
count: =count+1;
PSE: =PSE^. Prev;
End;
If count>=MaxStack Then
IsFull: =True
Else
IsFull: =False;
End;
{///////////////////////////////////////////////}
procedure StackOfData. Push (val: data) ;
Var
NewStackEl: pStackEl;
Begin
New (NewStackEl) ;
NewStackEl^. value: =val;
NewStackEl^. prev: =Top;
Top: =NewStackEl;
End;
{///////////////////////////////////////////////}
function StackOfData. Pop: data;
Var
PSE: pStackEl;
Begin
Pop: =Top^. value;
PSE: =Top;
Top: =Top^. prev;
Dispose (PSE) ;
End;
{////////////////////////////////////////////}
procedure StackOfData. Print;
Var
PSE: PstackEl;
Begin
PSE: =Top;
While PSE<>Nil Do
Begin
Write (PSE^. Value, ' ') ;
PSE: =PSE^. Prev;
End;
End;
{///////////////////////////////////////////////}
Begin
End.
Модуль «Список стеков»
Unit UList;
Interface
Uses UStack, crt;
type
pNode = ^listEl;
ListEl = record
Name: string;
Stack: StackOfData;
Next: pNode;
End;
ListOfStack = object
public
procedure Create;
procedure AddNode (klox: string) ;
procedure DelNode (var delEl: pNode) ;
function Find: pNode;
procedure ChangeStack (var ple: pNode) ;
private
head: pNode;
tail: pNode;
End;
Implementation
{////////////////////////////////////////////}
procedure ListOfStack. Create;
Begin
head: =Nil;
tail: =Nil;
End;
{////////////////////////////////////////////}
procedure ListOfStack. AddNode (klox: string) ;
var
NewNode: pNode;
Begin
If head<>Nil Then
Begin
New (NewNode) ;
NewNode^. name: =klox;
NewNode^. Stack. Create;
NewNode^. next: =Nil;
tail^. next: =NewNode;
tail: =NewNode;
End
Else
Begin
New (head) ;
head^. name: =klox;
head^. Stack. Create;
Head^. next: =Nil;
tail: =head; ;
End;
End;
{////////////////////////////////////////////}
procedure ListOfStack. DelNode (var delEl: pNode) ;
var
ple: pNode;
Begin
If delEl<>Nil Then
Begin
If delEl=head Then
Begin
head: =head^. next;
Dispose (delEl) ;
End
Else
Begin
ple: =head;
While ((ple^. next<>delEl) and (ple <> Nil)) Do ple: =ple^. next;
If delEl=tail Then tail: =ple;
ple^. next: =delEl^. next;
Dispose (delEl) ;
End;
End;
End;
{////////////////////////////////////////////}
function ListOfStack. Find: pNode;
Var
ple: pNode;
c: char;
count, m: Integer;
Begin
ple: =head;
count: =0;
m: =0;
writeln ('->BACK') ;
While ple<>Nil Do
Begin
writeln (' ', ple^. name) ;
ple: =ple^. next;
count: =count+1;
End;
writeln;
repeat
c: = readkey;
if ((c=#72) and (m>0)) Then
Begin
GoToXY (1, m+1) ;
write (' ') ;
m: =m-1;
GoToXY (1, m+1) ;
write ('->') ;
End;
if ((c=#80) and (m<count)) Then
Begin
GoToXY (1, m+1) ;
write (' ') ;
m: =m+1;
GoToXY (1, m+1) ;
Write ('->') ;
End;
until c=#13;
If m = 0 Then
Find: =Nil
Else
Begin
ple: =head;
While m>1 Do
Begin
ple: =ple^. next;
m: =m-1;
End;
Find: =ple;
End;
clrscr;
End;
{////////////////////////////////////////////}
procedure ListOfStack. ChangeStack (var ple: pNode) ;
var
m: Integer;
c: char;
val: data;
Begin
If ple<>Nil Then
Begin
m: =1;
While m<>0 Do
Begin
clrscr;
Writeln ('->BACK') ;
Writeln (' Push') ;
Writeln (' Pop') ;
Writeln (' Print') ;
m: =0;
repeat
c: = readkey;
if ((c=#72) and (m>0)) Then
Begin
GoToXY (1, m+1) ;
write (' ') ;
m: =m-1;
GoToXY (1, m+1) ;
write ('->') ;
End;
if ((c=#80) and (m<3)) Then
Begin
GoToXY (1, m+1) ;
write (' ') ;
m: =m+1;
GoToXY (1, m+1) ;
Write ('->') ;
End;
until c=#13;
clrscr;
If m=1 Then
Begin
If Not ple^. Stack. IsFull Then
Begin
write ('Please enter value: ') ;
readln (Val) ;
ple^. Stack. Push (val) ;
End
Else
Begin
Writeln ('Stack is full! ') ;
readln;
End;
End;
If m = 2 Then
If Not ple^. Stack. IsEmpty Then
Begin
Writeln (ple^. Stack. Pop) ;
readln;
End
Else
Begin
write ('Stack is empty! ') ;
readln;
End;
If m = 3 Then
Begin
ple^. Stack. Print;
readln;
End;
End;
End;
End;
{////////////////////////////////////////////}
Begin
End.
Главное меню
Program Multistack;
Uses UList, crt;
var
i, m: Integer;
c: char;
klox: string;
Node: pNode;
List: ListOfStack;
Begin
clrscr;
List. Create;
m: =1;
While m<>0 Do
Begin
clrscr;
Writeln ('->EXIT') ;
Writeln (' ADD STACK') ;
Writeln (' DELETE STACK') ;
Writeln (' CHANGE STACK') ;
Writeln (' INFORMATION') ;
m: =0;
repeat
c: = readkey;
if ((c=#72) and (m>0)) Then
Begin
GoToXY (1, m+1) ;
write (' ') ;
m: =m-1;
GoToXY (1, m+1) ;
write ('->') ;
End;
if ((c=#80) and (m<4)) Then
Begin
GoToXY (1, m+1) ;
write (' ') ;
m: =m+1;
GoToXY (1, m+1) ;
Write ('->') ;
End;
until c=#13;
clrscr;
Case m Of
1:
Begin
Writeln ('Please enter name: ') ;
readln (klox) ;
List. AddNode (klox) ;
writeln ('Stack is added! ') ;
readln;
End;
2:
Begin
clrscr;
Node: =List. Find;
List. DelNode (Node) ;
End;
3:
Begin
Node: =List. Find;
If Node<>Nil Then
List. ChangeStack (Node) ;
End;
4:
Begin
Writeln ('MultiStack') ;
Writeln ('Chelyabinsk State University') ;
Writeln ('Faculty of Mathematics') ;
Writeln ('Orynbaev Ruslan') ;
Writeln ('MP-101') ;
Writeln ('2010') ;
readln;
End;
End;
End;
End.
Заключение
В ходе работы были закреплены навыки работы с модулями, с динамическими структурами данных в объектно ориентированном программировании. Была написана программа для работы со стеками с интуитивно понятным для пользователя интерфейсом.
Размещено на Allbest.ru
...Подобные документы
Создание стека с помощью языка программирования C#. Блок-схема работы алгоритма программы, ее интерфейс. Добавление, удаление и вывод элементов в стеке. Реализация методов "Начало-конец" (переприсвоение индексов) и "Приоритет" (сортировка по возрастанию).
лабораторная работа [924,7 K], добавлен 26.12.2014Понятие стека как структуры данных, где элемент, занесенный первым, извлекается последним. Порядок добавления и удаления элементов списка. Реализация функций стека. Использование стека в алгоритме быстрой сортировки. Основные требования к элементам стека.
презентация [591,2 K], добавлен 22.10.2013Создание стека как линейного списка. Использование аналогичного ссылочного типа для организации очереди. Циклически связанный список. Построение сложных структур в динамической памяти. Бинарные (двоичные) деревья. Экран результата и контрольные расчеты.
лабораторная работа [398,9 K], добавлен 14.06.2009Использование метода абстракции в программировании на примере построения польской записи выражения с помощью стека. Абстрактные типы данных. Анализ классов реализации списков. Вставка и удаление элемента в список. Вычисление значения выражения на стеке.
презентация [166,7 K], добавлен 19.10.2014Разработка алгоритмов на динамических структурах данных. Описание структуры данных "стек". Процедуры добавления и удаления элемента, очистки памяти. Код распечатки содержимого всего стека. Инструкция пользователя, код программы, контрольный пример.
курсовая работа [22,9 K], добавлен 19.10.2010Написание программы "телеграф", который принимает от пользователя сообщения и выводит его на экран в виде последовательности точек и тире. Их вывод сортируется звуковым сигналом соответствующей длительности. Программа написана на языке Turbo Pascal.
курсовая работа [565,6 K], добавлен 18.08.2008Разработка эскизного и технического проектов программы "Helpopr" (ввод, хранение и вывод данных на дисплей по запросу пользователя). Язык программирования Turbo Pascal. Описание алгоритма программы. Требования к компьютеру и программному обеспечению.
курсовая работа [198,1 K], добавлен 03.02.2010Структура и основные элементы языка Turbo Pascal. Алгоритм составления простейших программ на Turbo Pascal. Применение условного оператора и сильноветвящихся алгоритмов. Циклы с предусловием и постусловием, сочетание циклических и условных операторов.
реферат [64,0 K], добавлен 20.03.2016Специфические типы массивов. Составление программы по вычислению произведения матриц. Нахождение наибольшего элемента в массиве. Вывод номера строки и столбца, в котором он содержится, на экран. Создание массива, заполнение его рандомными числами.
отчет по практике [309,0 K], добавлен 07.01.2014История создания и развитие Pascal. Особенности пакета программирования Turbo. его возможности редактора текстов, компилятора и отладчика. Построения программы на языке Turbo Pascal, ее структура, типы алгоритмов, одномерные и многомерные массивы.
курсовая работа [519,3 K], добавлен 25.06.2011Анализ проблемы детализации событий, возникающих в ходе работы IT-инфраструктуры, ее решение через использование стека ELK как сбора журнальных файлов. Реализация ELK стека в инфраструктуре современного веб-сервиса, карта расположения пользователей в ней.
статья [1,5 M], добавлен 10.12.2016Порядок проектирования программы, демонстрирующей принцип заполнения очереди и стека и принцип удаления элементов из очереди и стека. Определение класса и всех необходимых функций. Программа на языке С, описание возможностей, используемых для алгоритма.
курсовая работа [254,3 K], добавлен 20.05.2013Основы работы на языке высокого уровня Turbo Pascal. Основное оборудование и программное обеспечение. Операторы, необходимы для работы в графической среде Turbo Pascal. Запуск графического режима. Текст программы в графической среде Turbo Pascal.
лабораторная работа [12,7 K], добавлен 14.05.2011Программирование как процесс составления и подготовки деятельности программы, которое при выполнении должно привести к определенным результатам. Знакомство с регистрами общего значения. Рассмотрение основных способов передачи параметров через стек.
отчет по практике [2,9 M], добавлен 01.12.2015Программирование и структура программы на языке Turbo Pascal и MS Visual C++6.0. Вычисление площади круга. Реализация программы в системе Turbo Pascal и MS VISUAL C++6.0 для Windows. Структура окна ТРW. Сохранение текста программы в файле на диске.
лабораторная работа [3,7 M], добавлен 22.03.2012Ввод и вывод значений целого, вещественного, логического и перечисляемого типов. Табулирование функции на отрезке с заданным количеством точек. Рекурсивная функция - вычисление суммы, произведения, количества, минимума, максимума и проверка условия.
курсовая работа [75,6 K], добавлен 07.03.2010История появления и распространения Turbo Pascal - среды разработки для языка программирования Паскаль. Общий вид объявления файлового типа. Входная, выходная и промежуточная информация. Алгоритм решения задачи: словесный алгоритм, блок-схема, программа.
курсовая работа [359,4 K], добавлен 05.01.2010Разработка программного обеспечения для работы с информацией и ее обработкой на языке программирования Delphi. Описание алгоритмов процедуры работы со стеком - добавление, удаление элементов, редактирование записи. Инструкция по использованию программы.
курсовая работа [2,9 M], добавлен 06.02.2013Понятие и история развития языка Turbo Pascal, оценка его графических возможностей и особенностей. Инициализация графического режима. Управление экраном и окнами, цветом и фоном, принципы работы с текстом. Построение графиков функций и изображений.
курсовая работа [159,9 K], добавлен 17.12.2014Изучение текстового режима языка программирования Turbo Pascal. Написание игры "Змейка" с помощью средств, процедур и функций языка программирование Turbo Pascal. Структурное и функциональное описание разработки. Листинг и общие примеры работы программы.
контрольная работа [286,3 K], добавлен 10.04.2011