XBarboX (Member)
Guru
Messaggi: 945
Iscritto: 31/12/2008
|
compilando questo codice(utilizza il bubble sort per ordinare un vettore di interi):
Codice sorgente - presumibilmente C++ |
void ordina(int& v[], int dim){ int comodo; bool scambio = true; //ordinamento vettore: do{ scambio = false; for(int i=0; i<dim; i++){ if(v[i]<v[i+1]){ comodo = v[i]; scambio = true; v[i]=v[i+1]; v[i+1]=comodo; } } }while(scambio!=false); }
|
mi da il seguente errore:
declaration of `v' as array of references
mentre se tolgo "&" dall'inizio della funzione non mi da alcun errore, perchè?
p.s. Devo per forza far passare la funzione per referenza e non per valore.
|
|
Lawliet (Normal User)
Expert
Messaggi: 386
Iscritto: 09/04/2009
|
So il C, ma questo vale anche per il C++ sicuramente... devi sapere che gli array sono già puntatori quindi non c'è bisogno che fai per riferimento l'array. E si fa nel main o dove chiami la funzione quindi: ordina(&v,dim);
ma ripeto non c'è bisogno
se vuoi far che ne so per un intero allora es. prova(&i); e nella funzione prova(int *i); questo è un esempio di passaggio per riferimento
Ultima modifica effettuata da Lawliet il 06/06/2009 alle 21:09 |
|
XBarboX (Member)
Guru
Messaggi: 945
Iscritto: 31/12/2008
|
grazie, adesso funziona.
Però ho un' altro problema:
coidce del file Ordina.h
Codice sorgente - presumibilmente C++ |
#include <iostream> using namespace std; void Ordina(int vettore[], int dimensione);//Prototipo per la funzione di ordinamento di un vettore di tipo integer //Funzione per l'ordinamento di un vettore di tipo integer void Ordina(int vettore[], int dimensione){ int comodo; bool scambio = true; do{ scambio = false; for(int j = 0; j<dimensione; j++){ if(vettore[j]<vettore[j+1]){ scambio = true; comodo = vettore[j]; vettore[j] = vettore[j+1]; vettore[j+1] = comodo; } } }while(scambio == true); }
|
codice di prova per testare il file Ordina.h
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <fstream> #include "Ordina.h" using namespace std; int main (){ int d = 10; int v[d]; //lettura for(int i=0; i<d; i++){ cout<<i<<"° dato: "; cin>>v[i]; } //Ordinamento Ordina(v, d); //Stampa cout<<endl; cout<<"vettore ordinato: "<<endl<<endl; for(int i=0; i<d; i++){ cout<<i<<"° "<<v[i]<<endl; } system("pause"); return 0; }
|
il compilatore non da problemi ma il risultato si, perchè?
mi aggiunger al vettore un dato tipo 42938 che non ho mai introdotto!
allego il file per testarlo.
grazie. |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
La for nell'ordinamento deve essere
for(int j = 0; j<dimensione-1; j++){
(dimensione-1 e non dimensione ...)
Ricorda inoltre che il codice NON va inserito nei file header (nel .h).
Il codice va solamente nei file .c e .cpp. I file .h devono contenere solamente dichiarazioni.
Ti ricordo ancora che i file .h NON sono librerie.
Infine, ti consiglio di dichiarare costante il valore usato per dichiarare la dimensione dell'array, per avere una maggiore compatibilità dato che non tutti i compilatori lo supportano (C99 compliant). Quindi e' meglio
const int d = 10;
Ultima modifica effettuata da theprogrammer il 07/06/2009 alle 12:55 |
|
XBarboX (Member)
Guru
Messaggi: 945
Iscritto: 31/12/2008
|
Postato originariamente da theprogrammer:
La for nell'ordinamento deve essere
for(int j = 0; j<dimensione-1; j++){
(dimensione-1 e non dimensione ...)
Ricorda inoltre che il codice NON va inserito nei file header (nel .h).
Il codice va solamente nei file .c e .cpp. I file .h devono contenere solamente dichiarazioni.
Ti ricordo ancora che i file .h NON sono librerie. |
waoo, ma perchè dimensione-1, non capisco!!
comunque non sapevo che gli header servissero a quello, grazie! |
|
XBarboX (Member)
Guru
Messaggi: 945
Iscritto: 31/12/2008
|
Postato originariamente da XBarboX:
Postato originariamente da theprogrammer:
La for nell'ordinamento deve essere
for(int j = 0; j<dimensione-1; j++){
(dimensione-1 e non dimensione ...)
Ricorda inoltre che il codice NON va inserito nei file header (nel .h).
Il codice va solamente nei file .c e .cpp. I file .h devono contenere solamente dichiarazioni.
Ti ricordo ancora che i file .h NON sono librerie. |
waoo, ma perchè dimensione-1, non capisco!!
comunque non sapevo che gli header servissero a quello, grazie! |
scusa, si adesso mi è tutto chiaro!, perchè nell'ordinamento considera un dato in +, che sciocco scusate per il disturbo |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da XBarboX:
waoo, ma perchè dimensione-1, non capisco!! |
Se dai un'occhiata piu' approfondita al codice che tu stesso hai scritto, l'algoritmo prevede di accedere all'elemento
vettore[j+1]
Quindi, il ciclo si deve fermare all'elemento precedente (dimensione-1) altrimenti in quella riga accedi oltre la fine dell'array (con conseguenze imprevedibili)
comunque non sapevo che gli header servissero a quello, grazie! |
Questo significa (senza offesa) che dovresti studiare un po' di teoria sul linguaggio prima di scrivere codice ... |
|
XBarboX (Member)
Guru
Messaggi: 945
Iscritto: 31/12/2008
|
Postato originariamente da theprogrammer:
Postato originariamente da XBarboX:
waoo, ma perchè dimensione-1, non capisco!! |
Se dai un'occhiata piu' approfondita al codice che tu stesso hai scritto, l'algoritmo prevede di accedere all'elemento
vettore[j+1]
Quindi, il ciclo si deve fermare all'elemento precedente (dimensione-1) altrimenti in quella riga accedi oltre la fine dell'array (con conseguenze imprevedibili)
comunque non sapevo che gli header servissero a quello, grazie! |
Questo significa (senza offesa) che dovresti studiare un po' di teoria sul linguaggio prima di scrivere codice ... |
1)L'errore l'avevo capito, se noti prima del tuo post l'ho scritto,
2)Usare gli header come "librerie" l'avevo visto su un sorgente di pierotofy.it, e allora da lì in poi gli ho usati così... comunque ora lo so, grazie.
p.s. Sul mio libro degli header non parla propio(è molto piccolo). |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da XBarboX:
1)L'errore l'avevo capito, se noti prima del tuo post l'ho scritto, |
Inizialmente non lo avevi chiaro e io ho iniziato a scriverti la risposta.
Quando ho finito tu avevi capito e corretto la tua ...
2)Usare gli header come "librerie" l'avevo visto su un sorgente di pierotofy.it, |
Beh, anche quello e' sbagliato.
Ecco perche' bisogna fare attenzione ad usare codice trovato in rete ...
"li ho usati così" ... attenzione all'italiano ...
comunque ora lo so, grazie. |
Prego
p.s. Sul mio libro degli header non parla propio(è molto piccolo). |
proprio ... l'italiano ...
P.S. Cambia libro ... |
|