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

C++ per principianti – 1. introduzione

Ciao a tutti e benvenuti al nuovo corso di C++ dedicato ai principianti, a chi per la prima volta si avvicina alla programmazione.

Visto che per chi è novizio a questo bellissimo mondo il C++ non è di certo il linguaggio più semplice, consiglio di seguire questo corso svolgendo gli esercizi in allegato e cercando di essere curiosi, sperimentare e lavorare per conto proprio, perché la programmazione non è un qualcosa che si impara e finisce lì, piuttosto è un qualcosa che, dopo che si imparano le basi, va migliorato sia per imparare meglio ciò che si conosce già sia per essere sempre più produttivi e creare programmi efficienti, arte che non si finisce mai di conoscere.

Detto ciò è il momento di fare un excursus storico di cosa sia il C++, come sia nato e la sua evoluzione nel corso degli anni.

Il C++ è un linguaggio di programmazione compilato ad oggetti e di alto livello creato da Bjarne Stroustrup. Nacque nel 1979 come evoluzione del C sotto il nome di ‘C con classi’, prese il nome di C++ e venne rilasciata la sua prima versione commerciale nel 1985. Nel 1998 venne finalmente riconosciuto uno standard internazionale, ANSI C++. L’ultima versione del linguaggio è C++14, rilasciata il 15 dicembre 2014.

Bjarne_Stroustrup
Bjarne Stroustrup, programmatore danese e creatore del C++.

Il C++ è senza dubbio il linguaggio più potente, con una versatilità senza eguali (puoi fare praticamente ciò che vuoi) e con delle prestazioni altissime, dovute al fatto che comunica a livello molto basso con il computer. Per essere sfruttato a dovere, però, necessita di essere conosciuto a fondo. Numerosi videogames e software commerciali sono stati scritti in C++.

Andiamo a vedere come è possibile scrivere e compilare i programmi in C++.

Sebbene si possa utilizzare un semplice editor di testo (es. Blocco note per Windows o LeafPad per Linux) il consiglio che vi do è quello di utilizzare un IDE (Integrated Development Environment), ovvero un programma che offre una serie di tools utili allo sviluppo di software.

Personalmente vi consiglio di utilizzare Codeblocks (che utilizzo anch’io), un editor completo e versatile per C, C++ e Fortran disponibile per Windows, Linux e Mac OS e scaricabile a questo indirizzo.

Altro ottimo IDE è Visual Studio, sviluppato dalla Microsoft e quindi solo per sistemi Windows. Lo trovate disponibile gratuitamente in versione community a questo indirizzo.

Altri IDE degni di menzione sono CodeLite e Dev-Cpp. Quest’ultimo però è ormai obsoleto e non aggiornato da tempo.

I file che contengono codice in C++ hanno l’estensione *.cpp, sappiate comunque che li potete trovare con altre estensioni (es. *.h) in base al loro utilizzo all’interno di un progetto.

Dal prossimo post inizieremo a scrivere codice partendo da un semplice messaggio di “Hello world” e vedremo quali componenti sono necessarie a un programma in C++ per essere compilato e per funzionare correttamente. Un saluto e arrivederci al prossimo post.

Sinhuè Angelo Rossi