Informatica 2 Liceo Scientifico Scienze Applicate/Es matrici 1
Esercizi per utilizzare correttamente le matrici
modificaes1 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;
}