Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 10554
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4211
∙ повысить рейтинг »
CradleA
Статус: Бакалавр
Рейтинг: 2486
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1748
Дата выхода:25.05.2012, 16:00
Администратор рассылки:Киселёва Алёна aka Verena (Академик)
Подписчиков / экспертов:137 / 93
Вопросов / ответов:1 / 1

Консультация # 186139: Здравствуйте! Возникли проблемы в решении данного задания: Задание : Написать программу для работы по запросам оператора с упорядоченной таблицей, реализованной в виде двоичного дерева поиска. Ключ - целое число.Информация - строка произвольной длины. Узел дерева содержит ключ,указатели на правое и левое поддеревья и ука...


Консультация # 186139:

Здравствуйте! Возникли проблемы в решении данного задания:

Задание :

Написать программу для работы по запросам оператора с упорядоченной таблицей, реализованной в виде двоичного дерева поиска.

Ключ - целое число.Информация - строка произвольной длины.

Узел дерева содержит ключ,указатели на правое и левое поддеревья и указатель на информационное поле.

В таблице могут храниться записи с одинаковыми ключами в одном узле дерева в виде списка информационных полей.

Предусмотреть следующие операции:
- включение нового элемента в таблицу без нарушения свойств упорядоченности
- удаление из таблицы элемента,заданного своим ключом,без нарушения свойств упорядоченности таблицы(если элементов несколько, то указывается номер удаляемого элемента);
- поиск информации по заданному ключу (в качестве результата возвращается все элементы с заданным ключом);
- вывод всего содержимого таблицы в обратном порядке следования ключей, не превы шающих заданный
- поиск элемента соответствующего значению наименьшего ключа


Примечания:
1.Программа должна содержать несколько функций;функция main должна выполнять: вывод меню, ввод и анализ ответа,вызов на исполнение требуемой функции;
2.В программе нужно предусмотреть проверку правильности ввода данных.
3.Оценить сложность реализованных алгоритмов.
4.(*) Для целей отладки реализовать форматированный вывод таблицы в виде дерева.
5.(*) Для целей отладки реализовать загрузку таблицы из файла в формате

- Ключ1
- Информация1
- Ключ2

Все работает верно! НО вопрос в следующем:

Проверку на введенные данные

Например, ввод ключа должен быть из чисел!
1)Ввожу ключ
Please, enter the key: ggf
Wrong value!
Wrong value!
Wrong value!
Далее происходит Ожидание ввода ключа
Выдает ошибки посимвольно, хотя нужно чтобы ошибка выдавалась 1 раз и ожидало ввода повторного ключа.
2)при вводе ключа
1
Please, enter the key: 7gg
автоматически появляется строка
please, enter the information: _________________________
При этом идет запись в дерево
4
7(gg)
то есть ключ 7 а информация gg. Хотя информации предложено ввести не было
3)при вводе ключа

1
Please, enter the key: ggg43fdf
Wrong value!
Wrong value!
Wrong value!
please, enter the information: _________________________

Выдается 3ошибки потом записывается ключ 43 и информация fdf.Такого быть не должно должна ошибка и повтор ввода.

Было предложение сделать через операцию atoi проверка введенных данных на цифры.

Прошу помочь с проверкой ввода данных( если можно с комментариями исправление ошибки, текст программы приложу ниже).

Заранее спасибо!

Дата отправки: 22.05.2012, 02:43
Вопрос задал: Никулин Михаил (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Сергей (5-й класс):

Здравствуйте, Никулин Михаил!

cin.ignore() - делает сдвиг на один символ, у данной функции есть два параметра: первый это количество пропускаемых символов (по умолчанию 1). Поэтому и выдаются ошибки на каждый буквенный символ.

Вот рабочий код.

Код :
int GetNum()
{
	int a=-1;
	do
	{
		char s[256];
		cin >> s; // считываем вводимые данные
		bool b=true;
		for(int i=0; i <strlen(s); i++) // проверяем на наличие не цифры
		{
			if (('0' > s[i]) || (s[i] > '9')) {b=false; break;};
		};
		if(!b) cout << "Wrong value!" << endl;
		else a = atoi(s); 
    }
    while(a < 0);

return a;
}

Консультировал: Сергей (5-й класс)
Дата отправки: 22.05.2012, 13:47

5
Спасибо!
-----
Дата оценки: 22.05.2012, 16:18

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное