Author: requiem
Company: upo sad

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);
}