Inversione righe matrice

di il
2 risposte

Inversione righe matrice

Salve
ho scritto questo codice per individuare la riga max e la min di una matrice e poi invertirle. Non riesco a fare (o visualizzare ?) l'inversione. Ecco il mio codice:
#include <iostream>
using namespace std;

const int righe=4;
const int colonne=4;

void stampaMatrice(int[][colonne],int,int);
int rigaMax(int[][colonne], int, int, int &);
int rigaMin(int[][colonne], int, int, int &);
void invertiRighe(int[][colonne],int,int,int,int);

int main()
{
    int valMax=0;
    int valMin=0;
    int matrice[][colonne]=
    {
     {1,2,3,4},    
     {5,6,7,8},
     {9,1,2,3},
     {4,5,6,7},  
    };
    rigaMax(matrice,righe,colonne,valMax);
    stampaMatrice(matrice, righe, colonne);
    cout << "La riga di somma massima e' la "<< valMax+1 << " di valore: " 
         << rigaMax(matrice,righe,colonne,valMax)<< endl;    
    cout << "La riga di somma minima e' la "<< valMin+1 << " di valore: " 
         << rigaMin(matrice,righe,colonne,valMax)<< endl<<endl;  
    
    //valMax+1 rappresenta il numero di riga max
    //valMin+1 rappresenta il numero di riga min
    invertiRighe(matrice,righe,colonne, valMax, valMin);
    cout << "Nuova matrice \n";stampaMatrice(matrice, righe, colonne);
    
system ("pause");
return 0;    
}
void stampaMatrice(int a[][colonne], int r, int c)
{
     for (int i=0; i<r; i++)
     {
         for (int j=0; j<c; j++)
         {
             cout << " " << a[i][j] << " ";    
         }    
         cout << endl;
     }
}
int rigaMax(int matr[][colonne],int r,int c,int &valMax)//r=c=4
{
    int somma=0;
    int tot=0;
    for (int i=0; i<r; i++){
        
        for (int j=0; j<c; j++)
         {
             tot += matr[i][j];    
 
         }
         if (tot>somma)
         {
            somma=tot;
            valMax=i;              
         }
         tot=0;
    }    
         cout << endl;
  return somma;
}

int rigaMin(int matr[][colonne],int r,int c,int &valMin)//r=c=4
{
    int somma=1000;
    int tot=0;
    for (int i=0; i<c; i++){
        
        for (int j=0; j<r; j++)
         {
             tot += matr[i][j];    
 
         }
         if (tot<somma)
         {
            somma=tot;
            valMin=i;              
         }
         tot=0;
    }    
         cout << endl;
  return somma;
}

void invertiRighe(int matr[][colonne],int r,int c, int rigaMax, int rigaMin)
{
   int temp;  
   
         for (int j=0; j<c; j++)
         {
             temp=matr[rigaMin+1][j];
             matr[rigaMin+1][j]= matr[rigaMax+1][j];
             matr[rigaMax+1][j]=temp ;
         }    
         cout << endl;
        
}
Grazie

2 Risposte

  • Re: Inversione righe matrice

    Ci sono due errori.

    Il primo è che definisci e dichiari la variabile valMin senza poi passarla in argomento alla funzione rigaMin.

    Il secondo è che nella funzione di inversione delle righe della matrice utilizzi l'indice rigaMax+1 e rigaMin+1 quando gli array e le matrici in C/C++ hanno il primo valore in posizione zero, e quindi dovresti usare direttamente quegli indici senza nessun offset.
  • Re: Inversione righe matrice

    Grazie 1000
    Il primo ovviamente era una svista
Devi accedere o registrarti per scrivere nel forum
2 risposte