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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.