====== Esercitazione 2 ====== Dove si sviluppano semplici programmi C che utilizzano i costrutti di controllo if e while e gli array. ===== Esercizio 1: Asterischi ===== Leggere un numero intero N da standard input e stampare su standard output N caratteri asterisco (''*'') seguiti da newline (''\n''). ===== Esercizio 2: Max, min e somma ===== (da svolgere senza usare array) - Leggere tre reali da standard input e stampare su standard output il massimo il minimo e la somma dei tre. - Leggere venti reali da standard input, calcolare il massimo, il minimo e la somma di tutti i valori e stampare su standard output. - Leggere da standard input una serie di reali terminata dal valore 0.0. Calcolare massimo, minimo e somma totale dei reali nella serie e stampare su standard output. ===== Esercizio 3: Fattoriale ===== Scrivere un programma che legga da tastiera un numero intero ''x'' e stampi il valore di ''x!''. Per ''x!'' si intende x fattoriale, ovvero \begin{align}\label{eq:fibonacci} x! = x·(x−1)·(x−2)···1. \end{align} utilizzare il tipo ''int''. fino a quale valore di ''x'' il fattoriale viene calcolato correttamente ? ===== Esercizio 4: Utilizzare le funzioni matematiche: ''math.h'' ===== La libreria matematica, ''math.h'' contiene le funzioni per calcolare le più comuni funzioni matematiche su valori di tipo ''double''. Scrivere un programma che legga da tastiera un numero reale ''x'' e stampa il valore della seguente funzione. utilizzando le funzioni della libreria matematica \begin{align}\label{eq:math} f(x) = 3 · x^2 + 2·x + ln(42) \end{align} per usare la libreria matematica, includere #include e compilare aggiungendo ''-lm'' (su alcuni sistemi linux le librerie matematiche non sono disponibili senza questo accorgimanto), quindi se il mio programma si trova nel file ''funzione.c'' compilo con gcc -Wall -pedantic funzione.c -o funzione -lm ed eseguo con ./funzione ===== Esercizio 5: Equazioni di secondo grado ===== Scrivere un programma C che legge da standard input i coefficienti ''a,b,c'' di una equazione di secondo grado a * x^2 + b * x + c = 0 ne calcola le radici seguendo la traccia in {{:fisica:informatica:201415:esercitazioni:eserciziopolinomio.pdf|questo documento}} ===== Esercizio 6: Approssimazione dell'integrale ====== Consideriamo la funzione \begin{align}\label{eq:integrale} f(x) = 5x^3 + 4x^2 + 7x + 5: \end{align} Si vuole calcolare l'integrale di $f(x)$ su un intervallo $[a, b]$ dividendo l'intervallo in //n// intervalli di lunghezza $\frac{(b-a)}{n}$ e calcolando l'integrale come somma dell'area di $n$ trapezi, come spiegato in {{:fisica:informatica:201415:esercitazioni:eserciziomatematica1.pdf|questo documento}}. Il programma chiede all'utente due reali positivi ''a'' e ''b'' e un intero positivo ''nmax'' numero di intervalli in cui suddividere l'intervallo ''[a, b]''. Il programma deve calcolare le approssimazioni dell' integrale di $f(x)$ ottenute con il procedimento dei trapezio per $n = 2, 3, 4, \ldots n_{max}$. Stampando su standard output i valori ottenuti e la differenza con l'integrale esatto calcolato analiticamente. Note: - La funzione $f(x)$ deve essere calcolata utilizzando una opportuna espressione aritmetica, si possono utilizzare le funzioni nella libreria math.h ===== Esercizio 7: Calcolo della radice quadrata ====== Dato un numero reale positivo //a// si consideri la sequenza dei numeri reali //x// definita da x[0] = 1 x[i+1] = 1/2*(x[i] + a/x[i]) si puo' dimostrare che ''x[i]'' tende alla radice quadrata di //a// per //i// che tende all'infinito. Scrivere un programma che legga il valore di //a// da standard input e calcoli la radice quadrata di //a// utilizzando la sequenza. In particolare, si calcoli la sequenza fino a che ''x[i]'' non diventa uguale a ''x[i+1]'', il valore ottenuto e' l'approssimazione cercata per la radice quadrata di //a//. Ad ogni ciclo, far stampare su standard output il numero dell'iterazione ''i'', il valore di ''x[i]'' ed il valore di ''a-x[i]*x[i]'' per controllare la convergenza. ===== Esercizio 8: 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 10: 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: - inizia a generare dal secondo mese di età; - genera una nuova coppia ogni mese; - 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 {{:fisica:informatica:201415:esercitazioni:image008.jpg?200}}. 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.