8 / 7 / 1
Регистрация: 17.02.2019
Сообщений: 47
1

Вывод числа прописью на кириллице

05.03.2019, 13:54. Показов 2522. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У нас есть число от 1 до 100. Мы вводим его, а оно выводиться на кириллице. В принципе можно всё руками прописать, ну это уж больно топорно выйдет. Можно ли как-то через массивы char делать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2019, 13:54
Ответы с готовыми решениями:

Вывод числа прописью
Напишите программу, которая выводит на словесную форму числа. Например, 143= «Сто сорок три», 10=...

Вывод числа прописью
Разработать приложение, позволяющее при вводе '352', выводить — 'три пять два'. Не понимаю в С++,...

Вывод числа прописью
Составить программу, которая читает натуральное число N в десятичном представлении (N < 10000), а...

Вывод числа прописью и наоборот, вывод слова числом
Вечер добрый. Есть программа, которая выводит число прописью до 99.999.999. Как сделать, чтобы она...

2
Диссидент
Эксперт C
27495 / 17183 / 3784
Регистрация: 24.12.2010
Сообщений: 38,704
05.03.2019, 14:59 2
Цитата Сообщение от TPAKTOPICT Посмотреть сообщение
Можно ли как-то через массивы char делать?
Можно. Было на форуме. Найду - покажу. А вы пока сами попробуйте...

Добавлено через 2 минуты
Нашел у себя в архивах. Там есть лишнее, сами отбросите
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// **** FSTR2.C - функции перевода числа и даты в пропись 16.10.92  *
#include "a.h"
#include "dfun.h"
#include <math.h>
 
// *********
// asc *sot[]={"сто","двести","триста","четыреста","пятьсот","шестьсот",
//             "семьсот","восемьсот","девятьсот" };
 asc *sot[]={"сто","двести","триста","четыреста",
             "пят","шест", "сем","восем","девят" };
 asc *desiat[]={"двадцать","тридцать","сорок","пят","шест",
                "сем","восем","девяносто" };
 asc *edm[]={"","один","два","три","четыре","пять","шесть","семь","восемь",
             "девять","десять","один","две","три",
             "четыр","пят","шест","сем","восем","девят" };
 asc *edw[]={"одна","две" };
 asc *nmtr[]={"трилион","миллиард","миллион","тысяч" };
 asc *nokm[]={"а","ов" };
 asc *nokt[]={"а","и","" };
 static double MLRD=1000000000.0, TRLN=1000000000000.0;
 
char *propis(double d,int rg) // * Перевод числа в сумму прописью *
{ long l,lt;  double lmlr;
  int j, tr[5], trln, n, ns, nd, r;
  char s[1000], *p, *ps;
 
  if (d>=1E15) return(strmalc(" "));
  if (d<1.0) return(strmalc("Ноль"));
  trln = tr[0] = (int) floor(d/TRLN);
  if (trln>=1000) tr[0] = trln % 1000;
  lmlr = d - trln*TRLN;
  ps = s;
  tr[1] = (int) (lmlr/MLRD);
  l = (long)fmod(lmlr,MLRD);
  tr[2] = l/1000000;
  lt = l%1000000;
  tr[3] = lt/1000;
  tr[4] = lt%1000;
 
  afc(j,5) {
    n=tr[j];
    if (!n) continue;
    ns = n/100;
    if (ns)    ps = stract(ps, " ", sot[ns-1]);
    if (ns>=5) ps = stpcpy(ps, "ьсот");
    n=n%100; nd=n/10;
    if (nd>=2) {
       ps = stract(ps," ",desiat[nd-2]);
       if (nd>=5 && nd<=8) ps = stpcpy(ps, "ьдесят");
       n = n%10;
    }
    r = sklon(n);
    if (j==3 && n>0 && n<3) p = edw[n-1];
    else p=edm[n];
    ps = stract(ps, " ", p);
    if (n>10) ps = stpcpy(ps, "надцать");
    if (j<4) {
      ps = stract(ps," ",nmtr[j]);
      if (j==3)     ps = stpcpy(ps, nokt[r]);
      else if (r>0) ps = stpcpy(ps, nokm[r-1]);
    }
  }
  if (rg=='o') {
     ps = sp(s);
     *ps = toupp(*ps);
  }
  return(strmalc(s));
}
// ***********
sklon(long dd)         // * Определение склонения числа *
{  int n,r;
 
    r = 2;
    n = dd % 100;
    if (n>4 && n<20) return(r);
    n = n % 10;
    if      (n==1)       r=0;
    else if (n>1 && n<5) r=1;
    return(r);
}
// **********
Писалась в разгар инфляции и была довольно актуальна...
1
170 / 122 / 61
Регистрация: 06.02.2015
Сообщений: 300
05.03.2019, 15:19 3
Лучший ответ Сообщение было отмечено TPAKTOPICT как решение

Решение

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#pragma warning(disable:4996)
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include <string.h>
 
void int_to_str(char *num){
    int len = strlen(num); 
    char *single[] = { "нуль", "один", "два",
        "три", "четыре","пять",
        "шесть", "семь", "восемь", "девять" };
 
    char *two[] = { "", "десять", "одиннадцать", "двенадцать",
        "тринадцать", "четырнадцать",
        "пятнадцать", "шестнадцать",
        "семнадцать", "восемнадцать", "девятнадцать" };
 
    char *tens[] = { "", "", "двадцать", "тридцать", "сорок", "пятьдесят",
        "шестьдесят", "семьдесят", "восемьдесят", "девяносто" };
 
    printf("\n%s: ", num);
 
    if (len == 1){
        printf("%s\n", single[*num - '0']);
        return;
    }
 
    while (*num != '\0') {
        if (len >= 3) {
            if (*num - '0' != 0) {
                printf("сто"); 
            }
            --len;
        }
 
        else {
            if (*num == '1') {
                int sum = *num - '0' + *(num + 1) - '0';
                printf("%s\n", two[sum]);
                return;
            }
 
            else if (*num == '2' && *(num + 1) == '0') {
                printf("двадцать\n");
                return;
            }
 
            else {
                int i = *num - '0';
                printf("%s ", i ? tens[i] : "");
                ++num;
                if (*num != '0')
                    printf("%s ", single[*num - '0']);
            }
        }
        ++num;
    }
}
 
int main() {
    setlocale(LC_ALL, "Rus");
    char str[256];
    printf("Введите число от 1 до 100 \n");
    scanf("%s",&str);
    int_to_str(str);
    getchar();
    getchar();
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2019, 15:19
Помогаю со студенческими работами здесь

Вывод числа прописью
Добрый вечер, уважаемые форумчане. Есть задание от преподавателя на автомат: вводишь число рублей,...

Вывод числа прописью
Есть программа, которая выводит числа прописью все до 999 (включительно), 1000 и 2000, но уже 1005...

Вывод значения произвольного трехзначного числа прописью
Здравствуйте. Нужна помощь с задачами, у меня не получается. 1. Реализовать функцию, выводящую в...

Программа пишет прописью числа, помогите доделать ввод числа с клавиатуры
Программа пишет прописью числа, помогите доделать ввод числа с клавиатуры. using System; using...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru