Informatica 2 Liceo Scientifico Scienze Applicate/Es matrici 1

Indice del libro

Esercizi per utilizzare correttamente le matrici

modifica

es1 obiettivo: matrici uso indici

  • data una matrice 2*3 inserisci i valori da tastiera
  • stampa la matrice per righe
  • trova il max e posizione del max
  • trovare la somma della riga di indice 0 della matrice


Soluzione:

#include <cstdlib>
#include <iostream>

using namespace std;

/*data una matrice 2+3 inserisci i valori da tastiera
  stampa la matrice per righe
  trova il max e posizione del max
  trovare la somma della riga di indice 0 della matrice
 obiettivo: matricie uso indici
*/
int main(int argc, char *argv[])
{
  int m[2][3];
  int i,j;
  int massimo, posmaxriga,posmaxcolonna;
  //inserimento dati della matrice
  for(i=0;i<2;i++)
   for(j=0;j<3;j++)
    {
     cout<<"inserisci la cella di posizione ("<<i<<","<<j<<")";
     cin>>m[i][j];
    }
    //stampa della matrice
    for(i=0;i<2;i++)
    {
     for(j=0;j<3;j++)
      cout<<m[i][j]<<",";
      cout<<endl;
    }
    //calcolo del massimo
    massimo=m[0][0];
    posmaxriga=0;
    posmaxcolonna=0;
    for(i=0;i<2;i++)
      for(j=0;j<3;j++)
        if(m[i][j]>massimo)
         { massimo=m[i][j];
           posmaxriga=i;
           posmaxcolonna=j;
         }
   
    cout<<"il massimo vale"<<massimo<<endl;
    cout<<"si trova nella riga "<<posmaxriga<<" colonna "<<posmaxcolonna<<endl;
   //calcolo della somma della riga indice 0
   int somma=0;
   for(j=0;j<3;j++)
    somma=somma+m[0][j];
   
   cout<<"la somma degli elementi della riga 0 vale "<<somma<<endl;      
   return 0;
}


Es2

  • inserisci i dati in una matrice 3*2
  • stampa la matrice
  • conta quante volte (occorrenze) un numero scelto dall'utente si ripete fra i valori della matrice
  • stampa le posizioni x,y dove si verificano queste occorrenze
  • calcola la somma degli elementi della colonna 1
  • calcola la somma della riga 0
  • calcola la somma di ciascuna colonna
  • calcola la somma di ciascuna diagonale prima in un verso e poi nell'altro

Ricorda che le diagonali k=i+j hanno la somma degli indici uguali a una costante (nel caso di matrice 2*3 da 0 a 3)
 
Ricorda che le diagonali k=i-j hanno la differenza degli indici uguali a una costante (nel caso di matrice 2*3 da -2 a 1, quando le registri nel vettore sommadiag non potendo usare indici negativi traslali di +2 )
 

soluzione:


#include <cstdlib>
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
 int nr=3,nc=2;
 int x;
 int conta;
 int mat[nr][nc];
 int i,j;
 //inserimento dati matrice
 for(i=0;i<nr;i++)
  for(j=0;j<nc;j++)
  {
   cout<<"introduci l'elemento"<<i<<","<<j;
   cin>>mat[i][j];
  }
   //stampa dati matrice
 for(i=0;i<nr;i++)
  {for(j=0;j<nc;j++)
     cout<<mat[i][j]<<",";
   cout<<endl;  
  }
  //stampa occorrenze numero x nella matrice
 cout<<"introduci un numero";
 cin>>x;
 conta=0;
 for(i=0;i<nr;i++)
   for(j=0;j<nc;j++)
      if(x==mat[i][j])conta++;
      
  cout<<"il numero è presente"<<conta<<"volte nella matrice"; 
 //stampa coordinate riga e colonna  valori x 
   for(i=0;i<nr;i++)
   for(j=0;j<nc;j++)
      if(x==mat[i][j])cout<<"l'elemento"<<x<<"si trova in"<<i<<","<<j<<endl;
 int somma;
 //somma della colonna 1
 somma=0;
 for(i=0;i<nr;i++)
   somma=somma+mat[i][1];
 
 cout<<"la somma della colonna 1 e'"<<somma;
 //somma della riga 0
 somma=0;
 for(j=0;j<nc;j++)
     somma=somma+mat[0][j];
 cout<<"la somma della riga 0 e'"<<somma; 
 //somma di ciascuna colonna
 int vetts[nc];
 for(j=0;j<nc;j++)
  vetts[j]=0;
 for(i=0;i<nr;i++)
   for(j=0;j<nc;j++)
    vetts[j]=vetts[j]+mat[i][j];
 for(j=0;j<nc;j++)
  cout<<"la somma della colonna"<<j<<" vale"<<vetts[j]<<endl;
 //calcolo somma elementi ciascuna diagonale
 int vettdiag1[nr+nc-1];
   
 for(j=0;j<nc+nr-1;j++)
  vettdiag1[j]=0;
 for(i=0;i<nr;i++)
   for(j=0;j<nc;j++)
    vettdiag1[i+j]=vettdiag1[i+j]+mat[i][j];
 for(j=0;j<nc+nr-1;j++)
    cout<<"la somma della diagonale"<<j<<" vale"<<vettdiag1[j]<<endl;
  //calcolo somma elementi ciascuna diagonale opposta
 int vettdiag2[nr+nc-1];  
 for(j=0;j<nc+nr-1;j++)
  vettdiag2[j]=0;
 for(i=0;i<nr;i++)
   for(j=0;j<nc;j++)
    vettdiag2[i-j+nc-1]=vettdiag2[i-j+nc-1]+mat[i][j];
 for(j=0;j<nc+nr-1;j++)
    cout<<"la somma della diagonale opposta"<<j-nc+1<<" vale"<<vettdiag2[j]<<endl;
 system("PAUSE");
 return 0;
  
}