Стек и очередь. - C#
Формулировка задачи:
Нахожусь в процессе написании программы. И из головы совсем вылетело как правильно написать.
Вот задание если надо:
Система состоит из двух процессоров P1 и P2, двух стеков S1 и S2 и четырёх очередей F1, F2, F3, F4. В систему могут поступать запросы на выполнение задач двух приоритетов - высший (1) и низший (2). Задачи сначала обрабатываются последовательно процессором P1, затем P2.
Запросы на выполнение задач высшего приоритета, поступающие из генератора задач, ставятся в очередь F1, а поступающие с процессора P1 - в очередь F3. Запросы на выполнение задач низшего приоритета, поступающие с генератора задач, ставятся в очередь F2, а поступающие с процессора P1 - в очередь F4. Процессор P1 обрабатывает запросы из очередей F1 и F2, а процессор P2 - из очередей F3 и F4. Процессор сначала обрабатывает задачи из очереди задач с высшим приоритетом, затем из очереди задач с низшим приоритетом. Если процессор выполняет задачу с низшим приоритетом и приходит запрос на выполнение задачи с высшим приоритетом, то выполняемая задача помещается в соответствующий процессору стек, а пришедшая задача - в процессор. Задача из стека возвращается в процессор, если все задачи большего приоритета обработаны.
Как правильно написать, чтоб можно было сравнивать приоритет? Конкретно этот момент:
Вот ошибка: Ошибка 1 "System.Collections.Generic.List<programm>" не содержит определения для "priority" и не был найден метод расширения "priority", принимающий тип "System.Collections.Generic.List<programm>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) c:\users\levis\documents\visual studio 2010\Projects\SAOD_3\SAOD_3\CodeFile1.cs 50 22 SAOD_3
Так же вопрос, как реализовать выполнение программы по тактам?
if (prog.priority == 1) // что не так?? как надо сделать? { queue_1.Enqueue(prog[i]); } else { queue_2.Enqueue(prog[i]); }
using System; using System.Collections; using System.Collections.Generic; struct programm { private string name; private int priority; private int time; public programm(string n, int p, int t) { name = n; priority = p; time = t; } } class process { static public void list_prmm(out List<programm> prog, out int num) { prog = new List<programm>(); string n1; int p1, t1; Console.WriteLine("Введите количество задач: "); num = Int32.Parse(Console.ReadLine()); Console.WriteLine("Введите хорактеристики задач"); for (int i = 0; i < num; i++) { Console.WriteLine("Введите имя задачи " + (i+1) + ":"); n1 = Console.ReadLine(); Console.WriteLine("Введите время выполнения задачи " + (i + 1) + ":"); t1 = Int32.Parse(Console.ReadLine()); Console.WriteLine("Введите приоритет задачи (высший (1) или низший (2))" + (i + 1) + ":"); p1 = Int32.Parse(Console.ReadLine()); programm prog_temp = new programm(n1,p1,t1); prog.Add(prog_temp); Console.Clear(); } } static public void Queue(List<programm> prog,int num) { Queue queue_1 = new Queue(); Queue queue_2 = new Queue(); for (int i = 0; i < num; i++) { if (prog.priority == 1) // что не так?? как надо сделать? { queue_1.Enqueue(prog[i]); } else { queue_2.Enqueue(prog[i]); } } } static void Main() { int num; List<programm> prog; list_prmm(out prog, out num); } }
up!!!
Решение задачи: «Стек и очередь.»
textual
Листинг программы
while(prog.Count>0) { /// код для распределения процессов в стек или на процессоры System.Threading.Thread.Sleep(1000); // Время паузы в мсек }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д