C++ per principianti – 7. costrutto switch-case

Ciao a tutti e ben tornati in questo corso di C++ per principianti. Le scorse volte abbiamo visto alcune delle basi necessarie per programmare sia in C++ sia in altri linguaggi, ovvero dei concetti che bene o male si trovano in tutti i linguaggi di programmazione ad alto livello (strutture condizionali, iterative, variabili, ecc.).

Oggi invece parliamo di una struttura che per quanto io sappia esiste solo in C++ e C (se non è così fatemelo notare), ovvero lo switch-case.

In cosa consiste? Si potrebbe far presto e dire che è una serie di if/else scritta in maniera diversa dal solito, ma siccome è nata per uno scopo ben preciso occorre spiegarlo. Diamo un’occhiata alla sintassi:

Il concetto è semplice: la funzione switch prende come parametro una variabile (in questo caso ‘scelta’) e, una volta aperte le parentesi graffe, si comporta in maniera differente a seconda del valore che questa possiede.

Per assegnare un blocco di codice a un determinato valore della variabile ‘scelta’ bisogna scrivere:

Il marcatore default consente di definire il comportamento da assumere nel caso in cui nessuno dei marcatori case venga utilizzato.

Come detto in apertura, il costrutto switch-case non è altro che un if/else scritto in maniera diversa. Perché? Beh, lo vediamo subito:

Quest’altro programma corrisponde in tutto e per tutto a quello visto in apertura, solo che viene realizzato con il solo costrutto if/else.

Allora viene spontaneo chiedersi: che senso ha il switch-case?

Beh, da un lato la sua sintassi è senza dubbio più scorrevole da leggere rispetto a quella di una lunga serie di if/else. In più serve a rimarcare concettualmente (dal punto di vista del programmatore) che non si ha a che fare con delle strutture condizionali, bensì con una struttura molto più simile a quella di un menù, ad esempio.

Il programma visto qui sopra, in fin dei conti, non è altro che un menù che consente di visualizzare un mese a scelta, e lo switch-case rende senz’altro meglio il concetto. Questa è in sostanza l’utilità di questo costrutto.
E’ da notare comunque che nella stragrande maggioranza dei linguaggi di programmazione si utilizzano dei semplici if/else perché lo switch-case non viene implementato.

Per esercitarvi su quanto visto oggi vi consiglio di creare un programma che permetta di scegliere i giorni della settimana e tante altre cose che possono venirvi in mente. Magari potete utilizzare delle stringhe invece che dei numeri per compiere la scelta.

Nella prossima lezione faremo un’introduzione sulla programmazione procedurale in C++, con un programma di esempio e con l’introduzione di alcuni concetti nuovi come l’ambito di una variabile.

Sinhuè Angelo Rossi

C++ per principianti – 6. strutture iterative for, while e do-while

Ciao a tutti e benvenuti in questa nuova lezione del corso C++ per principianti, come anticipato nella scorsa lezione, oggi si parlerà di cicli.

Innanzitutto, però… cosa sono i cicli?

I cicli sono delle strutture iterative che svolgono una determinata azione per un determinato numero di volte. Le azioni eseguite e il numero di ripetizioni è a discrezione del programmatore. In C++ abbiamo tre cicli, ovvero il DO/WHILE, il WHILE e il classico FOR.

Andiamo a esaminarli uno per uno.

Ciclo FOR

Il ciclo FOR si utilizza quando si conosce in anticipo il numero di iterazioni da compiere.

Come possiamo vedere, per ciclare un certo numero di volte ci serviamo di una variabile di appoggio, chiamata di solito “contatore” perché non fa altro che autoincrementarsi di 1 a ogni iterazione.

Dal punto di vista della sintassi, il contenuto delle parentesi tonde può essere diviso in tre parti separate dai punto e virgola. Nella prima parte solitamente si stabilisce il valore che la variabile contatore possiede all’inizio del ciclo e, se necessario, la si dichiara ex-novo con tanto di inizializzazione.

Nella seconda parte abbiamo la condizione che dev’essere rispettata affinché il ciclo continui. Una volta che questa condizione non viene più rispettata semplicemente si esce dal ciclo e il programma prosegue.

Nella terza parte si ha l’incremento del contatore. E’ da notare come nel codice di esempio ci si sia attenuti a delle convenzioni, non si è obbligati a incrementare il contatore per forza di una unità. Nel caso si voglia fare in maniera diversa basterà utilizzare una sintassi diversa, ad esempio “I=I+2” per incrementare di due unità invece che una.

Ciclo WHILE

Il ciclo WHILE si caratterizza per la condizione di entrata che si presenta all’inizio. Quindi se la condizione non viene rispettata da subito, il blocco di codice sottostante non viene nemmeno considerato.

In questa porzione di codice possiamo notare alcune differenze rispetto a quanto visto col FOR.
Finché il numero inserito resta minore o uguale a 100 si continua a restare nel ciclo, e l’unico modo per uscirne è far sì che non venga rispettata la condizione iniziale, quindi bisogna fare attenzione a non fare errori che potrebbero portare a un loop infinito, capace di far bloccare il programma e in certi casi l’intero computer.

Da notare che i cicli FOR e WHILE sono perfettamente interscambiabili, visto che tutti e due consentono di ottenere il medesimo risultato.

Ciclo DO/WHILE

Solitamente ci si riferisce a questo ciclo con “REPEAT/UNTIL”, ma visto che in C++ si utilizzano le parole chiave do e while lo chiameremo così.
E’ praticamente uguale al ciclo WHILE, con l’unica differenza che si entra nel ciclo almeno una volta perché la condizione viene verificata dopo l’esecuzione del blocco di codice.

Personalmente non mi capita quasi mai di usare questo ciclo, ma è bene conoscerlo perché non si sa mai nella vita 😀

Anche questa volta linko alcune risorse utili per chi volesse approfondire i concetti visti in questa lezione, concetti che sono indispensabili nella programmazione.

Con questo è tutto per oggi, per approfondimenti, curiosità e domande riguardanti questa lezione, commentate pure qua sotto. La prossima volta parleremo dello switch/case, funzione del C++ a mio parere non così indispensabile ma che per completezza merita una lezione a parte.

Sinhuè Angelo Rossi

Sfida di programmazione

Ti piace programmare, vero?

Bene, vista la mancanza di idee su progetti e progettini da realizzare, qualche giorno fa ho pensato di pormi una sfida per lavorare, mettersi alla prova e creare programmi nuovi sperimentando quindi librerie nuove.

Da qualche tempo a questa parte sto cercando di migliorare le mie skills di programmazione, e per farlo non c’è cosa migliore che programmare, appunto.

La sfida è semplice: completare una serie di lavori in un tempo stabilito.

La mia sfida personale (che ognuno, a mio parere, dovrebbe creare da sè) è iniziata il 23 febbraio e scade il 1 aprile. I programmi che cercherò di creare entro la data di scadenza sono:

  • Lettore MP3
  • Pong
  • Tetris
  • CMS per creare blog
  • Frogger
  • Arkanoid
  • “Hello world” app per Android
  • Editor di testo
  • RPG con trama ex-novo
  • Visualizzatore di immagini

BONUS:

  • platform in stile Super Mario con:
    • nemici
    • monete
    • power-up

E’ possibile fare tutte ‘ste cose in poco più di un mese? Non lo so, però ci provo. Fin’ora son riuscito a portare a termine il lettore MP3 (che conto di pubblicare a momenti). In teoria avrei terminato anche Pong e Frogger (già realizzati in passato) ma mi piacerebbe crearli nuovamente utilizzando un linguaggio diverso da Python (magari C++) o addirittura con un motore di gioco.

Il CMS è lì perché ho necessità di migliorare le mie abilità nella programmazione web, l’applicazione “Hello World” per Android è uno sfizio personale, l’RPG serve a migliorare le abilità di game design (conto di fare un qualcosa di banale ma che almeno sia sensato).

Il bonus serve se riesco a fare tutto il resto prima della data di scadenza.

Un mio consiglio personale è quello di fare brainstorming per trovare idee da mettere in atto, senza quindi copiare e incollare da varie liste di programmi da realizzare già disponibili sul web.

Spero che questo metodo possa essere di aiuto a chi magari a volte non trova motivazioni o a chi vuole provare a fare un passo in avanti.

Un generatore di tornei in Python3

Ciao a tutti, in questo post vi presento un progetto che mi ha tenuto occupato un bel po’ di tempo, ovvero un generatore di tornei scritto in Python3.

Questo programma consente la generazione automatica di un torneo in tre forme:

  • eliminazione diretta;
  • gironi + eliminazione diretta;
  • campionato.

Il numero di squadre che è possibile inserire è praticamente illimitato, però ci sono delle limitazioni riguardanti l’eliminazione diretta perché è necessario che il numero di partecipanti sia potenza di due (cosa abbastanza ovvia).

Il programma funziona discretamente anche se a mio parere può essere migliorato. Qui sotto vi lascio il sorgente, se volete collaborare tramite Github cliccate qui.

 

Un clone di Frogger in Python3

In questo post vi presento una versione di Frogger creata da me con l’utilizzo di Python3 e Pygame.

Il codice è commentato, come è facile intuire mi piacerebbe migliorare alcune cose come l’aspetto estetico (utilizzando degli sprite) e la generazione dei livelli (non proprio perfetta).

Resta il fatto che si tratta di un sorgente utile da studiare per chi vuole imparare Pygame e Python, sebbene non perfetto.

Per scaricare il codice e i file utilizzati consiglio di utilizzare Github.

Valori random da una lista in Python3

Alcuni giorni fa ho avuto necessità, mentre programmavo in Python3, di un modo per scegliere in modo casuale un valore tra quelli presenti in una lista. Dopo essere partito alla ricerca di chissà quali soluzioni, alla fine ho scoperto che questa è di una semplicità disarmante.

Semplice, no?

C++ per principianti – 5. struttura condizionale if/else

Un saluto a tutti e benvenuti nella quinta lezione del corso di C++ per principianti. Dopo aver parlato ampiamente dei tipi di dato che il C++ ci offre, oggi sposteremo l’attenzione su quella che è la logica interna di un programma, ovvero quella che permette al computer di capire quando comportarsi in un modo o quando, invece, comportarsi in un altro modo. In altre parole, oggi si parlerà della struttura condizionale.

Una struttura condizionale è un costrutto che determina l’esecuzione di un blocco d’istruzioni al verificarsi di certe condizioni.

La struttura condizionale IF/ELSE

La struttura condizionale più semplice in assoluto e alla quale dedicheremo l’attenzione quest’oggi è IF/ELSE che, tradotto in italiano, significa SE/ALTRIMENTI.

Molto banalmente, se una determinata condizione viene rispettata, verrà eseguito un certo blocco di istruzioni, altrimenti ne verrà eseguito un altro. Andiamo con un esempio.

La sintassi dell’IF/ELSE è molto semplice:

Come avrete potuto notare, all’interno della condizione è stato usato un operatore di confronto, ovvero >= (maggiore o uguale). Ecco una tabella che riassume i principali operatori di confronto presenti in C++:

Tabella degli operatori di confronto

2015-07-12-033819_1366x768_scrot

Esistono tanti altri modi per utilizzare una struttura IF/ELSE.

Verifica di più condizioni

Grazie agli operatori logici come and e or è possibile verificare più condizioni nella stessa struttura IF/ELSE.

Esempio:

In questa porzione di codice è possibile vedere l’utilizzo dell’operatore and che sta a indicare che per eseguire ciò che si trova all’interno dell’IF è necessario che tutte le condizioni presenti siano rispettate.
Si può notare come delle strutture IF/ELSE risiedano all’interno di un’altra struttura IF/ELSE. Queste sono chiamate “IF annidati” e sono utili nel caso in cui un IF solo non bastasse ad effettuare i controlli necessari.

In quest’ultima porzione di codice possiamo notare invece l’utilizzo dell’operatore or, che indica come è necessario che solo una delle due condizioni presenti venga rispettata per eseguire ciò che si trova all’interno dell’IF.

Risorse utili:

Per approfondimenti, domande e curiosità riguardo questa lezione non esitate a commentare.
Nella prossima lezione si parlerà dei cicli WHILE/DO e FOR.

Sinhuè Angelo Rossi

C++ per principianti – 4. input, operatori aritmetici e stringhe

Un saluto a tutti e benvenuti alla quarta lezione del corso di C++ per principianti, oggi vedremo le operazioni di input e gli operatori aritmetici in C++, in modo da creare un programma che permetta di eseguire operazioni su due numeri inseriti dall’utente.

Input e operatori aritmetici, cosa c’è da sapere

In C++, per inserire un valore, è necessaria prima la dichiarazione della variabile destinata a contenerlo (clicca qui per la lezione che ne parla).

Esempio:

Se per visualizzare dati in output utilizziamo la funzione cout, per inserire dati in input utilizziamo la funzione cin. Anche questa fa parte della libreria iostream vista nella seconda lezione.

La sintassi per l’inserimento in input da tastiera della nostra variabile x, una volta dichiarata, è la seguente:

Come potete notare, abbiamo utilizzato l’operatore >>, che significa “prendi da”, seguito dalla variabile che la funzione cin prenderà come input.

Proviamo adesso a scrivere un programma che dati due numeri interi in input ne mostra la somma, la differenza, il prodotto, il quoziente e il resto della divisione.

In questo programma vedrete anche l’utilizzo dei commenti, parti del codice non elaborate dal computer e che sono visibili solo nel codice stesso, utili per aiutare chi legge a comprendere meglio il funzionamento del programma.

L’output che verrà mostrato sarà simile al seguente:

Output

In questo programma abbiamo visto tre cose che nella programmazione sono indispensabili:

  • commenti;
  • operatori aritmetici;
  • inserimento dei dati in input.

Stringhe in C++, ecco una panoramica

Il grosso di questa lezione è fatto, adesso andiamo con un argomento più leggero e veloce, ovvero le stringhe.

Le stringhe sono semplicemente sequenze di caratteri.

E’ possibile implementarle grazie alla libreria iostream, già vista le scorse volte. Grazie a questa libreria è possibile utilizzare le stringhe come un vero e proprio tipo di dato, alla pari di int, bool e gli altri visti qui.

Diamo uno sguardo ad un semplice programma che le utilizza.

Questa è una semplice dimostrazione del loro utilizzo, nella libreria iostream esistono molte funzioni che consentono di eseguire una grande varietà di operazioni sulle stringhe.

Il lavoro sulle stringhe va oltre le competenze che questo corso vuole fornirvi, se siete però interessati sappiate che ho in programma la scrittura di un articolo a riguardo.

E’ comunque indispensabile averne una visione almeno generale e sapere che sono un’alternativa senz’altro più comoda del tipo char.

Per approfondimenti, domande e curiosità riguardanti quanto visto, commentate pure.
Nella prossima lezione vedremo le strutture condizionali e l’algebra booleana.

Sinhuè Angelo Rossi

C++ per principianti – 3. variabili e tipi di dato

Ciao a tutti e benvenuti alla terza lezione del corso di C++ dedicato ai principianti.
Oggi inizieremo a parlare di variabili, un concetto che sta alla base di ogni linguaggio di programmazione.

Cos’è una variabile?

Provate a pensare alla variabile come a una scatola che contiene al suo interno un valore e che può avere un proprio nome.
VariabileIl nome della scatola (quindi della variabile) è numero e il suo valore è 538.

In C++, le variabili possono essere di diversi tipi in base a ciò che sono destinate a contenere (stringhe di testo, numeri interi…), in questo esempio utilizzeremo il tipo int (integer), già visto la scorsa volta per la dichiarazione del main().

Per creare la variabile è necessario innanzitutto dichiararla. La nostra variabile di tipo intero verrà dichiarata come segue:

Una volta creata, la variabile non è altro che la nostra scatola vuota.

Con la dichiarazione si ordina al computer di predisporre un certo spazio in memoria e dare a questo spazio un nome (in questo caso “numero”). Fin quando non le verrà assegnato un numero intero, la variabile conterrà il valore NULL, ovvero “spazio vuoto”.

Per riempirlo, basterà utilizzare l’operatore di assegnamento, vale a dire =:

Come potete notare non è servito indicare nuovamente il tipo di dato, essendo questo già stato definito precedentemente.

E’ anche possibile dichiarare la variabile e assegnarle un valore nello stesso momento:

Chiarito ciò, ecco una panoramica dei tipi di dato presenti in C++, utile a farsi un’idea generale:

[table]tipo,dimensione,valori
char,1 byte,caratteri ASCII
bool,1 byte,vero (1) o falso (0)
short,2 byte,da -32’768 a 32’767
int,4 byte,da -2’147’483’648 a 2’147’483’647
long,4 byte,da -2’147’483’648 a 2’147’483’647 (può essere combinato con int)
float,4 byte,numeri a virgola mobile (precisione singola)
double,8 byte,numeri a virgola mobile (doppia precisione)[/table]

N.b.: per adesso non vedremo singolarmente ogni tipo di dato in quanto non necessario, col tempo avremo la possibilità di utilizzarne la maggior parte e quindi conoscerli.

Attenzione!

I nomi delle variabili devono seguire OBBLIGATORIAMENTE determinate regole:

  • possono iniziare solo col carattere di underscore ( ‘_’ ) o con una lettera;
  • gli unici caratteri consentiti nel nome sono l’underscore, le lettere non accentate e i numeri (altri simboli quali ‘$’, ‘@’ o ‘%’ sono vietati);
  • non possono corrispondere a parole chiave del C++;

Nota bene: i nomi delle variabili sono case-sensitive, quindi “numero” è una variabile diversa da “Numero”.

Adesso andiamo a utilizzare la nostra variabile e le operazioni di dichiarazione e assegnamento in un semplice programmino:

Il messaggio mostrato in output sarà il seguente:

2015-04-05-013558_1366x768_scrotAll’interno della funzione main() dichiariamo la variabile “eta” di tipo intero. La stessa variabile viene utilizzata nella riga dedicata al messaggio di output.

Dopodiché, nella riga 8, alla variabile “eta” assegnamo la somma tra “eta” e 5 che, come potete intuire, non fa altro che assegnare a “eta” il numero 23.

Nella prossima lezione vedremo gli operatori aritmetici in C++, l’inserimento di dati in input e una panoramica sulle stringhe.
Ovviamente, per ogni dubbio o curiosità riguardante la lezione, non esitate a chiedere nei commenti. Un saluto e arrivederci al prossimo post.

Sinhuè Angelo Rossi

C++ per principianti – 2. Hello world!

Ciao a tutti e benvenuti alla seconda lezione del corso di C++ dedicato ai principianti.

Oggi vedremo un semplice programmino che visualizza a schermo la scritta “Hello world”, e che ci servirà a fare i primi passi nel mondo del C++ sia per prenderci confidenza sia per iniziare a capire il suo funzionamento.

Prima di tutto create un file di nome “hello_world.cpp”, salvatelo dove volete e apritelo con l’IDE che avete installato tra quelli da me consigliati

In questo corso, per questione di uniformità, si tiene conto che voi utilizziate Codeblocks, ecco una breve guida che lo riguarda.

All’interno del file creato scrivete quanto segue:

Woa woa woa, andiamo piano… a prima vista ciò che vedete sembrerà tutt’altro che comprensibile, quindi l’unico modo per comprendere ciò che c’è scritto è conoscere la funzione di ogni riga e fidatevi, non è poi così difficile.

Partiamo dalle prime due righe.

Queste due righe formano l’header, e servono a fornire al programma tutti gli strumenti di cui necessita. In questo caso si tratta di due righe, ma possono essere molte di più, a seconda di ciò che si andrà a fare.

Avete mai sentito parlare di librerie? Bene, iostream è una libreria del C++ che, semplificando, mette a disposizione le funzioni necessarie per la gestione delle operazioni di input e output, infatti il significato non è altro che input output stream.

Questa libreria viene richiamata dalla funzione #include, che serve per l’appunto a chiamare librerie e file che servono al programma.

Per adesso non è necessario addentrarci ulteriormente, l’importante è capirne a grandi linee l’utilità.

La seconda parte dell’header è using namespace std;.

Questa riga di codice permette di utilizzare un determinato namespace, ovvero un’area all’interno della quale sono consentite tutte le operazioni contenute nelle librerie richiamate. In questo caso viene utilizzato il namespace di nome std, esistente di default, che consente di utilizzare le librerie standard del C++, inclusa la iostream richiamata precedentemente.

Ecco un’immagine che riassume il concetto:

namespace std
E’ comprensibile comunque che per adesso non si comprendano certe cose, quindi se non avete capito non preoccupatevi e proseguite nella lettura, col tempo certi concetti saranno chiari.

Arriviamo quindi al corpo del codice, che è ciò che ci interessa maggiormente.

Ogni programma scritto in C++ inizia la sua esecuzione quando trova la dicitura main().

In questo caso main() è di tipo intero. Questo indica che la funzione principale del programma ha un valore numerico che può essere 0 o diverso da 0. Se il valore di main() è 0 abbiamo la certezza che il programma è stato eseguito in modo corretto, mentre in caso contrario sappiamo che c’è stato un errore durante l’esecuzione.

Le due parentesi () ci fanno sapere che main è una funzione, concetto che verrà approfondito nelle prossime lezioni.

Andando avanti troviamo le parentesi graffe, che hanno il compito di racchiudere un insieme di istruzioni. Ricordatevi di questo particolare perché le parentesi graffe sono un concetto di base del C++ e verranno utilizzate di continuo.

Tra le parentesi graffe troviamo il contenuto della funzione main, ovvero le istruzioni che in questo caso saranno eseguite. cout è una delle tante funzioni della libreria iostream vista precedentemente, e consente di mostrare un messaggio di output.

cout riceve il messaggio di output da mostrare dall’operatore <<, che sta a significare “metti su”.

Quindi, in parole povere, la dicitura Hello world” (racchiusa tra doppie virgolette perché è una stringa), verrà spedita al coutverrà mostrata a schermo come potete vedere qui sotto:

2015-04-03-104126_1366x768_scrot

Dopo “Hello world” abbiamo un altro operatore << e la dicitura endl, che sta a significare end line e non fa altro che “mandare a capo”. Infine abbiamo il punto e virgola ( ; ), che indica la fine dell’istruzione.

Andando avanti troviamo return 0;.

Prima abbiamo detto che la funzione main è di tipo intero, e in questo caso le diamo il valore 0, che certifica la corretta esecuzione del programma se e solo se tutto ciò che sta sopra è stato eseguito in maniera corretta.

Poi abbiamo la chiusura della parentesi graffa, che indica la fine del blocco di istruzioni.

Ora che abbiamo visto in maniera completa questo semplice programma, diamo al nostro IDE il comando di compilazione, che su Codeblocks è contrassegnato da un ingranaggio giallo, dopodiché avviamo il nostro programmino col tasto “play” verde.

Se il programma viene eseguito correttamente vedrete la vostra stringa “Hello world” come mostrato più su. Se ciò non avvenisse, controllate che il codice sia stato scritto in maniera corretta e riprovate a compilare e poi eseguire.

Per domande e approfondimenti su quanto spiegato sin’ora non esitate a chiedere nei commenti, e rinnovo l’invito ad essere curiosi e sperimentare per imparare cose nuove, è l’unico modo efficace per imparare a programmare.

Per venirvi incontro vi assegno dei “compiti per casa”, utili a verificare quanto visto sin’ora e imparare cose nuove:

  1. Scrivi un programma che mostri in output il tuo nome;
  2. Fai una ricerca sul web e scopri il significato di “algoritmo” (ecco un documento utile dal quale iniziare).

Con questo vi saluto, arrivederci al prossimo post.

Sinhuè Angelo Rossi