Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

работа с натуральным числом

51K
09 января 2011 года
Scoler
26 / / 08.01.2011
Нужна программа следующего типа
Например, я вожу какое-нибудь число и получаю следующее:
Выполнено "число" тестов
при этом согласовав окончание слова тест с целом числом
т.е. 1 тесТ
2 тесТА
6 тесТОВ
29K
09 января 2011 года
Енот_в_Засаде
224 / / 09.11.2010
была похожая тема на форуме, посмотрите, может поможет:
http://forum.codenet.ru/showthread.php?t=65099&highlight=%EB%E5%F2+%E3%EE%E4%E0
51K
10 января 2011 года
Scoler
26 / / 08.01.2011
Что не дописал в коде?
при выборе, например, 10 или 11 выдает "гриб", а не "грибов"
А если вбить 99, то выдает "грибов" ,т.е. правильно
Цитата:
#include "stdafx.h"
#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();
}

29K
11 января 2011 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата:
Что не дописал в коде?



попробуйте так:

Код:
#include <stdio.h>
#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;
}
12K
11 января 2011 года
Ghox
297 / / 26.07.2009
Енот_в_Засаде, ваш пример обладает тем же недостатком, на который пожаловался автор темы: в случае чисел 11, 12, 13, 14, будет выводить:
[FONT="Courier New"][SIZE="2"]11 гриб, 12 гриба, 13 гриба, 14 гриба[/SIZE][/FONT]
в то время как во всех этих случаях нужно писать "грибов".
Автору темы: полагаю, что неправильно написали вы вот что:
 
Код:
ed = k%10; // разряд единиц
    dc = [COLOR="Red"](k/10)%10; // разряд десятков[/COLOR]

    if(dc==1)
    {
        cout<<" гриб[COLOR="Red"]ов[/COLOR] в лесу";
    }

P.S. И код нужно оформлять тегами CODE, а не QUOTE (это, опять же, автору темы).
29K
11 января 2011 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата:
Енот_в_Засаде, ваш пример обладает тем же недостатком, на который пожаловался автор темы: в случае чисел 11, 12, 13, 14, будет выводить:
11 гриб, 12 гриба, 13 гриба, 14 гриба
в то время как во всех этих случаях нужно писать "грибов".


вот, вроде бы исправил:

Код:
#include <stdio.h>
#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();

}
87
12 января 2011 года
Kogrom
2.7K / / 02.02.2008
Енот_в_Засаде, ты не пробовал использовать else if ? Попробуй.

И я не понял, зачем ты везде 1 возвращаешь.
87
12 января 2011 года
Kogrom
2.7K / / 02.02.2008
Раз уж сюда влез, порассуждаю немного.
вот, вроде бы исправил



Вот это "вроде бы" немного смущает. Вероятно, лучше было бы как-то протестировать. Для удобства можно заставить программу вводить числа. Как-то так:

Код:
void mushroom_func(int k)
{
    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 не нужно. Скобок много лишних, но мне так проще читается.
29K
12 января 2011 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата: Kogrom
Енот_в_Засаде, ты не пробовал использовать else if ? Попробуй.

И я не понял, зачем ты везде 1 возвращаешь.



я просто использовал код, который приведен в ссылке, которую я скидывал в начале поста, практически не изменив его, я предложил один из вариантов решения, а доделывать код, или оставлять всё как есть, это решать ТС:)

29K
12 января 2011 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата: Kogrom
Раз уж сюда влез, порассуждаю немного.
Вот это "вроде бы" немного смущает.


мне это вроде бы вообще по жизни мешает, я 10 раз проверю, но всё равно сомневаюсь:(

87
12 января 2011 года
Kogrom
2.7K / / 02.02.2008
мне это вроде бы вообще по жизни мешает, я 10 раз проверю, но всё равно сомневаюсь:(



Почему же мешает? Сомневаться полезно, особенно технарям. Потому я и предложил 2 способа, которые позволяют уменьшить сомнения. Первый - упростить код. Второй - протестировать. При том глупо тестировать вручную (вводить 20-30 значений, да и ещё и для каждого ввода запускать программу заново). Лучше взять в помощники компьютер.

Ещё круче будет дать программе массив строк, чтобы она сама проверяла. Но, возможно, в этом случае это уже будет извратом.

87
15 января 2011 года
Kogrom
2.7K / / 02.02.2008
В общем, привёл я тут пример некачественного тестирования. Но упрощение алгоритма позволяет внести меньше правок. Исправляю.

Код:
#include <iostream>

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;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог