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

Kalkulator binarny

Object Storage Arubacloud
0 głosów
244 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 726 wizyt
pytanie zadane 11 kwietnia 2020 w Offtop przez Krasik Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 1,433 wizyt
0 głosów
1 odpowiedź 449 wizyt
pytanie zadane 31 lipca 2020 w JavaScript przez Szarlotka Użytkownik (890 p.)

92,551 zapytań

141,400 odpowiedzi

319,531 komentarzy

61,938 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...