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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2016, 18:09   #1
dimok5
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 51
По умолчанию Двунаправленное кольцо С++

Такая история. Сдавал в универе работу по классам.
Цитата:
Разработать класс реализующий список (двунаправленное кольцо). Элемент списка содержит информацию о товаре на складе фирмы. Элемент очереди содер-жит наименование товара, цену, количество и дату поставки. В классе реализовать методы поставки на склад, отгрузки со склада и формирования информации по выбранному товару.
Преподу не понравилось решение. Сказал, что это двунаправленная очередь, а ему надо кольцо. Собственно вопрос: как переделать код, что бы было это кольцо(а то что-то в гугле даже про это ничего толкового нету, а решить надо побыстрее).
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;

struct Data{
	Data *Next, *Prev;
	string Name;
	int Price, Count;
	int Day, Month, Year;};
class List{
protected:
	Data *Head, *Tail;
	int Size;
public:
	List()	{
		Head = NULL;
		Tail = NULL;
		Size = 0;	};
	List(Data InputData)	{
		Data *curdata = new Data;
		curdata->Year = InputData.Year;
		curdata->Month = InputData.Month;
		curdata->Day = InputData.Day;
		curdata->Price = InputData.Price;
		curdata->Count = InputData.Count;
		curdata->Name = InputData.Name;
		curdata->Prev = NULL;
		Head = Tail = curdata;
		Size = 1;	};
	List(List &data)
	{
		Head = NULL;
		*this = data;	};
	~List()	{
		while (Head)		{
			Tail = Head->Next;
			delete Head;
			Head = Tail;		};	
};
	void Show(int No)	
{
		Data *curdata = new Data;
		curdata = Head;
		if (No>Size) exit; else		
{
			for (inti = 0; i<No - 1; i++)			
{
				if (curdata->Next != NULL)
					curdata = curdata->Next;			
};
cout<< "Наименованиетовара:" <<curdata->Name.c_str() <<endl;
cout<< "Количество:" <<curdata->Count << "\t Цена:" <<curdata->Price <<endl;
cout<< "Дата поставки:" <<curdata->Day<< "." <<curdata->Month << "." <<curdata->Year <<endl;};	};
	void Delete(int No)	{
		if (No>Size) exit;
		Size--;
		Data *curdata = new Data;
		curdata = Head;
		for (inti = 0; i<No - 2; i++)
			curdata = curdata->Next;
		if (curdata->Next->Next == NULL)
			curdata->Next = NULL;
		else
			curdata->Next = curdata->Next->Next;	
};
	void Add(Data InputData)	{
		Data *curdata = new Data;
		curdata->Year = InputData.Year;
		curdata->Month = InputData.Month;
		curdata->Day = InputData.Day;
		curdata->Price = InputData.Price;
		curdata->Count = InputData.Count;
		curdata->Name = InputData.Name;
		curdata->Next = NULL;
		Size++;
		if (Head != NULL)		{
			curdata->Prev = Tail;
			Tail->Next = curdata;
			Tail = curdata;		}
		else		
{
			curdata->Prev = NULL;
			Head = Tail = curdata;	};};};
int _tmain(intargc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Russian");
	Data good;
good.Name = "Перфоратор";good.Count = 120;good.Price = 3500000;good.Day = 11;
good.Month = 02;good.Year = 2014;
List Goods(good);
good.Name = "Шуруповрт";	good.Count = 50;good.Price = 1225000;	good.Day = 12;
good.Month = 02;	good.Year = 2014;
	Goods.Add(good);
good.Name = "Дрель";good.Count = 150;	good.Price = 125000;good.Day = 13;
good.Month = 02;	good.Year = 2014;
	Goods.Add(good);
	Goods.Show(1);
	Goods.Show(2);
	Goods.Show(3);
	Goods.Delete(2);
	Goods.Show(1);
	Goods.Show(2);
	system("pause");
	return 0;
}
dimok5 вне форума Ответить с цитированием
Старый 15.01.2016, 19:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
void Add(Data InputData)	{
... Тут твое оставляем
		curdata->Next = Head;
		Size++;
		if (Head != NULL)		{
			curdata->Prev = Tail;
			Tail->Next = curdata;
			Tail = curdata;		}
		else		
{
			curdata->Prev = curdata;
			Head = Tail = curdata;	};};};
И вывод:
Код:
void Show(){
   curdata = Head;
   do{
	curdata = curdata->Next;			
        Выводим curdata->
   } while (curdata!=Head);
};
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.01.2016, 19:46   #3
dimok5
Пользователь
 
Регистрация: 10.10.2010
Сообщений: 51
По умолчанию

Спасибо огромное.
dimok5 вне форума Ответить с цитированием
Старый 15.01.2016, 21:21   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На здоровье. )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Один из эл-ов списка ук-ет на кольцо Blind Guard Общие вопросы C/C++ 1 30.03.2012 14:59
Определить кольцо с центром в начале координат vikingus Паскаль, Turbo Pascal, PascalABC.NET 1 13.04.2011 18:53
Создать двусвязанное кольцо, содержащее информацию о графических маркерах. Keyx Паскаль, Turbo Pascal, PascalABC.NET 1 01.07.2010 19:57
односвязное кольцо... Кнопка Общие вопросы C/C++ 5 13.12.2009 02:06
Пожалуйста помогите! Массив нужно свернуть в кольцо Gothar Паскаль, Turbo Pascal, PascalABC.NET 0 31.05.2009 21:10