Strumenti Utente

Strumenti Sito


fisica:informatica:201516:primoanno:esercitazione2bis

Esercitazione 2

Dove si sviluppano semplici programmi C che utilizzano i costrutti di controllo.

Esercizio 0: Asterischi

  • Leggere un numero N da standard input e stampare su standard output N caratteri asterisco (*) seguiti da newline (\n).

Esercizio 1: Max, min e somma

  • Leggere tre reali da standard input e stampare su standard output il massimo il minimo e la somma dei tre.
  • Leggere da standard input una serie di reali terminata dal valore 0.0. Calcolare massimo, minimo e somma totale dei reali nella serie e stamparlo su standard output.

Esercizio 2: Verifica ordinamento

Leggere da standard input una serie di reali terminata dal valore 0.0. Stampare sullo standard output la parola Ordinata se la sequenza e' ordinata in modo crescente e Non ordinata se la sequenza non e' ordinata.

Estendere il programma in modo da riconoscere se la sequenza e' ordinata in modo crescente o descrescente e stamparle Ordinata crescente o Ordinata decrescente sullo standard output.

Esercizio 3: La successione di Fibonacci

La successione di Fibonacci, in sintesi risolve il seguente problema: Immaginiamo di chiudere una coppia di conigli in un recinto. Sappiamo che ogni coppia di conigli:

  1. inizia a generare dal secondo mese di età;
  2. genera una nuova coppia ogni mese;
  3. non muore mai.

Quanti conigli ci saranno nel recinto dopo un anno?

La successione di Fibonacci fornisce il numero di conigli al tempo n in funzione del numero di conigli nei due mesi precedenti n-1 ed n-2,

Fib(0) = 1
Fib(1) = 1
Fib (n) = Fib(n-1) + Fib(n-2)   se n > 1

Visivamente image008.jpg.

Scrivere un programma C che legge in ingresso un numero intero positivo X e calcola i numeri di Fibonacci da 1 ad X stampandoli sullo standard output.

Elaborazione (solo per chi ha la macchina virtuale o lavora con linux): Provate ad utilizzare la funzione sleep(1) per attendere un secondo fra la generazione di un numero e del successivo. Per ottenere informazioni sulla funzione utilizzate

man 3 sleep

visto che la sezione 3 dei manuali in linea contiene informazioni su tutte le funzioni di libreria standard C.

Esercizio 4: Massimo Comun Divisore con divisioni successive

Scrivere un programma C che

  • legge da standard input x ed y
  • calcola MCD(x,y) utilizzando il metodo delle divisioni successive (pag 80 lucidi sui costrutti di controllo)
  • stampa il risultato sullo standard output

Esercizio 5: Massimo Comun Divisore con il metodo di Euclide con i resti

Scrivere un programma C che

  • legge da standard input x ed y
  • calcola MCD(x,y) utilizzando il metodo delle divisioni successive (pag 94 e seguenti lucidi sui costrutti di controllo)
  • stampa il risultato sullo standard output

Utilizzare il comando time per valutare il tempo impiegato per calcolare MCD(m,n) con m=10000000,n=9457831 con l'algoritmo di Euclide e con l'algoritmo implementato nell'Esercizio 4. Per evitare di misurare i tempi di attesa dell'input dallo schermo assegnare direttamente i valori alle variabili all'inizio del main e compilare.

Supponendo il nome degli eseguibili sia euclide1 ed euclide2 basta invocare

shell$ time ./euclide1

e

shell$ time ./euclide2

per ottenere il tempo impiegato effettuando operazioni dentro il sistema operativo e fuori. Confrontare i tempi ottenuti con le due implementazioni ed analizzare i risultati.

Esercizio 6: Stampa della data

Si scriva un programma C che legge dallo standard output tre interi positivi che rappresentano giorno, mese ed anno di una data e la stampa sullo standard output

  • sostituendo al mese la stringa corrispondente (es. gennaio, febbraio etc)
  • specificando se l'anno e' bisestile (un anno e' bisestile se è identificato da un intero maggiore di 1584 che sia divisibile per 4 ma non per 100 oppure che sia divisibile per 400).

Ad esempio:

12 12 2003

provoca la stampa di

12 Dicembre 2003 (Non bisestile)
fisica/informatica/201516/primoanno/esercitazione2bis.txt · Ultima modifica: 23/02/2016 alle 13:41 (3 anni fa) da Susanna Pelagatti