• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kalkulator binarny

VPS Starter Arubacloud
0 głosów
308 wizyt
pytanie zadane 24 marca 2023 w JavaScript przez Kredens Nowicjusz (200 p.)

Napisałem taką funkcje, która w założeniu miała przeliczać z systemu dziesiętnego na binarny, ale nie wiem dla czego nie działa.

function bin()
{
    var liczba = document.getElementById("wynik").value;
    var pamiec = "";
        if("wynik">0)
        {
            var h=0
            var j=1
            for(i=0;j<"wynik"; i++)
            j=j*2
            h=h+1
        }
        else
        {
            var j=-1
            for(i=0;j>"wynik"; i++)
            h=h+1
            j=j*2
        }

            var A= new Array(i);   
            for(k=0;k=i;k++)
            {
                if("wynik"-j>0)
                {
                    A[k]="1";
                    j=j/2
                }
                else
                {
                A[k]=0
                }
            }
                    for(g=0;g=h;g++)
                    {
                        pamiec=A.charAt(h);
                    }

                    document.getElementById("wynik").innerHTML="pamiec"
    
}
HTML:
<button class="button binar" onclick="Bin()" id="binarny" style="display:none">Bin</button>
<div id="wynik" class="result">0</div>

 

komentarz 24 marca 2023 przez Szarlotka Użytkownik (890 p.)
Ale co konkretnie nie działa?
komentarz 24 marca 2023 przez Kredens Nowicjusz (200 p.)
właściwie to nic, jak wstawiałem alert na początku to się nie pojawiał

1 odpowiedź

+1 głos
odpowiedź 24 marca 2023 przez Szarlotka Użytkownik (890 p.)
wybrane 25 marca 2023 przez Kredens
 
Najlepsza

Z samym algorytmem nie pomogę, ale oto błędy które zauważyłam:

1. W kodzie html odnosisz się do funkcji z dużych liter, a w kodzie js z małych.
Tą linijkę:

<button class="button binar" onclick="Bin()" id="binarny" style="display:none">Bin</button>

popraw na: (usunęłam też display:none;)

<button class="button binar" onclick="bin()" id="binarny">Bin</button>

2. Warunek

 if("wynik">0) 

porównuje napis "wynik" z wartością 0, zamiast porównać wartość zmiennej liczba z 0. Poprawna wersja: if(liczba > 0)

3. Zmienna h powinna być zadeklarowana przed pętlą for, ponieważ inaczej za każdym razem zostanie zresetowana do 0 i nigdy nie zwiększy się o 1. 

4. Pętla

for(i=0;j>"wynik"; i++) 

jest niepoprawna, bo zmienna j nie jest aktualizowana w ciele pętli, więc pętla będzie wykonywała się w nieskończoność. Zamiast tego, warunek powinien sprawdzać, czy j jest większe od liczba:

 for(i=0;j>liczba; i++)

5. Ta linijka nie ma sensu:

var liczba = document.getElementById("wynik").value;

W tym przypadku, div nie jest formularzem, więc nie możesz użyć atrybutu value. Zamiast tego ustaw zawartość elementu div za pomocą innerHTML.

Poprawna linijka:

var liczba = document.getElementById("wynik").innerHTML;

Lecz teraz podajemy liczbę jako wartość tekstu w elemencie HTML, a nie jako wartość liczbową. W takim przypadku, wartość innerHTML jest łańcuchem znaków, a nie liczbą. Podczas porównywania wartości liczba z 0, JavaScript traktuje ją jako łańcuch znaków, a nie jako liczbę.

Musisz teraz przekonwertować wartość liczba na liczbę, na przykład za pomocą funkcji parseInt():

var liczba = parseInt(document.getElementById("wynik").innerHTML);

6. No a poza tym zamień wszystkie var'y w kodzie na let'y laugh

komentarz 25 marca 2023 przez Kredens Nowicjusz (200 p.)

Dziękuję bardzo, po dokonałem zmian o których była mowa, ale program nadal nie wykonuje pierwszej pętli if, a co za tym idzie każdej kolejnej

function bin()
{
    var liczba = parseInt(document.getElementById("wynik").innerHTML);
    let pamiec = "";
    let h=0
        if(liczba>0)
        {
            let j=1
            for(i=0;j<liczba; i++)
            {
            j=j*2
            h=h+1
            alert("dziala")
            }
        }
        else
        {
            let j=-1
            for(i=0;j>liczba; i++)
            {
            h=h+1
            j=j*2
            }
        }

            let A= new Array(i);   
            for(k=0;k=i;k++)
            {
                if(liczba-j>0)
                {
                    A[k]="1";
                    j=j/2
                }
                else
                {
                    A[k]=0
                }
            }
                    for(g=0;g=h;g++)
                    {
                        alert(h)
                        pamiec=A.charAt(h);
                    }

                    document.getElementById("wynik").innerHTML="pamiec"
    
}

 

komentarz 25 marca 2023 przez Szarlotka Użytkownik (890 p.)

Szczerze mówiąc nie bardzo rozumiem Twój algorytm, więc tu jest moja wersja:

Kod HTML:
 

<button class="bin" onclick="decimalToBinary()">Przelicz na binarny</button>
<div class="result">10</div>
<div class="binary"></div>

Chyba wszystko zrozumiałe? Dodałam tylko nowego diva na rezultat.

Kod JS:

 

function decimalToBinary() {
  const decimal = parseInt(document.querySelector('.result').textContent);
  let binary = '';
  let quotient = decimal;
  
  while (quotient > 0) {
    binary = (quotient % 2) + binary;
    quotient = Math.floor(quotient / 2);
  }
  
  const binaryElement = document.querySelector('.binary');
  binaryElement.textContent = binary || '0';
}

 

1. Najpierw funkcja tworzy zmienną decimal, do której przypisuje wartość liczbową (typ number) pobraną z elementu HTML o klasie .result (czyli z diva o klasie result).

2. Następnie funkcja inicjuje pustą zmienną binary, która będzie przechowywała liczbę binarną, którą będziemy generować w późniejszym etapie.

3. Tworzona jest też zmienna quotient (reszta z dzielenia przez 2), która będzie przechowywała wartość liczby dziesiętnej w trakcie konwersji. Na początku ustawiana jest na wartość liczby dziesiętnej.

4. W dalszej części funkcji tworzona jest pętla while, która działa tak długo, jak długo wartość zmiennej quotient jest większa od 0. 

a. Reszta z dzielenia przez 2 dodawana jest na początku wartości zmiennej binary. Używa się operatora modulo % do uzyskania reszty.
b. Wartość quotient dzielona jest przez 2 i wynik zapisywany jest w tej samej zmiennej, po konwersji do typu number za pomocą funkcji Math.floor.

5. Na końcu funkcja pobiera element HTML o klasie .binary i ustawia jego tekst na wartość zmiennej binary. Jeśli zmienna binary jest pusta, to ustawiana jest wartość '0'.

 

Podobne pytania

0 głosów
0 odpowiedzi 863 wizyt
pytanie zadane 11 kwietnia 2020 w Offtop przez Krasik Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 1,618 wizyt
0 głosów
1 odpowiedź 503 wizyt
pytanie zadane 31 lipca 2020 w JavaScript przez Szarlotka Użytkownik (890 p.)

93,024 zapytań

141,986 odpowiedzi

321,291 komentarzy

62,371 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...