PDA

Visualizza la versione completa : [C++] Individuare due massimi in una serie di 10 numeri


mistergks
16-02-2011, 23:35
Mi sono imbattuto in questo esercizio: calcolare i due massimi in una serie di 10 numeri...se le serie erano due il problema non si poneva perchè usavo due variabili diverse...
Sono riuscito a calcolare il primo massimo (l'ho chiamato max_a)..ora il mio problema è: qual'è la condizione giusta per far si che in max_b venga salvato il numero piu' grande dopo quello salvato in max_a? (cioè il secondo numero piu' grande della serie)
Questa è una bozza che ho fatto che naturalmente funziona in modo sbagliato perchè è sbagliata la condizione dell'if:


#include <iostream>
using namespace std;

int main(){
int n,max_a=0,max_b=0;

for(int i=0; i<10; i++){
cin>>n;
if(n>max_a){
max_a=n;}
if(n>max_b && n<max_a){ //secondo me l'errore sta qua!
max_b=n;
}


}
cout<<"maxa"<<max_a<<"maxb"<<max_b<<endl;
system("pause");
return 0;
}

Celebron
17-02-2011, 00:36
soluzione banale non ottimizzata:
scorri il vettore, trovi il primo massimo, salvi in una variabile temporanea l'indice della sua posizione, rileggi il vettore cercando il secondo massimo assicurandoti di escludere (basta un if) la posizione del primo massimo dal controllo (nella pratica quindi usi sempre una funzione che cerca il "massimo" ma il tuo vettore è formato da tutti gli elementi tranne il massimo assoluto trovato in precedenza)

mistergks
17-02-2011, 00:49
con gli array sembra piu' facile, ma io volevo farla senza vettori! Con variabili normali!

Celebron
17-02-2011, 00:55
si ma, qual è l'utilità pratica?

mah in ogni caso potresti confrontarli a due a due
nel primo ciclo trovi il massimo assoluto e ti salvi il VALORE in una variabile temporanea
nel secondo cerchi ancora un massimo ma se la variabile che stai per analizzare ha lo stesso valore del massimo assoluto, la scarti subito senza fare controlli (Anche in questo caso, basta un if)

mistergks
17-02-2011, 01:13
l'ultilità sta nel prendere confidenza con il c++ :-)
sto facendo tutti gli esercizi del "deitel&deitel c++"..perchè sono un pò a digiuno di programmazione e ho un esame a breve..
anzi...accetto consigli per prepararmi in tempi brevi!
per il momento sto leggendo la teoria e facendo gli esercizi... poi dovrò affrontare le prove d'esame.

comunque...nel secondo ciclo non trovo sempre lo stesso massimo? ci vorrebbe un modo per scartare il massimo già trovato...boh..

Celebron
17-02-2011, 01:22
no, come ti ho detto:
nel secondo cerchi ancora un massimo ma se la variabile che stai per analizzare ha lo stesso valore del massimo assoluto, la scarti subito senza fare controlli (Anche in questo caso, basta un if)

in ogni caso quando fai cose del genere devi usare gli array (è in questo modo che impari ad usare correttamente il linguaggio)
Anzi, come già dissi ad altri sempre in questo forum, ad un qualsiasi esame di programmazione, usare trenta variabili int al posto di un vettore di int significa farsi bocciare ancor prima che il professore legga il resto del programma (e te lo dico perché lo ho visto fare di persona)

Loading