Perchè, non funziona questo ciclo?

di il
5 risposte

Perchè, non funziona questo ciclo?

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

  • Re: Perchè, non funziona questo ciclo?

    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.
  • Re: Perchè, non funziona questo ciclo?

    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
  • Re: Perchè, non funziona questo ciclo?

    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
  • Re: Perchè, non funziona questo ciclo?

    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?
  • Re: Perchè, non funziona questo ciclo?

    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