Programmazione I  (P-Z)  a.a. 2007/2008


Docente R. Silvestri


Finalità

L'obiettivo del corso è fornire le basi della programmazione dei calcolatori tramite linguaggi imperativi. Tali basi sono esemplificate mediante l'apprendimento del linguaggio C.

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, i diagrammi di flusso. Cenni storici sul linguaggio C.

Le basi del linguaggio C

Dichiarazione di variabili numeriche. Operatori matematici, operatori relazionali, operatori logici. Assegnamenti. Conversioni implicite e conversioni esplicite. Istruzioni di selezione. Istruzioni iterative. Contatori e sentinelle. Formattazione dell'input con printf. Formattazione dell'output con scanf. I vantaggi della programmazione strutturata.

Funzioni

Definizione di funzione e passaggio di parametri. Prototipo di funzione e la direttiva #include. Il tipo void. Regole di visibilità. Funzioni ricorsive.

Tipi semplici e tipi strutturati

Il tipo carattere e il tipo stringa. Dichiarazione, inizializzazione e utilizzo di vettori. La direttiva #define. Vettori multidimensionali. Vettori a dimensione variabile. 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. Le enumerazioni (enum). La parola chiave typedef.

Puntatori e allocazione dinamica

Dichiarazione, inizializzazione e utilizzo di puntatori. Passaggio di parametri per riferimento: l'operatore di indirizzo & e l'operatore di deriferimento *. Il qualificatore const. Allocazione dinamica della memoria: sizeof, malloc, free. Il tipo void *. La relazione tra puntatori e vettori. I vettori di puntatori. L'aritmetica dei puntatori.

I file su disco

I file ad accesso sequenziale e i file ad accesso diretto. Le funzioni fopen, fclose, fflush, fgetc, fputc, fgets, fputs, rewind. Lettura e scrittura formattata con fprintf e fscanf. Lettura e scrittura di file ad accesso diretto: fseek, 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. Strutture dati lineari: liste, pile, code. Implementazione tramite strutture e puntatori. Linee guida per la realizzazione di piccole librerie: decomposizione in moduli, separazione interfaccia-implementazione, compilazione di più file e compilazione separata. I specificatori static ed extern.

Testi

Testi consigliati

Testi di approfondimento

  • 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++.






-- RiccardoSilvestri - 23 Sep 2007

Topic revision: r1 - 2007-09-23 - 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