Newsgroup: it.comp.lang.c++
Titolo: problema passaggio matrice per referenza

ciao ho fatto per la scuola un programma in c++ che mi deve fare il
prodotto di due matrici..ma quando lo compilo mi dice:  variable-size
type declared outside of any function...
ho provato a mettere le variabili globalmente e a passarle alla
matrice..e mi da quell'errore.. se invece nn le dichiaro mi dice che
manca una dimensione alla matrice..
ecco il sorgente:
#include <cstdlib>
#include <iostream>
using namespace std;
    int riga1=0;
    int colonna1=0;
    int riga2=0;
    int colonna2=0;
void lettura(int m[][colonna1],int g[][colonna2])
{
for (int i = 0;i < riga1; i++)
        {
        for (int j=0;j<colonna1;j++)
         {
         m[i][j] = rand()%10;
         }
        }
 for (int i = 0;i < riga2; i++)
        {
        for (int j=0;j<colonna2;j++)
         {
         g[i][j] = rand()%10;
         }
        }
}
void prodotto(int m[][],g[][])
{
int MXG[riga1][colonna2];
int GXM[riga2][colonna1];
//M x G
if (riga2==colonna1){
 for (int i = 0;i < riga1; i++)
        {
        for (int l = 0;l<colonna2;l++)
         {
         MXG[i][l] = 0;
         int j;
         int k;
         for ((j = 0),(k = 0); (j < colonna1), (k < riga2); (j++),
(k++))
             {MXG[i][l] = MXG[i][l]+(m[i][j]*g[k][l]);
             }
         }
        }
  }
//G x M
if (riga1==colonna2){
 for (int i = 0;i < riga2; i++)
        {
        for (int l = 0;l<colonna1;l++)
         {
         GXM[i][l] = 0;
         int j;
         int k;
         for ((j = 0),(k = 0); (j < colonna2), (k < riga1); (j++),
(k++))
             {GXM[i][l] = GXM[i][l]+( g[i][j]*m[k][l] );
             }
         }
        }
 }
}
void stampa(int m[][],g[][])
{
 if ((riga1 != 0)&&(colonna1 != 0)) {
 cout << "matrice M" << endl;
 for (int i=0;i<riga1;i++)
        {
        for (int j=0;j<colonna1;j++)
        {cout << M[i][j] << " | ";}
        cout << endl;
        }
        system ("pause");
      }
 else cout << "M non esiste"<< endl;
//stampa la matrice G se esiste
 if ((riga2 != 0)&&(colonna2 != 0))
 {
 cout << "matrice G" << endl;
 for (int i=0;i<riga2;i++)
        {
        for (int j=0;j<colonna2;j++)
        {cout << G[i][j] << " | ";}
        cout << endl;
        }system ("pause");
 }
 else cout << "G non esiste"<< endl;
}
void stampa_ris(int MXG1[][],GXM1[][])
{
//stampa M x G
 cout << "matrice MxG" << endl;
 for (int i=0;i<riga1;i++)
        {
        for (int j=0;j<colonna2;j++)
        {cout << MXG1[i][j] << " | ";}
        cout << endl;
        }system ("pause");
//stampa G x M
 cout << "matrice GxM" << endl;
 for (int i=0;i<riga2;i++)
        {
        for (int j=0;j<colonna1;j++)
        {cout << GXM1[i][j] << " | ";}
        cout << endl;
        }system ("pause");
}
int main()
{
cout << "Data la matrice M immetti il numero di righe:";
cin >> riga1;
cout << "\ne di colonne:";
cin >>colonna1;
cout << "Data la matrice G immetti il numero di righe:";
cin >> riga2;
cout << "\ne di colonne:";
cin >>colonna2;
int M[riga1][colonna1],G[riga2][colonna2];
lettura(M,G);
prodotto(M,G);
stampa_ris(M,G); 
 
    system("PAUSE");
    return EXIT_SUCCESS;
}

     int colonna2=0;
non dovrebbero essere variabili globali ( in genere evita se possibile 
di usare tali variabili ), dichiarale nel main e passale per valore alle 
funzioni che le richiedono.
Per il calcolo non ti posso aiutare poichè non mi ricordo come si fa il 
prodotto tra matrici, e devo pensare a studiare tutt'altro al momento ...

 }
Ciao,
Nicola
P.S. Su che libro stai studiando?

 dopo le altre funzioni.
Ma no, si puo' fare come si vuole.
Ciao,
Nicola

 type declared outside of any function...
A parte il tuo errore, mi pare comunque che il tuo approccio sia più C 
che C++; se vuoi all'indirizzo 
http://pastebin.com/852684
 ho messo una 
classe Matrix che ho fatto per esercizio, implementa alcuni operatori 
(+, *, ==); mi piacerebbe anche avere dei commenti da parte dei più 
esperti :)
Ciao
  Andrea

io dovevo o penso, che le dimensioni della matrice non dovevano essere
fisse... scusatemi ma quello che ho postato è il risultato di avrie
prove.. ho sbagliato a postarvi sorgente ma quello giusto nn lo trovo..
cmq io di solito faccio: prototipi di funzione, main e poi le
funzioni..
il problema sta che se io la dichiaro const la grandezza poi nn posso
leggerla o modificarla...
l'inizializzazione delle variabili vi ripeto le scuse era una prova..
ero convinto di avervi postato il sorgente giusto..
visto che ci sono come faccio a bloccare lo schermo fino alla pressione
di un tasto?

volevo che le dimensioni della matrice non fossero fisse... scusatemi


 leggerla o modificarla...
Se ti riferisci al mio codice, è vero che le funzioni rows() e cols() 
sono const, ma i dati della matrice sono tranquillamente modificabili.
Ciao
  Andrea