Oppure

Loading
06/06/09 18:27
XBarboX
compilando questo codice(utilizza il bubble sort per ordinare un vettore di interi):
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.
aaa
06/06/09 19:04
Lawliet
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 06/06/09 19:09
aaa
07/06/09 10:28
XBarboX
grazie, adesso funziona.
Però ho un' altro problema:

coidce del file Ordina.h
#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

#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.
aaa
07/06/09 10:54
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.

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 07/06/09 10:55
aaa
07/06/09 10:55
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!
aaa
07/06/09 10:56
XBarboX
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
aaa
07/06/09 10:58
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 ...
aaa
07/06/09 11:20
XBarboX
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).
aaa