Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2011, 17:51   #1
by_simple
Новичок
Джуниор
 
Регистрация: 25.10.2011
Сообщений: 1
По умолчанию C++ Реализация стеков и очередей

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

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

Код:
#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;
}
Помогите пожалуйста разобраться в этом!
by_simple вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программная реализация динамического списка динамических очередей Ghost1k Помощь студентам 2 30.08.2011 22:41
реализация упорядоченного динамического списка динамических стеков(Delphi) berezka Помощь студентам 3 28.12.2010 19:40
Реализация стеков и очередей kaizer131 Общие вопросы Delphi 7 25.02.2010 17:08
Список очередей hanszirke Помощь студентам 5 29.04.2009 18:46
массив стеков Kostua Помощь студентам 1 20.09.2008 08:28