Другие языки программирования и технологии

Подскажите с корректировкой текущего кода с++

1. Дано целое число, лежащее в диапазоне от 1 до 999. Вывести строку - словесное описание данного числа. Например, введено число 123. Вывести строку «сто двадцать три».
2. Дано целое число в диапазоне 20 - 69, что определяет возраст (в годах). Вывести словесное описание указанного возраста, обеспечив правильное согласование числа со словом «год», например: 20 - "двадцать лет", 32 - "тридцать два года", 41 - "сорок один год".

#include

using namespace std;

void main()
{
setlocale(LC_ALL, "RU");
int task;
cout << "Введите задание:";
cin >> task;

switch (task)
{
case 1:
int hundred, tens, unit, tenz;
cout << "Введите число";
cin >> tenz;

if (tenz >= 1 && tenz <= 999)
{
hundred = tenz / 100;
tens = tenz % 100 / 10;
unit = tenz % 10;
}
switch (hundred)
{
case 1: { cout << " Сто "; } break;
case 2: { cout << " Двести "; } break;
case 3: { cout << " Триста "; } break;
case 4: { cout << " Четыреста "; } break;
case 5: { cout << " Пятьсот "; } break;
case 6: { cout << " Шестьсот "; } break;
case 7: { cout << " Семьсот "; } break;
case 8: { cout << " Восемьсот "; } break;
case 9: { cout << " Девятьсот "; } break;
}
if (tens == 1)
{
switch (unit)
{
case 1: { cout << " Одиннадцать "; } break;
case 2: { cout << " Двенадцать "; } break;
case 3: { cout << " Тринадцать "; } break;
case 4: { cout << " Четырнадцать "; } break;
case 5: { cout << " Пятнадцать "; } break;
case 6: { cout << " Шестнадцать "; } break;
case 7: { cout << " Семнадцать "; } break;
case 8: { cout << " Восемнадцать "; } break;
case 9: { cout << " Девятнадцать "; } break;
}
}
else
{
tens = tenz % 100 / 10;
switch (tens)
{
case 1: { cout << " Десять "; } break;
case 2: { cout << " Двадцать "; } break;
case 3: { cout << " Тридцать "; } break;
case 4: { cout << " Сорок "; } break;
case 5: { cout << " Пятьдесят "; } break;
case 6: { cout << " Шестьдесят "; } break;
case 7: { cout << " Семьдесят "; } break;
case 8: { cout << " Восемьдесят "; } break;
case 9: { cout << " Девяносто "; } break;
}
unit = tenz % 10;
switch (unit)
{
case 1: { cout << " Один "; } break;
case 2: { cout << " Два "; } break;
case 3: { cout << " Три "; } break;
case 4: { cout << " Четыре "; } break;
case 5: { cout << " Пять "; } break;
case 6: { cout << " Шесть "; } break;
case 7: { cout << " Семь "; } break;
case 8: { cout << " Восемь "; } break;
case 9: { cout << " Девять "; } break;
}
}

case 2:
int year, years, yearz;
cout << " Введите возраст : " << endl;
cin >> year;

if (year >= 20, year <= 69)
{
years = year / 10;
yearz = year % 10;
}
switch (years)
{
case 2: { cout << " Двадцать "; } break;
case 3: { cout << " Тридцать "; } break;
case 4: { cout << " Сорок "; } break;
case 5: { cout << " Пятьдесят "; } break;
case 6: { cout << " Шестьдесят "; } break;

switch (yearz)
{
case 1: { cout << " Один год "; } break;
case 2: { cout << " Два года"; } break;
case 3: { cout << " Три года"; } break;
case 4: { cout << " Четыре года"; } break;
case 5: { cout << " Пять лет"; } break;
case 6: { cout << " Шесть лет"; } break;
case 7: { cout << " Семь лет"; } break;
case 8: { cout << " Восемь лет"; } break;
case 9: { cout << " Девять лет"; } break;

}

}

}

Почему во 2 case при вводе 23 отображается только 20?
Почему при вводе задания 1 при вводе числа пишет в конце введите возраст?
Почему при вводе задания 1 при вводе числа пишет в конце введите возраст?

Потому что пропущено ключевое слово break в конце первого case

case 1:
...
...
...
break;

case2:
...
...
...
break;

Почему во 2 case при вводе 23 отображается только 20?
Потому-что у вас не закрыт switch и получается после вывода "Двадцать" срабатывает break который и пропускает все что находится в switch далее.
switch (years)
{
case 2: { cout << " Двадцать "; } break;
case 3: { cout << " Тридцать "; } break;
case 4: { cout << " Сорок "; } break;
case 5: { cout << " Пятьдесят "; } break;
case 6: { cout << " Шестьдесят "; } break;

//вот тут стоит закрыть switch фигурной скобкой, а иначе

switch (yearz) //этот switch не будет срабатывать
{
case 1: { cout << " Один год "; } break;
case 2: { cout << " Два года"; } break;
case 3: { cout << " Три года"; } break;
case 4: { cout << " Четыре года"; } break;
case 5: { cout << " Пять лет"; } break;
case 6: { cout << " Шесть лет"; } break;
case 7: { cout << " Семь лет"; } break;
case 8: { cout << " Восемь лет"; } break;
case 9: { cout << " Девять лет"; } break;

}

P.S. Желательно грамотно чередовать switch(case) или if для того что бы было наглядно. Например задачи можно было выполнять при помощи if

if(task == 1)
{
...
...
...
}

else if(task == 2)
{
...
...
...
}

Года у вас не правильно сработают при 11, 12, 13 и так до 20... А вообще я бы создал функцию и для чисел и для лет выводящую число на экран. И тогла осталось придумать как определять лет там или года выводить!
Константин Балуев
Константин Балуев
15 408
Лучший ответ
Константин Балуев Можно и интересней реализовать посредством массивов, но сейчас нет времени показать как...
Эльдар Rashidov Благодарю.