|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Utente sospeso
Iscritto dal: Aug 2004
Messaggi: 193
|
problema di ordinamento di un vettore c
salve ragazzi, ho dei problemi con questo esercizio, in pratica la funzione riceve in ingresso un array V di interi e deve creare un array W ordinato con all interno gli elementi di V. ho creato questo sorgente ma non funziona...cosa mi consigliate?
Codice:
#include <iostream.h>
#include <stdlib.h>
#define N 5
int vect[N];
void ordina(int vettore[N]){
int a,k,i;
int flag[N];
int w[N];
for(int g=0;g<N;g++){
flag[g]=0;
w[g]=0;
}
for(i=0;i<N;i++){
w[i]=vettore[i];
for(k=0;k<N;k++){
if((w[i]>=vettore[k])&&(flag[k]!=1))//trova il minimo e i flag
w[i]=vettore[k];
//w[i]=a;
flag[k]=1;
}
for(int f=0;f<N;f++){
cout<<"flag --> " <<flag[k]<<endl;
cout<<endl;
cout<<"w --> " <<w[f]<<endl;
}
}
main(){
for(int i=0;i<N;i++){
cout<<"digita numero"<<endl;
cin>>vect[i];
}
ordina(vect);
system("PAUSE");
}
Ultima modifica di cionci : 21-03-2007 alle 08:38. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Esistono dei ben precisi algoritmi per effettuare l'ordinamento dei vettori, il più semplice: http://it.wikipedia.org/wiki/Bubble_sort
|
|
|
|
|
|
#3 |
|
Utente sospeso
Iscritto dal: Aug 2004
Messaggi: 193
|
li conosco alcuni, e solo ke vorrei riuscire a creare questa funzione.. se potete aiutarmi a capire, ve ne sarei grato
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma allora perché non applichi un algoritmo di ordinamento noto ?
|
|
|
|
|
|
#5 |
|
Utente sospeso
Iscritto dal: Aug 2004
Messaggi: 193
|
perke il problema assegnatomi, non lo rikiede.. in pratica si tratta di un esercizio e lo devo svolgere cosi..
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
E qual'è il testo del problema ?
Se il testo è quello scritto sopra puoi applicare banalmente un algoritmo di ordinamento copiando prima gli elementi di vettore in w e poi applicando l'algoritmo di ordinamento su w. Ad occhio quello che stai tentando di fare è trovare il minimo fra gli elementi del vettore non flaggati, per carità dovrebbe funzionare anche così, ma mi sembra ben più complesso. Comunque l'errore mi sembra qui: Codice:
for(i=0;i<N;i++){
w[i]=vettore[i];
for(k=0;k<N;k++){
if((w[i]>=vettore[k])&&(flag[k]!=1))//trova il minimo e i flag
w[i]=vettore[k];
flag[k]=1;
}
Devi crearti una variabili minIndex: Codice:
if((w[i]>=vettore[k])&&(flag[k]!=1))//trova il minimo e i flag
{
w[i]=vettore[k];
minIndex = k;
}
flag[minIndex] = 1;
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Inoltre vedo una certa confusione...stavi parlando di C e usi iostream del C++ e non solo: iostream.h e stdlib.h sono deprecate. Ora devi includere iostream e cstdlib.
#include <iostream> #include <cstdlib> using namespace std; //per includere tutto il namespace std |
|
|
|
|
|
#8 |
|
Utente sospeso
Iscritto dal: Aug 2004
Messaggi: 193
|
grazie!!! qualcosa sta migliorando solo ke ci sono ancora dei problemi...
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Questa parentesi non ci vuole:
for(k=0;k<N;k++){ o se ce la metti ne metti anche una chiusa dopo l'if... |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
cout<<"flag --> " <<flag[k]<<endl;
Ci devi mettere f al posto di k... |
|
|
|
|
|
#11 |
|
Utente sospeso
Iscritto dal: Aug 2004
Messaggi: 193
|
allora.. alcune cose le avevo corrette cmq grazie
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Il problema ce l'hai perchè inizializzi w[i] con w[i]=vettore[i];
vettore[i] può essere già flaggato oppure anche l'elemento minimo fra quelli non flaggati, in questo caso lasci un elemento minimo non flaggato che verrà assegnato a tutti i passi successivi come elemento minimo. |
|
|
|
|
|
#13 |
|
Utente sospeso
Iscritto dal: Aug 2004
Messaggi: 193
|
questo e il codice modificato, ho aggiunto "temp" per ovviare al problema ma lo stesso ho problemi..
void ordina(int vettore[N]){ int minIndex,temp=0; int a,k,i; int flag[N]; int w[N]; for(int g=0;g<N;g++){ flag[g]=0; w[g]=0; } for(i=0;i<N;i++){ //w[i]=vettore[i]; temp=vettore[i]; for(k=0;k<N;k++) if((temp>=vettore[k])&&(flag[k]!=1)){ //trova il minimo e i flag w[i]=vettore[k]; minIndex = k; } flag[minIndex]=1; } for(int f=0;f<N;f++){ cout<<" flag --> " <<flag[f]<<endl; cout<<endl; cout<<"w --> " <<w[f]<<endl; } } main(){ for(int i=0;i<N;i++){ cout<<"digita numero"<<endl; cin>>vect[i]; } ordina(vect); //cout<<trov_min(vect); system("PAUSE"); } |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Certo perchè temp potrebbe essere già flaggata e quindi sarebbe minore di tutti gli elementi rimasti... Inizializza temp a INT_MAX.
|
|
|
|
|
|
#15 |
|
Utente sospeso
Iscritto dal: Aug 2004
Messaggi: 193
|
non ci sto capendo niente!!! ..aiutatemi...
Ultima modifica di papas_b : 21-03-2007 alle 12:26. |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 906
|
|
|
|
|
|
|
#17 |
|
Utente sospeso
Iscritto dal: Aug 2004
Messaggi: 193
|
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Hai provato ad inizializzare temp a INT_MAX ?
|
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Dec 2004
Città: Venezia
Messaggi: 192
|
...prova a guardare il bubble sort e traine spunto...cosi vedi come procedere...
__________________
|
|
|
|
|
|
#20 |
|
Utente sospeso
Iscritto dal: Aug 2004
Messaggi: 193
|
gazie.. ma devo sistemare questo codice.. si tratta di qualke disattenzione (spero!!)
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:17.




















