Problema su matrici.

di il
7 risposte

Problema su matrici.

Buongiorno tra una settimana ho un esame e non so come risolvere questo problema:
Scrivere un programma in cui attraverso il generatore di numeri pseudocasuali si generino gli elementi di un array bidimensionale di dimensioni 53 x 53 di interi appartenenti al dominio [-100;+100] (estremi inclusi). Per ogni riga dell'array si calcoli il prodotto dell'elemento posto sulla diagonale principale per l'elemento posto sulla diagonale secondaria. Si vuole conoscere la somma dei prodotti.
Il programma l'ho scritto e funziona il problema è che quando vado a fare la moltiplicazione tra le due diagonali mi moltiplica il primo elemento della diag1 per tutti e 53 gli elementi della diag 2.(nel programma ho scritto "matrice [j], ma sul forum appare solo "matrice[j]".
Il programma d me fatto è il seguente:

 #include <iostream>
    #include <cstdlib>
    #include <time.h>
    #include <cmath>

    #define righe 53
    #define colonne 53

    using namespace std;

    int main() {

    time_t t;
    srand((unsigned)time(&t));

    int matrice [righe] [colonne];
    int estremo = 101;
    int i, j;
    int diag1, diag2;

    cout<<"Array multidimensionale"<<endl;
    for(int i = 0; i<righe; i++){
    for(int j = 0; j<colonne; j++){
            matrice [i] [j]=  (rand() % 101 )- 100;
    }
    }
    for (int i=0;i<righe;i++){
    for (int j=0;j<colonne;j++){
                    cout<<matrice [i] [j]<<" ";
    }
    cout<<endl;
    }
 cout<<endl<<"Diagonale principale"<<endl;
 for (i=0;i<righe;i++){
 for (j=0;j<colonne;j++){
    if(i==j){
            diag1 = matrice [i] [j];
    }
 for (i=0;i<righe;i++){
 for (j=0;j<colonne;j++){
    if(i==j){
        cout<<matrice [i] [j]<<" "<<endl;
    }
}
}
}
}
cout<<endl<<"Diagonale secondaria"<<endl;
for(i=0;i<righe;i++){
for(j=colonne-1;j>=0;j--){
    if(i==(colonne-1)-j){
        diag2 = matrice [i] [j];
    }

for(i=0;i<righe;i++){
for(j=colonne-1;j>=0;j--){
    if(i==(colonne-1)-j){
        cout<<matrice [i] [j]<<" "<<endl;
    }
 }
 }
 }
 }
//PRODOTTO
 for (i=0;i<righe;i++){
 for (j=0;j<colonne;j++){
    if(i==j){
            diag1 = matrice [i] [j];
for(i=0;i<righe;i++){
for(j=colonne-1;j>=0;j--){
    if(i==(colonne-1)-j){
        diag2 = matrice [i] [j];

int prodotto = 0;
prodotto = diag2 * diag1;
cout<<endl<<"Prodotto "<<i<<" = "<<prodotto<<endl;
}
}
}
}
}
}

return 0;
} 

7 Risposte

  • Re: Problema su matrici.

    Usa i tag CODE per il codice nel forum o non si capisce nulla
  • Re: Problema su matrici.

    Usa il pulsante < / > per mettere il codice, altrimenti è illeggibile

    Non si fa così
    matrice[i][j] = (rand() - 100 )% 101;
    ma
    matrice[i][j] = (rand() % 201) - 100;
  • Re: Problema su matrici.

    oregon ha scritto:


    Usa i tag CODE per il codice nel forum o non si capisce nulla
    Ok ho corretto.
    Sapresti aiutarmi?
  • Re: Problema su matrici.

    Weierstrass ha scritto:


    Usa il pulsante < / > per mettere il codice, altrimenti è illeggibile

    Non si fa così
    matrice[i][j] = (rand() - 100 )% 101;
    ma
    matrice[i][j] = (rand() % 201) - 100;
    Ok grazie.
  • Re: Problema su matrici.

    
    #include <iostream>
    #include <cstdlib>
    #include <time.h>
    #include <iomanip>
    
    #define RIGHE 5
    
    using namespace std;
    
    int main() {
        int i, j;
        int matrice [RIGHE][RIGHE];
        int diag1[RIGHE], diag2[RIGHE];
        
        srand(time(NULL));
    
        cout<<"Array multidimensionale"<<endl;
        for(i = 0; i<RIGHE; i++){
            for(j = 0; j<RIGHE; j++){
                matrice [i] [j] = (rand() % 201 ) - 100;
                cout << setfill(' ') << setw(4) << matrice [i][j];
                cout << " ";
            }
            cout << endl;
        }
        
        cout <<"\nDiagonale principale\n";
        for (i=0;i<RIGHE;i++){
                diag1[i] = matrice[i][i];
                cout << diag1[i] << " ";
        }
        cout << endl;
        
        cout <<"\nDiagonale secondaria\n";
        for (i=0;i<RIGHE;i++){
                diag2[i] = matrice[i][RIGHE-i-1];
                cout << diag2[i] << " ";
        }
        cout << endl;
    
        cout <<"\nProdotto\n";
        for (i=0;i<RIGHE;i++){
                j = diag1[i] * diag2[i];
                cout << j << " ";
        }
        cout << endl;
    
        return 0;
    } 
    
  • Re: Problema su matrici.

    Weierstrass ha scritto:


    
    #include <iostream>
    #include <cstdlib>
    #include <time.h>
    #include <iomanip>
    
    #define RIGHE 5
    
    using namespace std;
    
    int main() {
        int i, j;
        int matrice [RIGHE][RIGHE];
        int diag1[RIGHE], diag2[RIGHE];
        
        srand(time(NULL));
    
        cout<<"Array multidimensionale"<<endl;
        for(i = 0; i<RIGHE; i++){
            for(j = 0; j<RIGHE; j++){
                matrice [i] [j] = (rand() % 201 ) - 100;
                cout << setfill(' ') << setw(4) << matrice [i][j];
                cout << " ";
            }
            cout << endl;
        }
        
        cout <<"\nDiagonale principale\n";
        for (i=0;i<RIGHE;i++){
                diag1[i] = matrice[i][i];
                cout << diag1[i] << " ";
        }
        cout << endl;
        
        cout <<"\nDiagonale secondaria\n";
        for (i=0;i<RIGHE;i++){
                diag2[i] = matrice[i][RIGHE-i-1];
                cout << diag2[i] << " ";
        }
        cout << endl;
    
        cout <<"\nProdotto\n";
        for (i=0;i<RIGHE;i++){
                j = diag1[i] * diag2[i];
                cout << j << " ";
        }
        cout << endl;
    
        return 0;
    } 
    
    Grazie mille, al posto dell’operatore setfill cosa potrei utilizzare? Il professore non ce l’ha spiegato e non l’ha mai utilizzato.
  • Re: Problema su matrici.

    Setfill lo puoi togliere, tanto lo spazio è il carattere di default per il padding. setw però ti serve
Devi accedere o registrarti per scrivere nel forum
7 risposte