Главная страница
Навигация по странице:

  • «Национальный исследовательский Нижегородский государственный университет им. Н.И. Лобачевского» (ННГУ) Институт информационных технологий, математики и механики

  • ОТЧЕТ по лабораторной работе «Работа с очередями» Выполнил

  • Отчет Лабораторная работа Стеки. Отчет Очереди. Отчет по лабораторной работе Работа с очередями


    Скачать 54.63 Kb.
    НазваниеОтчет по лабораторной работе Работа с очередями
    АнкорОтчет Лабораторная работа Стеки
    Дата15.05.2022
    Размер54.63 Kb.
    Формат файлаdocx
    Имя файлаОтчет Очереди.docx
    ТипОтчет
    #531245


    МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
    РОССИЙСКОЙ ФЕДЕРАЦИИ

    Федеральное государственное автономное образовательное учреждение высшего образования
    «Национальный исследовательский
    Нижегородский государственный университет им. Н.И. Лобачевского»


    (ННГУ)
    Институт информационных технологий, математики и механики
    Направление подготовки: «Программная инженерия»

    ОТЧЕТ

    по лабораторной работе
    «Работа с очередями»

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

    382008-1
    Силаева Наталья Олеговна

    Проверил: к.ф.-м.н., доц.
    К.А. Баркалов

    Нижний Новгород
    2020
    Содержание




    TQueue.h 5

    QueueForm.h 5


    Введение



    Очередь – это динамическая структура данных которая состоит из набора элементов которые размещены последовательно друг за другом. При этом добавление элементов осуществляется с одной стороны, а удаление (вытягивание) – с другой стороны.
    Очередь работает по принципу FIFO (First In — First Out), то есть «первым пришел – первым вышел». 

    Постановка задачи


    Требуется написать программу, которая визуализирует добавление и извлечения элемента очереди с некоторым шансом.

    Описание алгоритмов



    Очередь
    В этой работе представлена кольцевая очередь.
    В кольцевой очереди элемент, который выходит из очереди помещается в ее конец



    Далее изображена работа кольцевой очереди в случае, когда часть элементов занята.



    Рисунок 4. Кольцевая очередь. Случай когда часть элементов занята

    Примеры кольцевой очереди:

    • движение трамваев по круговому маршруту;

    • очередь событий для их обработки в Windows.

    Описание программы



    TQueue.h



    class TQueue

    {

    T* mas; //массив очереди

    int maxsize; //размер массива очереди

    int head; //голова очереди

    int tail; //хвост очереди

    int len; //длина очереди

    public:

    TQueue(int m = 100);

    TQueue(const TQueue& Q);

    TQueue() { delete[] mas; }
    bool IsEmpty(); // проверка на пустоту

    bool IsFull(); // Проверка на полноту

    void Push(T n); // Добавить элемент в очередь

    T Pop(); // Извлечь элемент из очереди

    T TopHead(); //Посмотреть начало очереди

    T TopTail(); //Посмотреть конец очереди
    int GetMaxsize() { return maxsize; }

    int GetLen() { return len; }
    };

    QueueForm.h



    Представление основных функций класса


    QueueForm(void)

    {

    InitializeComponent();
    gr = CreateGraphics();

    rnd1 = gcnew Random(); // датчик случайных чисел

    GoldPen = gcnew Pen(Color::Gold);

    GoldPen->Width = 10.0F;

    WhitePen = gcnew Pen(SystemColors::Control);

    WhitePen->Width = 10.0F;
    x0 = 395;

    y0 = 30;

    w0 = 130;

    h0 = 130;

    PopCount = 0;

    PushCount = 0;

    }

    private: System::Void button_start_Click(System::Object^ sender, System::EventArgs^ e) {

    MaxSize = Convert::ToInt32(textBox1_maxlen->Text);

    Size = Convert::ToInt32(textBox2_len->Text);

    p = Convert::ToDouble(textBox3_p->Text);

    q = Convert::ToDouble(textBox4_q->Text);
    quq = new TQueue(MaxSize);

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

    {

    quq->Push(1);

    }

    Draww();

    timer1->Enabled = true;

    }

    void Draww()

    {

    int start = 360 * quq->TopHead() / quq->GetMaxsize();

    int finish = 360 * (quq->GetLen()) / quq->GetMaxsize();

    gr->DrawArc(GoldPen, x0, y0, w0, h0, start, finish);

    }

    void Clean()

    {

    int start = 360 * quq->TopHead() / quq->GetMaxsize();

    int finish = 360 * (quq->GetLen()) / quq->GetMaxsize();

    gr->DrawArc(WhitePen, x0, y0, w0, h0, start, finish);

    }

    private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e)

    {

    Clean();

    if (rnd1->NextDouble() < p)

    {

    if (!quq->IsFull())

    {

    quq->Push(1);

    PushCount++;

    }

    }

    if (rnd1->NextDouble() < q)

    {

    if (!quq->IsEmpty())

    {

    quq->Pop();

    PopCount++;

    }

    }

    Draww();

    label_push->Text = Convert::ToString(PushCount);

    label_pop->Text = Convert::ToString(PopCount);

    }

    private: System::Void button2_stop_Click(System::Object^ sender, System::EventArgs^ e) {

    timer1->Enabled = false;

    }

    Результаты


    Ошибок при опустошении и заполнении очереди нет.






    Заключение


    Программа успешно визуализирует работу кольцевой очереди
    https://github.com/yablochkina44/mp2-lab4-queue

    Литература





    1. ru.wikipedia.org

    2. https://webexsite.wordpress.com/2016/08/20

    3. http://dander.ru/gos/22.html

    4. https://proglib.io/p/java-sorting-algorithms/)

    5. https://mvblog.ru/archives/144/


    написать администратору сайта