Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 05.10.2017, 13:38   #1
Кристина1998
Форумчанин
 
Регистрация: 01.11.2016
Сообщений: 110
Репутация: 10
По умолчанию Стек и очередь

Стек – статический; очередь – статическая
Система состоит из процессора P, трѐх очередей F0, F1, F2 и стека S.
В систему поступают запросы на выполнение задач.Поступающие запросы ставятся в соответствующие приоритетам
очереди. Сначала обрабатываются задачи из очереди F0. Если она пуста,
можно обрабатывать задачи из очереди F1. Если и она пуста, то можно
обрабатывать задачи из очереди F2. Если все очереди пусты, то система
находится в ожидании поступающих задач (процессор свободен), либо в
режиме обработки предыдущей задачи (процессор занят). Если поступает
задача с более высоким приоритетом, чем обрабатываемая в данный момент,
то обрабатываемая помещается в стек, если она выполнена менее чем на
половину по времени, и может обрабатываться тогда и только тогда, когда
все задачи с более высоким приоритетом уже обработаны.(Необходимо наличие, как автоматического генератора задач, так и возможность ручного добавления задач, с указанием их параметров,Для каждой задачи из списка входных задач должно быть определено время поступления,Вывод на экран состояния моделируемой системы на каждой итерации работы (содержимое стека(ов), очереди(ей), процессора)
ПОСМОТРИТЕ ПРАВИЛЬНО ЛИ Я НАПИСАЛА КОД ДЛЯ стека-статического, очереди-статической:
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;


struct Zadacha {
string name;//имя
int prioritet; //приоритет
int vremya; //время выполнения
int time; //время когда начать выполнять процесс
};

int add_spisok(Zadacha *task) {
int count;
ifstream file_in("in.txt", ios:: in );

if (!file_in) {
cerr<<"Ошибка открытия файла"<<endl;
return 0;
}
//Добавляем задачи в генератор задач
for (count = 0; !file_in.eof(); count++) {
file_in >> task[count].name;
file_in >> task[count].prioritet;
file_in >> task[count].vremya;
file_in >> task[count].time;
}
return count;
};

void sdvig(Zadacha *F, int &iF){
//сдвигаем очередь на 1
for (int i = 0; i < iF; i++)
F[i] = F[i+1];
iF--;
};


int main () {
setlocale(LC_ALL,"rus");
Zadacha F0[100], F1[100], F2[100], //3 очереди
stack[100], //стек
task[300], //генератор задач (из файла добавляются)
CPU; //процессор для выполнения задач
int iF0 = 0, iF1 = 0, iF2 = 0, iS = 0;
int timer = 0, count = 0;
bool newTask = false;

//Добавляем задачи
count = add_spisok(task);
CPU.name = "";

for (int i = 0; i < count ; timer++) {
//генератор задач
do {
newTask = false;
if (task[i].time == timer) {
if (iF0 == 100) iF0 = 0;
if (iF1 == 100) iF1 = 0;
if (iF2 == 100) iF2 = 0;
switch (task[i].prioritet) {
case 0: {F0[iF0] = task[i]; iF0++; break;}
case 1: {F1[iF1] = task[i]; iF1++; break;}
case 2: {F2[iF2] = task[i]; iF2++; break;}
}
i++; //проверим нет ли еще задачи
newTask = true;
}
} while (newTask);
//Работа процессора
if (CPU.name != "") {
CPU.vremya--;
if (CPU.vremya <= 0) {
CPU.name = "";
CPU.prioritet = 4;
if (iS > 0) {
CPU = stack[iS-1];
iS--;
}
}
}
//Обработка очереди 0
if (iF0 > 0) {
if (CPU.name != "") {
if (CPU.prioritet > F0[0].prioritet) { //если приоритет круче то добавить в стек
stack[iS] = CPU;
iS++;
CPU = F0[0];
sdvig(F0, iF0);
}
} else {
CPU = F0[0];
sdvig(F0, iF0);
}

}
//Обработка очереди 1
if (iF1 > 0) {
if (CPU.name != "") {
if (CPU.prioritet > F1[0].prioritet) {
stack[iS] = CPU;
iS++;
CPU = F1[0];
sdvig(F1, iF1);
}
} else {
CPU = F1[0];
sdvig(F1, iF1);
}
}
//Обработка очереди 2
if (iF2 > 0) {
if (CPU.name != "") {

if (CPU.prioritet > F2[0].prioritet) {
stack[iS] = CPU;
iS++;
CPU = F2[0];
sdvig(F2, iF2);
}
} else {
CPU = F2[0];
sdvig(F2, iF2);
}
}

cout << "Timer " << setw(2) << timer << " CPU=" << setw(1) << CPU.name;
cout << " \tF0=";
for (int i = 0; i < iF0; i++) cout << F0[i].name << ",";
cout << "\t F1=";
for (int i = 0; i < iF1; i++) cout << F1[i].name << ",";
cout << "\t F2=";
for (int i = 0; i < iF2; i++) cout << F2[i].name << ",";
cout << " \t S=";
for (int i = 0; i < iS; i++) cout << stack[i].name << ",";
cout << endl;
}

system("pause");
return 0;
}
Кристина1998 вне форума   Ответить с цитированием
Старый 05.10.2017, 13:42   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,655
Репутация: 2631
По умолчанию

А где же очередь? А где же стек? Пока только массивы и видно...
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 05.10.2017, 13:47   #3
Кристина1998
Форумчанин
 
Регистрация: 01.11.2016
Сообщений: 110
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А где же очередь? А где же стек? Пока только массивы и видно...
т.е реализация неверна?
Кристина1998 вне форума   Ответить с цитированием
Старый 05.10.2017, 13:52   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,655
Репутация: 2631
По умолчанию

Вы в курсе, что такое очередь и стек?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 05.10.2017, 13:56   #5
Кристина1998
Форумчанин
 
Регистрация: 01.11.2016
Сообщений: 110
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы в курсе, что такое очередь и стек?
по определениям в курсе, но в реализации не очень
Кристина1998 вне форума   Ответить с цитированием
Старый 05.10.2017, 13:58   #6
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,655
Репутация: 2631
По умолчанию

Ну и где это? Возьмем, стек - чем он отличается от простого массива? Почему у вас нет это различия?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 05.10.2017, 19:31   #7
alexzk
Участник клуба
 
Регистрация: 12.04.2017
Сообщений: 889
Репутация: 172
По умолчанию

http://www.cplusplus.com/reference/queue/queue/
http://www.cplusplus.com/reference/stack/stack/

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

Последний раз редактировалось alexzk; 05.10.2017 в 19:38.
alexzk вне форума   Ответить с цитированием
Старый 05.10.2017, 20:46   #8
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,655
Репутация: 2631
По умолчанию

Не-не, тут явно задача на структуры данных и за готовые классы полуит от ворот-поворот.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 06.10.2017, 19:10   #9
alexzk
Участник клуба
 
Регистрация: 12.04.2017
Сообщений: 889
Репутация: 172
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Не-не, тут явно задача на структуры данных и за готовые классы полуит от ворот-поворот.
Ну так

> Можно взять за основу интерфейс (набор функций и их поведения) и реализовать свой.

Там на сайте хоть нормально интерфейс расписан, если реализовать по описанию - все станет понятно и просто дальше.

Можно, как вариант, реализовать из стандартных, а потом заменять их по чуть и добиваться, чтоб прога так же само работала.
alexzk вне форума   Ответить с цитированием
Старый 06.10.2017, 19:10   #10
alexzk
Участник клуба
 
Регистрация: 12.04.2017
Сообщений: 889
Репутация: 172
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Не-не, тут явно задача на структуры данных и за готовые классы полуит от ворот-поворот.
Ну так

> Можно взять за основу интерфейс (набор функций и их поведения) и реализовать свой.

Там на сайте хоть нормально интерфейс расписан, если реализовать по описанию - все станет понятно и просто дальше.

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стек и очередь. Задачи никогда не попадают в стек - Delphi Exxodus Помощь студентам 1 05.04.2016 15:12
Стек и очередь Кротяка Общие вопросы C/C++ 1 12.08.2014 18:51
Стек и очередь SsAn Паскаль 1 05.01.2014 13:24
списки стек очередь slavnayanata Помощь студентам 0 23.05.2011 21:04


07:50.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.