![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 01.11.2016
Сообщений: 110
|
![]()
Стек – статический; очередь – статическая
Система состоит из процессора 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; } |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,829
|
![]()
А где же очередь? А где же стек? Пока только массивы и видно...
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 01.11.2016
Сообщений: 110
|
![]() |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,829
|
![]()
Вы в курсе, что такое очередь и стек?
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 01.11.2016
Сообщений: 110
|
![]() |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,829
|
![]()
Ну и где это? Возьмем, стек - чем он отличается от простого массива? Почему у вас нет это различия?
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
![]()
http://www.cplusplus.com/reference/queue/queue/
http://www.cplusplus.com/reference/stack/stack/ И не морочте голову велосипедами, если препод сильно злой - откройте эти же исходники, поставляемые с компиляторм и почитайте. Можно тупо скопировать себе. Можно взять за основу интерфейс (набор функций и их поведения) и реализовать свой. Последний раз редактировалось alexzk; 05.10.2017 в 18:38. |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,829
|
![]()
Не-не, тут явно задача на структуры данных и за готовые классы полуит от ворот-поворот.
|
![]() |
![]() |
![]() |
#9 | |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
![]() Цитата:
> Можно взять за основу интерфейс (набор функций и их поведения) и реализовать свой. Там на сайте хоть нормально интерфейс расписан, если реализовать по описанию - все станет понятно и просто дальше. Можно, как вариант, реализовать из стандартных, а потом заменять их по чуть и добиваться, чтоб прога так же само работала. |
|
![]() |
![]() |
![]() |
#10 | |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
![]() Цитата:
> Можно взять за основу интерфейс (набор функций и их поведения) и реализовать свой. Там на сайте хоть нормально интерфейс расписан, если реализовать по описанию - все станет понятно и просто дальше. Можно, как вариант, реализовать из стандартных, а потом заменять их по чуть и добиваться, чтоб прога так же само работала. |
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Стек и очередь. Задачи никогда не попадают в стек - Delphi | Exxodus | Помощь студентам | 1 | 05.04.2016 14:12 |
Стек и очередь | Кротяка | Общие вопросы C/C++ | 1 | 12.08.2014 18:51 |
Стек и очередь | SsAn | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 05.01.2014 13:24 |
списки стек очередь | slavnayanata | Помощь студентам | 0 | 23.05.2011 21:04 |