Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    problemi convertitore da decimale a binario

    sono un apprendista ed ho appena iniziato ad utilizzare php, quindi potrei aver sbagliato qualcosa di elementare, per questo chiedo scusa in anticipo.
    mi è capitato di dover creare un convertitore di basi numeriche, per ora ho fatto solo da decimale a binario.
    per programmare uso Netbeans e per pubblicare EasyPHP.
    quando eseguo il codice mi dice che ci mette più di 30 secondi per l'esecuzione della riga 16 (marcata in rosso) e si interrompe il programma.
    il $_GET è corretto (l'ho preso da un forum).
    quasto è il codice:

    <?php
    $val = $_GET["valore"];
    $bp = $_GET["basepar"];
    $ba = $_GET["basearr"];
    $t = $val;
    $t2 = 0;
    $risultato = "";
    $resto = 0;
    if ($bp == $ba) {
    $risultato = $val;
    }
    else if ($bp == "decimale") {
    if ($ba == "binaria") {
    for ($i = 0; $t >= 0; $i++) {
    $resto = $t % 2;
    $t2 = $risultato.$resto
    $risultato = $t2;
    $t = $t / 2;
    }
    }
    else if ($ba == "ottale") {

    }
    else {

    }
    }
    echo $risultato;
    include 'serie2es7form.php';
    ?>

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    se non sbaglio decbin() fa a caso tuo
    http://it2.php.net/decbin

  3. #3
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739

    Re: problemi convertitore da decimale a binario

    Originariamente inviato da bigdada
    sono un apprendista ed ho appena iniziato ad utilizzare php, quindi potrei aver sbagliato qualcosa di elementare, per questo chiedo scusa in anticipo.
    mi è capitato di dover creare un convertitore di basi numeriche, per ora ho fatto solo da decimale a binario.
    per programmare uso Netbeans e per pubblicare EasyPHP.
    quando eseguo il codice mi dice che ci mette più di 30 secondi per l'esecuzione della riga 16 (marcata in rosso) e si interrompe il programma.
    il $_GET è corretto (l'ho preso da un forum).
    quasto è il codice:
    ...
    L'errore non è di PHP ma di logica dell'algoritmo. Il fatto che vada in timeout con una esecuzione che dura più di 30 sec dovrebbe farti pensare: forse entro in un ciclo infinito e meno male che mi stoppa il timeout.

    Il tuo cilco:
    Codice PHP:
    for ($i 0$t >= 0$i++) {
        
    $resto $t 2;
        
    $t2 $risultato.$resto;
        
    $risultato $t2;
        
    $t $t 2;

    Qual'è la condizione che determina l'uscita dal ciclo? che $t sia minore di 0 ossia che $t contenga un valore negativo.
    Qual'è la riga che modifica il contenuto di $t affinché il ciclo possa avere fine? $t=$t/2

    Ora possiamo chiederci: in quale universo divisioni successive per due possono produrre un numero minore di 0? Al più potrai avere 0 con un certo resto, senza considerare che $t/2 produce un numero di tipo float, il che vuol dire che potresti avvicinarti allo 0 senza mai raggiungerlo se il numero da convertire non è pari.

    Ecco trovato il tuo ciclo infinito che ti porta al timeout. Dopo questo minimo di troubleshooting possiamo passare a formula la correzione che consiste nel porre come condizione d'uscita $t==0 e come operazione di modifica di $t all'interno del ciclo $t=floor($t/2); ossia la parte intera ottenuta dalla divisione per 2 di $t.

    Per ultimo, alla fine della riga rossa manca il ; ma forse te lo sei mangiato per farla rossa!

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  4. #4
    grazie Grino.
    ho modificato il for e adesso funziona

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.