Поиск блогу

понедельник, 28 сентября 2015 г.

1 год, 3 года, 5 лет... ломаем падежи

 В предыдущем посте я писал как считал количество лет, месяцев и дней прошедших с какого-то события. Возникла проблема как выводить результаты в текстовом формате, ведь 1 год, 3 года, 5 лет, а 21 снова год. Тоже самое с месяцами и днями.

    На самом деле ничего особенно сложного нет. Кутерьма с падежами идет только до 10, а дальше уже все повторяется. То есть берем остаток от деления нашего числа на 10 и из множества кейсов вставляем нужное слово:

switch(a % 10){
 case 1:
{document.writeln('год');
break;}
 case 2:
 case 3:
 case 4:
{document.writeln('года');
        break;}
 default:
document.writeln('лет')
}
     Но есть одно исключение это числа от 11 до 14. Обработать исключением можно используя оператор if и else. Но я решил обойтись без else.
if ((a % 100 > 10)&(a % 100  < 15)){ a=5};
Так сказать исключение загоняем в общее правило. Переприсваивать переменную имеем право, так как значение её мы уже вывели.  
      Интересно заметить, что идея возможности использования оператора case посетила меня во время написания поста. 
Изначально было как-то так:
if ((a % 10 > 4) || (a % 10 ==0) || ((a % 100 > 10) && (a % 100 < 15)))  {
document.writeln('лет');}
else if (a % 10 ==1 ) {document.writeln('год')}
else document.writeln('года');
Строчек конечно меньше, но в условии первого if без бутылки разобраться сложно.
    Как говорится "хорошая мысля приходит опосля", так что пришлось переделывать функции вывода, которая сейчас выглядит так:
function writeDate(a,b,c) {

document.writeln(''+a+'');
if ((a % 100 > 10)&(a % 100  < 15)){ a=5};
switch(a % 10){
 case 1:
{document.writeln('год');
break;}
 case 2:
 case 3:
 case 4:
{document.writeln('года');
        break;}
 default:
document.writeln('лет');
}

document.writeln(''+b+'');
if ((b % 100 > 10)&(b % 100  < 15)){ b=5};
switch(b % 10){
 case 1:
{document.writeln('месяц');
break;}
 case 2:
 case 3:
 case 4:
{document.writeln('месяца');
        break;}
 default:
document.writeln('меясцев');
}

document.writeln(''+c+'');
if ((c % 100 > 10)&(c % 100  < 15)){ c=5};
switch(c % 10){
 case 1:
{document.writeln('день');
break;}
 case 2:
 case 3:
 case 4:
{document.writeln('дня');
        break;}
 default:
document.writeln('дней');
}

}
   Изначально задумывалось все эти махинации, чтобы выводить время жизни , но потом появилась безумная мысль выводить таким образом свою биографию.

Комментариев нет:

Отправить комментарий