Ordine di Numerazione Vettore in C++

di il
7 risposte

Ordine di Numerazione Vettore in C++

Salve! Ho un vettore di 12 elementi, e devo ordinarli dal più grande al più piccolo, ma il risultato non è quello atteso. Potreste trovarmi l'errore?

#include <iostream>
#include <cstdlib>
using namespace std;

int main() {

int pos, MAX, i, A, Vett[12];
Vett[0]=3;
Vett[1]=6;
Vett[2]=9;
Vett[3]=5;
Vett[4]=7;
Vett[5]=0;
Vett[6]=1;
Vett[7]=4;
Vett[8]=2;
Vett[9]=8;
Vett[10]=9;
Vett[11]=5;

//Ordine da Vett[0]
MAX=Vett[0];
for (i=1;i<12;i++){
if(MAX<Vett){
MAX=Vett;
pos=i;
}
}

A=Vett[0];
Vett[0]=MAX;
Vett[pos]=A;
//Fine

//Ordine da Vett[1]
MAX=Vett[1];
for (i=2;i<12;i++){
if(MAX<Vett){
MAX=Vett;
pos=i;
}
}

A=Vett[1];
Vett[1]=MAX;
Vett[pos]=A;
//Fine

//Ordine da Vett[2]
MAX=Vett[2];
for (i=3;i<12;i++){
if(MAX<Vett){
MAX=Vett;
pos=i;
}
}

A=Vett[2];
Vett[2]=MAX;
Vett[pos]=A;
//Fine

//Ordine da Vett[3]
MAX=Vett[3];
for (i=4;i<12;i++){
if(MAX<Vett){
MAX=Vett;
pos=i;
}
}

A=Vett[3];
Vett[3]=MAX;
Vett[pos]=A;
//Fine

//Ordine da Vett[4]
MAX=Vett[4];
for (i=5;i<12;i++){
if(MAX<Vett){
MAX=Vett;
pos=i;
}
}

A=Vett[4];
Vett[4]=MAX;
Vett[pos]=A;
//Fine

//Ordine da Vett[5]
MAX=Vett[5];
for (i=6;i<12;i++){
if(MAX<Vett[i]){
MAX=Vett[i];
pos=i;
}
}

A=Vett[5];
Vett[5]=MAX;
Vett[pos]=A;
//Fine

//Ordine da Vett[6]
MAX=Vett[6];
for (i=7;i<12;i++){
if(MAX<Vett[i]){
MAX=Vett[i];
pos=i;
}
}

A=Vett[6];
Vett[6]=MAX;
Vett[pos]=A;
//Fine

//Ordine da Vett[7]
MAX=Vett[7];
for (i=8;i<12;i++){
if(MAX<Vett[i]){
MAX=Vett[i];
pos=i;
}
}

A=Vett[7];
Vett[7]=MAX;
Vett[pos]=A;
//Fine

//Ordine da Vett[8]
MAX=Vett[8];
for (i=9;i<12;i++){
if(MAX<Vett[i]){
MAX=Vett[i];
pos=i;
}
}

A=Vett[8];
Vett[8]=MAX;
Vett[pos]=A;
//Fine

//Ordine da Vett[9]
MAX=Vett[9];
for (i=10;i<12;i++){
if(MAX<Vett[i]){
MAX=Vett[i];
pos=i;
}
}

A=Vett[9];
Vett[9]=MAX;
Vett[pos]=A;
//Fine

//Ordine da Vett[10]
MAX=Vett[10];
for (i=11;i<12;i++){
if(MAX<Vett[i]){
MAX=Vett[i];
pos=i;
}
}

A=Vett[10];
Vett[10]=MAX;
Vett[pos]=A;
//Fine */


cout<<Vett[0]<<", "<<Vett[1]<<", "<<Vett[2]<<", "<<Vett[3]<<", "<<Vett[4]<<", "<<Vett[5]<<", ";
cout<<Vett[6]<<", "<<Vett[7]<<", "<<Vett[8]<<", "<<Vett[9]<<", "<<Vett[10]<<", "<<Vett[11]<<", "<<endl;

system("pause");
return 0;
}

7 Risposte

  • Re: Ordine di Numerazione Vettore in C++

    Sbagli nel presupporre che ci debba sempre essere uno scambio, magari la posizione corrente è già ok. Prova a ragionarci sopra.
  • Re: Ordine di Numerazione Vettore in C++

    Ma che ordinamento hai usato?

    Forse è meglio rivedere l' "algoritmo" ... utilizza un bubble sort (dovrebbe essere semplice) e ne riparliamo ...
  • Re: Ordine di Numerazione Vettore in C++

    Ho trovato l'errore! Usando un po' di breakpoint passaggio per passaggio, ho notato che quando il numero massimo era già nella sua posizione, il "pos=i", essendo valido solo nella if(Max<Vett), non veniva considerato, quindi il pos rimaneva del valore precedente! Questo è quello corretto:

    #include <iostream>
    #include <cstdlib>
    using namespace std;

    int main() {

    int pos, MAX, i, A, Vett[12];
    Vett[0]=3;
    Vett[1]=6;
    Vett[2]=9;
    Vett[3]=5;
    Vett[4]=7;
    Vett[5]=0;
    Vett[6]=1;
    Vett[7]=4;
    Vett[8]=2;
    Vett[9]=8;
    Vett[10]=9;
    Vett[11]=5;

    //Ordine da Vett[0]
    MAX=Vett[0];
    for (i=1;i<12;i++){
    if(MAX<Vett){
    MAX=Vett;
    pos=i;
    }
    }

    if(Vett[0]==MAX){
    pos=0;
    }

    A=Vett[0];
    Vett[0]=MAX;
    Vett[pos]=A;
    //Fine

    //Ordine da Vett[1]
    MAX=Vett[1];
    for (i=2;i<12;i++){
    if(MAX<Vett){
    MAX=Vett;
    pos=i;
    }
    }

    if(Vett[1]==MAX){
    pos=1;
    }

    A=Vett[1];
    Vett[1]=MAX;
    Vett[pos]=A;
    //Fine

    //Ordine da Vett[2]
    MAX=Vett[2];
    for (i=3;i<12;i++){
    if(MAX<Vett){
    MAX=Vett;
    pos=i;
    }
    }

    if(Vett[2]==MAX){
    pos=2;
    }

    A=Vett[2];
    Vett[2]=MAX;
    Vett[pos]=A;
    //Fine

    //Ordine da Vett[3]
    MAX=Vett[3];
    for (i=4;i<12;i++){
    if(MAX<Vett){
    MAX=Vett;
    pos=i;
    }
    }

    if(Vett[3]==MAX){
    pos=3;
    }

    A=Vett[3];
    Vett[3]=MAX;
    Vett[pos]=A;
    //Fine

    //Ordine da Vett[4]
    MAX=Vett[4];
    for (i=5;i<12;i++){
    if(MAX<Vett){
    MAX=Vett[i];
    pos=i;
    }
    }

    if(Vett[4]==MAX){
    pos=4;
    }

    A=Vett[4];
    Vett[4]=MAX;
    Vett[pos]=A;
    //Fine

    //Ordine da Vett[5]
    MAX=Vett[5];
    for (i=6;i<12;i++){
    if(MAX<Vett[i]){
    MAX=Vett[i];
    pos=i;
    }
    }

    if(Vett[5]==MAX){
    pos=5;
    }

    A=Vett[5];
    Vett[5]=MAX;
    Vett[pos]=A;
    //Fine

    //Ordine da Vett[6]
    MAX=Vett[6];
    for (i=7;i<12;i++){
    if(MAX<Vett[i]){
    MAX=Vett[i];
    pos=i;
    }
    }

    if(Vett[6]==MAX){
    pos=6;
    }

    A=Vett[6];
    Vett[6]=MAX;
    Vett[pos]=A;
    //Fine

    //Ordine da Vett[7]
    MAX=Vett[7];
    for (i=8;i<12;i++){
    if(MAX<Vett[i]){
    MAX=Vett[i];
    pos=i;
    }
    }

    if(Vett[7]==MAX){
    pos=7;
    }

    A=Vett[7];
    Vett[7]=MAX;
    Vett[pos]=A;
    //Fine

    //Ordine da Vett[8]
    MAX=Vett[8];
    for (i=9;i<12;i++){
    if(MAX<Vett[i]){
    MAX=Vett[i];
    pos=i;
    }
    }

    if(Vett[8]==MAX){
    pos=8;
    }

    A=Vett[8];
    Vett[8]=MAX;
    Vett[pos]=A;
    //Fine

    //Ordine da Vett[9]
    MAX=Vett[9];
    for (i=10;i<12;i++){
    if(MAX<Vett[i]){
    MAX=Vett[i];
    pos=i;
    }
    }

    if(Vett[9]==MAX){
    pos=9;
    }

    A=Vett[9];
    Vett[9]=MAX;
    Vett[pos]=A;
    //Fine

    //Ordine da Vett[10]
    MAX=Vett[10];
    for (i=11;i<12;i++){
    if(MAX<Vett[i]){
    MAX=Vett[i];
    pos=i;
    }
    }

    if(Vett[10]==MAX){
    pos=10;
    }

    A=Vett[10];
    Vett[10]=MAX;
    Vett[pos]=A;
    //Fine */


    cout<<Vett[0]<<", "<<Vett[1]<<", "<<Vett[2]<<", "<<Vett[3]<<", "<<Vett[4]<<", "<<Vett[5]<<", ";
    cout<<Vett[6]<<", "<<Vett[7]<<", "<<Vett[8]<<", "<<Vett[9]<<", "<<Vett[10]<<", "<<Vett[11]<<", "<<endl;

    system("pause");
    return 0;
    }

    Grazie a tutti!
  • Re: Ordine di Numerazione Vettore in C++

    Io avrei scritto
    
    if(Vett[0]<MAX)
    {
    A=Vett[0];
    Vett[0]=MAX;
    Vett[pos]=A;
    }
    
    Ora però dovresti fare i 12 passaggi utilizzando un ciclo unico...
  • Re: Ordine di Numerazione Vettore in C++

    Lo so, il fatto è che faccio il terzo e abbiamo iniziato col c++ solo recentemente
  • Re: Ordine di Numerazione Vettore in C++

    Indipendentemente dalla scuola che frequenti, hai già scritto 12 cicli for, non ti viene voglia di fare un bel ciclo che li comprenda tutti?
    for( j=0; j<12; j++ )
  • Re: Ordine di Numerazione Vettore in C++

    Effettivamente.. grazie, provvederò
Devi accedere o registrarti per scrivere nel forum
7 risposte