[PHP] non trovo l'errore?

CafeZero

Nuovo Utente
16 Apr 2018
3
0
1
26
ragazzi mi aiutate a trovare l'errore? sto facendo un semplice programma che inseriti numeri in un array (finchè non si inserisce il numero 0), il programma li stampa nello stesso ordine ma con la scritta vicino sul maggiore e minore.. aiutatemi solo a capire dove ho sbagliato, non scrivetemi righe di codice con funzioni, considerando anche che è solo una settimana che faccio php a scuola.. grazie a tutti coloro che mi aiuteranno e buona serata!!
PHP:
<?php
$numeri= array();

/* immissione numeri */
$i=0;
do{
   fwrite(STDOUT,"inserisci un numero: ");
    $numeri[$i]=(float) fgets(STDIN);
}while($numeri[$i]!=0);


/* creiamo un file di testo */
$testo= fopen("output.txt","w");

$i=0;
$min=0;
$max=0;

do{
    if($numeri[$i]<$min)     /* Troviamo il minimo */
        $min=$numeri[$i];
 
    if($numeri[$i]>$max)      /* Troviamo il massimo */
        $max=$numeri[$i];
    $i++;
}while($numeri[$i] !=0);

$i=0;
fwrite($testo,"$max  $min");
do{
    fwrite($testo,"$numeri[$i]");
 
    if($numeri[$i]==$max)
        fwrite($testo,"<= Numero massimo ");
    if($numeri[$i]==$min)
        fwrite($testo,"<= Numero minimo");
 
    fwrite($testo,"\r\n");
    $i++;
 
}while($numeri[$i]!=0);


?>
 
Ultima modifica di un moderatore:
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
code.gif
quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box inserisci 2.png.JPG

Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag Vedi l'allegato 5230 quando posti del codice, oppure la funzione codice dalla barra degli strumenti
Vedi l'allegato 5231
Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
ah ok, grazie mille, ti prego di scusarmi dato che sono nuovo. Prometto che non succederà più in futuro, e grazie ancora!
 
1 ) STDIN e STDOUT mi sembra non siano stati aperi, (non li ho mai usati, ma leggendo il manuale ...
in ogni caso puoi fare tu prove

2 ) nella lettura dei valori manca l'incremento dell'indice

3 ) gli indici ($i) se incrementi alla fine delle operazioni, la clausola while controlla la cella successiva, che non esiste
conviene sempre mettere l'incremento all'inizio del ciclo
uscendo dal ciclo con l'indice che punta all'ultimo elemento

4 ) min va inizializzato con un valore alto altrimenti non sarà mai aggiornato

5 ) all'interno dei loop va escluso il valore 0 altrimenti bisogna gestire con l'indice che escluda l'ultimo valore (lo zero)

6 ) i file aperti andrebbero chiusi al termine del processo o quando non servono più

upload_2018-4-19_22-26-11.png
ho modificato il meno possibile il tuo codice, "leggi" bene gli errori logici ...

PHP:
<?php
$numeri= array();

$STDIN  = fopen("php://STDIN",  "r");  /* creiamo STDIN  */
$STDOUT = fopen("php://STDOUT", "w");  /* creiamo STDOUT */

$testo = fopen("output.txt","w");      /* creiamo un file di testo */

 
/* immissione numeri */
$i = -1;
do{
    $i++;

    fwrite($STDOUT,"inserisci un numero: ");
    $numeri[$i] = (float) fgets($STDIN);

}while($numeri[$i] != 0);


/* trovo minimo e massimo e li scrivo in output */
$i   = -1;
$min = 999999999;
$max = 0;

do{
    $i++;

    if($numeri[$i] != 0) {
        if($numeri[$i] < $min)     /* Troviamo il minimo */
            $min = $numeri[$i];

        if($numeri[$i] > $max)     /* Troviamo il massimo */
            $max = $numeri[$i];
    }

}while($numeri[$i] != 0);

fwrite($testo,"minimo  = ".$min.PHP_EOL);
fwrite($testo,"massimo = ".$max.PHP_EOL);


/* scrivo la lista dei numeri in output */
$i = -1;
do{
    $i++;

    if($numeri[$i] != 0) {
        fwrite($testo,$numeri[$i]);

        if($numeri[$i] == $max)
            fwrite($testo," <= Numero massimo ");

        if($numeri[$i] == $min)
            fwrite($testo," <= Numero minimo");

        fwrite($testo,PHP_EOL);
    }

}while($numeri[$i] != 0);


/* chiudo tutti i file aperti */
fclose($STDIN);
fclose($STDOUT);
fclose($testo);

?>
 

Discussioni simili