Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Poyasnitelnaya_zapiska_OS-1.doc
Скачиваний:
2
Добавлен:
10.11.2019
Размер:
1.28 Mб
Скачать

Переполнение очереди

В случае если после добавления элемента размер очереди, заданный пользователем вначале, превышен, появляется следующее сообщение:

В случае, если пользователь нажмет кнопку «Да», размер очереди будет увеличен на единицу и элемент будет добавлен, в случае отказа, форма состояние, в котором она была до нажатия кнопки «Поставить в очередь».

Альтернативный вид интерфейса

В случае нажатия кнопки «Переключить вид» интерфейс приложения принимает другой вид, выполненный в стиле автомата с газированной водой, логика управления программой не изменяется.

Реализация алгоритма

рис. 1 Окно приложения

Интерфейсная часть:

Логическая часть:

#include "Queue.h"

#include <iostream>

#include <Windows.h>

#ifdef _MANAGED

#pragma managed(push, off)

#endif

BOOL APIENTRY DllMain(

HMODULE ,

DWORD ul_reason_for_call,

LPVOID )

{

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH:

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

}

return TRUE;

}

#ifdef _MANAGED

#pragma managed(pop)

#endif

MyQueue::MyQueue(int size)

{

mCurrent = -1;

if (size < 0)

{

mCapacity = 1;

mElementSet = new int[1];

}

else

{

mElementSet = new int[size];

mCapacity = size;

}

}

bool MyQueue::Exists(int node)

{

for (int i = 0; i < mCapacity; i++)

{

if (mElementSet[i] == node)

return true;

}

return false;

}

int MyQueue::GetCount()

{

return mCurrent >= 0 ? mCapacity : 0;

}

MyQueue::~MyQueue()

{

if (mElementSet != NULL)

{

delete[] mElementSet;

}

}

int& MyQueue::Insert(int node)

{

int* arr = new int[mCapacity + 1];

arr[0] = node;

if (mCapacity > 1)

{

for (int i = 0; i < mCapacity; i++)

{

arr[i + 1] = mElementSet[i];

}

delete [] mElementSet;

mElementSet = new int[mCapacity + 1];

mCurrent++;

for (int i = 0; i < mCapacity + 1; i++)

{

mElementSet[i] = arr[i];

}

}

else

{

mCurrent = 0;

mElementSet[0] = arr[0];

}

delete [] arr;

mCapacity++;

return GetCurrent();

}

void MyQueue::Remove()

{

if (mCurrent >= 0)

{

mCurrent--;

mCapacity--;

delete &mElementSet[mCapacity - 1];

}

}

void MyQueue::PrintElements()

{

for (int i = mCapacity - 1; i >= 0; i--)

{

std::cout << mElementSet[i] << std::endl;

}

getchar();

}

int& MyQueue::GetCurrent()

{

if (mCurrent >= 0)

{

return mElementSet[mCurrent];

}

}

int& MyQueue::MoveNext()

{

if (mCurrent >= 0);

{

if (mCurrent == mCapacity - 1)

{

mCurrent = 0;

}

else

{

mCurrent++;

}

}

return mElementSet[mCurrent];

}

void MyQueue::Invert()

{

int* arr = new int[mCapacity];

int j = 0;

for (int i = mCapacity - 1; i >= 0; i--)

{

arr[j] = mElementSet[i];

j++;

}

for (int i = 0; i < mCapacity; i++)

{

mElementSet[i] = arr[i];

}

}

void MyQueue::Clear()

{

mCurrent = -1;

delete [] mElementSet;

mElementSet = new int[1];

mCapacity = 1;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]