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