<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Il blog di Leonardo</title>
	<atom:link href="http://blogs.academicclub.org/leonardo/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.academicclub.org/leonardo</link>
	<description></description>
	<lastBuildDate>Mon, 15 Feb 2010 23:11:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Alla scoperta dell&#8217;Addin di Visual Studio per Qt</title>
		<link>http://blogs.academicclub.org/leonardo/2010/02/16/alla-scoperta-delladdin-di-visual-studio-per-qt/</link>
		<comments>http://blogs.academicclub.org/leonardo/2010/02/16/alla-scoperta-delladdin-di-visual-studio-per-qt/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 23:11:46 +0000</pubDate>
		<dc:creator>Leonardo</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[Università]]></category>
		<category><![CDATA[Visual C++ 2008]]></category>

		<guid isPermaLink="false">http://blogs.academicclub.org/leonardo/?p=241</guid>
		<description><![CDATA[Vediamo in questo articolo altre peculiarità dell’utilizzo di Visual Studio con Qt. Ti mostro il progetto in un minuto Spesso comunicare la struttura del proprio progetto in breve tempo è una necessità, Visual studio offre una funzionalità automatica di diagramma molto simile ad UML che permette di visualizzare in maniera interattiva ed intuitiva le varie [...]]]></description>
			<content:encoded><![CDATA[<p>Vediamo in questo articolo altre peculiarità dell’utilizzo di Visual Studio con Qt.</p>
<h4>Ti mostro il progetto in un minuto</h4>
<p>Spesso <strong>comunicare</strong> la struttura del proprio progetto<strong> in breve tempo</strong> è una necessità, Visual studio offre una funzionalità automatica di diagramma molto simile ad UML che permette di visualizzare in maniera <strong>interattiva</strong> ed <strong>intuitiva</strong> le varie classi del proprio progetto e le relazione tra di esse.</p>
<p><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="classDiagram" src="http://blogs.academicclub.org/leonardo/files/2010/02/classDiagram1.png" width="222" height="310" /></p>
<p>Per usufruirne basta cliccare sul pulsante <strong>View Class Diagram</strong> del <strong>Solution Explorer</strong>, verrà incorporato nel nostro progetto un file <strong>ClassDiagram.cd</strong> contenente il diagramma di tutte le nostre classi, enumerazioni, etc..</p>
<p><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="classDiagram" src="http://blogs.academicclub.org/leonardo/files/2010/02/classDiagram.png" width="550" height="436" /></p>
<p>E’ inoltre possibile aggiungere commenti nel diagramma che verrà automaticamente aggiornato mano a mano che si modificherà il codice. Una vera comodità se si è in <strong>laboratorio</strong> ed in pochi minuti si deve <strong>riassumere</strong> al prof quello che è stato fatto per ricevere una valutazione o consigli più adeguati. Il diagramma è esportabile come immagine per una fruizione (non interattiva) anche su computer senza Visual Studio installato.</p>
<h4>La documentazione è servita</h4>
<p>Come Qt Creator anche tramite Visual Studio è possibile usufruire della documentazione tramite il ben noto tasto F1. Tutta la documentazione si integra infatti nel sistema di guida rendendo possibile effettuare ricerche in contemporanea su tutte le guide installate.</p>
<p><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="help" src="http://blogs.academicclub.org/leonardo/files/2010/02/help.png" width="550" height="376" /></p>
<h4>Integrazione con Qt Creator</h4>
<p>E’ possibile salvare ed aprire progetti nel formato nativo di Qt Creator, i file con estensione .pro. Questo rende possibile lavorare ad un progetto con diversi programmi o rendere fruibile il proprio lavoro da persone che non hanno Visual Studio installato.</p>
<p><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="createpro" src="http://blogs.academicclub.org/leonardo/files/2010/02/createpro.png" width="550" height="391" /></p>
<p>L’unica operazione da compiere è scegliere “<strong>Create basic .pro File”</strong> dal menù <strong>Qt</strong>, questa funzionalità rende interessante l’utilizzo di Visual Studio anche in quei corsi universitari dove la consegna è tassativamente un progetto redatto in Qt Creator in quanto il prodotto finale è identico.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.academicclub.org/leonardo/2010/02/16/alla-scoperta-delladdin-di-visual-studio-per-qt/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Utilizzare Qt4 con Visual Studio</title>
		<link>http://blogs.academicclub.org/leonardo/2009/11/22/utilizzare-qt-4-con-visual-studio/</link>
		<comments>http://blogs.academicclub.org/leonardo/2009/11/22/utilizzare-qt-4-con-visual-studio/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 14:07:13 +0000</pubDate>
		<dc:creator>Leonardo</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[Visual C++ 2008]]></category>

		<guid isPermaLink="false">http://blogs.academicclub.org/leonardo/?p=235</guid>
		<description><![CDATA[Durante la propria carriera università si avrà molto probabilmente a che fare con diverse librerie e diversi framework. Qt è un framework molto diffuso in ambito universitario soprattutto per la sua capacità di girare su molte piattaforme (Linux/X11, Windows, Mac, etc..) ma purtroppo non offre un ambiente di sviluppo evoluto in grado di supportare efficacemente [...]]]></description>
			<content:encoded><![CDATA[<p>Durante la propria carriera università si avrà molto probabilmente a che fare con diverse librerie e diversi framework.<strong> Qt</strong> è un framework molto diffuso in ambito universitario soprattutto per la sua capacità di girare su molte piattaforme (Linux/X11, Windows, Mac, etc..) ma purtroppo <strong>non offre un ambiente di sviluppo evoluto</strong> in grado di supportare efficacemente gli studenti nella scrittura dei propri programmi (chi l’ha usato per più di qualche minuto sa bene cosa intendo, errori col passaggio da una versione all&#8217;altra, makefile corrotti, directory con spazi talvolta non supportate, associazione dei file di progetto al programma non funzionante, debugger instabile..).</p>
<p><strong>Qt Creator</strong> è l’ambiente di sviluppo fornito in serie con Qt ed anche se il programma promette bene è al giorno d’oggi piuttosto povero di funzioni in confronto ad altri ambienti e ancora affetto da diversi bug “di gioventù”. Nel momento in cui sto scrivendo ha raggiunto la versione 1.3.0.</p>
<p>Vediamo quindi come utilizzare <strong>Visual Studio</strong> come solido sostituto a Qt Creator per scrivere programmi QT.</p>
<p>Prima di tutto verifichiamo di aver installato Visual Studio 2008 Professional o una versione superiore (es. Team System) col relativo <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&amp;displaylang=en">Service Pack</a>.</p>
<p><strong>NB:</strong> Non è possibile purtroppo utilizzare le versioni express a causa del mancato supporto agli add-in.</p>
<p>Gli studenti che non hanno Visual Studio Professional (o Team System) possono scaricarlo <strong>gratuitamente</strong> dal sito MSDNAA della propria università.</p>
<p>Scarichiamo ed installiamo <a href="http://qt.nokia.com/downloads/visual-studio-add-in">Qt4 Visual Studio Add-in 1.1.2</a> dal sito della Nokia, l’installazione è molto semplice e si riduce a cliccare più volte sul pulsante Next.</p>
<p>Una volta terminata l’installazione scarichiamo ed installiamo la versione di Qt4 compilata per Visual Studio dal sito <a href="http://code.google.com/p/qt-msvc-installer">http://code.google.com/p/qt-msvc-installer</a>.</p>
<p><strong>NB</strong>: E’ possibile scaricare i sorgenti dal sito Nokia e <strong>compilare sul proprio computer</strong> autonomamente <strong>Qt4</strong> però è un operazione molto lunga (più di 4 ore su un computer Dual Core a 2 GHz e oltre 4 GB di codice compilato) e richiede una conoscenza profonda del sistema di build utilizzato da Qt per evitare errori. E’ un <strong>operazione sconsigliata</strong> visto che è disponibile un pacchetto installante di meno di 200 MB (con la possibilità di disinstallarlo), ottimizzato e ripulito per un minor spazio su disco.</p>
<p>La versione di Qt4 compilata per Visual Studio da scaricare è <a title="qt-win32-opensource-4.5.2-vs2008.exe" href="http://qt-msvc-installer.googlecode.com/files/qt-win32-opensource-4.5.2-vs2008.exe">qt-win32-opensource-4.5.2-vs2008.exe</a> per la versione a 32 bit e <a title="qt-win64-opensource-4.5.2-vs2008.exe" href="http://qt-msvc-installer.googlecode.com/files/qt-win64-opensource-4.5.2-vs2008.exe">qt-win64-opensource-4.5.2-vs2008.exe</a> per i sistemi a 64 bit.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/11/QtOS.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/11/QtOS_thumb.png" border="0" alt="Installazione Qt 4 compilato per Visual Studio 2008" width="502" height="390" /></a></p>
<p>L’installazione è anch’essa molto semplice da eseguire, basterà premere su Next qualche volta e il programma si installerà correttamente. Alla fine potremo scegliere di lanciare un programma dimostrativo che mostra le potenzialità di Qt.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/11/QtExamples.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/11/QtExamples_thumb.png" border="0" alt="Qt 4 Examples" width="502" height="357" /></a></p>
<p>Una volta installato Qt troveremo nel menù start la voce<strong> Visual Studio 2008 with Qt 4.5.2</strong>, clicchiamoci per lanciare Visual Studio 2008. Basterà compiere questa operazione solamente la prima volta, le successive potremo avviare Visual Studio normalmente.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/11/QtVsStart.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/11/QtVsStart_thumb.png" border="0" alt="Primo avvio di Qt per Visual Studio" width="502" height="339" /></a></p>
<p>Verrà aperto Visual Studio ma in <strong>File/Nuovo Progetto</strong> troveremo dei <strong>nuovi modelli</strong> per creare <strong>applicazioni Qt</strong>.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/11/NewProjectQT.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/11/NewProjectQT_thumb.png" border="0" alt="Nuovo progetto Qt" width="502" height="356" /></a></p>
<p>Scegliendo <strong>Qt Application</strong> e confermando la nostra scelta col tasto <strong>OK</strong> apparirà un <strong>wizard</strong> che ci permetterà di impostare il nome del progetto e altre impostazioni. Le funzionalità di Visual Studio come l’<strong>intellisense</strong> e il <strong>debugger avanzato</strong> sono ora a nostra completa disposizione anche in progetti Qt.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/11/intellisense.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/11/intellisense_thumb.png" border="0" alt="Intellisense in Qt" width="502" height="356" /></a></p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/11/debug.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/11/debug_thumb.png" border="0" alt="Debug avanzato in Qt" width="502" height="357" /></a></p>
<p>Analizzeremo nel prossimo articolo ulteriori funzionalità di Visual Studio sfruttabili con Qt. Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.academicclub.org/leonardo/2009/11/22/utilizzare-qt-4-con-visual-studio/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Imparare l&#8217;Assembly con Visual C++</title>
		<link>http://blogs.academicclub.org/leonardo/2009/08/24/imparare-lassembly-con-visual-c/</link>
		<comments>http://blogs.academicclub.org/leonardo/2009/08/24/imparare-lassembly-con-visual-c/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 21:04:22 +0000</pubDate>
		<dc:creator>Leonardo</dc:creator>
				<category><![CDATA[Assembly]]></category>
		<category><![CDATA[Visual C++ 2008]]></category>

		<guid isPermaLink="false">http://blogs.academicclub.org/leonardo/?p=227</guid>
		<description><![CDATA[Durante il proprio corso di studi universitario si avrà sicuramente a che fare con l’Assembly o linguaggio macchina in corsi come Fondamenti di Informatica, Calcolatori Elettronici o Architettura degli Elaboratori. Prima di addentrarci nel mondo dell’Assembly vediamo però cosa non sempre viene detto nei corsi universitari: A cosa può servire oggi? -Comprensione più profonda del [...]]]></description>
			<content:encoded><![CDATA[<p>Durante il proprio corso di studi universitario si avrà sicuramente a che fare con l’<strong>Assembly</strong> o linguaggio macchina in corsi come <strong>Fondamenti di Informatica</strong>, <strong>Calcolatori Elettronici</strong> o <strong>Architettura degli Elaboratori</strong>.</p>
<p>Prima di addentrarci nel mondo dell’Assembly vediamo però <strong>cosa non sempre viene detto</strong> nei corsi universitari:</p>
<h2><em>A cosa può servire oggi?</em></h2>
<p>-<strong>Comprensione</strong> più profonda del funzionamento dei calcolatori e dei linguaggi di programmazione<br />
-Scrittura di <strong><a href="http://it.wikipedia.org/wiki/Driver">driver</a></strong> o <strong>parti di sistemi operativi</strong><br />
-<strong>Ottimizzazione</strong> di parti critiche dal punto di vista delle performance di programmi<br />
-Analisi di <strong>Dump File</strong></p>
<p>La lista non è completa ma questi sono i <strong>principali motivi</strong> che spingono ad imparare l’Assembly.</p>
<p>Dal <strong>punto di vista accademico</strong> la cosa più importante è naturalmente la <strong>comprensione</strong> del funzionamento <strong>dei microprocessori</strong> e dei <strong>linguaggi di programmazione</strong> ed è qui che ci focalizzeremo in questo articolo.</p>
<p>Dal <strong>punto di vista reale</strong> la scrittura di driver o parti di sistemi operativi è rilegata a <strong>piccole nicchie</strong> di programmatori mentre l’ottimizzazione di parti critiche di programmi è soprattutto diffusa in <strong>applicazioni scientifiche</strong> e nel<strong> mondo videoludico</strong>. E’ necessario sottolineare che solamente <strong>in rari casi</strong> (ad esempio sostituendo codice C/C++ con istruzioni Assembly <a href="http://it.wikipedia.org/wiki/SSE4">SSE4</a> che il compilatore non è in grado di generare) <strong>e in piccole parti di programmi viene utilizzato l’Assembly</strong> in quanto difficilmente si migliorano significativamente le prestazioni di un applicativo. Spesso si ottiene proprio l’effetto contrario a causa delle ormai molto complesse <a href="http://it.wikipedia.org/wiki/Microprocessore_superscalare">pipeline superscalari</a> dei nuovi processori.</p>
<p>Infine l’analisi di Dump File ovvero l’analisi di file contenenti l’immagine della memoria al momento di un crash (causato per esempio da un bug dell’applicazione) è molto rilevante nel <strong>supporto tecnico di livello avanzato</strong>.</p>
<table border="0" cellspacing="0" cellpadding="2" width="638">
<tbody>
<tr>
<td width="636" valign="top"><a href="http://blogs.academicclub.org/leonardo/files/2009/08/taskmanagercreatedump.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/08/taskmanagercreatedump-thumb.png" border="0" alt="Task Manager create dump" width="640" height="447" /></a></td>
</tr>
<tr>
<td width="636" valign="top"><em>Il Task Manager di Windows così come le eccezioni non gestite permettono di creare Dump File dei processi in esecuzione per poter risolvere i bug più ardui, sono richieste però conoscenze dell’Assembly nella maggior parte dei casi per poterli esaminare proficuamente.</em></td>
</tr>
</tbody>
</table>
<h2><em>Assembly, Assembler e codice macchina</em></h2>
<p>Chiariamo cos’è l’<strong>Assembly</strong>, l’<strong>Assembler</strong> e il <strong>codice macchina</strong>, spesso confusi anche dai professori più prestigiosi:</p>
<p>- <a href="http://it.wikipedia.org/wiki/Assembly"><strong>l’Assembly</strong></a> è il <strong>linguaggio di programmazione</strong> più vicino al linguaggio macchina vero e proprio.</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="400" valign="top">MOV EAX, 10<br />
MOV EBX, 20<br />
ADD EAX, EBX</td>
</tr>
<tr>
<td width="400" valign="top"><em>Esempio di listato Assembly</em></td>
</tr>
</tbody>
</table>
<p>La lista di istruzioni Assembly viene <strong>costantemente ampliata</strong> da Intel, Amd e dagli altri produttori di processori per permettere di sfruttare al massimo ogni nuovo processore.<br />
I <strong>manuali ufficiali</strong> per i processori Intel sono scaricabili presso <a title="http://developer.intel.com/products/processor/manuals/index.htm" href="http://developer.intel.com/products/processor/manuals/index.htm">http://developer.intel.com/products/processor/manuals/index.htm</a> mentre per i processori Amd è possibile scaricare i manuali da <a title="http://developer.amd.com/DOCUMENTATION/GUIDES/Pages/default.aspx#manuals" href="http://developer.amd.com/DOCUMENTATION/GUIDES/Pages/default.aspx#manuals">http://developer.amd.com/DOCUMENTATION/GUIDES/Pages/default.aspx#manuals</a>.</p>
<p>- <a href="http://it.wikipedia.org/wiki/Assembler"><strong>l’Assembler</strong></a> è il <strong>programma</strong> che converte il linguaggio assembly in codice macchina, per certi versi simile al compilatore. Famosi Assembler sono <a href="http://en.wikipedia.org/wiki/MASM">MASM</a> e <a href="http://en.wikipedia.org/wiki/Turbo_Assembler">TASM</a>. Nel corso di questo articolo ci si avvarrà di Visual C++ e delle sue capacità di mixare codice C/C++ e Assembly.</p>
<p>- il <a href="http://it.wikipedia.org/wiki/Linguaggio_macchina"><strong>codice macchina</strong></a><strong> </strong>o linguaggio macchina è <strong>l’insieme di 1 e 0</strong>, quasi sempre rappresentati secondo la rappresentazione esadecimale per una migliore leggibilità, che il processore è capace di eseguire. E’ in genere prodotto dall’Assembler.</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="400" valign="top">B8 0A 00 00 00<br />
BB 14 00 00 00<br />
03 C3</td>
</tr>
<tr>
<td width="400" valign="top"><em>Codice macchina prodotto da MASM per il listato Assembly del precedente esempio</em></td>
</tr>
</tbody>
</table>
<h2><em>Come imparare l’Assembly</em></h2>
<p>Se si hanno le basi di C/C++ il modo migliore per perfezionare le proprie conoscenze ed imparare senza perdere tempo l’Assembly è <strong>provare</strong> direttamente nei propri programmi le istruzioni Assembly anziché imparare nuovi strumenti e creare da zero applicazioni completamente in Assembly.</p>
<h2><em>Dal C/C++ all’Assembly</em></h2>
<p>Vediamo in questo articolo come è possibile visionare il codice Assembly e il codice macchina corrispondente al proprio programma C/C++.</p>
<p>Creiamo un nuovo progetto vuoto (marcando la casella <strong>Empty Project</strong> durante il wizard) chiamato <strong>CppAssembly</strong> di tipo <strong>Win32 console application</strong> e aggiungiamo ora al progetto un file chiamato<strong> CppAssembly.cpp</strong> contenente il seguente codice:</p>
<pre class="brush: cpp;">// In questo esempio viene utilizzato printf
// invece che cout per una maggiore semplicit
// del listato Assembly corrispondente
#include &lt;stdio.h&gt;

void main()
{
    int x = 5;
    int y = 6;
    printf(&quot;%d&quot;,x+y);
    return;
}</pre>
<p>Impostiamo in modalità <strong>Release</strong> il nostro progetto e disabilitiamo le ottimizzazioni andando sul menù <strong>Project</strong>, scegliendo <strong>Properties/Configuration Properties/C/C++/Optimization</strong> e impostando la proprietà <strong>Optimization </strong>a <strong>Disabled (/Od) </strong>per evitare di includere nel programma compilato istruzioni per ottimizzare le prestazioni ma di intralcio per la <strong>lettura</strong> e <strong>comprensione</strong> del listato Assembly.</p>
<p><img style="border: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/08/optimization-thumb.png" border="0" alt="Optimization" /></p>
<p>Impostiamo adesso un breakpoint sulla prima istruzione (<em><strong>int x = 5;</strong></em>) e premiamo <strong>F5</strong> per fermare l’esecuzione nel punto indicato.</p>
<p>Per visualizzare il codice Assembly del nostro programma facciamo click col tasto destro e andiamo su<strong> Go To Disassembly</strong> come nella seguente immagine:</p>
<p><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/08/gotodisassembly.png" border="0" alt="Go to disassembly" /></p>
<p>Apparirà tra il resto il seguente codice Assembly:</p>
<p><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/08/disassembly.png" border="0" alt="Disassembly" width="559" height="274" /></p>
<p>Possiamo notare dopo ogni istruzione C/C++ (in nero) il relativo codice Assembly (in grigio) assieme al codice macchina e alla relativa posizione nel programma.</p>
<p>L’istruzione<em> <strong>int x = 5</strong></em> si trasforma (tralasciando la dichiarazione della variabile x presente in un altro punto non mostrato nell’immagine) nel <strong>linguaggio Assembly</strong> in <em><strong>mov dword ptr [x], 5</strong></em> che, semplificando, altro non fa che copiare il valore 5 nell’indirizzo di memoria puntato da x.</p>
<p>Il numero in esadecimale <strong>01351006</strong> specifica la <strong>posizione</strong> iniziale <strong>dei byte</strong> del codice macchina nel file binario (file .exe) ove il programma è contenuto.</p>
<p>Il <strong>codice macchina</strong> di questa istruzione è<strong><em> C7 45 F8 05 00 00 00</em></strong> ed è teoricamente possibile ma del tutto inutile se non in casi molto particolari scrivere manualmente tutto il programma in codice macchina.</p>
<p>Per esempio per codificare manualmente questa istruzione dovremmo andare a pagina 689 dell’<a href="http://developer.intel.com/Assets/PDF/manual/253666.pdf">Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M</a> e cercare il codice relativo all’istruzione MOV tra un registro e un valore immediato.</p>
<table border="0" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="400" valign="top"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/08/movistr.png" border="0" alt="MOV istr" width="596" height="23" /></td>
</tr>
<tr>
<td width="400" valign="top"><em>Codice relativo all’istruzione MOV riportato dal manuale Intel</em></td>
</tr>
</tbody>
</table>
<p>Oltre a tale codice dovremmo aggiungere il codice del puntatore al registro (definito anch’esso tra i manuali) e il valore immediato. Tutto questo è una <strong>fatica spesso inutile</strong> dato che la corrispondenza tra codice macchina e linguaggio Assembly è <strong>uno ad uno</strong> (1:1) quindi non ottimizzabile manualmente, ed è questo il motivo principale per cui sono nati gli <strong>Assembler</strong>.</p>
<p>Concludendo Visual C++ offre tra i suoi <strong>potenti strumenti di Debug</strong> la <strong>visualizzazione dell’Assembly</strong> che si dimostra molto <strong>utile nello studio</strong> del linguaggio e nella sua <strong>comprensione</strong> grazie a conoscenze già consolidate di C/C++. Torneremo nel prossimo articolo sulle potenzialità di Visual C++ e vedremo come analizzare i registri della CPU e la memoria.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.academicclub.org/leonardo/2009/08/24/imparare-lassembly-con-visual-c/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Installazione passo-passo di Visual C++ Express 2008</title>
		<link>http://blogs.academicclub.org/leonardo/2009/07/18/installazione-passo-passo-di-visual-c-express-2008/</link>
		<comments>http://blogs.academicclub.org/leonardo/2009/07/18/installazione-passo-passo-di-visual-c-express-2008/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 09:46:33 +0000</pubDate>
		<dc:creator>Leonardo</dc:creator>
				<category><![CDATA[Visual C++ 2008]]></category>

		<guid isPermaLink="false">http://blogs.academicclub.org/leonardo/?p=216</guid>
		<description><![CDATA[Vediamo in questo articolo come installare gratuitamente e senza limiti di tempo, anche per uso lavorativo, Visual C++ Express 2008. Nota Bene: Per chi non ha a disposizione una linea veloce&#160; è consigliabile scaricare da un amico con una linea ADSL o dalla propria facoltà se possibile il DVD installabile off-line a questo indirizzo. I [...]]]></description>
			<content:encoded><![CDATA[<p>Vediamo in questo articolo come installare <strong>gratuitamente</strong> e senza limiti di tempo, anche per uso lavorativo, Visual C++ Express 2008.</p>
<p><strong>Nota Bene:</strong> Per chi non ha a disposizione una linea veloce&#160; è consigliabile scaricare da un amico con una linea ADSL o dalla propria facoltà se possibile il DVD installabile off-line a <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;FamilyID=3254c868-bcb9-412c-95c6-d100c872ec60">questo indirizzo</a>.</p>
<p>I requisiti minimi sono un sistema operativo Windows XP, Windows Server 2003, Windows Vista o Windows 7 (tutti anche a 64 bit), 192 MB di RAM e 1,3 GB di spazio libero su disco per l’installazione completa.</p>
<p>Chi ha una linea ADSL o ad alta velocità può scaricare direttamente in pochi minuti il programma, vediamo come:</p>
<p>Andiamo all’indirizzo <a title="http://www.microsoft.com/express/vc/" href="http://www.microsoft.com/express/vc/">http://www.microsoft.com/express/vc/</a>, individuiamo la sezione Visual C++ 2008 Express Edition, scegliamo la nostra lingua e clicchiamo Download.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/07/downloadvcexpita.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="downloadVC  ExpIta" src="http://blogs.academicclub.org/leonardo/files/2009/07/downloadvcexpita-thumb.png" width="351" height="187" /></a></p>
<p>In alternativa è possibile scaricare il programma di installazione in italiano direttamente da <a href="http://download.microsoft.com/download/6/8/C/68C69BA8-8176-4DB1-BEDB-69F8A656FEFC/vcsetup.exe">questo link</a>.    <br />Il programma di installazione è di pochi Megabyte ma sarà necessario essere connessi per scaricare dati aggiuntivi (il programma vero e proprio) durante l’installazione.</p>
<p>Eseguiamo direttamente il file senza salvarlo sul computer</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/07/run.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="Run" src="http://blogs.academicclub.org/leonardo/files/2009/07/run-thumb.png" width="381" height="224" /></a></p>
<p>Dopo pochi istanti apparirà il programma di installazione di Visual C++ Express 2008, scegliamo avanti</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/07/setup1.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="Setup1" src="http://blogs.academicclub.org/leonardo/files/2009/07/setup1-thumb.png" width="506" height="458" /></a></p>
<p>Dopo aver accettato la licenza di utilizzo ci verranno proposti software aggiuntivi molto utili ma per il momento togliamo le spunte ai vari prodotti facoltativi e clicchiamo su Avanti. Sarà possibile installare tale software quando avremo la necessità effettiva di utilizzarlo. </p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/07/setup2.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="setup2" src="http://blogs.academicclub.org/leonardo/files/2009/07/setup2-thumb.png" width="506" height="458" /></a></p>
<p>Nella schermata successiva ci verrà mostrata la dimensione del download che il programma di installazione effettuerà (è necessario essere connessi ad internet) e lo spazio totale che verrà occupato su disco. Clicchiamo Installa per avviare l’installazione.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/07/setup3.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="setup3" src="http://blogs.academicclub.org/leonardo/files/2009/07/setup3-thumb.png" width="506" height="458" /></a></p>
<p>L’installazione durerà qualche minuto (in base alla velocità della linea e alla velocità del disco fisso) </p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/07/setup4.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="setup4" src="http://blogs.academicclub.org/leonardo/files/2009/07/setup4-thumb.png" width="506" height="458" /></a></p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/07/setup5.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="setup5" src="http://blogs.academicclub.org/leonardo/files/2009/07/setup5-thumb.png" width="506" height="458" /></a> </p>
<p>Una volta completata vi verrà richiesto di registrare gratuitamente il prodotto entro 30 giorni, la registrazione è facile e veloce, vediamo come effettuarla. </p>
<p>Apriamo il programma appena installato dal menù Start</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/07/start.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="start" src="http://blogs.academicclub.org/leonardo/files/2009/07/start-thumb.png" width="506" height="316" /></a> </p>
<p>Apparirà una finestra per informarci che l’ambiente di sviluppo è in fase di preparazione, questa finestra apparirà solamente la prima volta dopodiché l’avvio sarà molto rapido (in genere qualche secondo)</p>
<p>&#160;<a href="http://blogs.academicclub.org/leonardo/files/2009/07/firstload.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="FirstLoad" src="http://blogs.academicclub.org/leonardo/files/2009/07/firstload-thumb.png" width="396" height="130" /></a> </p>
<p>Dopo qualche istante apparirà Visual C++ 2008 Express, andiamo sul menù “<strong>?</strong>” e scegliamo “<strong>Registra il prodotto</strong>”.</p>
<p>&#160;<a href="http://blogs.academicclub.org/leonardo/files/2009/07/registraprodotto.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="RegistraProdotto" src="http://blogs.academicclub.org/leonardo/files/2009/07/registraprodotto-thumb.png" width="506" height="364" /></a></p>
<p>Clicchiamo su “<strong>Effettuare adesso la registrazione</strong>” per ottenere il codice da inserire nella casella di testo sottostante.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/07/finestraregistrazione.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="FinestraRegistrazione" src="http://blogs.academicclub.org/leonardo/files/2009/07/finestraregistrazione-thumb.png" width="486" height="390" /></a> </p>
<p>La registrazione si concretizza nel rispondere ad alcune domande online e inserire le proprie generalità. Richiede un account MSN Hotmail, MSN Messenger o Passport, se non ne avete uno lo potete creare gratuitamente cliccando su <strong>Registra</strong>.</p>
<p>&#160;<a href="http://blogs.academicclub.org/leonardo/files/2009/07/regwl.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="RegWL" src="http://blogs.academicclub.org/leonardo/files/2009/07/regwl-thumb.png" width="506" height="287" /></a> </p>
<p>Dopo aver inserito il codice e cliccato su <strong>Completa la registrazione</strong> nella finestra precedente siamo pronti per lavorare senza limiti di tempo con Visual C++ 2008 Express.</p>
<p>&#160;<a href="http://blogs.academicclub.org/leonardo/files/2009/07/vce.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="VC  E" src="http://blogs.academicclub.org/leonardo/files/2009/07/vce-thumb.png" width="506" height="363" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.academicclub.org/leonardo/2009/07/18/installazione-passo-passo-di-visual-c-express-2008/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dev-C++ o Visual C++ Express, quale usare?</title>
		<link>http://blogs.academicclub.org/leonardo/2009/06/23/dev-c-o-visual-c-express-quale-usare/</link>
		<comments>http://blogs.academicclub.org/leonardo/2009/06/23/dev-c-o-visual-c-express-quale-usare/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 15:33:46 +0000</pubDate>
		<dc:creator>Leonardo</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Università]]></category>
		<category><![CDATA[Visual C++ 2008]]></category>

		<guid isPermaLink="false">http://blogs.academicclub.org/leonardo/?p=186</guid>
		<description><![CDATA[Spesso il primo programma che si impara in ambito accademico per scrivere codice C/C++ è Dev-C++ ma non è detto che sia sempre il più adatto. Vediamo brevemente cosa cambia da Visual C++ e quali sono i vantaggi e gli svantaggi di entrambi. Dev-C++ è un ambiente leggero pensato per creare piccoli programmi, ha come [...]]]></description>
			<content:encoded><![CDATA[<p>Spesso il primo programma che si impara in ambito accademico per scrivere codice C/C++ è Dev-C++ ma <strong>non</strong> è detto che sia <strong>sempre</strong> il più <strong>adatto</strong>. Vediamo brevemente cosa cambia da Visual C++ e quali sono i <strong>vantaggi</strong> e gli <strong>svantaggi</strong> di entrambi.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/devcpp.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/06/devcpp-thumb.png" border="0" alt="devcpp" width="674" height="502" /></a><br />
Dev-C++ è un ambiente <strong>leggero</strong> pensato per creare <strong>piccoli</strong> programmi, ha come punto di forza <strong>pochi comandi</strong> e per questo è molto <strong>facile</strong> da apprendere ma è purtroppo <strong>abbandonato</strong> (non più sviluppato) dal 2005.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/devcppsourceforge.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/06/devcppsourceforge-thumb.png" border="0" alt="devcpp-sourceforge" width="572" height="460" /></a></p>
<p>L’abbondono del programma si traduce in una serie di <strong>bug</strong> più o meno fastidiosi, il più vistoso che si può incontrare è relativo al <strong>Debug</strong> (controllo) della proprio codice. Non è detto inoltre che in futuro “giri” su nuovi sistemi operativi.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/debug.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/06/debug-thumb.png" border="0" alt="debug" width="674" height="483" /></a></p>
<p>Scegliendo <strong>Debug</strong> dal menù <strong>Debug</strong> verrà infatti chiesto di abilitare in automatico l’aggiunta di <strong>speciali informazioni</strong> necessarie per il debug del proprio programma.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/debugging-bug.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://blogs.academicclub.org/leonardo/files/2009/06/debugging-bug-thumb.png" border="0" alt="debugging_bug" width="674" height="486" /></a><br />
Purtroppo rispondendo <strong>Yes</strong> non verranno automaticamente aggiunte ed eseguire il debug richiederà la modifica manuale delle corrette impostazioni.</p>
<p>Un <strong>vantaggio</strong> indubbio di <strong>Dev-C++</strong> in progetti <strong>monofile</strong> è la possibilità di compilare sorgenti senza creare a priori un progetto, a differenza di <strong>Visual C++</strong> che richiede la <strong>creazione</strong> (seppur guidata) di una <strong>soluzione</strong> prima di poter compilare.</p>
<p>Questa <strong>scelta</strong> è <strong>riconducibile</strong> sia alla ricchezza di <strong>opzioni</strong> che <strong>Visual C++</strong> offre per la compilazione sia al target di utenti che lo usano <strong>professionalmente</strong> in progetti composti in genere da <strong>diversi file</strong> per una migliore organizzazione di <strong>logiche complesse</strong>.</p>
<p>Ricapitolando:</p>
<p><strong><em>Dev-C++</em></strong></p>
<table border="1" cellspacing="0" cellpadding="2" width="556">
<tbody>
<tr>
<td width="143" valign="top"><strong>Punti di forza</strong></td>
<td width="411" valign="top"><strong>Svantaggi</strong></td>
</tr>
<tr>
<td width="143" valign="top">Molto leggero</td>
<td width="411" valign="top">Poche funzionalità</td>
</tr>
<tr>
<td width="143" valign="top">Facile da imparare</td>
<td width="411" valign="top">E’ utilizzato solamente nel mondo accademico, raramente nel mondo del lavoro</td>
</tr>
<tr>
<td width="143" valign="top">E’ possibile compilare i file sorgenti senza dover creare un progetto</td>
<td width="411" valign="top">Non è più sviluppato dal 2005, alcuni bug sono presenti da anni</td>
</tr>
<tr>
<td width="143" valign="top">Gratutito anche per uso commerciale</td>
<td width="411" valign="top">E’ più difficile controllare se i propri programmi funzionano correttamente (scarne e/o incomplete funzionalità di Debug )</td>
</tr>
</tbody>
</table>
<p><strong><em>Visual C++ Express</em></strong></p>
<table border="1" cellspacing="0" cellpadding="2" width="555">
<tbody>
<tr>
<td width="199" valign="top"><strong>Punti di forza</strong></td>
<td width="354" valign="top"><strong>Svantaggi</strong></td>
</tr>
<tr>
<td width="199" valign="top">Estremamente ricco di opzioni</td>
<td width="354" valign="top">La padronanza completa dell’ambiente non è immediata come Dev-C++ per via delle numerose possibilità offerte.</td>
</tr>
<tr>
<td width="199" valign="top">Usato nel mondo del lavoro, costituisce un elemento preferenziale in molti casi di un curriculum</td>
<td width="354" valign="top">Bisogna creare una progetto per compilare un file sorgente, poco indicato per compilare progetti monofile</td>
</tr>
<tr>
<td width="199" valign="top">Debug ricco e semplice</td>
<td width="354" valign="top"> </td>
</tr>
<tr>
<td width="199" valign="top">Include una ampia documentazione contente esempi di comandi</td>
<td width="354" valign="top"> </td>
</tr>
<tr>
<td width="199" valign="top">Gratutito anche per uso commerciale</td>
<td width="354" valign="top"> </td>
</tr>
</tbody>
</table>
<p>In conclusione per uno studente la pecca peggiore è la <strong>scarna esperienza</strong> di debug che <strong>Dev-C++</strong> offre, non ricca come in Visual C++. Per progetti di <strong>esame</strong> <strong>non banali</strong> è consigliabile <strong>scrivere</strong> e <strong>debuggare</strong> il proprio codice con <strong>Visual C++</strong> mentre per programmi di <strong>poche righe</strong> e di un solo file <strong>Dev-C++</strong> risulta senza dubbio la <strong>scelta migliore</strong>. E’ comunque possibile installare <strong>entrambi</strong> contemporaneamente.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.academicclub.org/leonardo/2009/06/23/dev-c-o-visual-c-express-quale-usare/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Programma adesso fermati! Ti devo controllare</title>
		<link>http://blogs.academicclub.org/leonardo/2009/06/06/programma-adesso-fermati-ti-devo-controllare/</link>
		<comments>http://blogs.academicclub.org/leonardo/2009/06/06/programma-adesso-fermati-ti-devo-controllare/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 06:31:16 +0000</pubDate>
		<dc:creator>Leonardo</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Visual C++ 2008]]></category>

		<guid isPermaLink="false">http://blogs.academicclub.org/leonardo/?p=176</guid>
		<description><![CDATA[Dopo aver provato ad eseguire riga per riga il nostro codice ci saremmo sicuramente detti: Forte! Adesso posso capirci qualcosa ma se volessi fermare l’esecuzione del programma alla riga N per controllare ad esempio i valori delle variabili interne dovrei premere N volte F11? In Visual C++ è possibile impostare dei punti di arresto al [...]]]></description>
			<content:encoded><![CDATA[<p>Dopo aver provato ad eseguire riga per riga il nostro codice ci saremmo sicuramente detti: Forte! Adesso posso capirci qualcosa ma se volessi <strong>fermare</strong> l’esecuzione del programma alla riga N per <strong>controllare</strong> ad esempio i valori delle variabili interne dovrei premere N volte F11?</p>
<p>In Visual C++ è possibile impostare dei <strong>punti di arresto </strong>al programma chiamati BreakPoint (letteralmente significa punti di interruzione) che permettono per l’appunto di bloccare l’esecuzione del programma.</p>
<p>Per <strong>impostare</strong> un breakpoint, continuando col codice del <a href="http://blogs.academicclub.org/leonardo/?p=88">precedente articolo</a>, dobbiamo <strong>posizionarci</strong> sulla riga desiderata e premere <strong>F9</strong> o alternativamente cliccare col tasto sinistro del mouse sul margine a sinistra della riga di codice. Apparirà un pallino rosso per confermarci che il punto di interruzione è stato impostato. Per <strong>rimuovere</strong> il breakpoint dobbiamo semplicemente <strong>ripetere l’operazione</strong>, ripremere F9 nella solita riga o cliccare sul puntino rosso.</p>
<p>E’ possibile in ogni caso mettere o togliere i breakpoint tramite il menù <strong>Debug/Imposta/Rimuovi punto di interruzione</strong>.</p>
</p>
<p> <a href="http://blogs.academicclub.org/leonardo/files/2009/06/20.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Impostare breakpoint in VC++" src="http://blogs.academicclub.org/leonardo/files/2009/06/20-thumb.png" width="674" height="469" /></a>
<p>Adesso che abbiamo indicato a Visual C++ dove fermare il nostro programma premiamo <strong>F5</strong> o andiamo sul menù <strong>Debug/Avvia Debug</strong> per eseguirlo.</p>
<p>Inseriamo le varie dimensioni del vettore che ci verranno richieste (nelle immagini è stato inserito 2, 3, 2) e il programma si <strong>fermerà automaticamente</strong> al calcolo del modulo.</p>
<p>Adesso <strong>possiamo</strong> <strong>analizzare</strong> le nostre variabili dalla finestra Auto ancorata in basso ma possiamo fare ancora <strong>di più</strong>.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/33.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="Breakpoint in esecuzione" src="http://blogs.academicclub.org/leonardo/files/2009/06/33-thumb.png" width="674" height="469" /></a>&#160;</p>
<p><em>NB: Eseguendo il programma senza Debug (Ctrl+F5) il programma non si fermerà ma sarà eseguito normalmente.</em></p>
<p>Per <strong>controllare espressioni</strong> più <strong>complesse</strong> del semplice valore di una variabile come ad esempio il risultato del <strong>calcolo intermedio</strong> (z*z) possiamo <strong>selezionare</strong> la corrispondente <strong>istruzione</strong> nel codice durante il Debug e <strong>apparirà</strong> in sovraimpressione il <strong>risultato</strong> da noi richiesto.</p>
<p>Se però vogliamo avere sottocchio più espressioni o laddove selezionare istruzioni direttamente nel codice può risultare impossibile c’è qualcosa di più comodo, la finestra <strong>Espressione di controllo</strong>.</p>
<p>La finestra Espressione di controllo, come la finestra Auto, si trova nella parte <strong>inferiore</strong> della schermata e inizialmente risulta essere vuota. <strong>Dobbiamo</strong> infatti <strong>dirgli cosa visualizzare</strong>.</p>
<p>Possiamo inserire le espressioni che vogliamo analizzare nella colonna <strong>Nome</strong>, verranno <strong>istantaneamente valutate</strong> e il loro <strong>risultato</strong> apparirà nella colonna <strong>Valore</strong>.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/34.png"><img style="border-bottom: 0px;border-left: 0px;border-top: 0px;border-right: 0px" border="0" alt="Finestra &quot;Espressione di controllo&quot;" src="http://blogs.academicclub.org/leonardo/files/2009/06/34-thumb.png" width="674" height="466" /></a> </p>
<p>Possiamo in questo modo <strong>avere sott’occhio</strong> tutto quello che vogliamo per un <strong>controllo totale</strong> del nostro programma. Addio cari vecchi bug!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.academicclub.org/leonardo/2009/06/06/programma-adesso-fermati-ti-devo-controllare/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Come capire quello che si sta facendo</title>
		<link>http://blogs.academicclub.org/leonardo/2009/06/01/come-capire-quello-che-si-sta-facendo/</link>
		<comments>http://blogs.academicclub.org/leonardo/2009/06/01/come-capire-quello-che-si-sta-facendo/#comments</comments>
		<pubDate>Sun, 31 May 2009 22:17:54 +0000</pubDate>
		<dc:creator>Leonardo</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Università]]></category>
		<category><![CDATA[Visual C++ 2008]]></category>

		<guid isPermaLink="false">http://blogs.academicclub.org/leonardo/?p=88</guid>
		<description><![CDATA[Uno degli strumenti principali per comprendere un linguaggio di programmazione è osservare il comportamento del proprio codice passo passo, istruzione per istruzione e cercare di individuare quali conseguenze comporta ogni istruzione. Scriviamo un semplice programma che ci permetta allo stesso tempo di sfruttare le nozioni apprese nel corso di Geometria e che calcoli il modulo [...]]]></description>
			<content:encoded><![CDATA[<p>Uno degli strumenti principali per <strong>comprendere</strong> un linguaggio di programmazione è <strong>osservare</strong> il comportamento del proprio codice <strong>passo passo</strong>, istruzione per istruzione e cercare di individuare quali conseguenze comporta ogni istruzione.</p>
<p>Scriviamo un semplice programma che ci permetta allo stesso tempo di sfruttare le nozioni apprese nel corso di <strong>Geometria</strong> e che calcoli il modulo di un vettore in tre dimensioni.</p>
<p>Il modulo di un vettore è uno scalare che è dato dalla radice quadrata delle somme delle componenti al quadrato del vettore.    <br />Indicando con x, y e z le componenti dei vettori in tre dimensioni il modulo sarà dato da: √(x² + y² + z²)</p>
<p>Per effettuare il nostro calcolo avremo bisogno della funzione radice quadrata <strong>sqrt</strong>&#160; in C/C++, inclusa nella libreria di funzioni matematiche &lt;math.h&gt;.</p>
<p>Il nome della funzione <strong>sqrt</strong> non è stato scelto a caso dai creatori della libreria ma è una “sigla” che richiama la parola radice quadrata ovvero <strong>Sq</strong>uare <strong>R</strong>oo<strong>t</strong> nella lingua anglosassone.</p>
<p>NB: includendo la libreria &lt;math.h&gt; nel codice sorgente e compilando il programma (Ctrl+Maiusc+B)&#160; l’Intellisense sarà aggiornato automaticamente con le nuove funzioni che saranno presentate nel menù.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/142.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="intellisense" src="http://blogs.academicclub.org/leonardo/files/2009/06/14-thumb2.png" width="674" height="468" /></a></p>
<p>Creiamo un nuovo progetto console Win32 vuoto, aggiungiamo un file di C/C++ come abbiamo visto nel dettaglio <a href="http://blogs.academicclub.org/leonardo/?p=43">nello scorso post</a> e inseriamo il seguente codice:</p>
<pre class="brush: cpp;">#include &lt;iostream&gt;
#include &lt;math.h&gt;

using namespace std;

int main()
{
	cout &lt;&lt; &quot;Inserisci le dimensioni del vettore:&quot; &lt;&lt; endl;
	double x, y, z, modulo;
	cin &gt;&gt; x;
	cin &gt;&gt; y;
	cin &gt;&gt; z;
	modulo = sqrt((x*x) + (y*y) + (z*z));
	cout &lt;&lt; &quot;Modulo del vettore: &quot; &lt;&lt; modulo &lt;&lt; endl;
	return 0;
}</pre>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/152.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="programma modulo vettore" src="http://blogs.academicclub.org/leonardo/files/2009/06/15-thumb2.png" width="674" height="468" /></a></p>
<p>Questo piccolo programma chiederà all’utente le tre componenti di un vettore in tre dimensioni tramite la funzione <strong>cin</strong> e stamperà a video il modulo.</p>
<p>Inserendo ad esempio 2, 3 e 2 il programma calcolerà il modulo restituendo 4.12311 ovvero √(2² + 3² + 2²) = √17 = 4.12311.</p>
<p>Durante l’inserimento dei dati bisognerà premere invio prima di inserire il dato successivo.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/261.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="programma modulo vettore in esecuzione" src="http://blogs.academicclub.org/leonardo/files/2009/06/26-thumb1.png" width="500" height="252" /></a></p>
<p>Il programma sembra funzionare ma per capire bene cosa fa eseguiamo istruzione per istruzione il nostro codice attraverso il menù <strong>Debug/Esegui istruzione</strong> (F11).</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/272.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="visual c++ debug/esegui istruzione" src="http://blogs.academicclub.org/leonardo/files/2009/06/27-thumb2.png" width="674" height="468" /></a></p>
<p>Apparirà una piccola <strong>freccia gialla</strong> a sinistra del codice per indicare l’istruzione successiva che verrà eseguita. Per eseguire un istruzione premiamo <strong>F11</strong>, la freccia si sposterà alla riga successiva.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/162.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="visual c++ in modalità debug" src="http://blogs.academicclub.org/leonardo/files/2009/06/16-thumb2.png" width="674" height="468" /></a></p>
<p>Notiamo sui pannelli inferiori di Visual Studio la finestra <strong>Auto</strong>, questa finestra mostrerà <strong>automaticamente</strong> i valori e i tipi delle variabili coinvolte nell’istruzione attuale o che comunque ci potrebbero servire per <strong>comprendere</strong> meglio il nostro codice.</p>
<p>Premiamo F11 per eseguire <strong>passo-passo</strong> il nostro programma fino ad arrivare alla riga “<strong>cin &gt;&gt; x</strong>” e notiamo che nella finestra del nostro programma è stato effettivamente stampata la stringa “Inserisci le dimensioni del vettore” nelle istruzioni precedenti.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/282.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="finestra auto" src="http://blogs.academicclub.org/leonardo/files/2009/06/28-thumb2.png" width="674" height="468" /></a></p>
<p><strong>Riflettiamo</strong> un attimo sui valori che sono apparsi però nella finestra Auto concentrandoci sulle <strong>variabili</strong> modulo, x, y e z.</p>
<p>Abbiamo dichiarato queste variabili come <strong>double</strong> ovvero come numeri decimali ma non abbiamo specificato un valore iniziale, <strong>come mai</strong> invece la finestra Auto dice che valgono -9.2559631349317831e+061?</p>
<p>La risposta è semplice, nel C/C++ le variabili senza alcun valore preventivamente assegnato contengono un dato praticamente “casuale” dipendente dalla memoria assegnata alle variabili stesse.</p>
<p>NB: Dobbiamo stare molto attenti a questo dettaglio che spesso è causa di <strong>subdoli</strong> <strong>bug</strong>.</p>
<p>Ma perché se le variabili <strong>non inizializzate</strong> contengono un <strong>valore</strong> <strong>casuale</strong> hanno tutte lo stesso valore? E’ solo <strong>fortuna</strong>?</p>
<p>La risposta in questo caso è meno intuitiva e dipende dalla speciale modalità in cui stiamo eseguendo il programma, chiamata <strong>Debug</strong>.</p>
<p>Questa modalità <strong>facilita</strong> la <strong>ricerca</strong> di <strong>errori</strong> e per far questo Visual C++ assegna automaticamente alle variabili non inizializzate un valore arbitrario che gli servirà per segnalare eventuali problemi causati dall’utilizzo di variabili non inizializzate.</p>
<p>Modificando ad esempio il programma in modo da eseguire l’istruzione “<strong>x = y + 1;</strong>” subito dopo la dichiarazione “<strong>double x, y, z, modulo;</strong>” riceveremo un <strong>avviso</strong> che ci avverte che stiamo facendo qualcosa che <strong>non è corretto</strong> seppur sintatticamente valido. La variabile y infatti non avendo ancora un valore definito <strong>esplicitamente</strong> dal programma può contenere un qualsiasi numero e incrementare di 1 un valore che non conosciamo è un operazione non corretta. <strong>Perché</strong> se non conosciamo il valore vogliamo incrementarlo?</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/292.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="avviso variabile non inizializzata" src="http://blogs.academicclub.org/leonardo/files/2009/06/29-thumb2.png" width="674" height="468" /></a></p>
<p>E’ possibile compilare ed eseguire il programma in modalità <strong>Release</strong> (normale) ovvero senza controlli da parte di Visual C++ su possibili operazioni non corrette scegliendo la corrispondente voce nel menù a tendina in alto prima di lanciare il programma all’interno di Visual C++, lanciare passo-passo il programma equivale ad eseguirlo.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/302.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="modalità release" src="http://blogs.academicclub.org/leonardo/files/2009/06/30-thumb2.png" width="674" height="468" /></a></p>
<p><em>Eseguendo il programma in modalità Release noteremo che i valori assegnati alle variabili non inizializzate sono estremamente casuali.</em></p>
<p>Continuando l’esecuzione tramite il tasto F11 scomparirà la piccola freccia gialla momentaneamente e il nostro programma console passerà in primo piano nascondendo il codice. L’esecuzione della funzione <strong>cin</strong> è infatti “<strong>bloccante</strong>” e ferma il programma fintanto che un utente non preme <strong>invio</strong> (o termina la “riga” in qualche altro modo). Inseriamo quindi il valore 2 nel nostro programma e premiamo invio, la finestra del codice tornerà in primo piano e la finestra Auto mostrerà il valore della variabile x in <strong>rosso</strong> per <strong>evidenziare</strong> che l’istruzione precedente ha <strong>modificato</strong> tale valore.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/312.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="finestra auto, variabile modificata" src="http://blogs.academicclub.org/leonardo/files/2009/06/31-thumb2.png" width="674" height="468" /></a></p>
<p>In logiche complesse l’esecuzione passo-passo ci permetterà di capire con più facilità il comportamento del programma, soprattutto se scritto da altri.</p>
<p>Il vantaggio principale per uno studente rimane comunque la possibilità di <strong>capire</strong> <strong>cosa fa</strong> effettivamente ogni singola istruzione ed anche come lavora il C/C++. Senza questa modalità difficilmente ci saremmo accorti senza saperlo a priori, che il linguaggio C/++ assegna un valore <strong>casuale</strong> alle variabili non inizializzate.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.academicclub.org/leonardo/2009/06/01/come-capire-quello-che-si-sta-facendo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Alla scoperta dell&#8217;Intellisense</title>
		<link>http://blogs.academicclub.org/leonardo/2009/05/29/alla-scoperta-dellintellisense/</link>
		<comments>http://blogs.academicclub.org/leonardo/2009/05/29/alla-scoperta-dellintellisense/#comments</comments>
		<pubDate>Thu, 28 May 2009 22:21:48 +0000</pubDate>
		<dc:creator>Leonardo</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Università]]></category>
		<category><![CDATA[Visual C++ 2008]]></category>

		<guid isPermaLink="false">http://blogs.academicclub.org/leonardo/?p=43</guid>
		<description><![CDATA[Durante l’apprendimento di un nuovo linguaggio come il C e il C++ una delle difficoltà iniziali è proprio capire come si fa a programmare una determinata azione. Trovarsi davanti al computer una pagina bianca sicuramente non aiuta, quello che invece servirebbe sarebbe una lista di comandi da cui poter scegliere quello che più si addice [...]]]></description>
			<content:encoded><![CDATA[<p>Durante l’apprendimento di un nuovo linguaggio come il C e il C++ una delle difficoltà iniziali è proprio <strong>capire</strong> <strong>come si fa</strong> a programmare una determinata azione.</p>
<p>Trovarsi davanti al computer una pagina bianca sicuramente non aiuta, quello che invece servirebbe sarebbe una <strong>lista di comandi</strong> da cui poter scegliere quello che più si addice al nostro obbiettivo.</p>
<p>Vediamo come far comparire la lista di comandi (funzioni) del C/C++&#160; con <strong>Visual C++</strong>, un programma che ci permetterà di studiare in profondità il C e il C++.</p>
<p>Dopo aver installato Visual Studio 2008 o Visual C++ 2008 Express, un programma <a href="http://www.microsoft.com/express/vc/">gratuitamente scaricabile</a>, e aperto il programma ci verrà presentata una finestra in cui appariranno i nostri ultimi progetti per una rapida apertura.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/1.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Schermata iniziale di Visual Studio" src="http://blogs.academicclub.org/leonardo/files/2009/06/1-thumb.png" width="673" height="399" /></a></p>
<p>Iniziamo creando un nuovo progetto che sarà il nostro nuovo programma. Andiamo su<strong> File/Nuovo/Progetto</strong></p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/2.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Menù File/Nuovo/Progetto" src="http://blogs.academicclub.org/leonardo/files/2009/06/2-thumb.png" width="673" height="398" /></a></p>
<p>Apparirà una finestra che permette di creare nuovi progetti o progetti “preconfezionati”. Scegliamo un nuovo progetto console (ovvero un programma a linea di comando) impostando <strong>Visual C++</strong> come tipo di progetto e <strong>Progetto console Win32</strong> come modello. Diamo infine un nome al nostro progetto e clicchiamo <strong>OK</strong>.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/3.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Finestra Nuovo progetto" src="http://blogs.academicclub.org/leonardo/files/2009/06/3-thumb.png" width="500" height="354" /></a></p>
<p>Dopo aver cliccato su OK ci verranno chieste alcune informazioni, clicchiamo Avanti e scegliamo <strong>applicazione console</strong>, mettiamo la spunta a <strong>Progetto vuoto</strong> e clicchiamo su <strong>Fine</strong>.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/4.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Creazione guidata applicazione Win32" src="http://blogs.academicclub.org/leonardo/files/2009/06/4-thumb.png" width="500" height="294" /></a></p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/5.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Impostazioni di applicazione" src="http://blogs.academicclub.org/leonardo/files/2009/06/5-thumb.png" width="500" height="293" /></a></p>
<p>Adesso aggiungiamo un nuovo file al nostro progetto (che come abbiamo specificato è vuoto), andiamo sul menù <strong>Progetto/Aggiungi nuovo elemento…</strong> e scegliamo dai modelli <strong>File di C++ (.cpp)</strong>, assegniamo al file un nuovo nome e clicchiamo su <strong>Aggiungi</strong>.</p>
<p><em>NB: Possiamo scrivere codice C o C++ e non solamente C++</em></p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/6.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Progetto/Aggiungi nuovo elemento…" src="http://blogs.academicclub.org/leonardo/files/2009/06/6-thumb.png" width="673" height="398" /></a></p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/7.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="File di C++ (.cpp)" src="http://blogs.academicclub.org/leonardo/files/2009/06/7-thumb.png" width="500" height="319" /></a></p>
<p>Ci ritroveremo adesso una pagina bianca dove scrivere il codice per creare il nostro programma.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/8.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Editor di testo" src="http://blogs.academicclub.org/leonardo/files/2009/06/8-thumb.png" width="673" height="398" /></a></p>
<p>Fino al momento non sembrerebbe molto diverso rispetto a qualsiasi editor di testi ma una volta scritte le intestazioni inziali del nostro programma, possiamo posizionarci nel corpo (all’interno delle parentesi graffe) della funzione main e premere <strong>Ctrl+Barra spaziatrice</strong> per visualizzare un menù chiamato <strong>Intellisense</strong> con le funzioni C/C++ da inserire nel nostro programma.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/25.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Intellisense di Visual C++" src="http://blogs.academicclub.org/leonardo/files/2009/06/25-thumb.png" width="673" height="468" /></a></p>
<p>La <strong>scrittura</strong> di codice risulta molto <strong>più veloce</strong> ed anche la <strong>lettura</strong> ne risulta più <strong>rapida</strong> grazie alla <strong>colorazione automatica</strong> delle parole chiave del linguaggio, ma l’importante è che adesso sappiamo che comandi possiamo inserire nel nostro programma.</p>
<p>Vediamo adesso come compilare ed eseguire il nostro programma, cancelliamo il codice eventualmente scritto e inseriamo il&#160; seguente:</p>
<pre class="brush: cpp;">#include &lt;iostream&gt;
using namespace std;

int main()
{
	cout &lt;&lt; &quot;Ciao C/C++!&quot;;
	return 0;
}</pre>
</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/9.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Programma C++" src="http://blogs.academicclub.org/leonardo/files/2009/06/9-thumb.png" width="673" height="468" /></a></p>
<p>Per compilare, lanciare e “fermare” il programma una volta terminato per poterne leggere l’output (le scritte che eventualmente emette) premiamo <strong>Ctrl+F5 </strong>o<strong> </strong>andiamo sul menù <strong>Debug/Avvia senza eseguire Debug</strong>.</p>
<p><a href="http://blogs.academicclub.org/leonardo/files/2009/06/10.png"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Programma in esecuzione" src="http://blogs.academicclub.org/leonardo/files/2009/06/10-thumb.png" width="500" height="252" /></a></p>
<p>Non dovremmo più occuparci di inserire codice ad-hoc o comandi come <strong>system(“pause”)</strong> per fermare il programma al suo termine, verrà automaticamente inserito il messaggio <strong>Premere un tasto per continuare.. </strong>e alla pressione di un tasto il programma sarà terminato.</p>
<p>Possiamo, adesso che sappiamo come visualizzare i comandi e lanciare il nostro programma, provare a utilizzare le funzioni che ci sembrano utili per sottoporre alla nostra volontà il nostro programma.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.academicclub.org/leonardo/2009/05/29/alla-scoperta-dellintellisense/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Capire il C/C++</title>
		<link>http://blogs.academicclub.org/leonardo/2009/05/27/capire-il-cc/</link>
		<comments>http://blogs.academicclub.org/leonardo/2009/05/27/capire-il-cc/#comments</comments>
		<pubDate>Wed, 27 May 2009 19:29:43 +0000</pubDate>
		<dc:creator>Leonardo</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Università]]></category>

		<guid isPermaLink="false">http://blogs.academicclub.org/leonardo/?p=6</guid>
		<description><![CDATA[Uno degli scogli iniziali per uno studente di un Istituto Tecnico o di un corso di studi Universitario come Informatica o Ingegneria è molto spesso imparare a programmare con un nuovo linguaggio come il C o il C++ per superare esami come Fondamenti di Informatica, Algoritmi e strutture dati e Programmazione ad oggetti. Il detto [...]]]></description>
			<content:encoded><![CDATA[<p>Uno degli scogli iniziali per uno studente di un Istituto Tecnico o di un corso di studi Universitario come Informatica o Ingegneria è molto spesso imparare a programmare con un nuovo linguaggio come il C o il C++ per superare esami come <strong>Fondamenti di Informatica</strong>, <strong>Algoritmi e strutture dati</strong> e <strong>Programmazione ad oggetti</strong>.</p>
<p>Il detto <strong>se ascolto dimentico, se vedo ricordo, se faccio capisco</strong> si applica molto bene, in special modo agli inizi, ad una disciplina come la programmazione.</p>
<p>Le nuove riforme universitarie purtroppo riducono la durata dei corsi anno dopo anno e nella economia universitaria rimane tagliato fuori proprio l’insegnamento degli strumenti con cui uno studente può approfondire anche a casa propria certi meccanismi della programmazione.</p>
<p>Vedremo in una serie di articoli proprio quali sono questi strumenti e come utilizzarli al fine di comprendere in profondità il C e il C++ e passare con <strong>30 e lode</strong> anche gli esami più ardui.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.academicclub.org/leonardo/2009/05/27/capire-il-cc/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
