La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza, ordinamento, ricerca e merge, matrice simmetrica, puntatori.

Presentazioni simili


Presentazione sul tema: "Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza, ordinamento, ricerca e merge, matrice simmetrica, puntatori."— Transcript della presentazione:

1 Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza, ordinamento, ricerca e merge, matrice simmetrica, puntatori

2 - 2 - Array Array o vettore Composto da una serie di celle int vett[4] = {3, 5, -6, 10}; vett 0123 Stesso tipo per tutte le celle Alloca tutte le celle lunghezza dellarray Tipicamente serve un contatore

3 - 3 - Media e varianza Leggere un insieme di numeri, inserirlo in un array e calcolare la media e la varianza. Lutente dovrà esplicitamente indicare quanti numeri vuole inserire nellarray. Ricordiamo che la media e la varianza di n dati a i si ottengono: Utilizziamo la funzione predefinita pow( base, esp ) che calcola base esp.

4 - 4 - #include void main() { const unsigned int MAX = 1000; float arrayNumeri[MAX]; unsigned int i, num; float totale = 0, media, varianza; printf ("quanti numeri (max %u): ", MAX); scanf ("%u", &num); /* assumo num < MAX */ for (i = 0; i < num; i++) { printf ("Dato (%u): ", i); scanf ("%f", &arrayNumeri[i]); totale = totale + arrayNumeri[i]; }. Media e varianza

5 - 5 - media = totale / num; totale = 0; for (i = 0; i < num; i++) { totale = totale + pow(arrayNumeri[i]-media, 2); } varianza = totale / (num – 1); printf ("Media:%f, varianza:%f", media, varianza); } Media e varianza Se lutente inserisce un solo numero? Verificare linput dellutente…

6 - 6 - Trova il massimo Leggere un insieme di numeri interi e inserirlo in un array. Linsieme sarà terminato dal numero zero Trovare quindi: Il numero massimo La posizione della cella nella quale il numero massimo è stato inserito.

7 - 7 - Trova il massimo #include void main() { const unsigned int MAX = 1000; int arrayNumeri[MAX], dato, max; unsigned int i, num = 0, posizMax; arrayNumeri[0] = 0; /* se non immetto niente… */ scanf ("%d", &dato); while (dato != 0 && num < MAX) { arrayNumeri[num] = dato; num = num + 1; if (num < MAX) /* Non leggo il dato seguente */ { /* se larray è finito */ scanf ("%d", &dato); } }.

8 - 8 - Trova il massimo max = arrayNumeri[0]; posizMax = 0; for (i = 1; i < num; i++) { if (arrayNumeri[i] > max) { max = arrayNumeri[i]; posizMax = i; } } printf ("Max:%d, posizione:%u", max, posizMax); }

9 - 9 - Ricerca lineare Lutente inserisce in un array un certo numero di interi Lutente inserisce un numero e lelaboratore controlla se è presente nellarray Se il numero è presente, si visualizza la posizione in cui è stato trovato

10 Ricerca lineare #include void main() { unsigned int i, n, trovato = 0; int numeri [100], num; printf ("Quanti numeri: "); scanf ("%u", &n); for (i = 0; i < n; i++) { printf ("Numero %u: ", i); scanf ("%d", &numeri[i]); } printf ("Numero da cercare: "); scanf ("%d", &num);.

11 Ricerca lineare i = 0; do { if (numeri[i] == num) { trovato = 1; } else { i++; } } while (trovato == 0 && i < n); if (trovato) { printf ("Numero: %d ", numeri[i]); printf ("Posizione: %u\n", i); } }.

12 Merge di due array ordinati Lutente inserisce due array composti da numeri interi ed ordinati in senso crescente. Le lunghezze dei due array possono essere differenti Lelaboratore crea un terzo array ordinato, utilizzando i due array inseriti dallutente Infine, questultimo array viene visualizzato i1i2 im

13 Merge di due array ordinati #include void main() { const int MAX = 100; int array1[MAX], array2[MAX], merge[2 * MAX]; unsigned int n1, n2, i1, i2, im; printf ("Lungh array 1: "); scanf ("%u", &n1); printf ("Lungh array 2: "); scanf ("%u", &n2); for (i1 = 0; i1 < n1; i1++) { printf ("Array1, numero: "); scanf ("%d", &array1[i1]); }.

14 Merge di due array ordinati for (i2 = 0; i2 < n2; i2++) { printf ("Array2, numero: "); scanf ("%d", &array2[i2]); } i1 = 0; i2 = 0;.

15 Merge di due array ordinati for (im = 0; im < n1 + n2; im++) { if (i1 = n2) { merge[im] = array1[i1]; i1++; } else { merge[im] = array2[i2]; i2++; } }.

16 Merge di due array ordinati for (im = 0; im < n1 + n2; im++) { printf ("%d\n", merge[im]); } }.

17 Lutente inserisce in un array un certo numero di interi Lelaboratore ordina larray in senso crescente e lo visualizza Ordinamento per inserzione Lalgoritmo viene applicato mentre lutente inserisce i dati

18 #include void main() { unsigned int tot; int ultima, i, candidata, sposta; int n, numeri[100]; printf ("Quanti numeri: "); scanf ("%u", &tot); for (ultima = 0; ultima < tot; ultima++) { printf ("Numero: "); scanf ("%d", &n); candidata = 0;. Ordinamento per inserzione

19 while (n >= numeri[candidata] && candidata <= ultima) { candidata++; } /* Sposto a partire dal fondo, altrimenti sovrascrivo. La variabile ultima indica l'ultima casella occupata */ for (sposta=ultima; sposta>=candidata; sposta--) { numeri[sposta + 1] = numeri[sposta]; } numeri[candidata] = n; }. Ordinamento per inserzione

20 for (i = 0; i < tot; i++) { printf ("%d\n", numeri[i]); } }. Ordinamento per inserzione

21 Ordinamento con Bubble Sort Lo stesso testo dellesercizio precedente Usiamo lalgoritmo di ordinamento noto con il nome di bubble sort (ordinamento a bolle) Lutente inserisce i dati in modo disordinato Lalgoritmo viene applicato alla fine della fase di inserimento

22 Ordinamento con Bubble Sort Come si effettua lo scambio del contenuto di due variabili? Serve una variabile temporanea: 1020 atempb 1020 a 10 tempb 20 a 10 tempb 2010 a tempb

23 #include void main() { unsigned int tot, i, scambio; int numeri [100], temporanea; printf ("Quanti numeri: "); scanf ("%u", &tot); for (i = 0; i < tot; i++) { printf ("Numero: "); scanf ("%d", &numeri[i]); }. Ordinamento con Bubble Sort

24 do { scambio = 0; for (i = 0; i < tot - 1; i++) { if (numeri[i] > numeri[i + 1]) { /* inizio scambio di due variabili */ temporanea = numeri[i]; numeri[i] = numeri[i + 1]; numeri[i + 1] = temporanea; /* fine scambio di due variabili */ scambio = 1; } } } while (scambio == 1);. Ordinamento con Bubble Sort

25 for (i = 0; i < tot; i++) { printf ("%d\n", numeri[i]); } }. Ordinamento con Bubble Sort

26 Matrice Composta da una matrice di celle int mat[2][4] = {{3,5,7,2},{-4,6,1,1}}; Stesso tipo per tutte le celle Alloca tutte le celle lunghezze della matrice Tipicamente servono due contatori. mat

27 Matrice simmetrica Lutente inserisce una matrice quadrata, composta di numeri reali, ed il programma verifica (e visualizza) se è simmetrica La dimensione della matrice inserita dallutente è fissata allinterno del programma Ricordiamo che una matrice quadrata è simmetrica sse per ogni i,j vale a i,j = a j,i

28 #include void main() { const unsigned int DIM = 3; unsigned int riga, colonna; unsigned int simmetrica; float matrice [DIM][DIM]; for (riga = 0; riga < DIM; riga++) { for (colonna = 0; colonna < DIM; colonna++) { printf ("numero (%u,%u): ", riga, colonna); scanf ("%f", &matrice[riga][colonna]); } }. Matrice simmetrica

29 simmetrica = 1; riga = 0; do /* righe */ { colonna = riga + 1; do /* colonne */ { if (matrice[riga][colonna]!= matrice[colonna][riga]) { simmetrica = 0; } colonna++;. Matrice simmetrica

30 Matrice simmetrica } while (colonna < DIM && simmetrica == 1); riga++; } while (riga < DIM - 1 && simmetrica == 1); if (simmetrica == 1) { printf ("Matrice simmetrica\n"); } else { printf ("Matrice non simmetrica\n"); } }.

31 Puntatori Un puntatore contiene un riferimento ad unaltra variabile 125 a (1000) … i nt a = 125, *p; p = &a; *p = 128; printf (%d, *p); … 1000 p (2000)

32 Array e puntatori Il nome dellarray, usato senza le parentesi, rappresenta lindirizzo in memoria della prima cella (ovvero, un puntatore ad essa) Lindirizzo non può essere modificato (ovvero, il nome rappresenta un puntatore costante) int vettA[4], vettB[4]; int *pIntero; … pIntero = vettA; /* Corretto: pIntero punta a vettA */ vettB = vettA;/* Errore di compilazione! */ vettA = pIntero;/* Errore di compilazione! */

33 Array e puntatori #include void main() { int numeri[5] = {6, 8, -3, 4, 10}; int *pInt; unsigned int i; pInt = numeri; /* pInt diventa un alias */ for (i = 0; i < 5; i++) { printf ("%d\n", numeri[i]); printf ("%d\n", *(pInt + i)); printf ("%d\n", pInt[i]); } }.


Scaricare ppt "Politecnico di Milano Esercizi C su array e matrici Massimo, media e varianza, ordinamento, ricerca e merge, matrice simmetrica, puntatori."

Presentazioni simili


Annunci Google