Среда программирования 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

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