Brevi programmi di esempio
I programmi presentati in questa pagina costituiscono una versione funzionante
di quelli utilizzati per i test a risposta multipla degli scritti del
Laboratorio di Calcolo 2.
Sono tutti programmi estremamente brevi che costituiscono esempi di
implementazione di algoritmi semplici.
Per ogni programma viene data una breve descrizione, ma i listati sono privi
di commenti, visto che capire come funzionano è un esercizio per gli
studenti del corso. Del resto la complessità dei programmi è minima.
Lista dei programmi
- somma.c
Un programmino semplice semplice, che legge il file di una bolletta
telefonica, in cui in ogni riga ci sono il numero chiamato, la durata
della telefonata in secondi ed il costo in euro. Il programma calcola
il costo totale delle telefonate ad un certo numero.
La base per potersi
sedere a fare lo scritto di laboratorio!
Provare a pensare perché al numero non è stato messo lo zero del
prefisso.
- media.c
Questo programma legge dallo standard input una sequenza di numeri
terminata da un ctrl-d (il carattere che genera un
EOF) e ne calcola media e varianza. Il programma
vuole mostrare come non sia necessario immagazzinare tutti i numeri per
calcolarne queste quantità, ma è sufficiente memorizzare la somma dei numeri
e la somma dei quadrati. Questa tecnica è utile per svolgere la maggior
parte dei temi d'esame.
- eulero.c
Una versione minimale di un programma per effettuare l'integrazione
di equazioni differenziali usando il metodo di Eulero. Il programma
esegue l'integrazione dell'equazione differenziale y'=sin(y)
per condizioni iniziali arbitrarie. Prima di far funzionare il programma,
chiedetevi come vi aspettate il comportamento delle soluzioni.
- integrale.c
Il listato definisce una funzione che permette di effettuare l'integrale
numerico con il metodo dei trapezoidi di una generica funzione di una
variabile. Per illustrare il funzionamento della funzione
integra, è stato aggiunto anche un
main che calcola l'integrale del seno tra 0 ed 1
e lo confronta con il risultato atteso usando la formula esatta e le
librerie matematiche.
- newton.c
Ricerca di uno zero della funzione f(x)=x2-3x-4
usando il metodo di Newton. Provare a generalizzare il programma dato
creando una funzione C che possa venire utilizzata per trovare gli zeri
di una funzione arbitraria.
- ricerca.c
Questa funzione effettua la ricerca di un valore all'interno di un vettore
ordinato. Se il valore viene trovato, la funzione restituisce la locazione
del valore, altrimenti resituisce -1 se il valore è minore del minimo del
vettore, la dmensione del vettore, se il valore è maggiore del massimo, -2
se il valore non viene trovato all'interno del vettore. Il fatto che il
vettore sia ordinato permette di effettuare una ricerca binaria,
il cui tempo di esecuzione cresce solo logaritmicamente con la dimensione
del vettore. Provare a scrivere una main per controllare
questa funzione.
- malloc.c
Questo programma utilizza una tecnica usuale nella gestione dinamica
della memoria: dobbiamo memorizzare i dati contenuti in un file in un
vettore, ma non sappiamo a priori la dimensione del file. La soluzione
consiste nell'allocare inizialmente un certo spazio al vettore. Se lo
spazio non è sufficiente, si procede ad allocare un nuovo vettore di
dimensione doppia, si copiano i dati e si libera la zona di memoria associata
alla vecchia copia del vettore. Il programma legge i dati dallo standard
inpout, ma è banale passargli un file usando l'operatore
della shell < che effettua il reindirizzamento
dell'input.
- cosx.c
Un esempio di come si possa realizzare una funzione matematica
attraverso lo sviluppo in serie, calcolando tutti i termini fino
alla precisione del calcolatore. Questo programma calcola il coseno
utilizzando uno sviluppo in serie e poi confronta il valore con quello
della funzione delle librerie matematiche del C.
- tartaglia.c
Questo file contiene una funzione ricorsiva per calcolare i
coefficienti del triangolo di Tartaglia, che utilizza sia le proprietà
ricorsive del C che la gestione dinamica della memoria. È fornita insieme ad
una funzione main che permette di eseguire la funzione
da riga di comando, fornendo il numero della riga del triangolo come
argomento all'eseguibile: ./tartaglia N.