Wczytywanie danych od użytkownika

0

Cześć, mam problem. Chciałem wykonać proste zadanie (od Zelenta z kursu cpp) w js. Polega na tym, że podaje się liczbę uczniów w klasie a później liczbę cukierków i program musi wyświetlić ile każda osoba dostanie cukierków a ile cukierków zostanie. Należy pamiętać, że osoba rozdająca cukierki nie je ich (nie rozdaje sobie), nikt nie może dostać więcej ani mniej, więc liczba nie może wyjść ułamkowa lub ujemna. Mam kod w js i w javie. W javie wszystko działa jak należy zapewne za sprawą Int który nie zwraca ułamków a w js nic nie działa... Wyniki są ułamkami lub całkiem ujemne. Probowalem metody toFixed i Math.Floor wszystko na nic bo toFixed zaokragla liczbe to gory jak jest 2.5 a wiadomo tak nie moze byc. Dołączam kod i ss tego samego w javie

function oblicz() {
    let uczniowie = document.getElementById('uczniowie').value;
    let cukierki = document.getElementById('cukierki').value

    let X = (cukierki / (uczniowie - 1));
    let Y = (cukierki - (X * (uczniowie - 1)));

    console.log(`Każdy uczeń dostanie po ${X} cukierki, a Jasiowi zostanie ${Y}`)

}

ZDJECIA https://megawrzuta.pl/filesgroup/85ee91b031822b51ce0e04bd56377011.html

0
let uczniowie = parseInt(/* ... */);
let cukierki = parseInt(/* ... */);
0
function oblicz() {
    let uczniowie = parseInt(document.getElementById('uczniowie').value);
    let cukierki = parseInt(document.getElementById('cukierki').value);

    let X = (cukierki / (uczniowie - 1));
    let Y = (cukierki - (X * (uczniowie - 1)));

    console.log(`Każdy uczeń dostanie po ${X} cukierki, a Jasiowi zostanie ${Y}`)

}
W ten sposób?
0

Tak, powinno działać.

0

Nie działa :/ Jest tak samo jak wcześniej tzn. po wpisaniu np. 10 uczniów i 20 cukierków, liczba cukierków która przypada na ucznia to 2.(2)3. A ja oczekuje, że wynik będzie wynosił 2 cukierki na ucznia i 2 zostaną (2 zostaną bo jedna osoba ta która rozdaje nie je)

0

Ach, no czyli musisz po prostu zaokrąglać wyniki ;-p

0

W jaki sposób to zrobic? ToFixed(0) zaokragla to prawda, ale przy wyniku np. 2.5 zaokragla do gory a wyniki nawet przy 2.9999 musialyby zostac zaokraglone w dol do 2 (bo teoretycznie nikt nie moze dostac mniej ani wiecej). Próbowałem funckji Math.floor() ale coś nie działa, może źle zapisuje... :/

0

Skoro próbowałeś z Math.floor(), to pokaż jak próbowałeś.
Przecież Ci nie powiem, czy źle zapisałeś, skoro nawet nie wiem, co wykombinowałeś.

0

Po długiej walce w końcu działa z tym Math.floor(). Dziękuje za pomoc. W taki sposób to zrobiłem:

function oblicz() {
    let uczniowie = Math.floor(document.getElementById('uczniowie').value);
    let cukierki = Math.floor(document.getElementById('cukierki').value);

    let X = Math.floor(cukierki / (uczniowie - 1));
    let Y = Math.floor(cukierki - (X * (uczniowie - 1)));

    console.log(`Każdy uczeń dostanie po ${X} cukierki, a Jasiowi zostanie ${Y}`)

}
0

Po co Ci Math.floor przy wczytywaniu danych od użytkownika?

0

Nie wiem, zrobiłem to tak na wszelki wypadek nie zastanawiałem się nad tym. Ale to prawda, jest to niepotrzebne i bez tego też działa.

1

Tam nie ma nic do zaokrąglania:

const solution = (sweets, students) => {
  const rest = sweets % (students - 1)
  const perChild = (sweets - rest) / (students - 1)

  console.log(`Każdy uczeń dostanie po ${perChild} cukierki, a Jasiowi zostanie ${rest}`)
}

CodePen: https://codepen.io/caderek/pen/ELoZRy?editors=0012

1 użytkowników online, w tym zalogowanych: 0, gości: 1