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?

Registrare gameplay: ne vale ancora la pena?

C’è una cosa che appare su tutti i canali di videogame: i gameplay.

Il che è abbastanza normale, visto che il gameplay è l’essenza di ogni videogioco. E’ possibile, però, affermare che il classico videogameplay col tizio che si siede davanti a un PC, una XBOX o una Playstation (par condicio) con tanto di cuffie e microfono è una scena già vista troppe volte su Youtube.

E attenzione: anche io mi inserisco nel calderone, perché sono uno dei tanti che ha provato ad attirare qualcuno nel suo canale facendo ANCHE gameplay. Però ad un certo punto mi son chiesto: come si può pensare di ottenere iscrizioni al proprio canale facendo cose che tutti fanno?

Beh, un modo ci sarebbe, ovvero non fare cose che tutti fanno! Il che si traduce in fare giochi che nessuno fa, cosa che… è anch’essa abusata, visto che praticamente non esiste gioco che non abbia il suo videogameplay. E se esiste vuol dire che non rispetta il copyright di qualche software house.

Pure io ho provato a registrare OMSI ed Euro Truck Simulator, ma sicuramente con scarso successo.

Altro modo per dare un senso alla registrazione di un gameplay è sicuramente proporre un gioco in maniera diversa dal solito.
Sono pochi i giochi che permettono di uscire dai soliti schemi, e uno di questi è senza dubbio Minecraft, visto che è praticamente il gioco da Youtube per eccellenza grazie alle infinite possibilità che offre. Anche Minecraft, però, è stato visto in tutte le salse.

Suvvia, diciamocelo: i video di gameplay andavano bene qualche tempo fa, quando ancora ci si chiedeva “questo gioco è divertente, perché non registrare un video di gameplay?” invece che “quale video di gameplay non è stato ancora fatto?”. Quindi basta, basta davvero con ‘sti gameplay.

I videogiochi possono essere trattati in tantissimi altri modi, e non trovo produttivo fossilizzarsi su una sola tipologia di video, in primis perché questo atteggiamento rende Youtube un immondezzaio di gameplay, e in secundis perché tutti (e mi ci metto anch’io) abbiamo rinunciato alla nostra originalità solo per provare a prendere qualche visualizzazione in più.

Cosa che poi nemmeno avviene.

Hello world!

Hello world!” era il titolo di default che l’amico WordPress mi ha lasciato, ma quasi quasi lo lascio.

Lo lascio perché questo sito è nuovo di zecca e di conseguenza ha bisogno di tempo per essere curato a dovere. Senza dubbio, però, è un po’ come una nuova casa per i miei nuovi post riguardanti tutto quello che passa dalla mia mente, visto che non sapendo “cosa fare da grande” continuo, da buon sfaccendato scansafatiche che non ha voglia di lavorare, a studiare tante piccole cose riguardanti l’informatica che chissà, tra un po’ di tempo potrebbero tornare utili. Almeno spero.

Parlando proprio di informatica, questa potrebbe essere il mio focus principale per quanto riguarda questo blog. E all’interno del termine ‘informatica’ racchiudo tutti quei mondi che girano attorno, come i videogiochi, il marketing e la politica.

Perché sì, internet è una realtà ormai consolidata anche nel nostro paese ed è chiaro che questo porti conseguenze come il suo utilizzo per la propaganda, sia questa di ogni fazione politica senza distinzione alcuna.

La cosa bella di internet negli ultimi anni è il modo in cui si è permeato nella società in cui viviamo. E lasciatemelo dire, tra nuovi problemi e nuove opportunità resta cosa buona e giusta.

Detto ciò, se volete seguire il mio blog potete usare i feed RSS, salvarlo tra i preferiti, oppure ricordarvi semplicemente di passare di qui quando vi capita.

Ah, giusto, dimenticavo! Ho anche un canale Youtube, perché non farci un salto? Basta cliccare sul tasto con il logo di G+ in alto a destra.

Detto ciò possiamo passare ai saluti, per cui ci si vede!

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