• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

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

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

Здравствуйте!
Занимаюсь по книге и долгое время не могу решить одну задачу.
Вот дословное упражнение:
"Напишите программу, которая принимает число, введённое пользователем с экрана, и выделяет и отображает значение каждой цифры числа на английском языке. Например, если пользователь наберёт число 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;
}
 
R

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;
}

Проверка:
 
G

Guest

ух.. я только щас массивы учу, по-идее надо без них, но в любом случае - спасибо - обязательно потом проанализирую..
и ведь Вы написали с использованием С++, верно?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!