Проблема подсчёта

Тема в разделе "C/C++/C#", создана пользователем -, 23 дек 2010.

Статус темы:
Закрыта.
  1. Гость

    Здравствуйте!
    Занимаюсь по книге и долгое время не могу решить одну задачу.
    Вот дословное упражнение:
    "Напишите программу, которая принимает число, введённое пользователем с экрана, и выделяет и отображает значение каждой цифры числа на английском языке. Например, если пользователь наберёт число 932, программа должна напечатать:
    nine three two . Не забывайте сделать вывод слова "zero", если пользователь введёт только число 0. Заметим, что это довольно сложное упражнение."

    До этого я изучил только типы данных, циклы и принятия решений ( if, case ).
    В книге был пример как выцепить правую цифру из числа ( делим по модулю, затем умножаем на 10 ). Я решил это тут использовать.

    Проблема: при деление числа - цифра уменьшается в некоторых случаях ( к примеру набрать 7654, то выдаёт seven six five three ). Как это можно исправить? или я вообще не по тому пути пошёл?в книге на это задание нет ответа.
    Вопрос номер два. Часто ли дебагер показывает другое нежели откомпилинная программа? При вводе букв дебаг показывает одно, а готовая программа другое.

    Код (C++):
    #include <stdio.h>
    int main (void)
    {
    int vivod;
    int chislo;
    double temp;

    printf ("Vvedite polozhitelnoe chislo: ");
    scanf ("%i", &chislo);

    temp = chislo;

    while ( 10 <= temp && temp != 0 )
    temp = temp / 10;

    vivod = temp;

    while ( temp <= chislo && temp > 0 )
    {
    switch (vivod)
    {
    case 1:
    printf ("one ");
    break;
    case 2:
    printf ("two ");
    break;
    case 3:
    printf ("three ");
    break;
    case 4:
    printf ("four ");
    break;
    case 5:
    printf ("five ");
    break;
    case 6:
    printf ("six ");
    break;
    case 7:
    printf ("seven ");
    break;
    case 8:
    printf ("eight ");
    break;
    case 9:
    printf ("nine ");
    break;
    case 0:
    printf ("null ");
    break;
    }
    vivod = temp * 10;
    vivod %= 10;
    temp *= 10;
    }

    if ( chislo == 0 )
    printf ("zero");
    else if ( chislo < 0 )
    printf ("Oshibka vvoda");

    return 0;
    }
     
  2. Rififi

    Rififi Гость

    Джеки

    вот примерный вид программы, подправь её как тебе надо:

    Код (C++):
    #include <locale>
    #include <iostream>


    int main()
    {
    setlocale(LC_ALL, "");

    const char* text[] = {"zero", "one", "two", "three", "four", "five", "six", "se7en", "eight", "nine"};

    int digits[256] = {0};

    int val = 78096;

    int tmp = val; 
    size_t count = 0;

    for (; tmp; tmp /= 10, count++)
    {
    int d = tmp % 10;
    digits[count] = d;
    }

    for (int i=count-1; i>=0; i--)
    std::cout << text[digits[i]] << " ";

    std::cout << std::endl;

    return 0;
    }
    Проверка:
    http://codepad.org/OcsQg8ft
     
  3. Гость

    ух.. я только щас массивы учу, по-идее надо без них, но в любом случае - спасибо - обязательно потом проанализирую..
    и ведь Вы написали с использованием С++, верно?
     
Загрузка...
Похожие Темы - Проблема подсчёта
  1. AgniXRudra
    Ответов:
    2
    Просмотров:
    46
  2. Zloikaktus
    Ответов:
    0
    Просмотров:
    27
  3. c0de3r
    Ответов:
    5
    Просмотров:
    151
  4. DobermannTT
    Ответов:
    10
    Просмотров:
    157
  5. SoulPaladin
    Ответов:
    4
    Просмотров:
    143
Статус темы:
Закрыта.

Поделиться этой страницей