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

Turbo Pascal

Доброго времени суток! Будьте добры: дайте основную часть листинга для программы в Turbo Pascal используя оператор Case. Суть программы: вводим n=<100. Далее, программы должна добавить к этому значению "год", "года" или "лет". То есть 2 года, 21 год, 40 лет....
Доброго времени суток.

Здесь все просто. Работает правило 1-2-5 (год-года-лет) . Анализируете последнюю две цифры и ставите соответствующее слово. Имейте в виду, числа, попадающие в поддиапазон 5 от сначала от 5 до 20, а затем от 25 до 30 и т. д.

Можно сделать так

const
Years : array[1..3] of String = ('год','года','лет');

var N10, N01, idx : Integer;

....
ReadLn(InN); {входное число}

N01 := InN mod 10; {единицы}
N10 := (InN div 10) mod 10; {десятки}

{ установка индекса окончания }
if (N01 = 0) or (N01 > 4) or (N10 = 1) then idx := 3 else
if (N01 > 1) and (N01 < 5) then idx := 2 else idx := 1;

WritrLn(InN, ' ' + Years[idx]);
....

Удачи!

Да куда уж проще? Выделяете единицы и десятки и парочка ифов. 4 строчки, а дальше из массива выбирается нужное слово. И работает для любого числа.

Ну если не проходили массивы, то можно так. Суть от этого не меняется.

if idx = 3 then tmpS := tmpS + ' лет' else
if idx = 2 then tmpS := tmpS + ' года' else tmpS := tmpS + ' год';

WritrLn(InN, ' ' + tmpS);

tmpS строковая переменная.

Зуб можно и через ухо вырвать.. .

case InN of
1,21,31,41,51,61,71,81,91 : tmpS := 'год';
2..4,22..24,32..34 ...: tmpS := 'года';
5..20,25..30.35..40,...: tmpS := 'лет';
end;

И у кого-то повернется язык назвать ЭТО красивым решением? Впрочем, заказчик всегда прав.. . Всего хорошего.
ПФ
Павел Фомин
59 613
Лучший ответ