Помогите составить алгоритм
Возраст чего-либо обычно выглядит так: "3 года" или "21 год" или "100 лет"... сделать алгоритм, который определяет правильное слово для единиц измерения в зависимости от возраста.
есть предположение что нужно сравнивать по первому регистру числа .....
Наверно придется вручную создать транслит где 1 = год, и сравнивать потом числа, не так уж много делофф если учесть что средний возраст жизни на планете земля 50-60 лет.
Код:
//функция для опеределения двух последних цифр в возрасте (для распознавания 11 - 14)
//определяется остатком от деления числа на 100
int LastTwoDigits(int ages) {return ages % 100;}
//функция для определения последней цифры в возрасте
//определяется остатком от деления числа на 10
int LastDigit(int ages) {return ages % 10;}
//определяем нужное слово:
int last_two = LastTwoDigits(ages);
if ((last_two >= 11) && (last_two <= 14)) cout << "лет";
else {
int last = LastDigit(ages);
if (last == 1) cout << "год";
else if ((last >= 2) && (last <= 4)) cout << "года";
else cout << "лет";
}
//определяется остатком от деления числа на 100
int LastTwoDigits(int ages) {return ages % 100;}
//функция для определения последней цифры в возрасте
//определяется остатком от деления числа на 10
int LastDigit(int ages) {return ages % 10;}
//определяем нужное слово:
int last_two = LastTwoDigits(ages);
if ((last_two >= 11) && (last_two <= 14)) cout << "лет";
else {
int last = LastDigit(ages);
if (last == 1) cout << "год";
else if ((last >= 2) && (last <= 4)) cout << "года";
else cout << "лет";
}
Цитата: fffixed
Получается, что слово "год" используется, если возраст кончается на цифру 1, "года" - на цифры с 2 по 4, "лет" - на все остальные, это общее правило работает за исключением лет с 11 по 14, для которых также используется "лет". Исходя из этого можно набросать следующее:
Должно работать не только для возрастов людей, но и исторических построек, государств, вселенной))
Код:
//функция для опеределения двух последних цифр в возрасте (для распознавания 11 - 14)
//определяется остатком от деления числа на 100
int LastTwoDigits(int ages) {return ages % 100;}
//функция для определения последней цифры в возрасте
//определяется остатком от деления числа на 10
int LastDigit(int ages) {return ages % 10;}
//определяем нужное слово:
int last_two = LastTwoDigits(ages);
if ((last_two >= 11) && (last_two <= 14)) cout << "лет";
else {
int last = LastDigit(ages);
if (last == 1) cout << "год";
else if ((last >= 2) && (last <= 4)) cout << "года";
else cout << "лет";
}
//определяется остатком от деления числа на 100
int LastTwoDigits(int ages) {return ages % 100;}
//функция для определения последней цифры в возрасте
//определяется остатком от деления числа на 10
int LastDigit(int ages) {return ages % 10;}
//определяем нужное слово:
int last_two = LastTwoDigits(ages);
if ((last_two >= 11) && (last_two <= 14)) cout << "лет";
else {
int last = LastDigit(ages);
if (last == 1) cout << "год";
else if ((last >= 2) && (last <= 4)) cout << "года";
else cout << "лет";
}
небольшое уточнение - с 11 по 19 лет. Нельзя ведь сказать что мне стукнуло 15 или 16 год!
Тогда код немного изменится
я тоже сначала думал про 11-19, но посмотрите, случаи с 15 по 19 ведь нормально обработаются через основную else-ветвь, которая проверяет только последнюю цифру, и им припишется "лет"
спасибо попробовал, компилю и в CODE Block"e лезут баги. Но в любом случае спасибо!
Я думаю мы говорим год, года или лет в зависимости от того, на что заканчивается слово, по моему две буквы словесного представления числа. Алгоритм должен сначала переводить число в слово, а уже потом прибавлять определение числа.
Цитата: Slav2
Я думаю мы говорим год, года или лет в зависимости от того, на что заканчивается слово, по моему две буквы словесного представления числа. Алгоритм должен сначала переводить число в слово, а уже потом прибавлять определение числа.
По-моему в задании говорится только о словоформах для указания точного возраста кого-либо или чего-либо, случаи вроде "к своему третьему году" или "на дворе стоял 1957ой год" под задание не подпадают и являются задачей куда более сложного синтаксического анализа