====== 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.