Informatica 2 Liceo Scientifico Scienze Applicate/esercizi2 funzioni: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nuova pagina: Esercizio n.1 Scrivi una funzione che ordini un vettore mediante il bubblesort Scrivi una funzione per la ricerca dicotomica (restituisce come posizione -1 per indicare che il nume...
(Nessuna differenza)

Versione delle 19:45, 4 mar 2015

Esercizio n.1 Scrivi una funzione che ordini un vettore mediante il bubblesort Scrivi una funzione per la ricerca dicotomica (restituisce come posizione -1 per indicare che il numero ricercato non e' presente nel vettore

  1. include <cstdlib>
  2. include <iostream>

using namespace std; /* ordinamento e ricerca dicotomica attraverso uso funzioni

  obiettivo: implementare il bubblesort e la ricerca dicotomica 
             mediante funzioni
  • /

void ordinamento( int vett[], int n);//prototipo void ricerca( int vett[], int inf, int sup , int ricercato, int *posizione);

int main(int argc, char *argv[]) { int v[]={3,6,76,1,2,9,7,5,0} ;

  int numero=9;
  
  cout<<"vettore disordinato"<<endl;
  for(int k=0;k<numero;k++)
    cout<<v[k]<<" ,";
  cout<<endl;
  
  ordinamento(v,numero); //chiamata alla funzione
  
  cout<<"vettore ordinato"<<endl;
  for(int k=0;k<numero;k++)
    cout<<v[k]<<" ,";
  cout<<endl;
  
  cout<<"inserisci un valore da cercare";
  int valore;
  int soluzione;
  cin>> valore;
  ricerca(v,0,numero-1,valore,&soluzione);  //chiamata alla funzione
  
  cout<<"il valore: "<<valore<<" si trova nella pos:"<<soluzione<<endl;
  system("PAUSE");
  return 0;

}

void ordinamento( int vett[], int n) //dichiarazione { int i,j;

 int temp;
 for(i=1;i<n;i++)
  for(j=n-1;j>=i;j--)
    if(vett[j]<vett[j-1])
      { temp=vett[j];
        vett[j]=vett[j-1];
        vett[j-1]=temp;
      }

}

void ricerca( int vett[], int inf, int sup , int ricercato, int *posizione) { bool trovato;

 int centro;
 trovato= false;
 while( (!trovato) && (inf<=sup))
 { centro=(inf+sup)/2;
   if(vett[centro]==ricercato)
     { trovato=true;
       *posizione=centro;
     }
   else if(ricercato<vett[centro])
         sup=centro-1;
        else
         inf=centro+1;     
 }
 if (!trovato) *posizione =-1; 
 

}


Esercizio n.2

data una matrice generica nel numero di righe ( e con 5 colonne) scrivere una funzione che calcoli la somma di ciascuna riga

  1. include <cstdlib>
  2. include <iostream>

using namespace std;

/* somma di ciascuna riga di una matrice

  obiettivo : funzioni e passaggio matrici
              calcolo somma righe matrice
  • /

void somma( int mat[][5], int nrighe, int vett[5]);

int main(int argc, char *argv[]) {

  int m[3][5] = { 4,6,7,8,9,
                  3,4,5,6,7,
                  2,4,3,1,1  
                } ;
  int risposta[3];
  somma(m,3,risposta);
  int k;
  for(k=0;k<3;k++)
    cout<<risposta[k]<<" ,";                            


 system("PAUSE");
 return 0;

}

void somma( int mat[][5], int nrighe, int vett[]) { int i,j;

 for (j=0;j<5;j++)
  {vett[j]=0;
   for( i=0;i<nrighe;i++) 
     vett[j]=vett[j]+mat[i][j];
  } 

}


Esercizio n.3 Calcola il massimo di una matrice con numero di righe generico e numero di colonne uguale a 3

  1. include <cstdlib>
  2. include <iostream>

using namespace std;

/* calcolo max di una matrice generica nel numero righe*/

void massimo(int mat[][3], int nrighe, int *massimo);

int main(int argc, char *argv[]) {

 int m[][3] = { 4,6,7,
                6,8,9,
                2,5,4,
                1,8,32
              };
 int soluzione;
 massimo(m,4,&soluzione );
 cout<<" il max = "<< soluzione<<endl;            
 system("PAUSE");
 return 0;

}

void massimo(int mat[][3], int nrighe, int *massimo) { int i,j;

 *massimo=mat[0][0];
 for(i=0;i<nrighe;i++)
   for(j=0;j<3;j++)
     if (mat[i][j]> *massimo)
         *massimo = mat[i][j];

}

esercizio n.4 Calcola la somma di ciascuna riga di una matrice generica (sia righe e sia colonne)

  1. include <cstdlib>
  2. include <iostream>

using namespace std;

/* somma righe matrice

  dove la matrice è passata come puntatore a intero 
  obiettivo : passaggio matrice generica nelle righe e nelle colonne a funzione
              cast
              calcolo indirizzo cella matrice noto indirizzo base e indici riga
              e colonna  i j
             
  • /

void somma( int *mat , int nrighe,int ncolonne, int vett[]);

int main(int argc, char *argv[]) {

  int m[3][5] = { 4,6,7,8,9,
                  3,4,5,6,7,
                  2,4,3,1,1  
                } ;
  int risposta[5];
  somma((int *)m,3,5,risposta);  //  (int *)m     si poteva usare  &m[0][0]
  int k;
  for(k=0;k<5;k++)
    cout<<risposta[k]<<" ,";                            


 system("PAUSE");
 return 0;

}

void somma( int *mat , int nrighe,int ncolonne, int vett[]) { int i,j;

 for (j=0;j<ncolonne;j++)
  {vett[j]=0;
   for( i=0;i<nrighe;i++) 
     vett[j]=vett[j]+*(mat+j+i*ncolonne);
  } 

}


Esercizio n. 5 Calcola il massimo di una matrice generica nelle dimensioni

  1. include<iostream>
  2. include <stdio.h>
  3. include <stdlib.h>

using namespace std;

/* max matrice generica sia nel numero di righe e sia nelle colonne
*/

void massimo(int *mat, int nrighe,int ncolonne, int *massimo);

int main(int argc, char *argv[]) {

 int m[4][3] = {4,6,7,
                6,8,9,
                2,5,4,
                1,8,32
              };
 int soluzione;
 massimo((int *)m,4,3,&soluzione );
 cout<<" il max = "<< soluzione<<endl;            
 system("PAUSE");
 return 0;

}

void massimo(int *mat, int nrighe,int ncolonne, int *massimo) { int i,j;

 *massimo= *(mat+0*ncolonne+0); // *massimo = *mat
 for(i=0;i<nrighe;i++)
   for(j=0;j<ncolonne;j++)
     if (*(mat+i*ncolonne+j)> *massimo)
         *massimo = *(mat+i*ncolonne+j);

}

Esercizio n.8 data una matrice con 7 colonne che contiene numeri fra 0 e 100, contare il numero di volte (occorrenze) con cui si ripete ogni numero fra 0 e 100 all'interno della matrice , il calcolo delle occorrenze viene fatto mediante una funzione prima di tipo void e poi di tipo non void


  1. include <cstdlib>
  2. include <iostream>

using namespace std;

void f( int m[][7], int nr, int vett[101]) { int i,j;

 for(i=0;i<101;i++) vett[i]=0;
 
 for(i=0;i<nr;i++)
  for(j=0;j<7;j++)
   if( m[i][j]>=0 && m[i][j]<=100)
     vett[m[i][j]]++;
    

}

int * f2( int m[][7], int nr) { int i,j;

 static int vett[101];
 for(i=0;i<101;i++) vett[i]=0;
 
 for(i=0;i<nr;i++)
  for(j=0;j<7;j++)
   if( m[i][j]>=0 && m[i][j]<=100)
     vett[m[i][j]]++;
 return vett;    
    

} int main(int argc, char *argv[]) { int mat[23][7];

   int i,j;
   for(i=0;i<23;i++)
    for(j=0;j<7;j++)
      mat[i][j]= rand()%100;
   
   int risultati[101];
   
   f(mat,23,risultati);
   
   for(i=0;i<101;i++) 
     cout<<"il numero"<<i<<" e presente"<<risultati[i]<<"volte"<<endl;
   
   cout<<"soluzione non void"<<endl;
   int *p;
   
   p=f2(mat,23);
   for(i=0;i<101;i++) 
     cout<<"il numero"<<i<<" e presente"<<*p++ <<"volte"<<endl;
       
   system("PAUSE");
   return EXIT_SUCCESS;

}

esercizio n.9

data una matrice calcolare il massimo tramite funzioni, prima passando la matrice con dimensioni 3*2, poi passando la matrice pensandola generica nel numero di righe, poi pensandola generica sia nel numero di righe e di colonne

  1. include <cstdlib>
  2. include <iostream>

using namespace std;

void mass1( int mat[3][2], int *risultato) { int i,j;

 *risultato=mat[0][0];
 for(i=0;i<3;i++)
  for(j=0;j<2;j++)
    if (mat[i][j]> *risultato)
         *risultato = mat[i][j];

}

void mass2(int mat[][2],int nr,int *massimo) { int i,j;

  • massimo=mat[0][0];

for(i=0;i<nr;i++)

for(j=0;j<2;j++)
 if(mat[i][j]>*massimo)
    *massimo=mat[i][j];

} void mass3(int *mat,int nr,int nc, int *massimo) {

    int i,j;
    *massimo=*mat;
    for(i=0;i<nr;i++)
     for(j=0;j<nc;j++)
       if(*(mat+j+i*nc)>*massimo)
         *massimo=*(mat+j+i*nc);

} int main(int argc, char *argv[]) {

   int m[3][2]={3,4,
                1,2,
                12,8};
   int x;
   mass1( m, &x);
   cout<<x;
   
   mass2(m,3,&x);
   cout<<x;            
   
   mass3((int*)m,3,2,&x);
   cout<<x;
   
   system("PAUSE");
   return EXIT_SUCCESS;

}