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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2016, 23:54   #1
luibrain
Пользователь
 
Регистрация: 17.02.2016
Сообщений: 27
По умолчанию удаление элемента из списка с условием[c++]

функция удаления зацикливается
не могу понять в чем дело

удалить надо те элементы, которые меньше заданного

void udalenie()

Код:
#include "stdafx.h"
#include "iostream"
using namespace std;

class muzei
{
public:
	char nazvanie[30];
	int exponati;
	int zapexponati;
	muzei *next;
	muzei();
};

muzei::muzei()
{
	next = NULL;
}

class Elina
{
	muzei *first, *last, *tek;
public:
	Elina();
	~Elina();
	void sozd();
	void vivod();
	void vivod2();
	void dobavlenie();
	void udalenie();
};

Elina::Elina()
{
	first = last = tek = NULL;
}

Elina::~Elina()
{
	while (first)
	{
		last = first->next;
		delete first;
		first = last;
	}
}

void Elina::sozd()
{
	last = first = tek = NULL;
	cout << "признак конца ввода - точка ";
	cout << endl;
	do
	{
		tek = last;
		last = new muzei;
		cout << "Ввведите название музея - ";
		cin >> last->nazvanie;
		cout << endl;
		if (strcmp(last->nazvanie, ".") == 0) { delete last; break; };
		cout << "Введите количество экспонатов - ";
		cin >> last->exponati;
		cout << endl;
		cout << "Введите количество запасных экспонатов - ";
		cin >> last->zapexponati;
		cout << endl;
		last->next = NULL;
		if (first == NULL) first=last;
		else tek->next = last;
	} while (true);
	tek->next = first;
	cout << "список создан";
}
void Elina::vivod()
{
	tek = first;
	do
	{
		cout << " Название музея - " << tek->nazvanie;
		cout << endl;
		cout << " Количество экспонатов  - " << tek->exponati;
		cout << endl;
		cout << " Количество запасных экспонатов - " << tek->zapexponati;
		tek = tek->next;
		cout << endl;
	} while (tek != first);
}
void Elina::vivod2()
{
	int k = 0;
	tek = first;
	do
	{
		if (tek->zapexponati > (0.3*tek->exponati))
		{
			cout << " Название музея - " << tek->nazvanie;
			cout << endl;
			cout << " Количество экспонатов  - " << tek->exponati;
			cout << endl;
			cout << " Количество запасных экспонатов - " << tek->zapexponati;
			cout << endl;
			k++;
		}
		tek = tek->next;

	} while (tek != first);
	if (k == 0) cout << "Нет таких";
	cout << endl;
}

void Elina::dobavlenie()
{
	cout << endl;
	int i = 0; muzei *p;
	char z[30];
	p = new muzei;
	cout << "vv. название, добавить - ";
	cin >> z;
	tek = first;

	do
	{
		if (strcmp(tek->nazvanie, z) == 0)
		{
			p->next = tek->next;
			tek->next = p;
			cout << "vv. название музея - ";
			cin >> p->nazvanie;
			cout << "vv. Количество экспонатов - ";
			cin >> p->exponati;
			cout << "vv. Количество запасных экспонатов - ";
			cin >> p->zapexponati;
		}
		tek = tek->next;
	} while (tek != first);
	
}


void Elina::udalenie()
{
	int n;
	cout << " vv. n - ";
	cin >> n;
	muzei *p;
	p = first;
	do
	{
		if (p->exponati < n)
		{
			tek = p;
			p=p->next;
			delete (tek);
		}
	} while (p != first);
}

Последний раз редактировалось luibrain; 05.05.2016 в 23:58.
luibrain вне форума Ответить с цитированием
Старый 06.05.2016, 05:40   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
функция удаления зацикливается
не могу понять в чем дело
p сдвигается с first и маленькая вероятность, что он им вдруг станет... может там сравнение с last имелось в виду?
p51x вне форума Ответить с цитированием
Старый 06.05.2016, 06:13   #3
luibrain
Пользователь
 
Регистрация: 17.02.2016
Сообщений: 27
По умолчанию

не знаю, у меня задание такое:
Удалить сведения о музеях, в которых количество экспонатов меньше заданного.
luibrain вне форума Ответить с цитированием
Старый 06.05.2016, 07:58   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Причем тут задание? Вы по списку двигаетесь с начала в начало или все-таки в конец? Это простейшая логика же.
p51x вне форума Ответить с цитированием
Старый 06.05.2016, 16:09   #5
luibrain
Пользователь
 
Регистрация: 17.02.2016
Сообщений: 27
По умолчанию

у меня кольцевой список
последней элемент указывает на первый
двигаюсь с начала
luibrain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элемента списка Aerowalk Помощь студентам 1 08.10.2014 20:09
c++ удаление элемента списка NinjaNoob Помощь студентам 1 28.01.2013 04:01
Удаление элемента списка igoldyrev Помощь студентам 2 06.03.2011 14:24
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
удаление элемента из списка yagluboko Помощь студентам 1 10.04.2010 14:54