Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Esercitazione 2ter S. Salza, C. Ciccotelli, D. Bloisi, S. Peluso, A. Pennisi
Esercizio 1: media e deviazione standard Si scriva un programma che calcoli la media e la deviazione standard dei valori contenuti in un array di interi Dato un campione di N elementi x i : la media e la deviazione standard sono date rispettivamente da: La dimensione dell'array è fissata da una costante size definita nel programma Il programma legge l'array da tastiera elemento per elemento Pagina 2
Esercizio 1: programma C Pagina 3
Passaggio di array a funzioni Dato un array a[], il nome dell'array indica l'indirizzo del primo elemento Scrivere a, a[] oppure &a[1] è esattamente la stessa cosa Questo consente di passare un array ad una funzione per indirizzo, cioè per riferimento La funzione può allora accedere all'array, ed eventualmente modificarlo Attenzione: la funzione però non conosce la dimensione dell'array Occorre quindi passargliela esplicitamente come parametro Se si vuole evitare che la funzione modifichi l'array, allora si specifica il parametro con la specifica const Pagina 4
Esempio: funzioni per media e deviaz. std Pagina 5
Esercizio 2: azzera elementi negativi Si scriva una funzione azzera che preso in ingresso un array di interi x e la sua dimensione n, sostituisca tutti gli elementi x[i] < 0 con il valore 0 La funzione azzera restituisce come valore il numero di elementi che sono stati sostituiti con 0 Scrivere una seconda funzione leggi che legge gli elementi dell'array x da tastiera Scrivere un main che chiama le due funzioni e stampa il valore finale dell'array N.B. sia la funzione azzera che la funzione leggi modificano il valore dell'array Pagina 6
Esercizio 2: il programma C Pagina 7
Esercizio 3: estrazione del dado Si scriva una funzione estrai che simula il lancio di un dado e restituisca un valore random compreso tra 1 e 6 Si scriva un programma main che chieda da tastiera il numero n di tentativi da effettuare e accumuli i risultati in un array di 6 elementi Al termine delle estrazioni il main deve stampare: il numero di tentativi effettuati la frequenza con cui ciascun esito (da 1 a 6) di è manifestato nelle estrazioni di quanto in percentuale ciascuna delle frequenze si discosta dal valore teorico di 1/6 Pagina 8
Esercizio 3: Il programma C Pagina 9
Esercizio 4: lancio di due dadi Nel lancio di due dadi e il valore della somma dei due risultativaria tra 2 e 12, ma le frequenze con cui è distribuito non sono uniformi 7 è il valore più probabile: può essere ottenuto in 6 modi diversi, 2 e 12 i meno probabili (1 solo modo ciascuno) Scrivere un programmi che costruisca sperimentalmente il vettore delle frequenze e le confronti con i risultati teorici Pagina 10
Esercizio 4: il programma C Pagina 11
Esercizio 5: crivello di Eratostene Ricava i numeri primi in un certo intervallo, cancellando tutti i multipli di ciascun numero primo, e poi ripetendo la stessa operazione per il successivo numero primo Si utilizza un array per ricordare quali numeri sono stati cancellati L'array è inizializzato a 0, i numeri cancellati sono marcati -1 Quelli che restano a 0 alla fine sono primi Pagina 12
Esercizio 5: il programma C Pagina 13
Esercizio 6: bubble sort Si scriva una funzione bubble che riceve un array x di interi e la sua dimensione dim e restituisce l'array con gli elementi ordinati in ordine crescente Si scriva una funzione leggiche riceve un array x di interi e ne legge gli elementi da tastiera Si scriva un programma main che, utilizzando le due funzioni leggi e bubble, legga un array e lo ordini Al termine delle estrazioni il main deve stampare gli elementi dell'arry ordinato Si usa l'algoritmo detto bubble-sort, che effettua un numero di passate pari alla dimensione dell'array, scambiando via via gli elementi tra loro, quando non sono nell'ordine Pagina 14
Esercizio 6: il programma C 1/2 Pagina 15
Esercizio 6: il programma C 2/2 Pagina 16
Esercizio 7: ricerca lineare Si scriva una funzione linear che riceve un array x di interi, la sua dimensione n, e un valore intero key da ricercare nell'array, e restituisce come valore di ritorno l'indice dell'elemento dell'array in cui il valore key è stato trovato, oppure -1, nel caso che non lo trovi Si scriva una funzione leggi che riceve un array x di interi e ne legge gli elementi da tastiera Si scriva un programma main che utilizzi la funzione leggi, legga da tastiera la chiave key da cercare, chiami linear e stampi l'esito Si usi l'algoritmo più semplice, quello della ricerca lineare: semplice da programmare; richiede un numero di confronti pari a n Pagina 17
Esercizio 7: il programma C 1/2 Pagina 18
Esercizio 7: il programma C 2/2 Pagina 19
Esercizio 8: ricerca binaria Si scriva una funzione binary che possa sostituire la funzione nel programma di cui all'esercizio 7, ma che sia basata sulla ricerca binaria Questa funzione richiede un massimo di log 2 n confronti, ma suppone che l'array sia ordinato in ordine crescente Si scriva un programma main con struttura analoga a quello dell'esercizio 5, ma che usi la funzione bubble per ordinare l'array e poi la binary per effettuare la ricerca Pagina 20
Esercizio 8: la funzione binary Pagina 21
Esercizio 8 bis: la funzione binary ricorsiva Pagina 22
Esercizio 9: matrice simmetrica Si scriva una funzione simmetrica che riceve come argomento una matrice quadrata e le sue dimensioni e restituisca 1 se la matrice è simmetrica 0 altrimenti Si scriva una funzione leggiche riceve come argomento una matrice quadrata e le sue dimensioni e provveda a leggerne gli elementi, per righe, da atstiera Si scriva un programma main che chiami le funzioni di cui sopra e stampi il risultato Pagina 23
Esercizio 9: il programma C 1/2 Pagina 24
Esercizio 9: il programma C 1/2 Pagina 25
Esercizio 10: moltiplicazione di matrici 1/6 Si scriva un programma per effettuare la moltiplicazioni di due matrici: legge una matrice A di dimensioni m x n (m righe e ncolonne) legge una matrice B di dimensioni n x p (n righe e p colonne) calcola il prodotto (che è una matrice con m righe e p colonne) stampa il risultato. adeguatamente formattato Pagina 26
Esercizio 10: moltiplicazione di matrici 2/6 In base alla definzione, il prodotto di A di dimensioni m x n per B di dimensioni n x p è una matrice C di dimensioni m x p Il generico elemento di C i,j di C è dato dal prodotto scalare tra la riga i di A e la colonna j di B (entrambe di dimensione n) Il prodotto scalare di due vettori a e b di dimensioni n è dato da: a b = n i=1 a i. bi Pagina 27
Esercizio 10: moltiplicazione di matrici 3/6 Sviluppare il programma definendo un insieme di funzioni: le dimensioni m, n e p sono dichiarate come variabili globali due funzioni leggia e leggib leggono le matrici per righe una funzione stampamat stampa per righe il risultato Il main richiamerà poi le funzioni suddette Pagina 28
Esercizio 10: le funzioni leggia e leggib 4/6 Pagina 29
Esercizio 10: stampamat e prodmat 5/6 Pagina 30
Esercizio 10: il main 6/6 Pagina 31