Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[c++] ordinamento vettore!

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[c++] ordinamento vettore!

Messaggioda vale461mito » gio set 21, 2006 7:23 pm

ho costruito un algoritmo di ordinamento di un vettore di N interi con N definito in fase di Input dall'utente...sembra tt esatto ma se lo mando in esecuzione non scambia i valori che invece devono necessariamente essere scambiati!lo scambio deve avvenire se il valore contenuto nella cella indicizzata con "i" è maggiore di quello contenuto nella cella indicizzata con "i++"....insomma il classico BUBBLE SORT!!help me!
vi posto qui il mio file.

[/img]
Codice: Seleziona tutto
#include<iostream>
#include<conio.h>
#define max 30

//dichiarazione delle procedure da usare
void carica (void);
void bubble (void);      //ordinamento a bolle
void scambi (void);      //scambio valori nel vettore
void stampa (void);
//dichiarazione variabili globali
int i, n, v[max];
main()
{
   carica();
   stampa();
   bubble();
   stampa();
   getch ();
}

//procedura di caricamento dati nel vettore
void carica()
{
   cout<<"inserire N:";
   cin>>n;
   i=0;
   while(i<n)
   {
      cout<<"inserire valore";
      cin>>v[i];
      i++;
   }
}

//procedura di ordinamento dati nel vettore
void bubble()
{
   int sc=1;
   int sup=n-1;
   while(sup>0 && sc==1)
   {
      i=0;
      while(i<sup)
      {
         if(v[i]>v[i++])
         {
            scambi();
            sc=1;
         }
      i++;
      }
      sup--;
   }

}

//procedura di scambio dati nel vettore
void scambi()
{
   int aux;

   aux=v[i];
   v[i]=v[i++];
   v[i++]=aux;
}

//procedura di stampa del vettore ordinato
void stampa()
{
   i=0;
   while(i<n)
   {
      cout<<" "<<v[i]<<" ";
      i++;
   }
}
[/code]
amo l'informatica ed ovviamente la studio a scuola...ehi tu visita il mio sito internet www.quellicheilkaos.altervista.org
Avatar utente
vale461mito
Aficionado
Aficionado
 
Messaggi: 79
Iscritto il: dom giu 25, 2006 2:44 pm
Località: matera

Messaggioda Ices_Eyes » ven set 22, 2006 8:36 am

Il problema sta nella procedura scambia...

Se noti quello che succede, ad esempio se si vuole scambiare v[0] con v[1] è:
Codice: Seleziona tutto
aux = v[0];
v[0] = v[0++]; //--> v[0] = v[1]; ed i = 1;
v[1++] = aux; // --> v[2] = aux; ed i = 2;


Ciao [;)]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

mmm...

Messaggioda vale461mito » ven set 22, 2006 4:37 pm

dici che sia cosi??vedrò di cambiare qualcosa...comunque io mi sono accorto del fatto che se metto una cout all'inizio dell'if questa con un testo questa nn mi compare...cioè credo che il problema nn sia tanto nello scambio, che può magari essere migliorato, ma sia nel fatto che nn entri nell'if, che lo salti totalmente...comunque che soluzione credi sia meglio adottare per nn avere problemi nella procedura scambi??hai messo sl che nn va bene ma nn mi hai detto come tentare di risolverla...scusa se sono un po banali come cose ma questa è il problema!ciauz e grazie
amo l'informatica ed ovviamente la studio a scuola...ehi tu visita il mio sito internet www.quellicheilkaos.altervista.org
Avatar utente
vale461mito
Aficionado
Aficionado
 
Messaggi: 79
Iscritto il: dom giu 25, 2006 2:44 pm
Località: matera

Messaggioda Ices_Eyes » ven set 22, 2006 6:34 pm

Bhè, semplicemente basta che sostituisci il codice così, non è questione di miglioramento, ma di salto di elementi [;)]
Codice: Seleziona tutto
aux = v[i];
v[i] = v[i+1];
v[i+1] = aux;

Se non ho fatto errori così dovrebbe andare...Tra l'altro fai un test su sc ==1, ma sc viene inizializzato a 1 e ogni sua altra assegnazione lo pone uguale a uno, per cui è inutile... [;)]
Ora c'è anche un altro problema che vedo... Usi nell'if i++, ma forse non ti ricordi che questa istruzione modifica il valore di i++...Devi usare i+1 per non modificarne il valore...Altrimenti i sale molto velocemente, quindi risulta che fa due test e il vettore non lo ordina...
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising