Dove si sviluppano semplici programmi C che utilizzano i costrutti di controllo if e while e gli array.
Leggere un numero intero N da standard input e stampare su standard output N caratteri asterisco (*
) seguiti da newline (\n
).
(da svolgere senza usare array)
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 ?
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
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
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:
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.
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.
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:
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.