Fondamenti di Programmazione a.a. 2011-2012 (canale M-Z)

Prerequisiti e propedeuticità

È 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.

Programma

I calcolatori e la programmazione

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.

Le basi del linguaggio C

Tipi di base: int, short, long, long long, char unsigned int,..., unsigned char, float, double, long double. Dichiarazione ed inizializzazione di variabili e loro rappresentazione in memoria. Operatori aritmetici (+, -, *, /, %, ++, --, +=, -=, *=, /=, %=), operatori relazionali (<, >, <=, >=, ==, !=), operatori logici (||, &&, !). Assegnamenti. Conversioni implicite e conversioni esplicite. Istruzioni di selezione: if () - else, switch () - case, ( ? : ). Istruzioni iterative: for ( ; ; ), while (), do - while (). Contatori e sentinelle. I vantaggi della programmazione strutturata. Formattazione dell'input e dell'output con printf() e scanf(), specifiche di conversione, stdio.h. La libreria standard e il preprocessore (direttiva #include).

Funzioni

Definizione di funzioni e passaggio dei parametri (per valore e per indirizzo). Prototipi di funzioni e la direttiva #include. Il tipo void. Regole di visibilità. Funzioni ricorsive. Il main() con argomenti.

Tipi semplici e tipi strutturati

Il tipo carattere e le stringhe. Funzioni della libreria standard (string.h) per la manipolazione di stringhe: strlen(), strcmp(), strcpy(). Dichiarazione, inizializzazione e utilizzo di vettori. Rappresentazione in memoria. Vettori multidimensionali. Vettori a dimensione variabile. Vettori di stringhe. Dichiarazione, inizializzazione ed utilizzo di strutture (struct). Dichiarazione, inizializzazione ed utilizzo di unioni (union). Strutture che contengono altre strutture od unioni. Strutture che contengono vettori. Vettori di strutture. Enumerazioni (enum). La parola chiave typedef. La direttiva #define.

Puntatori e allocazione dinamica

Dichiarazione, inizializzazione e utilizzo di puntatori. Passaggio di parametri per riferimento: l'operatore di indirizzo & e l'operatore di deriferimento (o indirezione) *. Il qualificatore const. Allocazione dinamica della memoria: operatore sizeof e le funzioni (in stdlib.h) malloc(), free() e realloc(). Il tipo void *. Relazione tra puntatori e vettori. Vettori di puntatori. Allocazione dinamica di matrici. Aritmetica dei puntatori. Puntatori a funzioni. La funzione qsort() in stdlib.h.

I file su disco

File ad accesso sequenziale (file di testo) e file ad accesso casuale o random (file binari). Le funzioni (in stdio.h) fopen(), fclose(), fgetc(), fputc(), fgets(), rewind(). Lettura e scrittura formattata con fprintf() e fscanf(). Posizionamento del cursore: fseek(), ftell(). Lettura e scrittura di file ad accesso casuale: fwrite(), fread().

Implementazione di algoritmi e strutture dati di base

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 static.

Testi consigliati

Testi di approfondimento

  • B.W. Kernighan, D.M. Ritchie     Il linguaggio C - Principi di programmazione e manuale di riferimento    Pearson (Prentice Hall), 2004.

    Il classico manuale del linguaggio C, più conciso ed agile dei libri di Kelley&Pohl e Deitel&Deitel però meno adatto per il principiante.
  • S.P. Harbison III, G.L. Steele Jr     C: A Reference Manual    Prentice Hall, 2002.

    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.
  • B.W. Kernighan, R. Pike     The Practice of Programming   Addison Wesley.

    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.
  • J. Bentley     Programming Pearls    Addison Wesley.

    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++.
  • Paul Graham     Hackers & Painters    O'Reilly Media.

    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.
Edit | Attach | Watch | Print version | History: r11 < r10 < r9 < r8 < r7 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r11 - 2011-09-22 - RiccardoSilvestri






 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback