Conversione con While

di il
13 risposte

Conversione con While

Buongiorno a tutti,
qualche giorno fa mi è stato assegnato un compito con questa consegna: "Acquisire dei numeri finchè la loro somma non è maggiore di 1000 e visualizzare il numero dei valori inseriti". La professoressa ha anche aggiunto che il programma sarebbe dovuto essere fatto con un ciclo While cosa che non ho idea di come possa essere fatta con questo programma, così ho creato questo codice:
#include <stdio.h>

int main()

{
	
	int i, n, n1, somma;
	
	printf("Inserire un numero: ");
	scanf("%d", &n);
	
	if (n < 1000)
	{
		
		for (i=0; somma<=1000; i++)
		
		{
		
			printf("Inserire un numero: ");
			scanf("%d", &n1);
		
			n += n1;
		
			somma = n;
		
		}
		
		i += 1;
		
	}
	
	else
	{
	 	
		i = 1;	
	 	
	}
	
	printf("Sono stati inseriti %d numeri", i);
	
	return 0;
	
}
Qualcuno saprebbe aiutarmi a convertirlo, se possibile, in un ciclo While?

Grazie!

13 Risposte

  • Re: Conversione con While

    Provaci e vediamo dove sbagli.

    Ricordati comunque che somma va azzerata all'inizio.
    La prima if non serve a nulla
  • Re: Conversione con While

    In questo caso il primo if l'ho usato per l'incremento del contatore dei valori inseriti perchè altrimenti se il numero insrito sarebbe già stato maggiore di mille avrei avuto in output un numero sbagliato.

    Provo a vedere se risco a sostituire il for con un While poi mando il codice.
  • Re: Conversione con While

    Ho sostituito come detto nel messaggio precedente il for con un while tenendo solo la condizione della somma e poi incrementando i.

    Ora funziona!
    #include <stdio.h>
    
    int main()
    
    {
    	
    	int i, n, n1, somma;
    	
    	printf("Inserire un numero: ");
    	scanf("%d", &n);
    	
    	if (n < 1000)
    	{
    		
    		while (somma<=1000)
    		
    		{
    		
    			printf("Inserire un numero: ");
    			scanf("%d", &n1);
    		
    			n += n1;
    		
    			somma = n;
    			
    			i++;
    		
    		}
    		
    		i += 1;
    		
    	}
    	
    	else
    	{
    	 	
    		i = 1;	
    	 	
    	}
    	
    	printf("Sono stati inseriti %d numeri", i);
    	
    	return 0;
    	
    }
    Grazie Mille!
  • Re: Conversione con While

    Prima di scrivere il codice C (o di altro linguaggio informatico) prova ad esprimere in italiano, correttamente ma sinteticamente quello che vuoi fare.
    Lo scrivi liberamente, poi cerchi di usare i termini più "informatici" come se, allora, altrimenti, finché, etc... Dopo un paio di passaggi vedrai comparire il tuo codice C.

    Noto che non hai seguito i suggerimenti di Oregon, male!
  • Re: Conversione con While

    Però non hai tenuto conto di quello che ti ho scritto...

    Dovresti rivedere anche l'uso di n n1 e somma e la prima scanf... pensaci se ti va
  • Re: Conversione con While

    Ho cambiato ancora molte cose arrivando ad una versione che a mio parere potrebbe essere abbastanza buona e forse anche quella definitiva
    #include <stdio.h>
    
    int main()
    
    {
    	
    	int i, n, somma;
    	
    	while (somma<=1000) {
    		
    		printf("Inserire un numero: ");
    		scanf("%d", &n);
    		
    		somma += n;
    			
    		i++;
    		
    	}		
    	
    	printf("Sono stati inseriti %d numeri", i);
    	
    	return 0;
    	
    }
    Grazie mille per l'aiuto, terrò conto dei vostri suggerimenti anche per i prossimi programmi!
  • Re: Conversione con While

    Bravo
  • Re: Conversione con While

    Ma perché non azzeri somma come ti ho detto DUE volte?

    Perché non azzeri i ?
  • Re: Conversione con While

    C'è un errore ENORME, peraltro molto comune: non inizializzi le variabili!
    Il valore iniziale delle variabili non è 0 ma INDEFINITO, quasi sempre, tranne poche e ben definite eccezioni.
    Devi SEMPRE inizializzare TUTTE le variabili.
  • Re: Conversione con While

    Non è detto che sia un grave errore, dipende dal compilatore. Comunque sì, il valore in generale è indefinito ed è giusto inizializzare a zero
  • Re: Conversione con While

    Weierstrass ha scritto:


    dipende dal compilatore.
    Anche per questo è un undefined behavior.

    Quindi è un errore che può compromettere l'esecuzione del programma, in situazioni diverse e non prevedibili.
    Per questo concordo che sia un errore grave, errore da sottolineare soprattutto ad uno studente che sta iniziando ad usare il linguaggio.

    E non mi riferisco in generale a tutte le variabili (anche se una programmazione difensiva lo prevederebbe) ma certamente a contatori, totalizzatori e flag di stato.
  • Re: Conversione con While

    Hai ragione
  • Re: Conversione con While

    oregon ha scritto:


    Per questo concordo che sia un errore grave, errore da sottolineare soprattutto ad uno studente che sta iniziando ad usare il linguaggio.
    Esatto. Non mi piace generalizzare(*) ma con studenti agli inizi è meglio porre dei paletti ben precisi, poi si può andare a rifinire i concetti, quando hanno maggior esperienza.

    (*) Tutte le generalizzazioni sono sbagliate.
Devi accedere o registrarti per scrivere nel forum
13 risposte