Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
1 / 1 / 1
Регистрация: 10.12.2013
Сообщений: 48

Склонение существительных в зависимости от количества единиц

10.12.2013, 23:20. Показов 4946. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание:
Вводишь число, а компьютер должен дописать к нему рублей или рубля или рубль, вобщем правильно просклонять.
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
int main ()
{
    setlocale (0,"");
    int a=255;
    cout <<"Введите число: ";
    cin >> a;
    int c=a%10;
        if (c == 1) {
            cout << "рубль" << endl;
        } else {
            if (c == 2,3,4) {
            cout << "рубля" << endl;
        } else {
            if (c == 5,6,7,8,9,0) {
            cout << "рублей" << endl;
            } else {
            }
            }
            }
    
        system ("pause");
        return 0;
}
Что получилось:
К примеру вводи 101 - рубль, 103 - рубля, 107 - всеравно РУБЛЯ, вобщем не работает последний цикл, подскажите пожалуйста, что не так.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.12.2013, 23:20
Ответы с готовыми решениями:

Склонение существительных
Здравствуйте! Помогите, пожалуйста, с написанием программы на Visual Prolog 7.2, которая выполняет склонение существительных! Заранее...

Формирование в отчете количества строк в зависимости от значения поля кол-во единиц
Добрый день! Есть необходимость создания наклеек всего прихода товаров. Например - приход 12 шт. рубашек и 20 шт маек - необходимо,...

Склонение слова рубль в зависимости от числа
Написал программу по склонению слова рубль при помощи if else, правда я тут я не учел числа от 11 до 19, но не в этом проблема. Хочу...

11
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
10.12.2013, 23:30
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
switch ( c )
{
case 1:
     cout << "Рубль" << endl;
    break;
case 2:
case 3:
case 4:
    cout << "Рубля" << endl;
    break;
case 5:
case 6:
case 7:
case 8:
case 9:
    cout << "Рублей" << endl;
    break;
default:
    break;
}
0
1 / 1 / 0
Регистрация: 05.12.2013
Сообщений: 43
10.12.2013, 23:35
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <conio.h>
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int r;
    
    cout << "Введите кол-во рублей: ";
    cin >> r;
    if (r < 0)
    {
        cout << "Значение отрицательное";
        _getch();
        return -1;
    }
    cout << "У вас " << r << " ";
    if ((r % 100) >= 11 && (r % 100) <= 19)
        cout << "Рублей\n";
    else
    {
        switch (r % 10)
        {
        case 1: cout << "Рубль\n"; break;
        case 2:
        case 3:
        case 4: cout << "Рубля\n"; break;
        default: cout << "Рублей\n";
        }
    }
    _getch();
    return 0;
}
Как раз пять минут назад написал
0
1 / 1 / 1
Регистрация: 10.12.2013
Сообщений: 48
10.12.2013, 23:42  [ТС]
а можно это реализовать через if else?
0
68 / 41 / 14
Регистрация: 24.02.2013
Сообщений: 250
10.12.2013, 23:46
dvaperca, естественно, можно.
Взамен switch() пишите что то примерно следующее:
Кликните здесь для просмотра всего текста

C++
1
2
3
if (r%10==1) cout<<"Рубль"<<endl;
else if (r%10)==4) cout<<"Рубля"<<endl;
else cout<<"Рублей"<<endl;
0
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
10.12.2013, 23:47
dvaperca, можно, в чём проблема? Условие грамотно пропишите только.
C++
1
2
3
4
if ( c == 1 )
           ....
    else if ( c == 2 || c == 3 || c == 4 )
               ....
0
1 / 1 / 0
Регистрация: 05.12.2013
Сообщений: 43
11.12.2013, 00:03
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if ((r % 100) >= 11 && (r % 100) <= 19)
        cout << "Рублей\n";
    else
    /*
        switch (r % 10)
        {
        case 1: cout << "Рубль\n"; break;
        case 2:
        case 3:
        case 4: cout << "Рубля\n"; break;
        default: cout << "Рублей\n";
        }
        */
    if (r % 10 == 1)
        cout << "Рубль\n";
    else if (r % 10 >= 2 && r <= 4))
        cout << "Рубля\n";
    else cout << "Рублей\n";
Добавлено через 10 минут
Цитата Сообщение от VANYOK Посмотреть сообщение
else if (r % 10 >= 2 && r <= 4))
уберите одну скобку после 4
и будет Вам счастье
для сравнения закомментировал switch() чтобы было понятно
1
1 / 1 / 1
Регистрация: 10.12.2013
Сообщений: 48
11.12.2013, 00:24  [ТС]
если набрать 1024, то вместо рубля, он пишет рублей
от 0 до 9 склоняет правильно, большие цифры, уже неправильно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main ()
{
    setlocale (0,"");
    int a=255;
    cout <<"Введите число: ";
    cin >> a;   
        if (a%10 == 1)
            cout << "рубль" << endl;
        else if (a%10 >= 2 && a <=4)
            cout << "рубля" << endl;
        else cout <<"рублей" << endl;
            system ("pause");
        return 0;
}
0
11 / 11 / 2
Регистрация: 23.12.2012
Сообщений: 45
11.12.2013, 00:38
Цитата Сообщение от dvaperca Посмотреть сообщение
else if (a%10 >= 2 && a <=4)
else if (a%10 >= 2 && a%10 <=4)
1
1 / 1 / 1
Регистрация: 10.12.2013
Сообщений: 48
11.12.2013, 00:43  [ТС]
дошло наконец)
З.Ы. спапсибо за указание на ошибку)
та часть кода, которая закоментированна - это мой изначальный вариант с исправлением и тоже заработавший, ну и не закоментированный это тоже рабочий, но с исправленной ошибкой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
int main ()
{
    setlocale (0,"");
    int a=255;
    cout <<"Введите число: ";
    cin >> a;   
    /*int c=a%10;
    if (c == 1)
        cout << "рубль" << endl;
    else if (c >=2  && c <=4)
        cout << "рубля" << endl;
    else 
        cout <<"рублей" << endl;*/
        if (a%10 == 1)
            cout << "рубль" << endl;
        else if (a%10 >= 2 && a%10 <=4)
            cout << "рубля" << endl;
        else cout <<"рублей" << endl;
            system ("pause");
        return 0;
}
0
1 / 1 / 0
Регистрация: 05.12.2013
Сообщений: 43
11.12.2013, 01:37
Цитата Сообщение от Darthriddikc Посмотреть сообщение
else if (a%10 >= 2 && a%10 <=4)
О, а ведь тоже эту ошибку сделал...
Прошу прощения, буду внимательно проверять свой код.
Но светчем проще и понятнее, у меня-то условий не было, написал как удобней....
0
1 / 1 / 1
Регистрация: 10.12.2013
Сообщений: 48
11.12.2013, 03:01  [ТС]
Цитата Сообщение от VANYOK Посмотреть сообщение
О, а ведь тоже эту ошибку сделал...
Прошу прощения, буду внимательно проверять свой код.
Но светчем проще и понятнее, у меня-то условий не было, написал как удобней....
просто я всего 2й день учу с++, ну так сказать только начал, и поэтому хотелось сделать задачу именно на закрепление if else.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2013, 03:01
Помогаю со студенческими работами здесь

Склонение слова год в зависимости от числа
Пользователь вводит некоторое целое число в диапазоне , что определяет возраст (в годах). Вывести строку - описание указанного возраста,...

Склонение количества лет
Пользователь вводит число n, от 0 до 100, а програма выводит фразу вам n год/года/лета Блок-схемой пожалуйста

Склонение слов в зависимости от числа привязать к счетчику
Привет. Вообщем в js не очень так что спрашиваю) Есть счетчик &lt;div class=&quot;number&quot;&gt; &lt;button...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru