Find Average JavaScript

Здравейте. Решавам задача Find Average - Coding Tasks, обаче ми дава 80 точки и не мога да открия грешката. Като цяло не разбирам необходимостта от фор цикъла, но след като се изисква, въобще не знам как да го приложа и каква е логиката. Ако някой може да обясни или да даде примерно решение ще бъда благодарна!

Ето го и кодът:

Здравей, Валерия!
Мисля, че в случая ще ти бъде най-полезно да разгледаш един друг подход при решаването на задачата. Изпращам ти едно възможно решение, разгледай го внимателно и ако имаш въпроси ще се радвам да се опитам да отговоря!

let input = [
    '3',
    '2.5',
    '1.25',
    '3'
];

let print = this.print || console.log;
let gets = this.gets || ((arr, indenumOne) => () => arr[indenumOne++])(input, 0);

let numsCount = Number(gets());
let sum = 0;

for (let i = 0; i < numsCount; i++) {
    sum += Number(gets());
}

let average = sum / numsCount;
print(average.toFixed(2));

Поздрави,
Иван!

Здравей, благодаря за отговора!

Не разбирам частта с фор цикъла:

for (let i = 0; i < numsCount; i++) {
sum += Number(gets());
}

  1. До колкото аз разбрах цикълът ще се извърши така:
  • пръво се въвежда стойност на вариабъл (let i = 0), после се прави проверката ( i < numsCount), след това взимаме следващо число с гетс(Number(gets())), което в случая е 2.5 и се прави отново проверка за i, но вместо 0, то вече приема стойност 1.
    Въпросът ми е какво се случва след това? Отново ли се връща цикъла, прави се проверка и се взима числото 2,5 или продължаваме към следващите (1.25 и 3), понеже цикълът ще се извърши общо 3 пъти, заради броя числа (numsCount)?
  1. Ако по-горното ми предположение е коректно, то към стойност ‘‘sum’’ би трябвало да се добавят и трите числа (2.5+1.25+3) ?

Благодаря за отговорите, малко са ми болна тема loops. :smile:

Да, правилно си разбрала, когато влезем в цикъла i = 0, понеже такава стойност му задаваме първоначално, при първата итерация с Number(gets()); взимаме първия (‘2.5’) стринг от входните данни, парсваме го към число, след което прибавяме неговата стойност към променливата sum и тя става равна на 2,5. При следващата итерация i вече е 1, тъй като на всяка итерация инкрементираме неговата стойност с 1 (i++), но все още е по малко от N и отново влизаме в тялото на цикъла, където този път присвояваме числото 1,25 към sum и нейната стойност става 3,75 и така докато проверката i < numsCount връща true.
Тоест кода, който се намира в тялото на цикъла (между къдравите скоби) ще се изпълнява докато i е по малко от N.
А оператора += означава прибави стойността намираща се отдясно на оператора, към променливата отляво на него. В твоето решение, при всяка итерация ти презаписваш sum с една и съща стойност, а не прибавяш към нея. Дебъгни двата варианта във VS Code, аз лично така най-лесно осъзнавам как работи нещо! :grin:

Поздрави,
Иван!

1 Like

Благодаря!

Няма за какво и успех на изпита в сряда!

1 Like