Показать сообщение отдельно
  #14 (permalink)  
Старый 29.12.2016, 15:42
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

#2
function getRandomNumbers(amt = 100, min = 0, max = 100) {
  let result = [ ];
  
  if (max < min) [max, min] = [min, max];
  
  while (result.length < amt) {
    result.push( ( min + max * Math.random( ) ).toFixed(0) )
  }
  
  return result
} 

function getAverage(arr) {
    let result = arr.reduce( (res, i) => {
        return +res + +i;
    } )
    return result / arr.length
}

function getMedian(arr) {
    let 
      copy = [ ], sum = 0,
      halfLen = arr.length / 2
    ;
    Object.assign(copy, arr);
    
    copy.sort( (a, b) => a - b )
    
    sum += +copy[ Math.ceil(halfLen) - 1 ];
    sum += +copy[ Math.floor(halfLen) ];
    
    return sum / 2
}

function getMode(arr) {
    let 
        key, result = [ ], 
        count = { }, max = -Infinity,
        nomodeMsg = "The array hasn't mode.",
        nomodeFlag = true
    ;
    
    arr.forEach( (item) => {
        if ( !(item in count) ) count[item] = 0;
        count[item]++
        max = max < count[item] ? count[item] : max;
    } );
    
    if (max <= 1) return nomodeMsg;
    
    for (key in count) {
        if ( count[key] === max ) {
            result.push(key)
        } else {
            nomodeFlag = false
        }
    }

    return nomodeFlag ? nomodeMsg : result;
}


let 
    // Получим последовательность из 10 целых случайных чисел от 0 до 100
    r = getRandomNumbers(10, 0, 100)
    
    // Получим массив мод для последовательности
    m = getMode(r),
    
    // Получим медиану для последовательности
    med = getMedian(r),
    
    // Получим среднее значение для последовательности
    a = getAverage(r)
;

alert( `Для последовательности ${r}
Среднее: ${a}
Медиана: ${med}
Мода(ы):    ${m}` );

Последний раз редактировалось GuardCat, 29.12.2016 в 15:44.
Ответить с цитированием