<H1>Fondamenti di Programmazione a.a. 2011-2012 <SMALL>(canale M-Z)</SMALL></H1> <H2>Prerequisiti e propedeuticità</H2> <DIV style="margin-left:5%; margin-right:10%"> <DIV ALIGN="justify"> È richiesta un'adeguata preparazione iniziale relativa alle materie presenti nei programmi della scuola secondaria superiore, con particolare riguardo all’italiano e alla matematica. Una discreta conoscenza dell’inglese è di grande aiuto. </DIV> </DIV> <BR> <H2>Programma</H2> <DIV style="margin-left:5%; margin-right:10%"> <DIV ALIGN="justify"> <H3><B>I calcolatori e la programmazione</B></H3> Cenni sulla struttura e funzionamento di un calcolatore. Esecuzione di un programma. Linguaggi assemblativi e linguaggi ad alto livello. Compilatori e interpreti. Gli algoritmi, lo pseudocodice. Cenni storici sul linguaggio C. <H3><B>Le basi del linguaggio C</B></H3> Tipi di base: <code>int</code>, <code>short</code>, <code>long</code>, <code>long long</code>, <code>char</code> <code>unsigned int</code>,..., <code>unsigned char</code>, <code>float</code>, <code>double</code>, <code>long double</code>. Dichiarazione ed inizializzazione di variabili e loro rappresentazione in memoria. Operatori aritmetici (<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, <code>%</code>, <code>++</code>, <code>--</code>, <code>+=</code>, <code>-=</code>, <code>*=</code>, <code>/=</code>, <code>%=</code>), operatori relazionali (<code><</code>, <code>></code>, <code><=</code>, <code>>=</code>, <code>==</code>, <code>!=</code>), operatori logici (<code>||</code>, <code>&&</code>, <code>!</code>). Assegnamenti. Conversioni implicite e conversioni esplicite. Istruzioni di selezione: <code> if () - else</code>, <code>switch () - case</code>, <code>( ? : )</code>. Istruzioni iterative: <code>for ( ; ; )</code>, <code>while ()</code>, <code>do - while ()</code>. Contatori e sentinelle. I vantaggi della programmazione strutturata. Formattazione dell'input e dell'output con <CODE>printf()</CODE> e <CODE>scanf()</CODE>, specifiche di conversione, <CODE>stdio.h</CODE>. La libreria standard e il preprocessore (direttiva <CODE>#include</CODE>). <H3><B>Funzioni</B></H3> Definizione di funzioni e passaggio dei parametri (per valore e per indirizzo). Prototipi di funzioni e la direttiva <CODE>#include</CODE>. Il tipo <CODE>void</CODE>. Regole di visibilità. Funzioni ricorsive. Il <code>main()</code> con argomenti. <H3><B>Tipi semplici e tipi strutturati</B></H3> Il tipo carattere e le stringhe. Funzioni della libreria standard (<code>string.h</code>) per la manipolazione di stringhe: <CODE>strlen()</CODE>, <CODE>strcmp()</CODE>, <CODE>strcpy()</CODE>. Dichiarazione, inizializzazione e utilizzo di vettori. Rappresentazione in memoria. Vettori multidimensionali. Vettori a dimensione variabile. Vettori di stringhe. Dichiarazione, inizializzazione ed utilizzo di strutture (<CODE>struct</CODE>). Dichiarazione, inizializzazione ed utilizzo di unioni (<CODE>union</CODE>). Strutture che contengono altre strutture od unioni. Strutture che contengono vettori. Vettori di strutture. Enumerazioni (<CODE>enum</CODE>). La parola chiave <CODE>typedef</CODE>. La direttiva <CODE>#define</CODE>. <H3><B>Puntatori e allocazione dinamica</B></H3> Dichiarazione, inizializzazione e utilizzo di puntatori. Passaggio di parametri per riferimento: l'operatore di indirizzo <CODE>&</CODE> e l'operatore di deriferimento (o indirezione) <CODE>*</CODE>. Il qualificatore <CODE>const</CODE>. Allocazione dinamica della memoria: operatore <CODE>sizeof</CODE> e le funzioni (in <code>stdlib.h</code>) <CODE>malloc()</CODE>, <CODE>free()</CODE> e <code>realloc()</code>. Il tipo <CODE>void *</CODE>. Relazione tra puntatori e vettori. Vettori di puntatori. Allocazione dinamica di matrici. Aritmetica dei puntatori. Puntatori a funzioni. La funzione <code>qsort()</code> in <code>stdlib.h</code>. <H3><B>I file su disco</B></H3> File ad accesso sequenziale (file di testo) e file ad accesso casuale o random (file binari). Le funzioni (in <code>stdio.h</code>) <CODE>fopen()</CODE>, <CODE>fclose()</CODE>, <CODE>fgetc()</CODE>, <CODE>fputc()</CODE>, <CODE>fgets()</CODE>, <CODE>rewind()</CODE>. Lettura e scrittura formattata con <CODE>fprintf()</CODE> e <CODE>fscanf()</CODE>. Posizionamento del cursore: <CODE>fseek()</CODE>, <code>ftell()</code>. Lettura e scrittura di file ad accesso casuale: <CODE>fwrite()</CODE>, <CODE>fread()</CODE>. <H3><B>Implementazione di algoritmi e strutture dati di base</B></H3> Alcuni algoritmi di ordinamento: per inserzione, per selezione, a bolle. L'algoritmo della ricerca binaria. Le liste: implementazione tramite strutture e puntatori delle operazioni fondamentali. Pile e code. Linee guida per la realizzazione di piccole librerie: decomposizione in moduli, separazione interfaccia-implementazione, compilazione di più file e compilazione separata. Specificatore <CODE>static</CODE>. </DIV> </DIV> <BR> <H2>Testi consigliati</H2> <DIV style="margin-left:5%; margin-right:10%"> <DIV ALIGN="justify"> <UL> <LI> <P><FONT COLOR="#3c0eb7"> <a href="http://www.apogeonline.com/libri/88-503-2633-5/scheda"> H.M. Deitel, P.J. Deitel <i>C: Corso completo di programmazione</i></a> Apogeo, III edizione, 2007.</FONT></P> </LI> <LI> <P><FONT COLOR="#3c0eb7"> <a href="http://hpe.pearson.it/scheda_opera.php?ID=2556¯odestinazioneID=&materiaID=">A. Kelley, I. Pohl <i>C: Didattica e programmazione</i></a> Pearson (Addison Wesley), IV edizione, 2004.</FONT></P> </LI> <li><p><FONT COLOR="#3c0eb7"> <a href="http://hpe.pearson.it/opera-4153-40-s.kochan-programmare_in_c-9788871926605">S.G. Kochan <i>Programmare in C: Introduzione al linguaggio</i></a> Pearson, III edizione, 2011.</font></p> </li> </UL> </DIV> </DIV> <H2>Testi di approfondimento</H2> <DIV style="margin-left:5%; margin-right:10%"> <DIV ALIGN="justify"> <UL> <LI> <P><FONT COLOR="#3c0eb7"> <a href="http://hpe.pearson.it/scheda_opera.php?ID=2552¯odestinazioneID=&materiaID="> B.W. Kernighan, D.M. Ritchie <i>Il linguaggio C - Principi di programmazione e manuale di riferimento</i></a> Pearson (Prentice Hall), 2004.</FONT></P> Il classico manuale del linguaggio C, più conciso ed agile dei libri di Kelley&Pohl e Deitel&Deitel però meno adatto per il principiante. </LI> <LI> <P><FONT COLOR="#3c0eb7"> <a href="http://www.CAReferenceManual.com/"> S.P. Harbison III, G.L. Steele Jr <i>C: A Reference Manual</i></a> Prentice Hall, 2002.</FONT></P> Un manuale di riferimento per il linguaggio C estremamente curato e preciso. Utilissimo per risolvere dubbi circa: ciò che è C standard (ANSI/ISO) e ciò che non lo è, portabilità, compatibilità con il C++, ecc. Fortemente consigliato a chiunque voglia fare un uso non occasionale del linguaggio C. </LI> <LI> <P><FONT COLOR="#3c0eb7"> <a href="http://cm.bell-labs.com/cm/cs/tpop/index.html"> B.W. Kernighan, R. Pike <i>The Practice of Programming</i></a> Addison Wesley.</FONT></P> Tratta in modo sintetico e significativo tutti gli aspetti della programmazione. Dalle strutture dati ed algoritmi al debugging e testing, dallo stile di programmazione alla progettazione di librerie, passando per l'analisi delle prestazioni e i metodi per migliorare la portabilità. I linguaggi considerati sono: C, C++ e Java. </LI> <LI> <P><font color="#3c0eb7"> <a href="http://www.cs.bell-labs.com/cm/cs/pearls/"> J. Bentley <i>Programming Pearls</i></a> Addison Wesley.</font></p> Molti dei temi trattati nel libro di Kernighan e Pike sono qui elaborati in modo originale e stimolante. Pieno di divertenti ed istruttivi aneddoti che mostrano la reale differenza tra la teoria e la pratica della programmazione e financo dell'ingegneria del software. Usa i linguaggi C e C++. </li> <LI> <P><font color="#3c0eb7"> <a href="http://www.paulgraham.com/hackpaint.html">Paul Graham <i>Hackers & Painters</i></a> O'Reilly Media.</font></p> Non è un libro sulla programmazione in C. È invece un libro sul mondo della programmazione, dai programmatori alle imprese ai linguaggi di programmazione. Una divertente e avvicente riflessione sulla natura dello sviluppo software fondata su esperienze illuminanti e piena di idee brillanti e controcorrente. Un affresco sul passato e il presente di questa attività con profonde intuizioni sul suo futuro. Una lettura indispensabile per chiunque si interessi, a qualsiasi titolo, di sviluppo software. </li> </ul> </DIV> </DIV>
This topic: Programmazione1
>
WebHome
>
Prog1PZ
>
FPprogramma0910
Topic revision: r11 - 2011-09-22 - RiccardoSilvestri
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback