1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

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

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

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

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

    Код:
    #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 Гость

    Репутация:
    0
    Джеки

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

    Код:
    #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. Гость

    Репутация:
    0
    ух.. я только щас массивы учу, по-идее надо без них, но в любом случае - спасибо - обязательно потом проанализирую..
    и ведь Вы написали с использованием С++, верно?
     
Загрузка...
Похожие Темы - Проблема подсчёта
  1. pack
    Ответов:
    5
    Просмотров:
    65
  2. Alex1994
    Ответов:
    7
    Просмотров:
    125
  3. PingvinPingvin
    Ответов:
    10
    Просмотров:
    132
  4. Free2playman
    Ответов:
    14
    Просмотров:
    158
  5. Дмитрий17
    Ответов:
    10
    Просмотров:
    214
Статус темы:
Закрыта.

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