Другие языки программирования и технологии
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;
И у кого-то повернется язык назвать ЭТО красивым решением? Впрочем, заказчик всегда прав.. . Всего хорошего.
Здесь все просто. Работает правило 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;
И у кого-то повернется язык назвать ЭТО красивым решением? Впрочем, заказчик всегда прав.. . Всего хорошего.
Похожие вопросы
- Люди помогите пожалуйста....Кто понимает TURBO PASCAL
- Помогите сделать задания по програмированию(двумерные массивы)Turbo Pascal
- Как вставить текст в Turbo Pascal 7.1???
- Объясните смысл прогаммы в Turbo Pascal
- Я в коледже Turbo Pascal прохожу. Скажите он вообще где нибудь нужен? Может Turbo Pascal морально устарел?
- DOS OC или создание ОС на Turbo Pascal
- turbo pascal 7.0 Определить принадлежность к области точек с заданными координатами!!!
- Помогите с Turbo Pascal
- Как задать разрешение окна в графическом режиме Turbo Pascal??? Alt-Enter не предлагать!!
- что тут неправильно? ? (Turbo Pascal)