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

}