Indice
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 <math.h>
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 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 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
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.