Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

JackHammer avatar JackHammer 1 Точки

05. Trapeziod Area [Programming Basics with JavaScript - юни 2018]

function  trapeziodArea(input) {
    let b1 = input[0];
    let b2 = input[1];
    let h = input[2];
    let result = (b1 + b2) * h/2;
    console.log(result);
}
trapeziodArea([4, 6, 8]);

judge системата ми изкарва грешка на задачата. Можете ли да ми кажете къде бъркам?
При пускането на програмата в WebStorm резултата си е 40 но judge ми изкарва, че резултата ми е 184 О_о.

 

0
Programming Basics 11/06/2018 17:36:00
avasilev1 avatar avasilev1 19 Точки

Проблемът е в това, че judge ти подава аргументите като стринг, а не като число. Трябва сам да си ги превърнеш в числа. Това става като използваш Number(). 

 

Ето как трябва да стане:

function trapeziodArea(input) {
    let b1 = Number(input[0]);
    let b2 = Number(input[1]);
    let h = Number(input[2]);
    let result = (b1 + b2) * h/2;
    console.log(result);
}

 

2
JackHammer avatar JackHammer 1 Точки

Мда. След малка разходка и аз стигнах до тоя извод :)
Благодаря много за отговора .

0
Liuba_Ivanova avatar Liuba_Ivanova 3 Точки

Здравейте всички, в момента решавам примерчетата от javascript basics - а от лятото, и точно с тази задача не мога да взема 100/100. Пробвах всичко, но стигам до 80/100, защото при единия input от judge при мен се получава това: 6.845000000000001, а трябва да е 6.845. Рових се как да го оправя, но намирам разни твърде сложни решения за такова просто нещо. Знам че скоро стартира нова група с javascript, но не ми се чака заради един пример :)

Буквално с всеки един код написан тук получавам 80/100

0
ivailo361 avatar ivailo361 1 Точки

Привет,

Пробва ли да ограничиш броя на символите с  toFixed(3) Method, ако проблема е в символите разбира се?

https://www.w3schools.com/jsref/jsref_tofixed.asp

Ивайло

0
Liuba_Ivanova avatar Liuba_Ivanova 3 Точки

Да, но това дава още повече грешки, тъй като някои от тестовете в judge изискват резултата да е с 2 или никакви знаци след десетичната точка. 

0
willystyle avatar willystyle 2472 Точки

Здравей,

моя съвет в такива случай, е за да избегнеш проблема със закръглянето да махаш последната цифра (с toFixed), и после да махаш trailing zero(например чрез parseFloat). Понеже мисля, че прецизността е 16 цифри, оставяме 1 за целите числа, от останалите 15 взимаме 14 с toFixed(14).

function trapeziodArea(input) {
    let a = Number (input[0])
    let b = Number (input[1])
    let h = Number (input[2])
    let area = ((a+b)*h)/2
    console.log(parseFloat(area.toFixed(14)))
}

1
Liuba_Ivanova avatar Liuba_Ivanova 3 Точки

Наистина.... 100/100. Любопитно ми е как ще го направят в js basics-a който стартира сега. Благодаря, запазвам си го.:)

0
NqkoiSiSmile avatar NqkoiSiSmile 5 Точки

Пробравай с .toFixed(3) като да знаеш че този метод ти връща String.

0
Liuba_Ivanova avatar Liuba_Ivanova 3 Точки

Пробвах, но не става, защото някои от тестовете в judge имат резултат без нищо след десетичната точка, и toFixed тогава пречи, добавяйки такива(нули).

0
NqkoiSiSmile avatar NqkoiSiSmile 5 Точки

дай линк към задачата

0
NqkoiSiSmile avatar NqkoiSiSmile 5 Точки

function solve(input) {

let b1 = Number(input[0]);

let b2 = Number(input[1]);

let h = Number(input[2]);

let side = ((b1 + b2) * h).toFixed(2);

let area = Number((side / 2));

 

console.log(area);

}

Сега трябва да стане. В JavaScript делението е малко шантаво и понякога хвърля такива небивалици както в конкретния случай, за това фиксираш преди да делиш за да може да ти искара точен резултат.

0
06/01/2019 22:52:16
willystyle avatar willystyle 2472 Точки

Не само в JavaScript (ами във всички езици, които са имплементирали стандарта IEEE-754 64-битови реални числа с двойна прецизност или по-известни като double) има проблеми с дробните, точни са само 1/2, 1/4, 1/8, ... но при 1/10, 1/100 ... има проблеми понеже се ползва закръгляне. Затова дори 0.1 не е точно, и може да имате проблеми не само при делене. Например пробвайте, че 0.1 + 0.2 === 0.3 връща false. Но като се познава проблема се избягва, например ако се работи с пари, се умножават по 100, работи се само с цели числа, и накрая само се дели на 100 и .toFixed(2). При сметки с лица и обеми също може да ползваме, че .toFixed(n) фиксира с точност до n-знак, а parseFloat(x) пък премахва trailing zeroes.

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.