70 likes | 214 Views
OUTPUT FORMATTATO. La funzione printf consente di effettuare la stampa a video formattata. Sintassi: printf ( stringa_formato, arg0, arg1, … ); La stringa che controlla il formato ( stringa_formato ) contiene i comuni
E N D
OUTPUT FORMATTATO • La funzione printf consente di effettuare la stampa a video formattata. • Sintassi: printf ( stringa_formato, arg0, arg1, … ); • La stringa che controlla il formato (stringa_formato) contiene i comuni • caratteri che compongono il messaggio testuale e una o più specifica di • conversione per ogni variabile di cui stampare il valore. • Le specifiche di conversione iniziano con il carattere % e terminano con • un carattere di conversione tra i seguenti: • - %d, %i : decimale - %f : float(virgola mobile) - %o : ottale • - %u : intero senza segno - %x : esadecimale - %s : stringa • - %e : notaz.esponenziale - %c : carattere • In mezzo tra % e carattere di conversione si può trovare: • - un segno meno : indica l’allineamento del testo a sinistra • - un numero : indica l’ampiezza minima del campo riservato al valore • - un punto : separa l’ampiezza del campo da un altro numero che indica • l’ampiezza della precisione (numero max di caratteri da stampare per • le stringhe e numero max di cifre decimali per un float)
OUTPUT FORMATTATO • Esempio: • printf ( “%-8.3f %12s %4d %.5s” , v1 , v2 , v4 , v4 ); • v1 è stampata come float allineato a sinistra con ampiezza minima del • campo pari 8 celle video e al massimo 3 cifre decimali • v2 è stampata come stringa allineata a destra con ampiezza minima del • campo pari 12 celle video • v3 è stampata come decimale allineato a destra con ampiezza minima del • campo pari 4 celle video • v4 è stampata come stringa allineata a destra con ampiezza minima del • campo non dichiarata ma di cui si stampano al massimo 5 caratteri
INPUT FORMATTATO • La funzione scanf consente di acquisire valori formattati in input. • Sintassi: scanf ( stringa_formato, arg0, arg1, … ); • La stringa che controlla il formato (stringa_formato) è analoga a quella • della printf e le medesime sono le specifiche e caratteri di conversione. • Scanf legge i caratteri dallo standard input e li memorizza negli argomenti • che seguono la stringa di formato. Tali argomenti devono essere puntatori • (iniziando con &, vettori a parte), cioè indirizzi di variabili in memoria. • Scanf si ferma quando ha esaurito la sua stringa di formato o se trova una • inconsistenza. • Scanf ritorna il numero di oggetti letti oppure un EOF al termine del file o se • l’elemento letto contrasta con la specifica di controllo. • Esempio: scanf ( “%d %f %s” , &i , &j , a ); • dove i è un intero decimale, j un float e a un vettore di caratteri (stringa)
CONVERSIONI DI NUMERI • Decimale: • - notazione posizionale in base 10, usata dagli uomini • - 10 cifre per rappresentare ogni numero: 1,2,3,4,5,6,7,8,9 • - cifre più significative a sinistra, le meno significative a destra • - esempio di rappresentazione: • 435 => 4×102+3×101+5×100 • - con (n) cifre si possono rappresentare (10^n) numeri decimali, • da 0 a (10^n-1) • Binario: • - notazione posizionale in base 2, usata nei calcolatori • - 2 cifre per rappresentare ogni numero: 0,1 • - cifre più significative a sinistra, le meno significative a destra • - esempio di rappresentazione: • 10111101 => 1×27+0×26+0×25+1×24+1×23+1×22+0×21+1×20 • - con (n) cifre si possono rappresentare (2^n) numeri decimali, • da 0 a (2^n-1) • - per passare da binario a decimale basta fare la somma delle potenze • - per passare da decimale a binario si fa la divisione ripetuta per 2
CONVERSIONI DI NUMERI • Esempio di conversione decimale > binario, convertiamo 275 • Divisione Quoziente Resto Codifica • 275 / 2 137 1 1 • 137 / 2 68 1 11 • 68 / 2 34 0 011 • 34 / 2 17 0 0011 • 17 / 2 8 1 10011 • 8 / 2 4 0 010011 • 4 / 2 2 0 0010011 • 2 / 2 1 0 00010011 • 1 / 2 0 1 100010011 • => 275 in decimale corrisponde a 100010011 in binario
CONVERSIONI DI NUMERI • Esadecimale: • - migliora il sistema binario che usa troppe cifre per rappresentare • numeri grandi • - conversione da binario a esadecimale è molto semplice • - notazione posizionale in base 16 • - 16 cifre per rappresentare ogni numero: 1,2,3,4,5,6,7,8,9,A,B,C,D,E,F • - 1,2,3…,9 in esadecimale corrispondono agli stessi decimali, mentre • A,B,C,D,E,F corrispondono ai decimali 10,11,12,13,14,15 • - cifre più significative a sinistra, le meno significative a destra • - esempio di rappresentazione: • C38F => 12×163+3×162+8×161+15×160 • - con (n) cifre si possono rappresentare (16^n) numeri decimali, • da 0 a (16^n-1) • - per passare da binario a decimale basta fare la somma delle potenze • - per passare da decimale a binario si fa la divisione ripetuta per 16 • Ottale: • - discorso analogo ai precedenti, sia per la notazione che per i metodi • di conversione, solo che la base qui è 8.
CONVERSIONI DI NUMERI # include <stdio.h> int main(){ int valore,scelta; for(;;){ printf("\n\t0 per uscire \n"); printf("\t1 Converte decimale/esadecimale \n"); printf("\t2 Converte esadecimale/decimale \n"); scanf("%d",&scelta); if (scelta == 0) break; if (scelta == 1){ printf("\tInserisci un numero in base 10\n"); scanf("%d",&valore); printf("\tIn esadecimale: \n"); printf("\t%x\n",valore); } if (scelta == 2){ printf("\tInserisci un numero in base 16\n"); scanf("%x",&valore); printf("\tIn base 10:\n"); printf("\t%d\n",valore); } } }