Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Artishok
ЧакЭ одобряЭ
280 / 279 / 84
Регистрация: 27.12.2009
Сообщений: 1,767
1

Преобразовать число в его строковое представление через switch

15.09.2010, 00:46. Просмотров 1792. Ответов 8
Метки нет (Все метки)

диапазон -99...99
пример
32- тридцать два
я вот так делал.но выдаёт ошибки.можете указать в чем они заключаются?(не надо сетовать на алгоритм)

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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/****************************************************************************
 *                                                                          *
 * File    : main.c                                                         *
 *                                                                          *
 * Purpose : Console mode (command line) program.                           *
 *                                                                          *
 * History : Date      Reason                                               *
 *           00/00/00  Created                                              *
 *                                                                          *
 ****************************************************************************/
 
#include <stdio.h>
#include <string.h>
 
/****************************************************************************
 *                                                                          *
 * Function: main                                                           *
 *                                                                          *
 * Purpose : Main entry point.                                              *
 *                                                                          *
 * History : Date      Reason                                               *
 *           00/00/00  Created                                              *
 *                                                                          *
 ****************************************************************************/
 
int main(int argc, char *argv[])
{
    /* TODO: Enter code here */
    int chislo;
    char s1[15],s2[15],s[15],sf[50];
    printf("vvedite chislo\n");
    scanf("%d\n",&chislo);
    if (chislo<0)
    s="минус";
    else
    s="";
    if (chislo/10<0)
        goto odinar;
    else
    {
        if ((chislo/10==1) && (chislo%10!=0))
            goto last;
         else
        {
        if (chislo%10==0)
        {
             switch(chislo/10)
            {
              
                    case 1: s1="десять";
                    case 2: s1="двадцать";
                    case 3: s1="тридцать";
                    case 4: s1="сорок";
                    case 5: s1="пятьдесят";
                    case 6: s1="шестьдесят";
                    case 7: s1="семьдесят";
                    case 8: s1="восемьдесят";
                    case 9: s1="девяносто";
            }
          }
         else
             goto odinar1;
        }
    }
    odinar:
    switch(chislo)
    {
        case 1: s1="один";
        case 2: s1="два";
        case 3: s1="три";
        case 4: s1="четыре";
        case 5: s1="пять";
        case 6: s1="шесть";
        case 7: s1="семь";
        case 8: s1="восемь";
        case 9: s1="девять";
    }
    odinar1:
     switch(chislo%10)
    {
        case 1: s2="один";
        case 2: s2="два";
        case 3: s2="три";
        case 4: s2="четыре";
        case 5: s2="пять";
        case 6: s2="шесть";
        case 7: s2="семь";
        case 8: s2="восемь";
        case 9: s2="девять";
    }
    last:
       switch(chislo)
       {
         case 11: s1="одинадцать";
         case 12: s1="двенадцать";
         case 13: s1="тринадцать";
         case 14: s1="четырнадцать";
         case 15: s1="пятнадцать";
         case 16: s1="шестнадцать";
         case 17: s1="семнадцать";
         case 18: s1="восемнадцать";
         case 19: s1="девятнадцать";
        }
    sf=strcat(s,s1,s2);
    puts(" resultat", sf);    
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2010, 00:46
Ответы с готовыми решениями:

Преобразовать строковое представление цифры в числовое
Всем добрый день! Я новичок. Как переписать нижеследующую программу, чтобы получить доступ к...

Преобразовать double в строковое представление в char
Есть ли метод который конвертирует double в сhar как число а не ASCII код? т.е. чтоб double i = 1...

Дано натуральное число. Получить строковое представление этого числа
Дано натуральное число. Получить строковое представление этого числа в виде последовательности цифр...

десятичное число перевести в строковое представление двоичного числа из 8 бит
Функция принимает инт (0..255) и должна отдать строку из 8бит этого числа в двоичной системе....

Преобразовать введенное целое десятичное число в восьмеричное представление (через двоичное)
Преобразовать введенное целое десятичное число в восьмеричное представление (через двоичное) с...

8
Andrew_Lvov
Эксперт С++
260 / 190 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
15.09.2010, 01:30 2
Какие ошибки выдаёт ?
0
Prividenie
74 / 73 / 25
Регистрация: 05.10.2008
Сообщений: 233
15.09.2010, 04:49 3
C
1
scanf("%d\n",&chislo);
зачем - \n

C
1
case 1: s1="десять";
после каждого break;

C
1
char s1[15],s2[15],s[15],sf[50];
ругается, просит указатели (*s1 и т.д.)
(памяти под строки необходимо будет выделить)

Цитата Сообщение от Artishok Посмотреть сообщение
(не надо сетовать на алгоритм)
до 19 считает, потом только /10 без остатка
с минусом дело обстоит хуже, выводит только слово - минус

Добавлено через 6 минут
C
1
sf=strcat(s,s1,s2);
функция работает с 2 аргументами, результат в строке первого аргумента
0
Artishok
ЧакЭ одобряЭ
280 / 279 / 84
Регистрация: 27.12.2009
Сообщений: 1,767
15.09.2010, 23:04  [ТС] 4
подправил и изменил кое-что.все равно ошибки
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/****************************************************************************
 *                                                                          *
 * File    : main.c                                                         *
 *                                                                          *
 * Purpose : Console mode (command line) program.                           *
 *                                                                          *
 * History : Date      Reason                                               *
 *           00/00/00  Created                                              *
 *                                                                          *
 ****************************************************************************/
 
#include <stdio.h>
#include <string.h>
 
/****************************************************************************
 *                                                                          *
 * Function: main                                                           *
 *                                                                          *
 * Purpose : Main entry point.                                              *
 *                                                                          *
 * History : Date      Reason                                               *
 *           00/00/00  Created                                              *
 *                                                                          *
 ****************************************************************************/
 
int main(int argc, char *argv[])
{
    /* TODO: Enter code here */
    int chislo;
    char *s1,*s2,*s;
    printf("vvedite chislo\n");
    scanf("%d",&chislo);
    if (chislo<0)
    s="минус";
    else
    s="";
    if ((chislo/10)<0)
    {
        switch(chislo)
    {
        case 1: {s1="один"; break;}
        case 2: {s1="два"; break;}
        case 3: {s1="три"; break;}
        case 4: {s1="четыре"; break;}
        case 5: {s1="пять"; break;}
        case 6: {s1="шесть"; break;}
        case 7: {s1="семь"; break;}
        case 8: {s1="восемь"; break;}
        case 9: {s1="девять"; break;}
    }
    }
    else
    {
        if ((chislo/10)==1) && ((chislo%10)!=0))
            {
        switch(chislo)
         {
         case 11: {s1="одинадцать"; break;}
         case 12: {s1="двенадцать"; break;}
         case 13: {s1="тринадцать"; break;}
         case 14: {s1="четырнадцать"; break;}
         case 15: {s1="пятнадцать"; break;}
         case 16: {s1="шестнадцать"; break;}
         case 17: {s1="семнадцать"; break;}
         case 18: {s1="восемнадцать"; break;}
         case 19: {s1="девятнадцать"; break;}
         }
        }
            
         else
        {
        if ((chislo%10)==0)
        {
             switch((chislo/10))
            {
              
                    case 1: {s="десять"; break;}
                    case 2: {s="двадцать"; break;}
                    case 3: {s="тридцать"; break;}
                    case 4: {s="сорок"; break;}
                    case 5: {s="пятьдесят"; break;}
                    case 6: {s="шестьдесят"; break;}
                    case 7: {s="семьдесят"; break;}
                    case 8: {s="восемьдесят"; break;}
                    case 9: {s="девяносто"; break;}
            }
          }
         else
        {
         switch(chislo%10)
         {
        case 1: {s2="один"; break;}
        case 2: {s2="два"; break;}
        case 3: {s2="три"; break;}
        case 4: {s2="четыре"; break;}
        case 5: {s2="пять"; break;}
        case 6: {s2="шесть"; break;}
        case 7: {s2="семь"; break;}
        case 8: {s2="восемь"; break;}
        case 9: {s2="девять"; break;}
         }
        switch(chislo/10)
            {
             case 2: {s1="двадцать";break;}
             case 3: {s1="тридцать";break;}
             case 4: {s1="сорок";break;}
             case 5: {s1="пятьдесят";break;}
             case 6: {s1="шестьдесят";break;}
             case 7: {s1="семьдесять";break;}
             case 8: {s1="восемьдесят";break;}
             case 9: {s1="девяносто"; break;}
            }
        }
    }
    }
    strcat(s,s1);
    strcat(s,s2);
    printf("%s ",s);   
    return 0;
}
мне кажется или в 95... строках надо не break a continue?ведь break прерывает всё, а continue только эту часть switch и переходит на следующий switch
0
TheMachinist
244 / 176 / 47
Регистрация: 14.06.2010
Сообщений: 422
16.09.2010, 00:53 5
У тебя лишняя скобка в

C++
1
if ((chislo/10)==1) && ((chislo%10)!=0))
0
Prividenie
74 / 73 / 25
Регистрация: 05.10.2008
Сообщений: 233
16.09.2010, 03:56 6

Цитата Сообщение от Artishok Посмотреть сообщение
strcat(s,s1);
мой тебе совет закомментируй их обе (удали, а то потом с ними будут проблемы). Выводи все через
C
1
printf("%s %s %s", s, s1 s2);
при объявлении s1, s2, s3 почисти их =""; чтобы не было непонятных символов при выводе
C
1
{s1="один"; break;}
ненужны {}
Цитата Сообщение от Artishok Посмотреть сообщение
надо не break a continue?
нужен break, если его не будет, программа пройдясь по всем позициям сохранит последнее значение в переменной.

Алгоритм работы положительных чисел уже рабочий . отрицательных - только минус выводит
1
CyBOSSeR
Эксперт С++
2313 / 1686 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
16.09.2010, 09:43 7
Artishok, не велосипед:
C++
1
2
3
4
5
6
7
8
9
#include <string>
#include <boost/lexical_cast.hpp>
 
int main() {
  int         n = boost::lexical_cast<int>        ("123");  // n == 123
  std::string s = boost::lexical_cast<std::string>(n);      // s == "123"
 
  return 0;
}
0
ForEveR
В астрале
Эксперт С++
8003 / 4761 / 653
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
16.09.2010, 14:00 8
CyBOSSeR, Ты немного не так понял задание как я понимаю. Из 123 должно получиться сто двадцать три, а не строка 123.
0
Artishok
ЧакЭ одобряЭ
280 / 279 / 84
Регистрация: 27.12.2009
Сообщений: 1,767
16.09.2010, 20:00  [ТС] 9
все равно не работает даже с исправлениями
0
16.09.2010, 20:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2010, 20:00

Программа переводит строковое представление числа в числовое представление
Программа получает запись действительного числа в виде строки. Входная переменная, то есть, имеет...

Перевести строковое представление числа в числовое представление
Программа получает запись действительного числа в виде строки. Входная переменная, то есть, имеет...

Строковое представление
Напишите функцию itoa(int a, char *s), которая сохдает строковое представление a и возвращает его в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru