Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - matrice scritta in funzioni
Forum - C/C++ - matrice scritta in funzioni

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 18:30
Lunedì, 26/10/2009
Mi aiutate con questo programma per favore?? Funziona male!!

Codice sorgente - presumibilmente C++

  1. /*  QUESTO PROGRAMMA LEGGE DA TASTIERA UN NUMERO INTERO POSITIVO m<=25
  2.     E UN NUMERO INTERO POSITIVO n<=50 E SUCCESSIVAMENTE GLI ELEMENTI DI UNA
  3.     MATRICE 'A' AD m RIGHE E n COLONNE CHE VENGONO INTRODOTTI DA TASTIERA PER
  4.     COLONNE. INFINE IL PROGRAMMA DEVE RISCRIVERE LA MATRICE 'A' PER RIGHE     */
  5.    
  6. #include <iostream>
  7. using namespace std;
  8. void leggicolonne(int); void leggirighe(int);        // PROTOTIPI DELLE FUNZIONI
  9. const int size1=25; const int size2=50;
  10. typedef int matrice[size1][size2];
  11. void leggiA(matrice,int,int);
  12. void stampA(matrice,int,int);
  13.  
  14. int main()
  15. {
  16.      int n,m,elem; matrice A;
  17.      leggicolonne(n);
  18.      leggirighe(m);
  19.      leggiA(A,n,m);
  20.      stampA(A,n,m);
  21.      cout<<"\n\n\n\n";
  22.      system("PAUSE");
  23.      return 10;
  24. }
  25.  
  26. void leggicolonne(int n)
  27. {
  28.      cout<<"\nScrivi il numero delle colonne:            n = ";
  29.      cin>>n;
  30.      while ((n<1)||(n>50))
  31.           {
  32.            cout<<"\nn deve essere positivo e minore o uguale a 50!";
  33.            cout<<"\n\n\nScrivi il numero delle colonne:            n = ";
  34.            cin>>n;
  35.           }
  36.      return;
  37. }
  38.  
  39. void leggirighe(int m)
  40. {
  41.      cout<<"\n\nScrivi il numero delle righe:              m = ";
  42.      cin>>m;
  43.      while ((m<1)||(m>25))
  44.           {
  45.            cout<<"\nn deve essere positivo e minore o uguale a 25!";
  46.            cout<<"\n\n\nScrivi il numero delle righe:              m = ";
  47.            cin>>m;
  48.           }
  49.      return;
  50. }
  51.  
  52. void leggiA(matrice A,int n,int m)
  53. {
  54.      cout<<"\n\nSCRIVI ADESSO GLI ELEMENTI DELLE MATRICE A["<<m<<"]["<<n<<"]";
  55.      cout<<" PER COLONNE:";
  56.      for (int i=1;i<=n;i++)
  57.          for (int j=1;j<=m;j++)
  58.              {
  59.               cout<<"\n\nA["<<j<<"]["<<i<<"] = ";
  60.               cin>>A[j][i];
  61.              }
  62.      return;
  63. }
  64.  
  65. void stampA(matrice A,int n,int m)
  66. {
  67.      cout<<"\n\nIL PROGRAMMA ADESSO RISTAMPERA' GLI ELEMENTI, PER RIGHE:";
  68.      for (int i=1;i<=n;i++)
  69.          for (int j=1;j<=m;j++)
  70.              cout<<"\n\nA["<<i<<"]["<<j<<"] = "<<A[i][j];
  71.       return;
  72. }




PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 18:45
Lunedì, 26/10/2009
la mia sfera di cristallo al momento è in sciopero quindi........che cosa non funziona?

PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 18:50
Lunedì, 26/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...

PM Quote
Avatar
Guglielmo (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/07/2009

Segnala al moderatore
Postato alle 18:53
Lunedì, 26/10/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
PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 18:53
Lunedì, 26/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...

PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 19:00
Lunedì, 26/10/2009
Quindi devo mettere la "&" da qualche parte vero???...MI puoi dire dove??

PM Quote
Avatar
Guglielmo (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/07/2009

Segnala al moderatore
Postato alle 19:05
Lunedì, 26/10/2009
Il prototipo e la definizione delle funzioni:
Codice sorgente - presumibilmente C/C++

  1. void leggirighe(int& n);
  2. void leggicolonne(int& m);
  3. ...


Comunque se non capisci cosa vogliono dire, fallo come lo sapresti fare normalmente. Anche perchè non ha senso scrivere cose che non si conoscono.

PM Quote
Avatar
zaire90 (Normal User)
Rookie


Messaggi: 46
Iscritto: 16/10/2009

Segnala al moderatore
Postato alle 19:25
Lunedì, 26/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 "&")???

PM Quote
Avatar
Guglielmo (Normal User)
Newbie


Messaggi: 20
Iscritto: 06/07/2009

Segnala al moderatore
Postato alle 20:19
Lunedì, 26/10/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.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo