работа с натуральным числом
Например, я вожу какое-нибудь число и получаю следующее:
Выполнено "число" тестов
при этом согласовав окончание слова тест с целом числом
т.е. 1 тесТ
2 тесТА
6 тесТОВ
при выборе, например, 10 или 11 выдает "гриб", а не "грибов"
А если вбить 99, то выдает "грибов" ,т.е. правильно
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <iostream>
#include <string>
using namespace std;
int _еmaiт()
{
setlocale(LC_CTYPE,"Russian");
int k, ed, dc;
cout<<"Введите k: "<<endl;
cin>>k;
cout<<"Мы нашли "<<k;
ed = k%10; // разряд единиц
dc = k%;
if(dc==1
{
cout<<" гриб в лесу";
}
else
{
switch(ed)
{
case 1: cout<<" гриб в лесу"; break;
case 2: case 3: case 4: cout<<" гриба в лесу"; break;
default: cout<<" грибов в лесу"; break;
}
}
getch();
}
попробуйте так:
#include <conio.h>
#include <ctype.h>
#include <iostream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_CTYPE,"Russian");
int k;
cout<<"Введите k: "<<endl;
cin>>k;
cout<<"Мы нашли "<<k;
if ((k%10)==0)
{
cout<<" грибов\n";
}
if ((k%10)==1)
{
cout<<" гриб\n";
}
if ((k%10)>=2 && (k%10)<=4)
{
cout<<" грибa\n";
}
if ((k%10)>=5 && (k%10)<=9)
{
cout<<" грибов\n";
}
getch();
return 0;
}
[FONT="Courier New"][SIZE="2"]11 гриб, 12 гриба, 13 гриба, 14 гриба[/SIZE][/FONT]
в то время как во всех этих случаях нужно писать "грибов".
Автору темы: полагаю, что неправильно написали вы вот что:
dc = [COLOR="Red"](k/10)%10; // разряд десятков[/COLOR]
if(dc==1)
{
cout<<" гриб[COLOR="Red"]ов[/COLOR] в лесу";
}
P.S. И код нужно оформлять тегами CODE, а не QUOTE (это, опять же, автору темы).
11 гриб, 12 гриба, 13 гриба, 14 гриба
в то время как во всех этих случаях нужно писать "грибов".
вот, вроде бы исправил:
#include <conio.h>
#include <ctype.h>
#include <iostream>
#include <string>
using namespace std;
int main()
{
setlocale(LC_CTYPE,"Russian");
int k;
cout<<"Введите k: "<<endl;
cin>>k;
// 5 - 20
if(k >= 5 && k <= 20)
{
cout << "Мы нашли " << k << " грибов\n";
return 1;
}
// хх0
if((k % 10) == 0)
{
cout << "Мы нашли " << k << " грибов\n";
return 1;
}
// хх1
if((k % 10) == 1)
{
cout << "Мы нашли " << k << " гриб\n";
return 1;
}
// хх2 - хх4
if((k % 10) >= 2 && (k % 10) <= 4)
{
cout << "Мы нашли " << k << " гриба\n";
return 1;
}
// хх5 - хх9
if((k % 10) >= 5 && (k % 10) <= 9)
{
cout << "Мы нашли " << k << " грибов\n";
return 1;
}
getch();
}
И я не понял, зачем ты везде 1 возвращаешь.
Вот это "вроде бы" немного смущает. Вероятно, лучше было бы как-то протестировать. Для удобства можно заставить программу вводить числа. Как-то так:
{
int rem = k % 10;
bool notTeen = (k < 11) || (k > 19);
if((rem == 1) && notTeen)
{
cout << "Мы нашли " << k << " гриб\n";
}
else if ((rem > 1) && (rem < 5) && notTeen)
{
cout << "Мы нашли " << k << " гриба\n";
}
else
{
cout << "Мы нашли " << k << " грибов\n";
}
}
int main()
{
setlocale(LC_CTYPE,"Russian");
for (int i = 0; i < 31; ++i)
mushroom_func(i);
return 0;
}
Вывели и проверили. Ещё лучше сделать, что бы компьютер сам проверял. Но для этого ему надо знать результаты для разных чисел.
getch() - не использую, ибо в моей ОС и IDE не нужно. Скобок много лишних, но мне так проще читается.
И я не понял, зачем ты везде 1 возвращаешь.
я просто использовал код, который приведен в ссылке, которую я скидывал в начале поста, практически не изменив его, я предложил один из вариантов решения, а доделывать код, или оставлять всё как есть, это решать ТС:)
Вот это "вроде бы" немного смущает.
мне это вроде бы вообще по жизни мешает, я 10 раз проверю, но всё равно сомневаюсь:(
Почему же мешает? Сомневаться полезно, особенно технарям. Потому я и предложил 2 способа, которые позволяют уменьшить сомнения. Первый - упростить код. Второй - протестировать. При том глупо тестировать вручную (вводить 20-30 значений, да и ещё и для каждого ввода запускать программу заново). Лучше взять в помощники компьютер.
Ещё круче будет дать программе массив строк, чтобы она сама проверяла. Но, возможно, в этом случае это уже будет извратом.
using namespace std;
void mushroom_func(int k)
{
int rem = k % 10;
int rem100 = k % 100;
bool notTeen = (rem100 < 11) || (rem100 > 19);
if((rem == 1) && notTeen)
{
cout << "Мы нашли " << k << " гриб\n";
}
else if ((rem > 1) && (rem < 5) && notTeen)
{
cout << "Мы нашли " << k << " гриба\n";
}
else
{
cout << "Мы нашли " << k << " грибов\n";
}
}
int main()
{
setlocale(LC_CTYPE,"Russian");
for (int i = 0; i < 21; ++i)
mushroom_func(i);
for (int i = 100; i < 131; ++i)
mushroom_func(i);
return 0;
}