Indice
Esercitazione 5 bis
Esercizio 1: 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 2: Ancora equazioni di secondo grado
Scrivere una funzione che ha come parametri i coefficienti a,b,c
di una equazione di secondo grado
a * x^2 + b * x + c = 0
e restituisce come valore -1 se l'equazione non ha radici reali, 0 se ha radici reali coincidenti e 1 se ha due radici reali distinte. Provare la funzione con un opportuni programma main.
Esercizio 3: Eco
Scrivere un programma C che legge una stringa che non contiene spazi da standard input la ristampa sullo standard output come in
$ ./eco Inserisci una stringa:
se digito pippo
e ritorno carrello (\n
) ottengo
$ ./eco Inserisci una stringa: pippo Ho letto : pippo Inserisci una stringa:
l'elaborazione termina digitando End OF File (CTRL-D).
Esercizio 4: Stampa cifre decimali
Scrivere una funzione C che prende come parametro un numero intero positivo e stampa le cifre decimali del numero su standard output, una per linea (separate da \n
). Provare la funzione con un opportuno programma main(). Ad esempio 510 provoca la seguente stampa:
5 1 0
Esercizio 5: Operatori logici
Stampare su standard output la tabelle di verità delle seguenti espressioni booleane
!(a > b) !(a <= b && c <= d ) !(a + 1 == b + 1) !(a < 1 || b < 2 && c < 3)
Sapete trovare delle formulazini equivalenti che non usano il not (!) ? In caso verificate la bontà della soluzione fornita stampando sullo standard output le tabelle di verità per tutte le coppie di espressioni equivalenti che avete trovato..
Esercizio 6: Bilanciamento delle parentesi
Scrivere un programma C che legge dallo standard input una sequenza di caratteri (terminata da EOF) e stabilisce se l'insieme dei caratteri utilizza in modo appropriato le parentesi graffe tonde e quadre ovvero
- se il numero delle parentesi aperte e chiuse coincide e
- se la parentesi aperta precede sempre la parentesi chiusa.
Ad esempio:
{lkshaj[nnnn()]}{}
e' una sequenza corretta, mentre
{lkshaj][nnnn()}{}
e' scorretta.
Utilizzare getchar()
per leggere i caratteri uno ad uno, la funzione restituisce EOF quando lo stream e' finito (vedi man getchar
).
Inserendo manualmente i caratteri EOF puo' essere generato utilizzando la combinazione di tasti CONTROL-D.
Quando il programma e' funzionante, verificare il bilanciamento delle parentesi del programma stesso utilizzando la redirezione. Ad esempio, se l'eseguibile relativo al mio programma si chiama checkpar
, e il sorgente si trova nel file checkpar.c, provare ad eseguire
bash$ ./checkpar < checkpar.c
Esercizio 7: (avanzato) Calcolo delle potenze di 2
Scrivere una funzione C che ha come parametro un numero intero positivo n
(n⇐30
) e calcola l'n-esima potenza di 2 (2 elevato ad n) utilizzando esclusivamente gli operatori di shift («
o »
).
Esercizio 8: (avanzato) Stampa cifre binarie
Scrivere una funzione C che ha come paramento un intero e stampa sullo standard output le cifre della sua rappresentazione in complemento a due.
Suggerimento: utilizzare gli operatori bit a bit di shift («,»), complemento(~), and(&), or(|), xor (^) per ricavare le cifre dalla rappresentazione interna di X
come int
senza ricalcolarla.