Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.06.2011, 15:23
Интересующийся
Отправить личное сообщение для reutovo Посмотреть профиль Найти все сообщения от reutovo
 
Регистрация: 09.11.2008
Сообщений: 22

Помогите разобрать алгоритм
Есть скрипт
function xform(c, str1, str2, str5) {
    var c = Math.abs(c) % 100;
    if (c > 10 && c < 20) { return str5; }
    
    c %= 10;
    
    if (c > 1 && c < 5) { return str2; }
    if (c == 1) { return str1; } 
    
    return str5;
}

взят тут

Я его адаптировал под свои нужды, но меня мучает вопрос. Как всё-таки работает этот алгоритм? Сразу скажу, что программист из меня не ахти какой, но испытываю огромное желание научиться. Так что буду рад, если вы мне поможете.

Первым аргументом функции передается число, этот аргумент в теле функции делится по модулю 100. Почему по модулю 100?

Последний раз редактировалось reutovo, 18.06.2011 в 18:01.
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2011, 15:30
Аватар для SlavaPav
Аспирант
Отправить личное сообщение для SlavaPav Посмотреть профиль Найти все сообщения от SlavaPav
 
Регистрация: 25.02.2010
Сообщений: 57

Для начала отформатируйте его, чтобы было легче читать:
function xform(c, str1, str2, str5) {
    var c = Math.abs(c) % 100;
    if (c > 10 && c < 20) { return str5; }
    
    c %= 10;
    
    if (c > 1 && c < 5) { return str2; }
    if (c == 1) { return str1; } 
    
    return str5;
}
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2011, 17:03
Интересующийся
Отправить личное сообщение для reutovo Посмотреть профиль Найти все сообщения от reutovo
 
Регистрация: 09.11.2008
Сообщений: 22

Сообщение от SlavaPav Посмотреть сообщение
Для начала отформатируйте его, чтобы было легче читать
Сделано.
Ответить с цитированием
  #4 (permalink)  
Старый 18.06.2011, 19:24
Аватар для Graphis
Новичок на форуме
Отправить личное сообщение для Graphis Посмотреть профиль Найти все сообщения от Graphis
 
Регистрация: 15.06.2011
Сообщений: 8

Там есть пример

Использование:
str = x + xform (x,«яблоко»,«яблока»,«яблок )

Периодичность повторения окончаний 100
1 - Яблоко
101 - яблоко

2 - яблока
102 - яблока

50 - яблок
250 - яблок
Ответить с цитированием
  #5 (permalink)  
Старый 19.06.2011, 12:22
Интересующийся
Отправить личное сообщение для reutovo Посмотреть профиль Найти все сообщения от reutovo
 
Регистрация: 09.11.2008
Сообщений: 22

Сообщение от Graphis Посмотреть сообщение
Там есть пример

Использование:
str = x + xform (x,«яблоко»,«яблока»,«яблок )

Периодичность повторения окончаний 100
1 - Яблоко
101 - яблоко

2 - яблока
102 - яблока

50 - яблок
250 - яблок
Я видел как использовать функцию. Более того, я её так и использую.
Вопрос в другом, я хочу понять принцип работы алгоритма.

Вот вы пишите - "периодичность повторения алгоритма 100", а что будет если периодичность повторения будет не 100, а 30? Можете не проверять, код будет работать так же. Почему именно 100, а не 1000 или 50?
Ответить с цитированием
  #6 (permalink)  
Старый 19.06.2011, 12:32
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

при чем тут периодичность?

чтобы понять алгоритм. вспомните правила употребления существительных с числительными

сто взято, чтобы числа уменьшить. хоть миллион берите
Ответить с цитированием
  #7 (permalink)  
Старый 19.06.2011, 13:34
Интересующийся
Отправить личное сообщение для reutovo Посмотреть профиль Найти все сообщения от reutovo
 
Регистрация: 09.11.2008
Сообщений: 22

Сообщение от melky Посмотреть сообщение
при чем тут периодичность?

чтобы понять алгоритм. вспомните правила употребления существительных с числительными

сто взято, чтобы числа уменьшить. хоть миллион берите
1. Сам не понимаю при чём тут периодичность.
2. Вспомнил.
3. Какие числа уменьшить? Для чего их уменьшать.
Ответить с цитированием
  #8 (permalink)  
Старый 19.06.2011, 14:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

а вот при чем

1,21 яблоко
2-4,22-24 яблока
0,5-20,25-30 яблок_

20 периодичность...

function a(a, f1, f2, f3){

/*
  наша задача - свести это число (числительное) 
  к минимальному значению (красные цифры).
  для этого можно использовать модуль деления.

  примеры того,что снизу :

  было 1-20, осталось 1-20.(как было)
  было 21-30, стало 1-10.
*/

            a = a % 20 // остаток от деления на 20

// пойдем по числам , а не по формам  

          if ( a===0 ) return f3;
// тут ясно
           else if( a===1 ) return f1;

// полтора яблок*!*А*/!*
           else if ( a>1 && a<5 ) return f2;

// двадцать с половиной яблок_
// a может быть максимум 19, кстати))
           else if ( a>=5 && a< 21 ) return f3;

// на всякий
           else alert( "ERROR" );

       
}

var s='цифра | форма\n';

// маленький тест
for(var i=0;i<23;i++) s+= i+" | "+a(i,'яблоко','яблока','яблок')+" \n";

alert( s );
Ответить с цитированием
  #9 (permalink)  
Старый 19.06.2011, 15:55
Интересующийся
Отправить личное сообщение для reutovo Посмотреть профиль Найти все сообщения от reutovo
 
Регистрация: 09.11.2008
Сообщений: 22

Сообщение от melky Посмотреть сообщение
а вот при чем

1,21 яблоко
2-4,22-24 яблока
0,5-20,25-30 яблок_

20 периодичность...

function a(a, f1, f2, f3){

/*
  наша задача - свести это число (числительное) 
  к минимальному значению (красные цифры).
  для этого можно использовать модуль деления.

  примеры того,что снизу :

  было 1-20, осталось 1-20.(как было)
  было 21-30, стало 1-10.
*/

            a = a % 20 // остаток от деления на 20

// пойдем по числам , а не по формам  

          if ( a===0 ) return f3;
// тут ясно
           else if( a===1 ) return f1;

// полтора яблок*!*А*/!*
           else if ( a>1 && a<5 ) return f2;

// двадцать с половиной яблок_
// a может быть максимум 19, кстати))
           else if ( a>=5 && a< 21 ) return f3;

// на всякий
           else alert( "ERROR" );

       
}

var s='цифра | форма\n';

// маленький тест
for(var i=0;i<23;i++) s+= i+" | "+a(i,'яблоко','яблока','яблок')+" \n";

alert( s );
Гран мерси! Дошло теперь.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите разобрать XML документ Beton-Karton AJAX и COMET 2 01.03.2011 20:19
Помогите разобрать код. tomAlba Общие вопросы Javascript 0 28.01.2011 12:21
Помогите! Многоуровневые вкладки! sergeeeeee Элементы интерфейса 2 02.08.2010 23:50
Прелоэдер. Помогите разобрать код. bayah Общие вопросы Javascript 1 05.05.2010 20:32
Помогите разобрать JavaScript Franky4F1ngers Общие вопросы Javascript 7 01.07.2009 19:54