[C] Trovare il numero massimo,usare solo ciclo while o if else

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

jolly

Utente Attivo
Messaggi
110
Reazioni
4
Punteggio
38
Salve e scusate se rompo con questi esercizi,ma sono agli inizi e credo che il modo migliore per imparare a programmare sia leggere,capire e risolvere tanti esercizi.Ecco l'esercizio;

Scrivete un programma che prenda in input una serie di 10 numeri e in seguito determini e visualizzi il maggiore di quelli.[Suggerimento: il vostro programma dovrà utilizzare tre variabili,come segue]:
counter: un contatore per contare fino a 10;
number: il numero corrente immesso nel programma;
largest: il numero più grande trovato sino a questo punto.

Il mio problema sta nel fatto che non so come trovare il numero più grande fra i 10,cioè fin quando sono 3 numeri dichiaro 3 variabili e faccio un paragone con if,ma in questo caso non posso mica dichiarare 10 variabili mi sembra assurdo :boh: ci deve essere per forza un altro modo,ma non ci arrivo.

Ecco come ho svolto per il momento il codice:
Codice:
#include <stdio.h>

/* la funzione main è il punto d'inizio dell'esecuzione del programma */
int main( void )
{
	int counter = 1; /* dichiarazione e inizializzazione della variabile contatore */
	int number, largest; /* dichiarazione variabili */
        
		
	/* fase di elaborazione */	
	
	/* cicla finchè il valore della sentinella non viene inserito dall'utente */

	while (counter <= 10 ) { /* inzizio del ciclo while controllato da un valore sentinella */
		counter+=1; /* aggiunge +1 alla variabile contatore */
		printf( "Inserisci un numero: "); /* sollecita l'inserimento */
		scanf( "%d" , &number ); /* legge il numero inserito dall'utente */
		
	} /* fine del ciclo while */
	
        /* Ora dovrei inserire le istruzioni per trovare il numero più grande,un aiutino :) */

	return 0; /* indica che il programma è terminato con successo */

} /* fine della funzione main */
 
Fai così.. Ogni volta che inserisci il numero questo lo eguagli alla variabile largest ( che nel primo ciclo deve essere 0 ovviamente). Se il numero inserito è più grande allora largest assume il valore del numero che è stato inserito altrimenti largest rimane il valore di prima e si passa al prossimo numero che l'utente deve inserire.
Quindi:
Inserimento 1 -> controllo
Inserimento 2 -> controllo
Inserimento x-> controllo
Mentre nel tuo codice tu volevi fare prima tutti gli inserimenti e poi volevi trovarti il num più grande.. E con tre variabili la vedo difficile :)
Spero di esser stato chiaro altrimenti chiedi pure :)
 
allora ho modificato alcuni commenti,perchè avevo sbagliato a scrivere nell'esempio ho indicato che ho usato un iterazione con valore sentinella invece è un contatore scusate :).

Cawletto questo è il codice aggiornato:
Codice:
#include <stdio.h>

int main( void )
{
	int counter = 1; /* dichiarazione e inizializzazione della variabile contatore */
	int number;
	int largest = 0; /* dichiarazione variabili */
        
		
	/* fase di elaborazione */	
	
	/* cicla finchè il valore contatore e' minore o uguale a 10 */

	while (counter <= 10 ) { /* inzizio del ciclo while controllato da un contatore */
		counter+=1; /* aggiunge +1 alla variabile contatore */
		printf( "Inserisci un numero: "); /* sollecita l'inserimento */
		scanf( "%d" , &number ); /* legge il numero inserito dall'utente */
		if (number > largest ) {
			largest = number;
		}
		
	} /* fine del ciclo while */
	
	printf ("Il numero maggiore che e'stato inserito e' %d\n" , largest );
	
	return 0; /* indica che il programma è terminato con successo */

} /* fine della funzione main */

Ho inserito quel paragone if e devo dire che funziona alla grande,spero di aver fatto come mi hai suggerito tu :).Grazie mille per l'aiuto ciaoo
 
scusa se invece di trovare un solo numero maggiore ne devo trovare 2 ad esempio input: 1,5,10,40,3 i maggiori sono 40 e 10 come posso fare?
 
Ti serve necessariamente un altra variabile.. altrimenti non è possibile..
 
Ecco a te
Codice:
#include <stdio.h>


int main( void )
{
	int counter = 1; /* dichiarazione e inizializzazione della variabile contatore */
	int number;
	int largest = 0; /* dichiarazione variabili */
    int largest2 = 0;


	/* fase di elaborazione */


	/* cicla finchè il valore contatore e' minore o uguale a 10 */


	while (counter <= 5 ) { /* inzizio del ciclo while controllato da un contatore */
		counter+=1; /* aggiunge +1 alla variabile contatore */
		printf( "Inserisci un numero: "); /* sollecita l'inserimento */
		scanf( "%d" , &number ); /* legge il numero inserito dall'utente */
		if (number > largest ) {


		    largest2 = largest;
			largest = number;
		}


	} /* fine del ciclo while */


	printf ("Il numero maggiore che e'stato inserito e' %d\n" , largest );
	printf ("A seguire viene %d\n" , largest2 );


	return 0; /* indica che il programma è terminato con successo */


} /* fine della funzione main */
 
grazie mille il codice funziona anche se lo so,può sembrare sciocco ma non riesco a capire...cioè noi dichiariamo e inizializziamo le variabili largest e largest 2 a 0 ok.

Codice:
if (number > largest ) {


		    largest2 = largest;
			largest = number;
		}

Ora se number è maggiore di largest (quindi è vera sicuramente visto che largest è 0, tranne se si inserisce lo 0) in tal caso,
largest 2 è uguale a largest;
quindi largest2 è 0 ?
 
Si, ha un bug... Se tu inserisci 4 e poi solo numeri minori (tipo 4 2 2 2 2) salta fuori che il minore è 0 ...
Si dovrebbe risolvere inizializzando largest2 in modo diverso... Ora ad occhio in caso cercassi i 2 minori avrei inizializzato a number-1 ... Ora vedo un po cosa puoi fare qui...

eDit: allora, prova dopo la fine dell'if: else if (number<=largest){ largest2=number;}
In questo modo una sequenza di numeri dal maggiore al minore tipo 4 2 2 2 2 non dovrebbe dargli alcun problema... Fammi sapere che non ho compilatore installato :lol: ...
 
gia è vero esce fuori 0...ho aggiunto quel else if,ma prende il numero che digito per ultimo,cioè la sequenza (18 45 23 5 17 ) esce: Il numero maggiore che e'stato inserito e' 45
A seguire viene 17 mentre in realtà dovrebbe essere 23.
 
Mmm... Purtroppo non ho avuto tempo per esaminarlo per bene... Sono cose che ho fatto nel corso precedente di cui ho già dato l'esame da un po... Quindi non ricordo bene tutto :asd: ...
 
Si effettivamente per scrivere in fretta non ho fatto caso all errore..non appena ho un pò di tempo lo risolvo :)

---------- Post added at 16:34 ---------- Previous post was at 15:12 ----------

Risolto..dovrebbe essere ok:

Codice:
#include <stdio.h>




int main(void)
{
	int counter = 1; /* dichiarazione e inizializzazione della variabile contatore */
	int number;
	int largest = 0; /* dichiarazione variabili */
    int largest2 = 0;




	/* fase di elaborazione */




	/* cicla finchè il valore contatore e' minore o uguale a 10 */




	while (counter <= 5 ) { /* inzizio del ciclo while controllato da un contatore */
		counter+=1; /* aggiunge +1 alla variabile contatore */
		printf( "Inserisci un numero: "); /* sollecita l'inserimento */
		scanf( "%d" , &number ); /* legge il numero inserito dall'utente */
		if (number > largest) {
		    largest2 = largest;
			largest = number;
		}
        if (number < largest && number > largest2 )
        {
             largest2 = number;
        }
	} /* fine del ciclo while */
	printf ("Il numero maggiore che e'stato inserito e' %d\n" , largest );
	printf ("A seguire viene %d\n" , largest2 );




	return 0; /* indica che il programma è terminato con successo */




} /* fine della funzione main */
 
Vabbè anche se non li hai studiati non penso che hai difficoltà a comprendere quel pezzo di codice..in alternativa all' && puoi usare un if nell' if ma è codice superfluo :)
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top