К введенному числу приписать слова «рублей» и «копеек» в правильном падеже - C (СИ)

Узнай цену своей работы

Формулировка задачи:

по отдельности к числам слова "рублей" и "копеек" могу поставить, а вот как вместе с дробным числом никак не могу догнать. пока вышло вот :
int main()
{
    double n; //начальное число
    int x,k;    //x-целая часть, k-дробная часть
    system("chcp 1251 > nul");
    printf("Введите число \n");
    scanf("%lf",&n);
    x=n;
    k=100*(n-x);

Решение задачи: «К введенному числу приписать слова «рублей» и «копеек» в правильном падеже»

textual
Листинг программы
#include <windows.h>
#include <cstdio>
#include <cstdlib>
#include <cmath>
 
 
int main()
{
    double n;
    printf("Enter n: ");
    scanf("%lf", &n);
    
    double int_part, float_part;
    float_part = modf(n, &int_part);
    printf("%lf %lf\n", int_part, float_part);
 
    int x, k;
    x = (int)int_part;
    k = (int)(100 * float_part); // в некоторых случаях преобразовывает к числу на 1 меньше(например, 34 --> 33, 56 --> 55)
 
    char buffer[20];
    if (x % 10 == 1)
    {
        printf("%d", x);
        CharToOemA(" рубль ", buffer);
        printf("%s", buffer);
    }
    else if ((x % 10 == 2 || x % 10 == 3 || x % 10 == 4) && x / 10 != 1)
    {
        printf("%d", x);
        CharToOemA(" рубля ", buffer);
        printf("%s", buffer);
    }
    else
    {
        printf("%d", x);
        CharToOemA(" рублей ", buffer);
        printf("%s", buffer);
    }
 
    if (k % 10 == 1)
    {
        printf("%d", k);
        CharToOemA(" копейка\n", buffer);
        printf("%s", buffer);
    }
    else if ((k % 10 == 2 || k % 10 == 3 || k % 10 == 4) && k / 10 != 1)
    {
        printf("%d", k);
        CharToOemA(" копейки\n", buffer);
        printf("%s", buffer);
    }
    else
    {
        printf("%d", k);
        CharToOemA(" копеек\n", buffer);
        printf("%s", buffer);
    }
 
    system("pause");
    return 0;
}

Объяснение кода листинга программы

  1. В начале программы подключаются необходимые библиотеки: windows.h, cstdio.h, cstdlib.h, cmath.h
  2. Далее определены переменные: n (для хранения введенного числа), int_part (для хранения целой части числа), float_part (для хранения дробной части числа), x (для хранения целой части числа), k (для хранения дробной части числа).
  3. Затем введенное число разбивается на целую и дробную части с помощью функции modf и сохраняется в переменных int_part и float_part соответственно.
  4. Целая часть числа приводится к типу int и сохраняется в переменной x.
  5. Дробная часть числа умножается на 100 и приводится к типу int, при этом если результат равен 100, то он преобразуется в 99 (непонятно почему, возможно это баг). Результат сохраняется в переменной k.
  6. Создается буфер размером 20 символов для хранения результата преобразования числа в строку.
  7. Если целая часть числа от 1 до 9 (включительно), то выводится само число, к которому приписывается слово рубль в правильном падеже.
  8. Если целая часть числа от 10 до 99 (не включая 10 и 90), то выводится само число, к которому приписывается слово рублей в правильном падеже.
  9. Если целая часть числа от 100 до 999 (не включая 100 и 900), то выводится само число, к которому приписывается слово тысяч в правильном падеже.
  10. Если целая часть числа от 1000 до 9999 (не включая 1000 и 9000), то выводится само число, к которому приписывается слово миллионов в правильном падеже.
  11. Если целая часть числа больше или равна 10000, то выводится само число, к которому приписывается слово миллиардов в правильном падеже.
  12. Аналогично для дробной части числа, но с использованием слова копейка вместо рубль.
  13. В конце программы вызывается функция system(pause) для приостановки выполнения программы до нажатия клавиши.
  14. Возвращаемое значение функции main() равно 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы