Форум программистов, компьютерный форум CyberForum.ru

C++ реализация стеков и очередей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа, которая считает количество битов. http://www.cyberforum.ru/cpp-beginners/thread372381.html
Привет всем, нужно написать функцию, которая возвращает количество битов с значением '1' в числе типу short. Заранее спасибо.
C++ Помогите найти ошибки.срочно срочно потому что уже надо высылать прогу. Задача: записать прогу с функцией,которая решает уравнение второго степени.(количество и само решение) там должно быть 3 части: 1. input 2. 2 solve 3.2 output http://www.cyberforum.ru/cpp-beginners/thread372379.html
C++ с и Windows API - создать файл и найти количество свободных кластеров
Привет всем. Помогите пожалуйста ДНИЩУ решить следующую задачу (резко перекинули с низкоуровневого программирования на сишку 0_0): С использованием Windows API и потоков в С создать файл и в него записать найденное количество свободных кластеров на диске.
Инверсии и перестановки C++
Ребят, помогите пожалуйста, сделать 2 задачки, буду очень вам признателен! Заранее огромное спасибо. 1.Дана перестановка. Наименьшее число обменов, чтобы ее отсортировать. Входные данные Число N (1 <= N <= 10000), затем перестановка. Выходные данные Выведите ответ.
C++ Помогите решить задачи)) http://www.cyberforum.ru/cpp-beginners/thread372362.html
C++ Решение нелинейных уравнений и систем. Здрасвуйте ,сделайте плз программу,для решения нелинейного уравнения методом хорд по формуле: pow(2,x)+(x*x)-1 подробнее

Показать сообщение отдельно
by_simple
Сообщений: n/a
25.10.2011, 17:56     C++ реализация стеков и очередей
Доброго времени суток! Есть такая задачка, над которой я уже очень долго бьюсь, плохо понимая как вообще можно это реализовать.
Вот суть:

Система состоит из процессора P, трёх очередей F0, F1, F2 и стека S. В систему поступают запросы на выполнение задач.

Задачи считывать из файла. В файле например может быть такая таблица:

имя задачи длительность выполнения момент поступления приоритет

qw 3 7 0
we 5 8 2
jh 15 10 0

и тд...

Поступающие запросы ставятся в соответствующие приоритетам очере-ди. Сначала обрабатываются задачи из очереди F0. Если она пуста, можно обрабатывать задачи из очереди F1. Если и она пуста, то можно обрабаты-вать задачи из очереди F2. Если все очереди пусты, то система находится в ожидании поступающих задач (процессор свободен), либо в режиме обработ-ки предыдущей задачи (процессор занят). Если поступает задача с более вы-соким приоритетом, чем обрабатываемая в данный момент, то обрабатывае-мая помещается в стек и может обрабатываться тогда и только тогда, когда все задачи с более высоким приоритетом уже обработаны.


Вот мои наработки, но помоему полный бред:
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#include<fstream>
#include<string>
#include<clocale>
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
 
struct Tasks{
    string name;
    string runtime;
    string arrival_time;
    string priority;
};
 
 
void file(istream& ifs)
{
    string buf,str;
    long j=0,count=0;
    // поиск количества строк в файле
    while(getline(ifs, str))
    {
            count++;
    }
    Tasks* task=new Tasks[j];
    // считываем в массив структур;
    while(ifs>>buf)
    {
        if (task[j].name=="")
        {
            task[j].name=buf; continue;
        }
        if (task[j].runtime=="")
        {
            task[j].runtime=buf; continue;
        }
        if (task[j].arrival_time=="")
        {
            task[j].arrival_time=buf; continue;
        }
        task[j].priority=buf;
        j++;//переход на след. задачу;
    }
}
 
// описание динамической структуры для реализации СТЕКА
struct Stack
{
    struct Stack *link;
    char info;
};
// описание глобальных переменных - указатели на верхушку СТЕКА
struct Stack *Top;
struct Stack *Top1;
// Заполнение Стека
void Func_Stack(Tasks *task; long j)
{ Top1 = NULL;
Top = NULL;
 
per:
{   struct Stack *p1;
    struct Stack *p;
    p1 = new struct Stack;
    p = new struct Stack;
    &p->task[j];
    p->link = Top;
    Top = p;
 p1->task[j]=p->task[j];
    p1->link = Top1;
    Top1 = p1;
    }
}
 
 
void Func0(Tasks *task, long j, int cnt0)
{
    struct F0 {
        Task 0info; 
        struct F0 *next;
    };
 
 typedef F0 *F0Ptr; // указатель на тип F0 
 F0Ptr head0 = NULL; 
 F0Ptr v0;// указатель на текущий элемент
 F0Ptr tail0; // указатель на "хвост" очереди 
 F0Ptr d0; // указатель на удаляемый элемент
 if (head0 == NULL) 
 { 
     head0 = new F0;
     head0->task[j];
     cnt0++;
     head0->next = NULL; 
     tail0 = head0;
 }
v0 = new F0;
v0->0info = task[j];
v0->next = tail0->next;
tail0 = v0;
cnt0++;
if ((CPU==true)||(process_priority>(head0->task[j].priority)))
{
    d0 = head0;
    head0 = head0->next;
    delete d0;
}
 
void Func1(Tasks *task, long j,int cnt0, int cnt1)
{
    struct F1 {
        Task info1; 
        struct F1 *next;
    };
 
 typedef F1 *F1Ptr; // указатель на тип F1 
 F1Ptr head1 = NULL; 
 F1Ptr v1; // указатель на текущий элемент 
 F1Ptr d1; // указатель на удаляемый элемент
 F1Ptr tail1; // указатель на "хвост" очереди 
 if (head1 == NULL) 
 { 
     head1 = new F1;
     head1->task[j];
     cnt1++;
     head1->next = NULL; 
     tail1 = head1;
 }
v1 = new F1;
v1->1info = task[j];
v1->next = tail1->next;
tail1 = v1;
cnt1++;
if (((CPU==true)&&(cnt0==0))||(process_priority>(head1->task[j].priority)))
{
    d1 = head1;
    head1 = head1->next;
    delete d1;
}
}
 
void Func2(Tasks *task, long j, int cnt0, int cnt1, int cnt2)
{
    struct F2 {
        Task task[j]; 
        struct F2 *next;
    };
 
 typedef F2 *F2Ptr; // указатель на тип F2 
 F2Ptr head = NULL; 
 F2Ptr v2; // указатель на текущий элемент 
 F2Ptr d2; // указатель на удаляемый элемент
 F2Ptr tail2; // указатель на "хвост" очереди 
 if (head2 == NULL) 
 { 
     head2 = new F2;
     head2->task[j];
     cnt2++;
     head2->next = NULL; 
     tail2 = head2;
 }
v2 = new F2;
v2->2info = task[j];
v2->next = tail2->next;
tail2 = v2;
cnt2++;
if (((CPU==true)&&(cnt0==0)&&(cnt1==0))||(process_priority>(head2->task[j].priority)))
{
    d1 = head2;
    head2 = head2->next;
    delete d2;
}
}
 
 
 
 
 
 
 
int main()
{
    setlocale(LC_ALL,"rus");
    ifstream ifs("wow.txt", ios:: in );
    if (!ifs)
    {
        cerr<<"Ошибка открытия файла"<<endl;
    return 1;
    }
    file(ifs);
    bool CPU;
    CPU=true;
    long timer;
    int cnt0=0, cnt1=0, cnt2=0;
    for (j=0;j<count;j++)
    {
    for (timer=0;timer<n;timer++)
    {
        if (task[j].arrival_time==timer)
        {
            switch (task[j].priority)
            {
            case '0': Func0(task,j,cnt0);
            case '1': Func1(task,j,cnt0,cnt1);
            case '2': Func2(task,j,cnt0,cnt1,cnt2);
            }
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru