C/C++
Помогите, пожалуйста, написать код на C (Си)
Дан номер дня – целое число от 1 до 31 и месяца — целое число в диапазоне 1–12 (1 — январь, 2 — февраль и т. д.). Вывести дату в виде текста (например, «пятое января»).
Как, до сих пор не помогли??? Ведь это не новая задача.
Правда, я не сумею составить код программы, но принципы решения известны.
char** m_Name = {"января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"};
char** day_ord = {"тридцатое", "первое", "второе", "третье", "четвертое", "пятое", "шестое", "седьмое", "восьмое", "девятое", "десятое", "одиннадцатое", "двенадцатое", "тринадцатое", "четырнадцатое", "пятнадцатое", "шестнадцатое", "семнадцатое", "восемнадцатое", "девятнадцатое", "двадцатое"};
Чтобы получить текстовое название месяца в родительном падеже следует отнять из номера месяца единицу и подставить как индекс в массиве m_Name, вот так: m_Name[month - 1]
Труднее преобразовать номер дня в порядковое числительное. Возможны два случая: простое числительное и составное числительное.
◉ Простые числительные соответствуют числам в диапазоне [1..20] и числу 30.
◉ Составные числительные соответствуют остальным числам (диапазон [21..29] и число 31).
★ Простые порядковые числительные перечислены в массиве day_ord, исключение — "тридцатое", это слово выбирается по индексу 0.
Составные порядковые числительные состоят из двух слов: первое — количественное числительное, обозначающее один из десятков: "двадцать" или "тридцать", второе — простое порядковое числительное в диапазоне [1..9].
В первую очередь следует проверить, является ли введённый номер дня 30? Если да, то обнулить.
if (30 == day) day = 0;
Остаётся сравнить номер дня с числом 20: если больше, то числительное составное, иначе — простое.
★ Кстати, даже в этом случае ветвь else не понадобится: если day > 20, то достаточно вывести "двадцать" либо "тридцать", после чего оставить от номера дня только младшую цифру: day %= 10
А следующая часть общая и для простых, и для составных числительных: нужно вывести строку из массива day_ord по индексу в day, а именно: day_ord[day]
Только не забывайте между словами выводить пробелы!
Правда, я не сумею составить код программы, но принципы решения известны.
char** m_Name = {"января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"};
char** day_ord = {"тридцатое", "первое", "второе", "третье", "четвертое", "пятое", "шестое", "седьмое", "восьмое", "девятое", "десятое", "одиннадцатое", "двенадцатое", "тринадцатое", "четырнадцатое", "пятнадцатое", "шестнадцатое", "семнадцатое", "восемнадцатое", "девятнадцатое", "двадцатое"};
Чтобы получить текстовое название месяца в родительном падеже следует отнять из номера месяца единицу и подставить как индекс в массиве m_Name, вот так: m_Name[month - 1]
Труднее преобразовать номер дня в порядковое числительное. Возможны два случая: простое числительное и составное числительное.
◉ Простые числительные соответствуют числам в диапазоне [1..20] и числу 30.
◉ Составные числительные соответствуют остальным числам (диапазон [21..29] и число 31).
★ Простые порядковые числительные перечислены в массиве day_ord, исключение — "тридцатое", это слово выбирается по индексу 0.
Составные порядковые числительные состоят из двух слов: первое — количественное числительное, обозначающее один из десятков: "двадцать" или "тридцать", второе — простое порядковое числительное в диапазоне [1..9].
В первую очередь следует проверить, является ли введённый номер дня 30? Если да, то обнулить.
if (30 == day) day = 0;
Остаётся сравнить номер дня с числом 20: если больше, то числительное составное, иначе — простое.
★ Кстати, даже в этом случае ветвь else не понадобится: если day > 20, то достаточно вывести "двадцать" либо "тридцать", после чего оставить от номера дня только младшую цифру: day %= 10
А следующая часть общая и для простых, и для составных числительных: нужно вывести строку из массива day_ord по индексу в day, а именно: day_ord[day]
Только не забывайте между словами выводить пробелы!
Валерий Волонцевич
Да! Насчёт того, как выбирать между словами "двадцать" и "тридцать": слово "тридцать" выводится ТОЛЬКО для числа 31. Остальные составные числительные выводятся со словом "двадцать".
Валерий Волонцевич
Вполне разумно сначала выполнить конкатенацию слов и пробелов, а уже потом вывести результат.
Похожие вопросы
- Помогите пожалуйста написать код на c++, выводящий имя, фамилию и дату рождения нескольких человек
- Помогите пожалуйста написать код на C++
- Помогите пожалуйста написать код.(C++)
- Срочно!!! Помогите пожалуйста написать код к задачке на с++! Заранее спасибо!
- Помоги пожалуйста написать программу на C++
- Помогите пж написать код на C++
- Помогите, пожалуйста, написать программу на языке Си.
- Помогите, пожалуйста, написать программу на C++ (массивы)
- Помогите пожалуйста! Нужен код на C++
- Помогите пожалуйста написать программу на C++. Очень нужно!