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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2012, 11:52   #1
skanku
Пользователь
 
Регистрация: 20.11.2011
Сообщений: 28
По умолчанию Шаблон очереди

Код:
// очередь.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include "stdlib.h"
#include <conio.h>


using namespace std;

 // описание шаблона класса
 template <class Qtype> class queue {
 Qtype *q;
 int sloc,rloc;
 int length;
 public: // описание методов класса
 queue(int size);
 ~queue(){ delete [] q;};
 void qstore (Qtype i);
 Qtype qretrieve();
 void print();
 void init(int size);
 void delete_queue();
 };
 // описание конструктора
 template <class Qtype> queue<Qtype>::queue(int size)
 {
 q=0;
 init(size);// вызов метода создания очереди
 }
 // описание метода добавления элемента в очередь
 template <class Qtype> void queue<Qtype>::qstore(Qtype i)
 {
 // проверка на создание очереди
 if(q==0) {
 cout<<"err-> inicializacia ocheredi\n";
 return ;
 }
 //проверка на заполнение очереди
 if(sloc==length) {
 cout<<"ochered pusta \n";
 return;
 }
 q[sloc]=i; //запонить элемент очереди
 sloc++; // увеличить указатель на элемент очереди
 }
 // описание метода удаления элемента из очереди
 template <class Qtype> Qtype queue<Qtype>::qretrieve()
 {
 // проверка на создание очереди
 if(q==0) {
 cout<<"err-> inicializacia ocheredi \n";
 return 0;
 }
 // проверка пустой очереди
 if(sloc==rloc) {
 cout<<"ochered pusta \n";
 return 0;
 }
 rloc++;//установить указатель на следующий элемент
 return q[rloc-1];// возвратить (удалить) элемент из очереди
 }
 // вывести на экран очередь
 template <class Qtype> void queue<Qtype>::print()
 {
 // проверка пустой очереди
 if(sloc==rloc) {
 cout<<"ocehered pusta \n";
 return ;
 }
 cout<<"ochered=";
 // цикл вывода на экран очереди
 for(int i=rloc;i<sloc;i++)
 {
 cout<<q[i]<<" ";
 }
 cout<<"\n";
 }
 // инициализация очереди
 template <class Qtype> void queue<Qtype>::init(int size)
 {
 if(q!=0) {
 delete [] q; //освободить очередь
 q=0;
 }
 q = new Qtype[size]; //создать очередь
 if(!q) { // проверка на создание очереди
 cout<<"ochered ne sozdana\n";
 exit(1);
 }
 length=size; // установка параметров очереди
 sloc=rloc=0;
 }
 // удалить очередь
 template <class Qtype> void queue<Qtype>::delete_queue()
 {
 if(q!=0) {
 delete [] q;//освободить очередь
 q=0;
 }
 //cout<<" udalenie ocheredi \n";
 length=0; // обновить параметры очереди
 sloc=rloc=0;
 }

int main () //главная функция
 {
int n;
 queue<int> *a=0;
 int ar=1;
 while(ar) // цикл вывода меню и его обработка
 {
 cout<<"1.sozdat ochered \n";
 cout<<"2.inicializacia ocheredi \n";
 cout<<"3.dobavlenie el v ochered \n";
 cout<<"4.udalenie elementa \n";
 cout<<"5.vivesti na ekran \n";
 cout<<"6.udalenie ocheredi \n";
 cout<<"7.Vihod \n";
 char k=getch();
 switch(k) // обработка нажатия клавиши
 {
 case '1': 
 if (a!=0) //проверка на создание класса очереди
 {
 cout<<"err -> unichtogina ochered";
 getch();;
 break;
 }
 cout<<"kol-vo elementov=";
 n=0;cin>>n; cout<<"\n"; // ввести количество элементов в очереди
 if (n>0)
 a=new queue<int>(n);// создание очереди
 system ("pause");
 break;
 case '2': //компилятор ругается на это место
 if (a==0)//проверка на создание класса очереди
 {
 cout<<"err -> ochered ne sozdana \n";
 getch();
 break;
 }
 cout<<"count element=";
 n=0;cin>>n; cout<<"\n";// ввести количество элементов в очереди
 if (n>0)
 a->init(n);// создание очереди
 cout<<"inicializacia ocheredi \n";
getch();
 break;
 case '3':
 if (a==0)//проверка на создание класса очереди
 {
 cout<<"err -> ochered ne sozdana \n";
 getch();
 break;
 }
 cout<<"element=";
 cin>>n; cout<<"\n";//ввести элемент
 a->qstore(n); //добавить элемент
 a->print();// вывести очередь
 getch();
 break;
 case '4':
 if (a==0)//проверка на создание класса очереди
 {
 cout<<"err -> ochered ne sozdana \n";
 getch();
 break;
 }
 cout<<"udalenie elementa=";
 n=a->qretrieve();// взять первый элемент очереди
 if (n>=0)
 cout<<n;
 cout<<"\n"; //вывести элемент на экран
 a->print();// вывести очередь
 getch();
 break;
 case '5':
 if (a==0)//проверка на создание класса очереди
 {
 cout<<"err -> ochered ne sozdana \n";
 getch();
 break;
 }
 a->print();// вывести очередь
getch();
 break;
 case '6':
 if (a==0)//проверка на создание класса очереди
 {
 cout<<"err -> ochered ne sozdana \n";
getch();
 break;
 }
 a->delete_queue();// удалить очередь
 cout<<"udalenie ocheredi \n";
getch();
 break;
 case '7':
 ar=0;// выход из цикла
 break;
 }
 }
 return 0;//завершение программы
 }
как сделать что бы в очередь можно было добавлять и дробные числа?? помогите пожалуйста
skanku вне форума Ответить с цитированием
Старый 28.02.2012, 12:23   #2
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

Код:
a=new queue<double>(n);
Логично, не правда ли?

Ну и в добавление double добавлять

Код:
cout<<"element=";
double Dbl;
cin>>Dbl; cout<<"\n";//ввести элемент
a->qstore(Dbl);
AlexDark вне форума Ответить с цитированием
Старый 28.02.2012, 12:25   #3
skanku
Пользователь
 
Регистрация: 20.11.2011
Сообщений: 28
По умолчанию

дело в том что при объяснении мне препод сказал что переменную надо сделать Qtype
я пробовал но не получалось
skanku вне форума Ответить с цитированием
Старый 28.02.2012, 12:49   #4
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

Так у тебя шаблонная очередь для любых типов, главное объявлять правильно.. хоть классы туда пихай.. вообщем для дробных поправил, дописал /* Double */ там где правил. По аналогии можешь туда строки например засовывать =).

Код:
// очередь.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include "stdlib.h"
#include <conio.h>


using namespace std;

// описание шаблона класса
template <class Qtype> class queue {
	Qtype *q;
	int sloc,rloc;
	int length;
public: // описание методов класса
	queue(int size);
	~queue(){ delete [] q;};
	void qstore (Qtype i);
	Qtype qretrieve();
	void print();
	void init(int size);
	void delete_queue();
};
// описание конструктора
template <class Qtype> queue<Qtype>::queue(int size)
{
	q=0;
	init(size);// вызов метода создания очереди
}
// описание метода добавления элемента в очередь
template <class Qtype> void queue<Qtype>::qstore(Qtype i)
{
	// проверка на создание очереди
	if(q==0) {
		cout<<"err-> inicializacia ocheredi\n";
		return ;
	}
	//проверка на заполнение очереди
	if(sloc==length) {
		cout<<"ochered pusta \n";
		return;
	}
	q[sloc]=i; //запонить элемент очереди
	sloc++; // увеличить указатель на элемент очереди
}
// описание метода удаления элемента из очереди
template <class Qtype> Qtype queue<Qtype>::qretrieve()
{
	// проверка на создание очереди
	if(q==0) {
		cout<<"err-> inicializacia ocheredi \n";
		return 0;
	}
	// проверка пустой очереди
	if(sloc==rloc) {
		cout<<"ochered pusta \n";
		return 0;
	}
	rloc++;//установить указатель на следующий элемент
	return q[rloc-1];// возвратить (удалить) элемент из очереди
}
// вывести на экран очередь
template <class Qtype> void queue<Qtype>::print()
{
	// проверка пустой очереди
	if(sloc==rloc) {
		cout<<"ocehered pusta \n";
		return ;
	}
	cout<<"ochered=";
	// цикл вывода на экран очереди
	for(int i=rloc;i<sloc;i++)
	{
		cout<<q[i]<<" ";
	}
	cout<<"\n";
}
// инициализация очереди
template <class Qtype> void queue<Qtype>::init(int size)
{
	if(q!=0) {
		delete [] q; //освободить очередь
		q=0;
	}
	q = new Qtype[size]; //создать очередь
	if(!q) { // проверка на создание очереди
		cout<<"ochered ne sozdana\n";
		exit(1);
	}
	length=size; // установка параметров очереди
	sloc=rloc=0;
}
// удалить очередь
template <class Qtype> void queue<Qtype>::delete_queue()
{
	if(q!=0) {
		delete [] q;//освободить очередь
		q=0;
	}
	//cout<<" udalenie ocheredi \n";
	length=0; // обновить параметры очереди
	sloc=rloc=0;
}

int main () //главная функция
{
	int n;
	double El;
	queue<double> *a=0; /* Double! */
	int ar=1;
	while(ar) // цикл вывода меню и его обработка
	{
		cout<<"1.sozdat ochered \n";
		cout<<"2.inicializacia ocheredi \n";
		cout<<"3.dobavlenie el v ochered \n";
		cout<<"4.udalenie elementa \n";
		cout<<"5.vivesti na ekran \n";
		cout<<"6.udalenie ocheredi \n";
		cout<<"7.Vihod \n";
		char k=getch();
		switch(k) // обработка нажатия клавиши
		{
		case '1': 
			if (a!=0) //проверка на создание класса очереди
			{
				cout<<"err -> unichtogina ochered";
				getch();;
				break;
			}
			cout<<"kol-vo elementov=";
			n=0;cin>>n; cout<<"\n"; // ввести количество элементов в очереди
			if (n>0)
				a=new queue<double>(n);// создание очереди /* Double! */
			system ("pause");
			break;
		case '2': //компилятор ругается на это место
			if (a==0)//проверка на создание класса очереди
			{
				cout<<"err -> ochered ne sozdana \n";
				getch();
				break;
			}
			cout<<"count element=";
			n=0;cin>>n; cout<<"\n";// ввести количество элементов в очереди
			if (n>0)
				a->init(n);// создание очереди
			cout<<"inicializacia ocheredi \n";
			getch();
			break;
		case '3':
			if (a==0)//проверка на создание класса очереди
			{
				cout<<"err -> ochered ne sozdana \n";
				getch();
				break;
			}
			cout<<"element=";
			cin>>El; cout<<"\n";//ввести элемент
			a->qstore(El); //добавить элемент   /* Double! */
			a->print();// вывести очередь
			getch();
			break;
		case '4':
			if (a==0)//проверка на создание класса очереди
			{
				cout<<"err -> ochered ne sozdana \n";
				getch();
				break;
			}
			cout<<"udalenie elementa=";
			El=a->qretrieve();// взять первый элемент очереди  /* Double! */
			if (El>=0)
				cout<<n;
			cout<<"\n"; //вывести элемент на экран
			a->print();// вывести очередь
			getch();
			break;
		case '5':
			if (a==0)//проверка на создание класса очереди
			{
				cout<<"err -> ochered ne sozdana \n";
				getch();
				break;
			}
			a->print();// вывести очередь
			getch();
			break;
		case '6':
			if (a==0)//проверка на создание класса очереди
			{
				cout<<"err -> ochered ne sozdana \n";
				getch();
				break;
			}
			a->delete_queue();// удалить очередь
			cout<<"udalenie ocheredi \n";
			getch();
			break;
		case '7':
			ar=0;// выход из цикла
			break;
		}
	}
	return 0;//завершение программы
}
AlexDark вне форума Ответить с цитированием
Старый 28.02.2012, 12:55   #5
skanku
Пользователь
 
Регистрация: 20.11.2011
Сообщений: 28
По умолчанию

спасибо) но это я и сам знал и то что строки делать можно, но препод у меня все равно пристанет что не так сделал)
skanku вне форума Ответить с цитированием
Старый 28.02.2012, 13:14   #6
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

хм ну можно задефайнить тип чтоб по всей программе не менять, так он что ли хотел?)

typedef Q_TYPE double;

int main () //главная функция
{
int n;
Q_TYPE El;
queue<Q_TYPE> *a=0
....
AlexDark вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано: таблица в Exel (3 столбца, 4000 строк) и шаблон документа. Задача: Распечатать один и тот-же шаблон документа, под Evgenya040305 Помощь студентам 2 24.11.2011 22:21
Очереди в С++ Radzhab Общие вопросы C/C++ 4 31.03.2011 00:02
статья - Шаблон класса односвязной очереди в библиотеке STL Pblog Обсуждение статей 0 27.02.2011 22:50
очереди Nostalgia Помощь студентам 2 22.03.2010 17:48