zaire90 (Normal User)
Rookie
Messaggi: 46
Iscritto: 16/10/2009
|
Mi aiutate con questo programma per favore?? Funziona male!!
Codice sorgente - presumibilmente C++ |
/* QUESTO PROGRAMMA LEGGE DA TASTIERA UN NUMERO INTERO POSITIVO m<=25 E UN NUMERO INTERO POSITIVO n<=50 E SUCCESSIVAMENTE GLI ELEMENTI DI UNA MATRICE 'A' AD m RIGHE E n COLONNE CHE VENGONO INTRODOTTI DA TASTIERA PER COLONNE. INFINE IL PROGRAMMA DEVE RISCRIVERE LA MATRICE 'A' PER RIGHE */ #include <iostream> using namespace std; void leggicolonne(int); void leggirighe(int); // PROTOTIPI DELLE FUNZIONI const int size1=25; const int size2=50; typedef int matrice[size1][size2]; void leggiA(matrice,int,int); void stampA(matrice,int,int); int main() { int n,m,elem; matrice A; leggicolonne(n); leggirighe(m); leggiA(A,n,m); stampA(A,n,m); cout<<"\n\n\n\n"; system("PAUSE"); return 10; } void leggicolonne(int n) { cout<<"\nScrivi il numero delle colonne: n = "; cin>>n; while ((n<1)||(n>50)) { cout<<"\nn deve essere positivo e minore o uguale a 50!"; cout<<"\n\n\nScrivi il numero delle colonne: n = "; cin>>n; } return; } void leggirighe(int m) { cout<<"\n\nScrivi il numero delle righe: m = "; cin>>m; while ((m<1)||(m>25)) { cout<<"\nn deve essere positivo e minore o uguale a 25!"; cout<<"\n\n\nScrivi il numero delle righe: m = "; cin>>m; } return; } void leggiA(matrice A,int n,int m) { cout<<"\n\nSCRIVI ADESSO GLI ELEMENTI DELLE MATRICE A["<<m<<"]["<<n<<"]"; cout<<" PER COLONNE:"; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { cout<<"\n\nA["<<j<<"]["<<i<<"] = "; cin>>A[j][i]; } return; } void stampA(matrice A,int n,int m) { cout<<"\n\nIL PROGRAMMA ADESSO RISTAMPERA' GLI ELEMENTI, PER RIGHE:"; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) cout<<"\n\nA["<<i<<"]["<<j<<"] = "<<A[i][j]; return; }
|
|
|
lorenzo (Normal User)
Guru
Messaggi: 1178
Iscritto: 15/04/2008
|
la mia sfera di cristallo al momento è in sciopero quindi........che cosa non funziona?
|
|
zaire90 (Normal User)
Rookie
Messaggi: 46
Iscritto: 16/10/2009
|
Beh fino adesso ciò che non funziona è il primo ciclo for, quello dove scrivo gli elementi per colonne: cioè se metto n=2 e m=2 invece di farmi (giustamente) scrivere solo 4 elementi,mi scrive A[1][1], A[2][1], A[3][1], A[4][1]...e non si ferma più!!
Eppure mi sembra che il ciclo sia giusto...
|
|
Guglielmo (Normal User)
Newbie
Messaggi: 20
Iscritto: 06/07/2009
|
Quando leggi il numero di righe e colonne passi per valore le due variabili alle funzioni. Se vuoi fare in maniera simile alla tua passa le variabili m ed n per riferimento.
Ultima modifica effettuata da Guglielmo il 26/10/2009 alle 18:54 |
|
zaire90 (Normal User)
Rookie
Messaggi: 46
Iscritto: 16/10/2009
|
Beh fino adesso ciò che non funziona è il primo ciclo for, quello dove scrivo gli elementi per colonne: cioè se metto n=2 e m=2 invece di farmi (giustamente) scrivere solo 4 elementi,mi scrive A[1][1], A[2][1], A[3][1], A[4][1]...e non si ferma più!!
Eppure mi sembra che il ciclo sia giusto...
|
|
zaire90 (Normal User)
Rookie
Messaggi: 46
Iscritto: 16/10/2009
|
Quindi devo mettere la "&" da qualche parte vero???...MI puoi dire dove??
|
|
Guglielmo (Normal User)
Newbie
Messaggi: 20
Iscritto: 06/07/2009
|
Il prototipo e la definizione delle funzioni:
Codice sorgente - presumibilmente C/C++ |
void leggirighe(int& n);
void leggicolonne(int& m);
...
|
Comunque se non capisci cosa vogliono dire, fallo come lo sapresti fare normalmente. Anche perchè non ha senso scrivere cose che non si conoscono.
|
|
zaire90 (Normal User)
Rookie
Messaggi: 46
Iscritto: 16/10/2009
|
Mmmmmmmm....Si ho fatto come dici tu e in effetti funziona. Però non è che potresti spiegarmi bene che ruolo ha la "&"??
Perchè inoltre chiamo la funzione (ad esempio leggicolonne(n)) passandogli un intero mentre invece nella funzione vera e propria prende in imput un indirizzo(appunto metttendo la "&")???
|
|
Guglielmo (Normal User)
Newbie
Messaggi: 20
Iscritto: 06/07/2009
|
Significa che il passaggio avverà per riferimento. Ovvero nella funzione leggirighe non verrà allocata nello stack un altra variabile contente il valore di n(passaggio per valore), ma anzi verrà utilizzata la variabile n dichiarata nella funzione chiamante(in questo caso il main). Diciamo che è una semplificazione della gestione del passaggio per indirizzo che si fa in attraverso i puntatori.
|
|