Newsgroup: it.comp.lang.c++
Titolo: dubbio su maggiore tra tot numeri

Ciao,scusate se ritorno su questo argomento ma mi e' venuto un
dubbio.Supponendo che la quantita' di numeri sia definita da un ciclo e'cmq
possibile determinare il maggiore ad esempio fra 10 numeri senza l'uso di
array ed evitando di far cmq controllare ogni singolo numero con tutti gli
altri per verificarne il maggiore?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 altri per verificarne il maggiore?
Certo, basta che prendi uno degli esempi che ti hanno dato 
precedentemente, e togliere la memorizzazione in un array. 
Sostanzialmente, pensa a quello che faresti tu a mano: tieni a mente (= 
in una variabile) il valore massimo trovato fino a quel punto, ed ogni 
volta che ti arriva un nuovo valore, lo confronti col massimo, 
sostituendolo se e' maggiore del massimo fino a quel momento.
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

 ha
scritto:

Incredibile mi sono dannato tanto l'anima ed alla fine era molto piu'
semplice di quello che credevo(questa e' una semplificazione di uno dei
programmi postati da voi),piu' la guardo e piu' mi chiedo ma se era cosi
semplice perche'mi sono complicato tanto la vita?^_^
 #include <iostream.h>
 int main()
 {
 int largest =0;
 int number;
 cout <<"Inserisci un numero: ";
 cin >> number;
 largest= number;
 for(int i=1;i<10;i++) {
 cout << "Inserisci un numero: ";
 cin >> number;
 if(number>largest)
 largest = number;
 }
 cout << endl;
 cout <<"il maggiore e': "<< largest;
 }
Grazie a tutti per l'aiuto:)



Ritorno alla grande ammettendo la mia somaraggine e vi chiedo per l'ennesima
volta un aiuto,il programma qui sopra trova il maggiore tra 10 numeri,se
volessi sapere quale e' il secondo piu' grande cosa dovrei fare?
PS:solo qualche indizio se possibile mi vergogno gia' abbastanza.
Grazie ancora per la cortese attenzione.


 volessi sapere quale e' il secondo piu' grande cosa dovrei fare?
Aggiungi una variabile max2 e swappi max con max2 ogni volta che assegli 
il valore a max.
Comunque, valuta la possibilità di inserire i numeri in ordine (o di 
ordinarli alla fine dell'inserimaento) se hai bisogno di avere 
informazione sull'ordine di più di un numero.
matteo!

Il 03 Lug 2004, 22:31, "matteo.desimone"
<matteo.desimone@NO_SPAMfastwebnet.it> ha scritto:

Ho provato piu' volte ad inserire una seconda variabile ma riesco solo a far
controllare l'ultimo numero del ciclo prima del cout <<"il Maggiore e':poi
scusa che voul dire swappi?^_^


 scusa che voul dire swappi?^_^
Scusami: swappare significa scambiare il contenuto di due variabili.
una cosa del tipo:
1) Setti max e max 2 al pių piccolo numero contenuto in un intero ( 
INT_MIN );
2) Chiedi all'utenti un input che memorizzi in numero;
3) se max2 < di numero allora max2 uguale a numero;
4) se max < max 2 allora scambi max con max 2;
5) ripeti da 2.
Alla fine max contiene il numero massimo e max2 il secondo  numero pių 
grande.
matteo!

 matteo!


 matteo!
Grazie mille ora mi e' piu' chiaro(mazza pero'che casino!!)


 Mi e'piu'chiaro ma non riesco cmq ad ottenere cio' che voglio vi posto una
delle molte versioni che ho scritto,nella quale ho lasciato le 2 righe
errate(una delle tante prove per far coincidere quello che vorrei scrivere e
quello che realmente mi esce)potreste dirmi perche' non ci riesco?(che sono
ignorante lo so gia'^_^)
#include <iostream.h>
using namespace std;//questo non serve ma lo ho messo cmq in caso nelle
prove lo dimenticassi
int main()
{
int largest =0;// numero maggiore
int minor=0;//numero minore
int second=0;//secondo numero piu' grande
int number;//numero/i inseriti
//Il primo fuori dal ciclo per fare largest = number
//il primo furi dal ciclo per fare minor=number
cout <<"Inserisci un numero: ";
cin >> number;
largest=number; // Fa che il primo sia il maggiore
minor=number;// fa che il primo sia il minore
second=number;// assegna a second il valore di number
for(int i=1;i<4;i++) {
cout << "Inserisci_ un_ numero:";
cin >> number;
if(number>largest) // Controlla se il nuovo numero č maggiore di largest
largest=number;// Se č cosi assegna a largest il nuovo valore
if(number<minor)// controlla se il nuovo numero e' minore di minor
minor=number;// se e' cosi' assegna a minor il nuovo valore
if((second==number>minor)&&(second==number<largest)) // questa e' sbagliata
second==number;//anche questa
}
cout << endl;
cout <<"il maggiore e': "<< largest << endl;
cout << endl;
cout << " il secondo numero piu'grande e':" << second << endl;
cout << endl;
cout << "il numero minore e':" << minor << endl;
return 0;
Grazie per la cortese attenzione.


 second==number;//anche questa
Partiamo dalla seconda che faccio subito: un assegnamento si fa con = 
non con == (che è un operatore di confronto) ;)
La prima non la puoi scrivere così perche' devi considerare come il C++ 
elabora lo statement second==number>minor (la puoi scrivere ma no fa 
quello che vorresti tu).
Seguendo la priorità degli operatori ti faccio vedere cosa succede:
second == number > minor
1) Viene elaborato prima l'operatore '>' che restiutisce un valore 
booleano (true/false);
2) Quindi viene elaborato l'operatore == che diventa:
second == true/false
Per valutare questa espressione che è un confronto tra un intero e un 
booleano il C++ _trasforma l'intero in un bool_: se second è 0 allora 
diventa false altrimenti diventa true;
Questo non è il comportamento che vuoi, ovviamente :)
Vedi di modificare considerando quello che tio ho detto.
Purtroppo non mi è chiaro cosa volevi fare con quella riga, se mi 
spieghi meglio ti posso indirizzare più precisamente.
matteo!

.
.
.
cout<<"inserisci numero";
cin>>max;
for(i=1, max2=max; i<n; i++){
    cout<<"inserisci numero";
    cin>>x;
    if(x>max2)
        max2=x;
    if(max2>max){
        x=max;
        max=max2;
        max2=x;
    }
}
if(max2==max)cout<<"il maggiore e':"<<max;
else{
           cout<<"il maggiore e':"<<max;
           cout<<"secondo + grande:"<<max2;
         }
.
.
.

 So che quella riga e' perfettamente sbagliata l'ho lasciata li per non
lasciare un vuoto,ho provato varie soluzioni ed erano tutte errate o
parzialmente errate a seconda di come immettevo i numeri quindi ho pensato
di lasciarla cmq(oramai ero cotto ).Ora riprovo a compilare il programma
tenendo conto della tua spiegazione(era piu' facile quando facevo erori di
sintessi almeno li potevo correggere senza problemi).Grazie ancora per
l'aiuto .


 Grazie per l'aiuto,osservando il tuo programma ho notato che in una delle
prove ci ero andato molto vicino anche se ho tralasciato un passaggio e
quindi lo ho scartato,avrei dovuto controllarlo meglio invede di scartare
subito l'idea:(


 Ho provato il tuo programma ma se ho capito bene mi pare manchi una riga
infatti se immetto i numeri in ordine decrescente da solo il maggiore.Ho
cambiato solo i nomi delle variabili per comprenderlo meglio e aggiunto
qualcosa spero sia corretto,ciao e grazie a tutti.
#include <iostream.h>
int main()
{
int largest=0,second=0,number,i;
largest=number;
second=number;
cout << "inserisci numero:";
cin >> largest;
for(i=1;i<4;i++){
    cout << "inserisci_numero:";
    cin >> number;
    if(number>second)
        second=number;
    if(second>largest){
        number=largest;
        largest=second;
        second=number;
    }
}
if(second==largest){cout << "il maggiore e':" << largest << endl;
cout << "il secondo piu' grande e':" << second << endl;
}
else{
           cout << "il_maggiore_e':" << largest << endl;
           cout << "il secondo piu' grande e' :" << second << endl;
