{"id":2348,"date":"2010-03-11T11:00:07","date_gmt":"2010-03-11T10:00:07","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=2348"},"modified":"2010-03-11T11:17:17","modified_gmt":"2010-03-11T10:17:17","slug":"c002-hello-world-in-cpp","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/c002-hello-world-in-cpp\/","title":{"rendered":"C#002 &#8211; Hello World in C++"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/ccpp.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/ccpp.png\" alt=\"C\/C++\" title=\"ccpp\" width=\"200\" height=\"100\" class=\"alignleft size-full wp-image-2377\" \/><\/a> <strong>Programmi e algoritmi<\/strong><\/p>\n<p>Eccoci al nostro secondo appuntamento con il nostro corso di C\/C++. Spero che tutti quelli che comincino la lettura di questo articolo abbiano effettivamente scaricato un compilatore, perch\u00e9 passeremo a breve alla pi\u00f9 classica delle applicazione, ovvero l&#8217;<strong>Hello World<\/strong>, da cui trarremo spunto per le prime nozioni teoriche sul C++.<\/p>\n<p>Prima di far ci\u00f2 parliamo un attimo, in generale, del concetto di Programma e di cosa significhi Programmare. Non volendomi di certo sostituire a professori di tutt&#8217;altro livello, ritengo lo stesso necessario chiarire cosa andiamo a fare effettivamente.<!--more--><\/p>\n<p>Il Programma, per definizione, \u00e8 un insieme di Istruzioni che seguono un ordine sequenziale. Per istruzione si intende una qualsiasi operazione di: Assegnazione, Confronto,Calcolo.<\/p>\n<p>Per essere un po&#8217; pi\u00f9 puntuali, potremmo dire che il Programma \u00e8 un Algoritmo scritto in un linguaggio di programmazione.\u00a0L&#8217;Algoritmo \u00e8 invece una sequenza finita di istruzioni atta a risolvere un determinato problema attraverso l&#8217;uso di un linguaggio comprensibile all&#8217;esecutore. Attenzione! L&#8217;Algoritmo, che \u00e8 alla base del programmare, non deve essere espresso, in fase di analisi, in un linguaggio di programmazione! Deve semplicemente chiarirci le idee su quale sia effettivamente il problema da risolvere. Per fase di analisi si intende quelle NECESSARIA fase di ragionamento sul problema che ci viene proposta. E&#8217; sottointeso che &#8220;nessuna analisi&#8221; corrisponde a &#8220;NESSUN PROGRAMMA FUNZIONANTE!&#8221;<\/p>\n<p>Un banale esempio di algoritmo per calcolare la somma, potrebbe essere cosi scritto per una persona con conoscenze matematiche:<\/p>\n<ul>\n<li>Somma questi due numeri<\/li>\n<\/ul>\n<p>Singola istruzione, comprensibile all&#8217;esecutore. Questo \u00e8 un algoritmo.<\/p>\n<p>Ma cosa succede se dobbiamo insegnarlo ad un bambino che sa contare solo sulle dita? L&#8217;algoritmo, in questo caso, diventerebbe piu articolato e presenterebbe alcune limitazioni logiche:<\/p>\n<ul>\n<li>Indica con le dita di una mano il primo numero<\/li>\n<li>Indica con le dita dell&#8217;altra mano il secondo numero<\/li>\n<li>Conta tutte le dita indicate da entrambe le mani<\/li>\n<\/ul>\n<p>Quali sono le limitazioni logiche? Sono dettate, in questo caso, dal massimo numero calcolabile con questo metodo, ovvero 10! Infatti una volta terminate le dita di entrambe le mani il bambino non sapr\u00e0 pi\u00f9 quale dito aggiungere. Tenete bene a mente questo concetto che sar\u00e0 successivamente ripreso parlando di Aritmetica Circolare. Sar\u00e0 strano leggerlo ma anche il computer non sa contare oltre un certo numero!<\/p>\n<p>Torniamo al concetto di Algoritmo. Il calcolatore, o meglio, il processore \u00e8 in realt\u00e0 pi\u00f9 &#8220;incapace&#8221; di un bambino. Dovremmo quindi scomporre tutti i nostri problemi in <strong>operazioni banalissime<\/strong> per rendergli il tutto comprensibile.<br \/>\nIl calcolatore comprende infatti solo il linguaggio binario. Ma allora come possiamo scrivere qualcosa in C\/C++ e farlo eseguire? Non volendo appesantire il discorso, basti sapere che il compilatore serve appunto a questo! Attraverso le sue fasi di compilazione rende le &#8220;complesse&#8221; istruzioni C\/C++, un &#8220;banale&#8221; linguaggio macchina, composto di soli 0 e 1.<\/p>\n<p>Premesse queste poche nozioni teoriche cominciamo con un po di pratica.<\/p>\n<h4>Hello World!<\/h4>\n<p><strong>Per gli utenti MAC OS X<\/strong><\/p>\n<p>Apriamo il nostro xCode e selezioniamo dal men\u00f9 File&#8211;&gt;New Project&#8211;&gt;Command Line Utility&#8211;&gt;C++ Tool<br \/>\nChiamiamo il progetto &#8220;<em>helloWorld<\/em>&#8220;, xCode aprir\u00e0 per noi diversi file. Prendiamo in esame il file <strong>main.cpp<\/strong> che rappresenta il file base di ogni programma in C++.<br \/>\nAll&#8217;apertura di questo file troviamo gi\u00e0 scritte diverse direttive, non preoccupiamocene, cancelliamo semplicemente tutto!<\/p>\n<p><strong>Per gli utenti WINDOWS<\/strong><\/p>\n<p>Apriamo Dev-C++ e clicchiamo su File&#8211;&gt;Nuovo&#8211;&gt;Progetto<br \/>\nSelezioniamo Console Application e assicuriamoci che sia selezionata la voce C++, diamo il nome <em>helloWorld<\/em> e salviamo il tutto. Dev-C++ crea per noi un file <strong>main.cpp<\/strong>, cancelliamo tutto il codice che troviamo al suo interno.<\/p>\n<p>A questo punto, che stiate utilizzando Mac Os X o Windows, avrete tutti davanti una pagina totalmente bianca, (il file main.cpp), il miglior punto di partenza \ud83d\ude09<\/p>\n<p>Scriviamo questo codice al suo interno, senza preoccuparci di cosa stiamo effettivamente scrivendo, verr\u00e0 spiegato subito dopo:<\/p>\n<pre lang=\"c\" line=\"1\" escaped=\"true\">\r\n#include <iostream>\r\n\r\nusing namespace std;\r\n\r\nint main() {\r\n   cout << \"Hello World!\\n\";\r\n   return 0;\r\n}\r\n<\/pre>\n<p>Vediamo il significato di tutte le istruzioni scritte:<\/p>\n<pre lang=\"c\" line=\"1\" escaped=\"true\">\r\n#include <iostream>\r\n<\/pre>\n<p>il C, nativamente, non include un metodo per l'input\/output, ovvero per acquisire dati dalla tastiera e per stampare a video. Abbiamo quindi la necessit\u00e0 di includere tramite la direttiva al precompilatore <em>#include<\/em> una libreria di funzioni, ovvero un altro file, presente nella cartella di installazione del compilatore in cui siano presenti funzioni che effettuino lettura e scrittura. La funzione che utilizzeremo per la lettura sar\u00e0 <strong>cin<\/strong>, la funzione che utilizzeremo per la scrittura a video sar\u00e0 invece <strong>cout<\/strong>.<\/p>\n<pre lang=\"c\" line=\"3\" escaped=\"true\">\r\nusing namespace std;\r\n<\/pre>\n<p>Questa seconda istruzione ha il compito di facilitarci un po' la vita. Infatti nel file <em>iostream<\/em> che abbimo incluso con la prima direttiva, la definizione di cin e cout \u00e8 data in realt\u00e0 come std::cin e std::cout. Utilizzando using namespace std; possiamo di fatto non scrivere std:: ad ogni richiamo di cin e cout con un grossissimo risparmio di tempo.<\/p>\n<p>Da notare la presenza del ; che nel C\/C++ \u00e8 il delimitatore di un istruzione. Al termine di ogni istruzione, quindi, \u00e8 assolutamente necessario inserire un punto e virgola per far comprendere al compilatore che l'istruzione termina li.<\/p>\n<p>Tuttavia le direttive al precompilatore non necessitano del ; ed infatti #include non termina con un ;<\/p>\n<pre lang=\"c\" line=\"5\" escaped=\"true\">\r\nint main() {\r\n<\/pre>\n<p>Questa istruzione corrisponde alla funzione base che deve essere presente in un qualsiasi programma C\/C++. Infatti, eliminandola, il programma non partir\u00e0 perch\u00e8 andr\u00e0 alla ricerca di tale funzione all'inifinito. Non soffermiamoci adesso sul perch\u00e9 non ci sia scritto semplicemente <em>main<\/em> ma <em>int main ()<\/em>, il discorso \u00e8 abbastanza lungo e verr\u00e0 trattato successivamente! All'interno delle parentesi graffe va scritto quello che effettivamente vogliamo la funzione faccia! Questa parte prende il nome di corpo o Body della funzione.<\/p>\n<pre lang=\"c\" line=\"6\" escaped=\"true\">\r\ncout << \"Hello World!\\n\";\r\n<\/pre>\n<p>Questa \u00e8 l'istruzione che compone il nostro body ed \u00e8 davvero molto semplice. Si limita a stampare a video una stringa di caratteri. La sintassi completa della funzione stampa a video \u00e8 cout << \"\"; e all'interno delle \"\" potremmo andare a scrivere qualsiasi cosa. Quanto stampato dalla funzione \u00e8 una stringa, un insieme di caratteri, per dirla banalmente una \"frase\". In C\/C++ le stringhe di caratteri sono racchiuse appunto tra \"\". \n\\n \u00e8 un carattere di escape, un semplice comando (vedremo pi\u00f9 avanti gli altri) che ci fa andare a capo dopo aver stampato la frase Hello World. Notiamo infine anche qui la presenza del punto e virgola.\n\n\n\n<pre lang=\"c\" line=\"7\" escaped=\"true\">\r\nreturn 0;\r\n<\/pre>\n<p>Per il momento tralasciamo questa istruzione che verr\u00e0 approfondita accuratamente in un tutorial dedicato ai ritorni delle funzioni e sul passaggio di variabili. Dobbiamo per\u00f2 sapere che \u00e8 strettamente legata all'aver scritto int prima di main. Capiremo in seguito il perch\u00e8.<\/p>\n<p>E' giunta l'ora di mandare il programma in esecuzione!!<\/p>\n<p><strong>Per gli utenti MAC OS X<\/strong><\/p>\n<p>Dal Menu Build cliccare su Build and Go. Se avrete scritto correttamente il codice nella barra inferiore dell'ambiente di compilazione avrete la scritta: \"Debugging of \"helloWorld\" ended normally.\", ma non vedrete nulla. Per visualizzare la vostra scritta, baster\u00e0 digitare Shift+Mela+R perch\u00e8 venga visualizzata la console, \u00e8 li infatti che avremo l'output del nostro piccolo programmino. Ed ecco proprio qui il vostro primo saluto in C++ \ud83d\ude42<\/p>\n<p><strong>Per gli utenti Windows<\/strong><\/p>\n<p>Dal Menu Esegui selezionare Compila ed Esegui o premere F9.<br \/>\nQui non avremo problemi a vedere il risultato che comparir\u00e0 automaticamente.<\/p>\n<p>Siamo giunti alla fine di questo nostro primo tutorial in C++. Nel prossimo tutorial, in cui affronteremo il concetto di variabile, introdurr\u00f2 il fondamentale concetto di Tipo su cui si basa tutto il C++. In realt\u00e0 variabili e tipo sono strettamente collegate ma questa, come si suol dire, \u00e8 un altra storia!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Programmi e algoritmi Eccoci al nostro secondo appuntamento con il nostro corso di C\/C++. Spero che tutti&#8230;<\/p>\n","protected":false},"author":156,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[127],"tags":[68,129,130,128,23],"class_list":["post-2348","post","type-post","status-publish","format-standard","hentry","category-pillole-di-cpp","tag-c","tag-compilatori","tag-devc","tag-lezioni","tag-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/156"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=2348"}],"version-history":[{"count":38,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2348\/revisions"}],"predecessor-version":[{"id":2515,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2348\/revisions\/2515"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=2348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=2348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=2348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}