Informatica 2 Liceo Scientifico Scienze Applicate/Es matrici 2

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Esercizi Uso Matrici[modifica]

Quando si vogliono modificare alcune parti della matrice bisogna pensare agli indici delle celle coinvolte

Es1: inserimento,stampa,calcolo max,posmax, obiettivo: matrici, uso indici e cicli

  • dopo aver inserito i dati in una matrice 3*4
  • stampala
  • calcola il max e la sua posizione(riga,colonna)
  • calcola la somma degli elementi della riga 2
  • calcola la somma degli elementi della colonna 1
  • calcola la somma degli elementi di ciascuna colonna
  • calcola la media dei soli numeri dispari della matrice,
  • scambia colonna 0 con la colonna 1 e scambia la colonna 2 con la 3
  • /
#include <cstdlib>
#include <iostream>
using namespace std;
/*esercizi su matrice: inserimento,stampa,calcolo max,posmax,
somma riga 2,somma colonna 1,somma ciascuna colonna, media dei soli numeri 
dispari, scambio colonna 0 con 1 e scambio colonna 2 con 3
obiettivo: matrici, uso indici e cicli
*/

int main(int argc, char *argv[])
{
  int mat[3][4];
  int i,j;
  // inserimento dati matrice 3*4
  for(i=0;i<3;i++)
     for(j=0;j<4;j++)
       {//cout<<"inserisci l'elemento riga "<<i<<" col "<<j;
        //cin>>mat[i][j];
        mat[i][j]=rand()%100;
       }
  // visualizzazione stampa matrice    
 
   for(i=0;i<3;i++)
     {for(j=0;j<4;j++)
        cout<<mat[i][j]<<", ";
      cout<<endl;  
     }
   
   //calcolo del num max della matrice e della sua posizione
   
   int max ;
   int posmaxriga,posmaxcolonna;
   max=mat[0][0];
   posmaxriga=0;
   posmaxcolonna=0;
   for(i=0;i<3;i++)
     for(j=0;j<4;j++)
       if (mat[i][j]>max)
         {max=mat[i][j];
          posmaxriga=i;
          posmaxcolonna=j;
         }
   cout<<"il max vale "<<max<<endl;
   cout<<" e si trova nella riga "<<posmaxriga<<endl;
   cout<<" colonna "<<posmaxcolonna<<endl;
   
  // somma di tutti gli elementi della riga 2
  int somma ;
  somma =0;
  for(j=0;j<4;j++)
    somma=somma+mat[2][j];
  cout<<"la somma della riga 2 vale "<<somma<<endl;
  
  // somma di tutti gli elementi della colonna 1
  int sommacolonna ;
  sommacolonna =0;
  for(i=0;i<3;i++)
    sommacolonna=sommacolonna+mat[i][1];
  cout<<"la somma della colonna 1 vale "<<sommacolonna<<endl;
  
  //somma di ciascuna colonna
  int sommacol[4]={0,0,0,0} ;
  for(i=0;i<3;i++)
     for(j=0;j<4;j++)
       sommacol[j]=sommacol[j]+mat[i][j];
  for(j=0;j<4;j++)
    cout<<"somma colonna"<< j<<" = "<<sommacol[j]<<endl;
  
  //media dei numeri dispari 
  int conta=0;
  int sommadispari=0;
  for(i=0;i<3;i++)
     for(j=0;j<4;j++)
       if((mat[i][j]%2)==1)
         { conta++;
           sommadispari += mat[i][j];
         }
  cout<<"la media dei numeri dispari ="<< sommadispari/conta<<endl;
  
  //scambio colonna 0 con 1  scambio colonna 2 con 3
  int temp;
  for(j=0;j<4;j=j+2)
    for(i=0;i<3;i++)
      {temp=mat[i][j];
       mat[i][j]=mat[i][j+1];
       mat[i][j+1]=temp; 
      }
  cout<<"scambio colonna 0 con 1 scambio colonna 2 con 3"<<endl;
  for(i=0;i<3;i++)
     {for(j=0;j<4;j++)
        cout<<mat[i][j]<<", ";
      cout<<endl;  
     }                                                                                                                                                                                                                    
  system("PAUSE");        
  return 0;
}

Es2 crea una matrice 20*15, carica il valore 8 nelle celle che costituiscono il bordo della cella e il valore 1 nelle altre Soluzione: