====== 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 {{:fisica:informatica:201415:esercitazioni:eserciziopolinomio.pdf|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 [[http://it.wikipedia.org/wiki/Tabella_della_verit%C3%A0 | 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.