INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan venus.unive.it/borg [email protected] Ricevimento lunedì, prima o dopo lezione 1 I vettori in C I vettori in C possono venire inizializzati in maniera: esplicita implicita Esplicita main () { int x; int v[5]; for (x=1; x<=5; x++) v[0]; return 0 } Implicita main () { int x; int v[10] = {0, 0, 0, 0, 0 } return 0 } 2 // inizializzo il vettore v a 0 //fine funzione main // inizializzo il vettore v a 0 //fine funzione main Esercizi Sommare tutti gli elementi di un vettore in una variabile Tot Dato il seguente vettore di risposte di un questionario, calcolare la frequenza di ogni risposta, la risposta con la massima frequenza e con la minima frequenza. int risposte [30] = {1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6} Nel programma del punto precedente, inserite una funzione che rappresenti graficamente le frequenze delle risposte con un istogramma. Esempio: Risposta frequenza istogramma 3 5 ***** 6 2 3 3 4 *** **** Passare i vettori alle funzioni int voti[10]; //array contenente voti di una classe di 10 persone Se abbiamo il prototipo della procedura MediaVoti(int v[], int Nstud); //v[] senza dimensione Allora la chiamata alla procedura: MediaVoti(voti, 10); Notare che: Nella dichiarazione di funzione non è obbligatorio specificare la dimensione 4 vettore Il vettore è passato alla procedura senza parentesi quadre Il C passa i vettori alle funzioni automaticamente per riferimento, la funzione dunque modifica i valori contenuti nel vettore originale Il nome di un vettore è in realtà l’indirizzo del suo primo elemento MediaVoti( const int v[], int Nstud), la parola const impedisce la modifica degli elementi vettore all’interno della procedura Ordinamento di un vettore. Bubble Sort o Sinking Sort Tale algoritmo prende il nome dal fatto che i valri più piccoli “risalgono” gradualmente a galla sino in cima del vettore, proprio come le bolle risalgono in superficie (prima posizione), mentre i valori più grandi sprofondano verso il fondo del vettore (ultima posizione). Tale argomento prevede svariate letture del vettore e per ogni lettura verrà confrontata una coppia di elementi adiacenti. Esempio, vettore [1, 5, 3, 2]. Si parte dalla prima posizione Si leggono coppie di numeri fino al termine del vettore Si scambiano v[i] e v[i+1] se v[i+1]>v[i] 5 Calcolare media, mediana e moda usando i vettori Usando il vettore delle risposte della slide numero 3, si calcolino moda, media e mediana. Si ricorda che: la media è la somma dei valori di tutti gli elementi del vettore diviso il numero di elementi La moda è il valore con la massima frequenza La mediana è quel valore che lascia a destra e sinistra di se stesso lo stesso numero di elementi, dopo che tali elementi sono stati ordinati 6 Ricerca di un elemento in un vettore La ricerca di un elemento può essere di 2 tipi: Lineare Binaria La ricerca lineare confronta ogni elemento del vettore con il valore che dobbiamo ricercare. Siccome abbiamo la stessa probabilità che l’elemento da cercare si trovi nella prima posizione o nell’ultima posizione, in media quindi, l’algoritmo dovrà confrontare il valore da cercare con la metà degli elementi. Nella peggiore delle ipotesi in un vettore di 1024 elementi dovrà effettuare 1024 confronti La ricerca binaria, dopo ogni confronto scarta la metà degli elementi in un vettore ordinato. L’algoritmo individua l’elemento centrale del vettore e lo confronta con il valore da cercare. Se il valore da cercare è minore dell’elemento centrale allora vengono scartati tutti gli elementi maggiori dell’elemento centrale, nel caso contrario si scartano tutti i valori minori dell’elemento centrale. Nella peggiore delle ipotesi in un vettore di 1024 elementi in 10 confronti si riuscirebbe a trovare il valore desiderato, se infatti ogni volta si scartano metà degli elementi allora: 1024 => 512 => 256 => 128 => 64 => 32 => 16 => 8 => 4 => 2 => 1 7