MMSA - Loop - Homework


0

Привет!

Някой ще може ли да ми подскаже къде бъркам в решаването на 2-ра задача на Loops - MMSA (Min, Max, Sum, Average) of N Numbers. В конзолата, тестовете ми излизат вярно, а BgCoder ми дава 0 точки.  Моето решение е:

function solve(args) {
function sortNumber(a, b) {
return a - b;
}
var a = Number(args[0]);
var b = Number(args[1]);
var c = Number(args[2]);
var arrSequence = [a, b, c];
arrSequence.sort(sortNumber);
var min = (arrSequence[0]).toFixed(2);
var max = (arrSequence [arrSequence.length - 1]).toFixed(2);
var sum = (a + b + c).toFixed(2);
var avg = ((a + b + c) / args.length).toFixed(2);

console.log('min=' + min);
console.log('max=' + max);
console.log('sum=' + sum);
console.log('avg=' + avg);
}




Отговори



0

Да се включа и аз със въпрос.

БГкодер отказва да ми приеме кода, при положение, че изглежда трябва абсолютно да си работи.

 бгкодер отказва да приеме "toFixed"поради някаква причина:

БГкодер казва:

evalmachine.<anonymous>:20
    console.log("min=" + min.toFix...
// Copy Code Snippet Herefunction solve(args) { let min = args[0], max = args[0], sum = args[0], avg, i; for ( i = 1; i < args.length; i += 1 ) { if (args[i]<min) { min = args[i]; } if (args[i]>max) { max = args[i]; } sum = sum + args[i]; } avg = sum / args.length; console.log("min=" + min.toFixed(2)); console.log("max=" + max.toFixed(2)); console.log("sum=" + sum.toFixed(2)); console.log("avg=" + avg.toFixed(2)); }



от Smytt_kp (115 точки)


0

При декларирането на променливите защо ползващ args[0] ? Трябва да е :

function solve(args) {
   var min = 10000,
        max = -10000,
        sum = 0,
        avg = 0;

За да ти сработи toFixed в тялото if условието сложи един плюс - min= + args[i]  и  max= + args[i].


от peter_85 (279 точки)

0

1) args[0] ползвам, защото е същото. приемам една стойност за минимална и сравнявам всеки елемент на масива с нея и замествам, ако намеря по-малка. По същия начин за max.

2) toFixed не ми е в if... :( Пропуснах да кажа, че в конзолата си работи без проблем. Само в кодера вади някаква грешка


от Smytt_kp (115 точки)



0

Здравейте колеги :) По някаква причина в VS Code не мога да достъпвам args.lenght.

1. VS Code не ми го предлага като опция след като напиша точка след args и

2. Дори когато го напипа, въпреки, че не го предлага, явно интерпретатора не го разпознава и навсякъде където го ползвам - не сработва

Някой сблъсквал ли се е с подобен проблем и има ли идея как се решава?


от mkanovski (552 точки)


0
Виж да не е от правописа, думата е length.

от Slavka74 (436 точки)

0

args, демек аргументите, които се подават са нещо като масив, но НЕ е масив, обясниха го на лекциите. Когато се приемат числа, аз си го обръщам на масив с числа по следния начин

let arr = [...args].map(Number);

Едит: гледам, че го ползват колегите, та би трябвало да работи, но аз не го ползвам, защото така или иначе, числата в него са под формата на стрингове.


от olebg (598 точки)



0

function solve (args) {   var min = 0,        max = 0,        sum = 0,        avg = 0
  for (var i = 0; i < args.length; i += 1) {        if (+args[i] < min) {            min = +args[i];        }        if (+args[i] > min) {            max = +args[i];        }        sum += +args[i];    }    avg = sum / args.length;    console.log('min=' + min.toFixed(2));    console.log('max=' + max.toFixed(2));    console.log('sum=' + sum.toFixed(2));    console.log('avg=' + avg.toFixed(2));}

Къде бъркам че в бг кодер имам 0 точки и само един верен тест. 

Тествала съм почти всички решения тук, и само 0 точки ми дава бг кодер. 




0
Погледни малко по-напред в постовете, качила съм код, който е за 100/100 и е подобен на твоя. Разгледай го и мисля, че ще откриеш грешката си :)

от k_kaneva (127 точки)

0

Няколко грешки в кода. Първо го препратих да ползва ES2015, т.е. ползване на лет и другите нови неща. Другите неща които поправих: на мин и макс, задаваш първите стойности от входа и после сравняваш всяка друга с тях и ако се намери по-малка/по-голяма тогава променяш мин и макс. Защото като им зададеш 0 като стойност първоначално, после, примерно за макс, ако всички входни числа са по-малки от 0, твоята 0 ще отиде в макс, а това не е вярно. Отделно в цикъла сравняваш конкретната стойност от входа дали е по-малка от мин, ако е вярно я задаваш на мин, а после ако същата стойност е по-голяма от мин (защо?) я задаваш на макс. Ето кода ти за 100 точки.

function solve(args) { let min = +args[0], max = +args[0], sum = 0, avg = 0 for (let i = 0; i < args.length; i += 1) { if (+args[i] < min) { min = +args[i]; } if (+args[i] > max) { max = +args[i]; } sum += +args[i]; } avg = sum / args.length; console.log('min=' + min.toFixed(2)); console.log('max=' + max.toFixed(2)); console.log('sum=' + sum.toFixed(2)); console.log('avg=' + avg.toFixed(2)); }


от olebg (598 точки)