Printf

Printf

Printf in C è una funzione di output così come lo sono anche le funzioni putc e putchar. Più avanti studieremo inoltre altre funzioni derivate.

Quindi printf è una funzione che serve a visualizzare semplicemente un messaggio a video.


La sintassi della funzione printf è la seguente:

printf(“testo <SpecificatoreDiFormato>”,{<Espressione>})

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.

#include <stdio.h>

main() {
	printf("x vale %d", 10);
	printf("\nIl colore del maglione e': %s ", "verde");
	printf("\nNumero decimale: %d, ottale: %o, esadecimale: %x",
             234, 234, 234);
	printf("\nCarattere singolo: %c", 'A');
        printf("\nPigreco vale: %5.2f", 3.14);
}

Come potete notare nel caso del float ho specificato %5.2f, infatti è possibile fare delle precisazioni.

%[lunghezza].[precisione]<SpecificatoreDiFormato>

In questo modo, ad esempio nel caso del float indichiamo quante cifre vogliamo stampare e precisiamo quante dopo la virgola.

Quindi con %5.2f indichiamo un totale di 5 cifre di cui due dopo la virgola, nel conteggio delle 5 cifre è compreso anche il punto decimale.

Alcuni link utili

Realizzare un menù di scelta in C

Come sommare gli elementi della cornice esterna delle matrici

Come sommare due matrici

Sommare dei numeri di una matrice

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Selection sort in C

Serie Buffa con Scratch

Serie Buffa con Scratch

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.

Serie buffa con scratch

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:

Algoritmo della serie buffa con Algobuild


Alcuni link utili

Numeri primi in Scratch

La successione di Fibonacci in Scratch

Massimo fra tre numeri in Scratch

Minimo tra 3 numeri in Scratch

Numeri perfetti con algobuild

Numeri amicabili

Selecion sort in Scratch

Algoritmo serie buffa

Algoritmo serie buffa

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!)

algoritmo serie buffa con algobuild

Alcuni link utili

Indice argomenti diagramma a blocchi

Numeri primi da 1 a 100

Array con algobuild

Divisori di un numero con algobuild

Algoritmi di selezione sugli angoli

Algoritmi di selezione

Triangoli con algobuild

Fibonacci con algobuild

Serie buffa con algobuild

Numeri amicabili con algobuild

Numeri perfetti con algobuild

Massimo fra tre numeri

Minore fra tre numeri


Operatori di confronto in C

Operatori di confronto in C

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 true se la condizione a maggiore di b è verificata, false altrimenti

(a>=b) – restituisce true se la condizione a maggiore o uguale a b è verificata, false altrimenti

(a<b) – restituisce true se la condizione a minore di b è verificata, false altrimenti

(a<=b) – restituisce true se la condizione a minore o uguale a b è verificata, false altrimenti

(a==b) – restituisce true se la condizione a uguale a b è verificata, false altrimenti

(a!=b) – restituisce true se 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.

Alcuni link utili

Realizzare un menù di scelta in C

Strutture complesse in C

Esercizio sulle struct in C

Typedef struct C

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Quali metodi per inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C


Le funzioni di Input e Output

Le funzioni di Input e Output

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); 
}


Alcuni link utili

Introduzione al linguaggio C

Le variabili in C

Le costanti in C

Printf

Tipi di operatori

Operatori di confronto

Stdin

Le funzioni di input e output

Scanf

Area di un rettangolo in C

Media in C

Casting in C