Показать сообщение отдельно
Старый 14.04.2009, 11:12   #7 (permalink)
csbwalker
Member
 
Аватар для csbwalker
 
Регистрация: 03.03.2009
Сообщений: 87
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 187
По умолчанию

По поводу грибов.
Если я правильно понимаю код, то:
Цитата:
while (true)
{
octatok=octatok%10;
if (octatok<9)break;
}
1. при числе оканчивающимся на "9" войдёт в бесконечный цикл
2. octatok%10 всегда будет < 10
поэтому логичнее будет написать вместо этого куска кода строчку:
Цитата:
octatok %= 10;
Потом - если число равно "12", "13", "14" нужно выводить "грибов", а будет "гриба".

Предлагаю свой вариант:
Код:
#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
int k;

	cout << "Введите количество грибов: ";
	cin >> k;

	cout << "Мы собрали: " << tmp << k << " ";

	if ((k > 10) && (k < 20))
		cout << "грибов";
	else
	{
		k %= 10;
		if (k == 1)
			cout << "гриб";
		else if ((k == 2) || (k == 3) || (k == 4))
			cout << "гриба";
		else
			cout << "грибов";
	}
}
Или, в случае если кодировка редактора и кодировка консоли различны и это Windows, то с перекодировкой:
Код:
#include <windows.h>
#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
int k;
char tmp[256];

	CharToOem("Введите количество грибов: ", tmp);
	cout << tmp;
	cin >> k;

	CharToOem("Мы собрали: ", tmp);
	cout << tmp << k << " ";

	if ((k > 10) && (k < 20))
		CharToOem("грибов", tmp);
	else
	{
		k %= 10;
		if (k == 1)
			CharToOem("гриб", tmp);
		else if ((k == 2) || (k == 3) || (k == 4))
			CharToOem("гриба", tmp);
		else
			CharToOem("грибов", tmp);
	}
	cout << tmp << "\n";
}

Последний раз редактировалось csbwalker; 14.04.2009 в 12:26 Причина: добавление своего варианта
csbwalker вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070