Anno
accademico 2001-2002
Politecnico
di Torino – sezione di Alessandria
Laboratorio
di Informatica
Funzioni e vettori
Problema: Leggere n numeri, memorizzarli in un vettore e stamparli.
Supponiamo che il vettore possa contenere al più 100 numeri
int leggi( int v[] ){
int n, i;
printf(“Inserire n “);
scanf(“&d”, &n);
while( (n<0) || (n>=100) ) {
printf(“Inserire n “);
scanf(“&d”, &n);
}
for( i=0; i<n; i++ ) {
printf(“num[%d] = ”,i);
scanf(“%d”, &v[i] );
}
return n;
}
void scrivi( int
v[], int n ){
int i ;
for( i=0 ; i<n ; i++)
printf(“v[%d] = %d \n”, i, v[i]);
}
main() {
int vet[100], dim;
dim = leggi( vet );
scrivi(vet, dim);
}
Problema: ricercare in un vettore un determinato elemento x.
La lettura come nell’esercizio precedente.
La ricerca è una funzione che avuto in ingresso il vettore, il numero di elementi ed il valore x, restituisce la prima occorrenza di x nel vettore. –1 se non trovato
int trova( int v[], int n, int x ) {
int i;
for(i=0; i<n; i++)
if( v[i] = = x ) return i;
return –1;
}
main() {
int vet[100], dim, x, p;
dim = leggi(vet);
printf(“Valore da ricercare “);
scanf(“%d”, &x);
p = trova(vet, dim, x);
if( p = = -1 ) printf(“&d non presente “, x)
else printf(“%d presente alla posizione %d”, x, p);
}
Problema: dopo aver inserito n numeri in un vettore, calcolarne la media aritmetica.
L’inserimento come in precedenza.
float media( int v[], int n ) {
float somma = 0, i;
for(i=0; i<n; i++)
somma += v[i];
return somma / n;
}
main() {
int vet[100], dim;
dim = leggi(vet);
printf(“La media è %f “, media(vet, dim) );
}
Problema: dopo aver inserito n numeri interi in un vettore, calcolare la somma dei pari.
Inserimento come in precedenza.
int somma( int v[], int n ) {
int s = 0, i;
for(i=0; i<n; i++ )
if( v[i] % 2 = = 0)
s+=v[i];
return s;
}
main() {
int vet[100], dim;
dim = leggi(vet);
printf(“La somma è %d “, somma(vet, dim) );
}
Problema: dopo aver inserito in un vettore n numeri, copiare in un altro vettore tutti i positivi.
La lettura e la stampa del vettore sono come in precedenza.
La funzione copia restituisce il numero di elementi del nuovo vettore.
int copia( int
v[], int n, int pos[] ) {
int i, k;
for(i=0, k=0; i<n; i++)
if( v[i] > 0 )
pos[k++] = v[i];
return k;
}
main() {
int vet[100], dim, positivi[100],
dimpos ;
dim = leggi(vet);
dimpos = copia( vet, dim, positivi );
scrivi(positivi, dimpos);
}
Problema: dopo aver inserito in un vettore n numeri, cancellare tutti i dispari.
Il problema è simile al precedente. Si risolve copiando in un nuovo vettore tutti i numeri pari.
Problema: dopo aver inserito in un vettore n numeri, determinare il massimo.
La lettura è come in precedenza.
int massimo( int
v[], int n ) {
int i, max;
for(i=0, max=v[0]; i<n; i++)
if( v[i] > max ) max = v[i];
return max;
}
main() {
int vet[100], dim;
dim = leggi(vet);
printf(“Il massimo è %d “, massimo(vet, dim) );
}
Problema: dati due vettori di numeri, sommarli in un nuovo vettore.
La lettura e la stampa come in precedenza.
La funzione somma controlla che i due vettori in ingresso abbiano lo stesso numero di elementi. Restituisce la dimensione del vettore somma.
int somma( int v1[], int d1, int v2[], d2, int s[] ) {
int i;
if( d1 != d2 ) return 0;
for(i=0; i<d1; i++)
s[i] = v1[i] + v2[i];
return d1;
}
main() {
int v1[100], dim1, v2[100], dim2, s[100], dims ;
dim1 = leggi(v1);
dim2 = leggi(v2);
dims = somma(v1, dim1, v2, dim2, s);
scrivi(s, dims);
}
Problema: dati tre vettori di numeri, sommarli in un nuovo vettore.
Il problema si può risolvere sfruttando la funzione somma vista in precedenza.
main() {
int v1[100], dim1, v2[100], dim2, v3[100], dim3, s[100],
dims ;
dim1 = leggi(v1);
dim2 = leggi(v2);
dim3 = leggi(v3);
dims = somma(v1, dim1, v2, dim2, s);
dims = somma(v3, dim3, s, dims, s);
scrivi(s, dims);
}