Perchè, non funziona questo ciclo?

di Anonimizzato7589 il
5 risposte
Il linguaggio usato è il C. In pratica l'esercizio chiede, di stampare a video un ciclo infinito di multipli di 2...2,4,8,16...ecc.. io faccio:


#include <stdio.h>

int main()
{
  int counter, multiplo;

counter = 1;

multiplo = 1;

while(counter > 0){

multiplo = multiplo * 2;

printf("%d", multiplo);

++counter;
}
return 0;
}

va bene?

5 Risposte

  • Il programma va in loop infinito così. dovresti darli la posibilità di uscire.
    
    #include <stdio.h>
    #include <limits.h>
    
    int main()
    {
      unsigned long int multiplo = 1;
    
    while(multiplo < ULONG_MAX)
    {
    
    multiplo *= 2;
    
    printf("%ld", multiplo);
    }
    return 0;
    }
    
    prova questo.
  • No ma...con solo le tecniche che ho apprreso sin ora...oltre la direttiva preprocessore delle librerie standard, non ho fatto...eheheh comunuqe grazie del suggerimento...ma...penso in definitiva che l'esercizio proposto, volesse proprio ottenere il loop come risposta..perchè chiede, cosa succederà??? perchè il programma l'ho scritto bene...credo la prima risposta, sia corretta
  • Il programma non va in loop infinito. Lungo, ma non infinito.

    contatore è un int, e nella condizione del ciclo deve essere positivo. Una volta raggiunto INT_MAX, il successivo incremento (contatore++) lo porterà a INT_MIN (che è negativo), e il ciclo finirà. Nel frattempo però multiplo a forza di essere moltiplicato per 2 andrà in overflow, e diventerà zero, e tale rimarrà per il resto della durata del processo.

    Michele
  • Strano credevo che andando in overflow si passa dal altra parte della sponta (negativo in positivo e viceversa). Non dovrebbe essere che anche multiplo andando in overflow ti visualizzi numeri non + veritieri e piazza il bit di overflow a 1?
  • In effetti mi metti il dubbio.
    In caso di somme avresti ragione. Con le moltiplicazioni non so bene in che modo si comportino le moderne ALU (quando ho studiato io le CPU, le alu non facevano moltiplicazioni, se le doveva implementare il programmatore per somme successive )
Devi accedere o registrarti per scrivere nel forum
5 risposte