Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
 Аватар для jlevistk
239 / 234 / 8
Регистрация: 05.05.2011
Сообщений: 1,553

Стек и очередь.

01.06.2011, 09:47. Показов 5904. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нахожусь в процессе написании программы. И из головы совсем вылетело как правильно написать.
Вот задание если надо:
Система состоит из двух процессоров P1 и P2, двух стеков S1 и S2 и четырёх очередей F1, F2, F3, F4. В систему могут поступать запросы на выполнение задач двух приоритетов - высший (1) и низший (2). Задачи сначала обрабатываются последовательно процессором P1, затем P2.
Запросы на выполнение задач высшего приоритета, поступающие из генератора задач, ставятся в очередь F1, а поступающие с процессора P1 - в очередь F3. Запросы на выполнение задач низшего приоритета, поступающие с генератора задач, ставятся в очередь F2, а поступающие с процессора P1 - в очередь F4. Процессор P1 обрабатывает запросы из очередей F1 и F2, а процессор P2 - из очередей F3 и F4. Процессор сначала обрабатывает задачи из очереди задач с высшим приоритетом, затем из очереди задач с низшим приоритетом. Если процессор выполняет задачу с низшим приоритетом и приходит запрос на выполнение задачи с высшим приоритетом, то выполняемая задача помещается в соответствующий процессору стек, а пришедшая задача - в процессор. Задача из стека возвращается в процессор, если все задачи большего приоритета обработаны.
Как правильно написать, чтоб можно было сравнивать приоритет? Конкретно этот момент:
C#
1
2
3
4
5
6
7
8
9
 
 if (prog.priority == 1) // что не так?? как надо сделать?
            {
               queue_1.Enqueue(prog[i]); 
            }
            else
            {
                queue_2.Enqueue(prog[i]);
            }
Вот ошибка: Ошибка 1 "System.Collections.Generic.List<program m>" не содержит определения для "priority" и не был найден метод расширения "priority", принимающий тип "System.Collections.Generic.List<program m>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) c:\users\levis\documents\visual studio 2010\Projects\SAOD_3\SAOD_3\CodeFile1.cs 50 22 SAOD_3

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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);
    }
}
Так же вопрос, как реализовать выполнение программы по тактам?

Добавлено через 12 часов 2 минуты
up!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.06.2011, 09:47
Ответы с готовыми решениями:

Очередь, стек.
Как стек поместить в очередь? Какая программа очереди?

Стек и Очередь
Реализуйте стек и очередь (с операциями добавления/удаления элемента) при помощи массивов и при помощи линейных списков. Если не...

Стек, Очередь, Двусвязный список
сначала нужно сформировать и заполнить элементами три структуры – «стек», «очередь», «двусвязный список». Для проверки вывести их на экран)...

10
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
01.06.2011, 10:56
C#
1
2
3
4
5
6
7
8
if (prog[i].priority == 1) // Отсутствует индексация
            {
               queue_1.Enqueue(prog[i]); 
            }
            else
            {
                queue_2.Enqueue(prog[i]);
            }
И что вы понимаете под выполнением по тактам?
1
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
01.06.2011, 10:57
не содержит определения для "priority"
Читаем про модификаторы доступа
Так же вопрос, как реализовать выполнение программы по тактам?
это как?
1
 Аватар для jlevistk
239 / 234 / 8
Регистрация: 05.05.2011
Сообщений: 1,553
01.06.2011, 11:04  [ТС]
Под тактами я понимаю то, что задачи будут поступать потактово.
Тобишь задачи будут поступать допустим каждую секунду. В зависимости от их приоритета и времени выполнения они будут поступать либо в стек либо в процессор.
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
01.06.2011, 11:25
Ну тогда вам надо изучать что такое потоки, события... и тп

ЗЫ, Сейчас накатаю пример
1
 Аватар для jlevistk
239 / 234 / 8
Регистрация: 05.05.2011
Сообщений: 1,553
01.06.2011, 11:44  [ТС]
да, спасибо! жду примера!
 Комментарий модератора 
Самому тоже стоит пытаться что - то сделать.
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
01.06.2011, 12:09
Не сори не сделаю, надо бежать...
0
 Аватар для jlevistk
239 / 234 / 8
Регистрация: 05.05.2011
Сообщений: 1,553
01.06.2011, 12:18  [ТС]
Ну, все равно буду ждать хоть какого то примерчика..
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
01.06.2011, 12:23
Для потактового выполнения можно воспользоваться таймером (класс System.Windows.Forms.Timer) или циклом с паузой
C#
1
2
3
4
5
while(prog.Count>0)
{
    /// код для распределения процессов в стек или на процессоры
    System.Threading.Thread.Sleep(1000); // Время паузы в мсек
}
Так как у вас консольное приложение, то лучше воспользоваться вторым вариантом. Я так понимаю что у вас стоит абстрактная задача реализации механизма распределения процессорного времени?
1
 Аватар для jlevistk
239 / 234 / 8
Регистрация: 05.05.2011
Сообщений: 1,553
01.06.2011, 12:35  [ТС]
Да, правильно=) У задачи есть время выполнения и приоритет. Задачи поступают раз в такт. Выполняться могут по несколько тактов. С более высоким приоритетом выполняются первыми. Если выполняется задача с низким приоритетом, от помещается в стек, до окончания выполнения с более высоким. ну как то так я это представляю, по крайней мере..
0
 Аватар для XAHOK
273 / 266 / 20
Регистрация: 27.02.2009
Сообщений: 694
Записей в блоге: 7
01.06.2011, 13:11
Тогда в цикле вам нужно реализовать алгоритм извлечения процессов из стеков и перемещение в очередь, а также обратный перевод из очереди в стек в конце каждого такта. Один такт будет равен одному прохождению цикла. Если напишите подробный алгоритм простым языком, то перевести в виде кода будет очень легко.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.06.2011, 13:11
Помогаю со студенческими работами здесь

Стек, очередь, дек - ИДЕЯ (реализация?)
Задание лабораторки: Хочу создать программу про Библиотеку (типа жизненный пример) Три groupBox'a: СТЕК - Сдача книг (как...

Заполнить очередь и стек и поменять их содержимое местами через дополнительный стек.
Необходимо разработать программу, которая должна : Заполнить очередь и стек и поменять их содержимое местами через дополнительный стек....

Стек и очередь. Задачи никогда не попадают в стек
Условие: Система состоит из двух процессоров P1 и P2 и двух очередей F1, F2 и стека S. В систему могут поступать запросы на выполнение...

стек и очередь
ребят поделитесь плиз программами реализующими на си стек и очередь (хотябы ввод вывод данных)

Стек. Очередь
Выбрать предметную область для «базы данных» в соответствии с номером в групповом журнале и предложить структуру для описания отдельных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru