Informatica 2 Liceo Scientifico Scienze Applicate/esercizi2 funzioni: differenze tra le versioni
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
- include <cstdlib>
- 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
- include <cstdlib>
- 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
- include <cstdlib>
- 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)
- include <cstdlib>
- 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
- include<iostream>
- include <stdio.h>
- 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
- include <cstdlib>
- 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
- include <cstdlib>
- 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;
}