La funzione pertanto invia al dispositivo di output il messaggio posto tra doppi apici.
Facciamo dunque alcuni semplici esempi con printf:
printf(“Coding Creativo”);
In questo caso non ho utilizzato nè SpecificatoreDiFormato, nè l’espressione dopo la virgola, ma ho stampato semplicemente una frase.
printf(“%c“, ‘A‘);
Nel caso specifico ho solo stampato la lettera A, senza inserire del testo prima.
printf(“Base: %d”, base)
In questo caso stampo a video il valore intero della base.
Printf – Specificatore di formato
Vediamo adesso in dettaglio gli specificatori di formato che si usano nella funzione printf in C.
Specificatore di formato
Espressione
%c
char – cioè per il carattere singolo
%d (%i)
int – cioè per un intero decimale con segno
%e (%E)
float o double – cioè per il formato esponenziale
%f
float o double – cioè per il reale con segno
%g (%G)
float o double – Quindi si usa %f o %e in base alle esigenze
%o
int – indica cioè un valore in base 8 senza segno
%p
pointer – indica quindi valore di una variabile puntatore
%s
array di char – indica cioè una stringa di caratteri
%u
int – indica cioè un intero senza segno
%x (%X)
int – indica quindi un valore in base 16 senza segno
Il simbolo % è dunque utilizzato per introdurre lo specificatore di formato. Per stampare a video il carattere % allora occorre inserirne due.
Facciamo quindi un esempio con printf in C:
printf("Sconto del 30 %%");
Così visualizziamo in output la frase: Sconto del 30%.
La sequenza di escape
La sequenze di escape sono dei caratteri che non vengono visualizzati, ma contribuiscono a formattare il testo. Tutte le sequenze di escape iniziano con il carattere di backslash (\) e sono interpretate come un singolo carattere.
Sequenza di escape
Descrizione
\n
nuova riga (new line), cioè va a capo
\t
tabulazione (tab), fa cioè lo spazio di un tab
\a
segnale sonoro (alert)
\f
nuova pagina (form feed)
\r
ritorno a capo della stessa riga
\v
tabulazione verticale, cioè uno spazio di un tab in verticale
\b
una battuta indietro (backspace)
\\
barra rovesciata (backslash), stampa quindi \
\’
apice singolo, stampa quindi ‘
\”
doppi apici, stampa dunque “
\?
punto di domanda, stampa quindi ?
\0
fine stringa
\<CifraOttale>
numero ottale
\<CifraEsadecimale>
numero esadecimale
Facciamo adesso degli esempi d’uso della funzione printf
Realizziamo un semplicissimo programma che stampa a video nel primo printf un numero decimale, nel secondo una stringa, nel terzo oltre al numero decimale anche lo stesso numero in ottale ed esadecimale, nel quarto un carattere singolo e nell’ultimo un numero con la virgola.
Realizziamo l’algoritmo della serie buffa con Scratch.
Problema della serie buffa
Ipotizziamo il seguente problema:
Nella serie buffa gli elementi di posto 1, 2, 3 valgono tutti uno e in generale avremo che l’elemento di posizione i con i>=4 è uguale alla somma di (i-1) e (i-3).
Questo algoritmo si può risolvere tranquillamente anche con Scratch e può presentare diverse soluzioni.
Io l’ho pensato semplicemente così, ma scrivete pure nei commenti sotto le vostre considerazioni. Ricordate che il ragionamento si affina meglio se condiviso.
Sviluppo dell’algoritmo della serie buffa con Scratch
Per realizzare l’algoritmo della serie buffa con Scratch possiamo pensare di creare innanzitutto le quattro variabili: primo, secondo, terzo e quarto.
Assegniamo a primo, secondo e terzo il valore uno, invece quarto sarà dato dalla somma di primo e terzo (quarto = primo + terzo).
Dopo creiamo una variabile N che rappresenta il numero degli elementi della serie buffa che vogliamo visualizzare. Quindi chiediamo quanti elementi vogliamo visualizzare e memorizziamo la risposta nella variabile N.
Poi creiamo la variabile contatore che facciamo partire da tre (abbiamo già inserito i primi tre elementi e quindi possiamo anche toglierli dal conteggio degli N numeri).
Realizziamo poi il nostro ciclo che si fermerà quando raggiungerà il valore di N. All’interno del ciclo impostiamo la variabile quattro uguale alla somma di primo e terzo e cambiamo i valori di primo, secondo e terzo.
Incrementiamo la variabile contatore di uno per ciascun numero che calcoliamo.
In questo modo otteniamo il nostro piccolo programma in Scratch che calcola la serie buffa.
Lo stesso algoritmo può essere sviluppato anche con i vari linguaggi di programmazione e si può rappresentare con i diagrammi di flusso (flow chart).
Un esempio dell’algoritmo realizzato con i flow chart lo potete trovare seguendo il link sotto:
Presentiamo una possibile soluzione di un algoritmo che rappresenta una serie buffa e lo svilupperemo con Algobuild.
Chiaramente ci possono essere tante altre possibili soluzioni, io l’ho pensata così. Nei commenti potete pure dire la vostra.
I flow chart ci aiutano ad avere uno schema di quello che poi può essere sviluppato con vari linguaggi di programmazione e non solo, anche con ambienti di programmazione di tipo grafico come Scratch (qui trovate alcuni esempi di programmi sviluppati in Scratch)
Definiamo la serie buffa
Immaginiamo una serie buffa di numeri interi così definita: gli elementi di posto 1, 2, 3 valgono tutti uno e in generale avremo che l’elemento di posizione i con i>=4 è uguale alla somma di (i-1) e (i-3).
Quindi avremo:
primo=1
secondo=1
terzo=1
Seondo quanto detto prima avremo così che quarto=primo+terzo
Quindi ad esempio gli N elementi della serie buffa con N=9 sono 1,1,1,2,3,4,6,9,13.
Algoritmo della serie buffa sviluppato con Algobuild
Impostiamo nei rettangoli (ricordiamo che in Algobuild il rettangolo rappresenta l’assegnamento) i valori iniziali di primo, secondo e terzo. Stampiamo i primi tre valori della serie buffa utilizzando come forma il parallelogramma.
Prendiamo in input N (utilizziamo il parallelogramma che rappresenta l’input) ovvero il numero degli elementi della serie buffa che vogliamo avere. Poi facciamo partire la variabile contatore i da 3 perché i primi tre numeri ce li abbiamo e finché i non raggiunge N continuiamo a calcolare i numeri della serie buffa.
All’interno del ciclo (in Algobuild il ciclo while è rappresentato con il rombo), che verrà ripetuto N-3 volte, abbiamo la sequenza di passi necessari per produrre la nostra serie buffa.
Quindi assegniamo a quarto il valore di primo + terzo, stampiamo il risultato e poi cambiamo le tre variabili. Così primo diventerà secondo, secondo diventerà terzo e terzo diventerà quarto.
In figura sotto potete vedere l’algoritmo della serie buffa sviluppato con Algobuild. (dovete aggiungere gli output di primo, secondo e terzo che ho omesso!)
Gli operatori di confronto in C sono tutti operatori binari. Producono sempre un risultato booleano, cioè true se la relazione è verificata, false altrimenti.
Ecco dunque quali sono gli operatori di confronto:
> (simbolo maggiore)
>= (simbolo maggiore o uguale)
< (simbolo minore)
<= (simbolo minore o uguale)
== (simbolo uguale)
!= (simbolo diverso)
Notate come si utilizza il simbolo della doppia uguaglianza per verificare se due variiabli sono uguali.
Nel precedente tutorial avevamo studiato l’assegnamento, studiando il simbolo = (simbolo uguale).
Quindi ad esempio se scriviamo:
a=5 //assegnazione
(a==5) //confronto
Nel primo caso assegno ad a il valore di 5, mentre nel secondo caso confronto a con 5 e mi restituisce il valore booleano true se a è uguale a 5, altrimenti restituisce false.
Facciamo quindi degli esempi:
(a>b) – restituisce truese la condizione amaggioredi b è verificata, false altrimenti
(a>=b) – restituisce truese la condizione amaggioreo uguale a b è verificata, false altrimenti
(a<b)– restituisce truese la condizione a minore di b è verificata, false altrimenti
(a<=b)– restituisce truese la condizione a minore o uguale a b è verificata, false altrimenti
(a==b) – restituisce truese la condizione a uguale a b è verificata, false altrimenti
(a!=b) – restituisce truese la condizione a diverso da b è verificata, false altrimenti
Quindi ad esempio se a=5 e b=7 allora risulteranno vere le espressioni: (a<b), (a<=b) e (a!=b).
Mentre se ad esempio a=7 e b=7 le espressioni che risulteranno vere saranno: (a<=b), (a>=b) e (a==b).
Parleremo molto degli operatori di confronto in C, nelle lezioni seguenti, quando affronteremo le strutture decisionali, ovvero le strutture dove c’è da fare una scelta.
In questa lezione studieremo come utilizzare le funzioni di input e output in linguaggio C.
Le funzioni di input
Le funzioni di input in C che analizzeremo sono scanf, getc e getchar.
scanf()
La funzione scanf consente di acquisire una sequenza di caratteri (lettere o cifre) dalla tastiera e di memorizzarli all’interno di opportune variabili.
Sintassi
scanf(<StringaDiFormato>,[,<Variabile]…) StringaDiFormato rappresenta lo specificatore di formato ed è introdotta dal simbolo % Variabile rappresenta il nome della variabile all’interno della quale dovrà essere memorizzato il dato proveniente dalla tastiera.
Specificatore di formato
Specificatore di formato
Espresssione
Visualizza sul monitor
%c
char
carattere singolo
%d (%i)
int
intero decimale con segno
%e (%E)
float o double
formato esponenziale
%f
float o double
reale con segno
%g (%G)
float o double
utilizza %f o %e in base alle esigenze
%0
int
valore in base 8 senza segno
%p
pointer
valore di una variabile puntatore
%s
array of char
stringa (sequenza) di caratteri
%u
int
intero senza segno
%x (%X)
int
valore in base 16 senza segno
Es: scanf(“%d”, &base)
Il simbolo & davanti alla variabile indica l’indirizzo di memoria in cui si trova la variabile base.
Si interpreta in questo modo: leggi un dato intero e collocalo nella posizione di memoria il cui indirizzo è &base.
Es: scanf(“%d %d”, &x, & y)
Questa istruzione acquisisce due numeri interi memorizzate nelle variabili x e y
L’omissione di & non comporta nessun messaggio di errore da parte del compilatore, ma comporta degli errori nei risultati.
getc()
La funzione getc legge un carattere dal dispositivo standard e lo restituisce convertito in intero.
Esempio
#include <stdio.h>
main ()
{ char c;
c=getc(stdin); //viene letto un carattere da tastiera (standard input stdin)
}
Questa funzione non era annoverata nello standard ANSI C.
getchar()
La funzione getchar legge un carattere dalla tastiera.
Esempio:
#include <stdio.h>
main ()
{ char c;
c = getchar();
}
Le funzioni di output
Le funzioni di output in C che studieremo sono: printf, putc e putchar.
printf()
La forma sintattica è la seguente: printf(<StringaDiFormato>,{,<Espressione>}) Invia al dispositivo di output il messaggio posto tra doppi apici.
Es: printf(“Base: %d”, base)
Stampa a video il valore intero della base
La sequenza di escape
Le sequenze di escape sono dei caratteri che non vengono visualizzati, ma contribuiscono a formattare il testo. Tutte le sequenze di escape iniziano con il carattere di backslash (\) e sono interpretate come un singolo carattere.
Sequenza di escape
Descrizione
\n
nuova riga (new line)
\t
tabulazione (tab)
\a
segnale sonoro (alert)
\f
nuova pagina (form feed)
\r
ritorno a capo della stessa riga
\v
tabulazione verticale
\b
una battuta indietro (backspace)
\\
barra rovesciata (backslash)
\’
apice singolo
\”
doppi apici
\?
punto di domanda
\0
fine stringa
\<CifraOttale>
numero ottale
\<CifraEsadecimale>
numero esadecimale
putc()
Se vi è la necessità di inviare l’output ad un dispositivo diverso dal monitor, si utilizza la funzione putc che invia un singolo carattere a uno specifico dispositivo di uscita. Esempio:
#include <stdio.h>
main ()
{
char c='a';
putc(c,stdprn); //output viene inviato alla stampante
}
putchar()
La funzione putchar invia un carattere a stdout. Esempio
#include <stdio.h>
main ()
{
char c='a';
putchar(c);
}