Programmazione 1   (canale P-Z) a.a. 2007-08

Docente: R. Silvestri
Esercitatore: A. Carosi
Tutor: J. Stefa



Diario delle lezioni ed esercitazioni

Lunedì 24/9/07

Informazioni sul corso: programma, testi, modalità d'esame. Cenni sull'architettura di un calcolatore: CPU, memoria primaria e secondaria, input/output. Struttura logica della memoria. Linguaggio macchina, linguaggio assembly. Linguaggi ad alto livello e compilatori. Cenni storici sul linguaggio C. Primo programma in C: stampa di una stringa di testo. Programma che stampa la somma di due numeri: operatori aritmetici + e *, specifica di conversione della printf per gli interi.

Martedì 25/9/07      Esercitazioni

Giovedì 27/9/07

Il tipo int. Variabili e memoria. Assegnamenti. Programma che calcola la 100-esima potenza di un numero. Istruzione di selezione: if () else. Operatori relazionali: <, <=, >, >=, ==, =. Programmi che stampano il massimo di due e di tre numeri: diverse versioni. Operatori logici: &, ||, !. Istruzioni per iterare: for ( ; ; ). Programma che stampa il massimo di 10 numeri.
Esercizio 1    Scrivere un programma che prende in input 3 numeri e li stampa in ordine crescente.
Esercizio 2    Scrivere un programma che prende in input 20 numeri e ne stampa la somma.

Lunedì 1/10/07

Discussione esercizi 1 e 2. Il tipo float. Programma che stampa la media di 10 numeri (in virgola mobile). Specifiche di conversione %f e %.2f. Operatore di divisione / e conversione automatica degli operandi. I tipi primitivi (int, short, long, unsigned, long long, char, unsigned char, float, double, long double) e loro proprietà (limits.h). Operatore sizeof(). Annidamento di cicli for: programma che stampa una matrice di nxn caratteri e alcune variazioni. Operatore di postincremento ++.
Esercizio 3    Scrivere un programma che prende in input un intero n e stampa una matrice nxn con una cornice di zeri e l'interno di uni.

Martedì 2/10/07      Esercitazioni

Giovedì 4/10/07

Discussione esercizio 3. Istruzioni per iterare: while () e do while (). Equivalenza con il for. Programma che determina se un numero è primo (diverse versioni). Operatori %, +=, *=, /=, -=. Programma che prende in input interi positivi (termina non appena viene letto un intero non positivo) e stampa quanti di questi sono minori di 100, quanti compresi tra 100 e 1000 e quanti sono maggiori di 1000. Vettori (o array): dichiarazione ed inizializzazione. Programma che stampa le frequenze di 20 numeri.
Esercizio 4    Scrivere un programma che prende in input un intero n e lo stampa in base 2. Ad esempio, se n = 23 deve stampare 10111 (oppure 11101).

Lunedì 8/10/07

Discussione esercizio 4. Stringhe e carattere terminatore '\0'. Programma che prende in input una stringa e la stampa invertita. Specifica di conversione %s per scanf e per printf. Preprocessore C e la direttiva #define. Costanti simboliche. Programma che stampa le frequenze relative al lancio di un dado (simulato). Funzioni rand e srand in stdlib.h. Funzione time in time.h.
Esercizio 5    Scrivere un programma che prende in input 20 interi e determina se sono stati inseriti valori ripetuti. In caso affermativo stampa uno qualsiasi dei valori ripetuti, altrimenti stampa "non ci sono doppioni".

Martedì 9/10/07      Esercitazioni

Giovedì 11/10/07

Discussione esercizio 5. Funzioni: definizione, prototipo, parametri, chiamate. Vari esempi di funzioni che prendono in input interi, vettori e stringhe. Files header, programmi su più files, la direttiva #include.
Esercizio 6    Scrivere una funzione che prende in input una stringa e un carattere e ritorna il numero di occorrenze del carattere nella stringa.

Lunedì 15/19/07

Discussione esercizio 6. Esempi di funzioni: ricerca lineare in un vettore, funzione che scambia i valori di due variabili. Passaggio di parametri per valore e per indirizzo. Operatore di indirizzo & e operatore di indirezione *. Tipi puntatore. Macro. Funzione che legge in input una stringa tramite getchar.
Esercizio 7    Scrivere una funzione che prende in input due stringhe s1 e s2 e ritorna 1 se s1 è un anagramma di s2 e ritorna 0 altrimenti. Ad esempio, "torre" è un anagramma di "retro".

Martedì 16/10/07      Esercitazioni

Giovedì 18/10/07

Discussione esercizio 7. Funzione che ritorna il numero di parole in una stringa: funzione isalpha in ctype.h e uso di una variabile flag. Programma che legge in input una stringa e stampa il numero di parole della stringa: uso di funzioni in un programma e leggibilità del codice. Istruzione break. Operatore condizionale ( ? ; ). Cenni sulla conversione forzata dei tipi, cast.
Esercizio 8    Scrivere una funzione che prende in input una stringa e ritorna la lunghezza della più lunga parola nella stringa (se non ci sono parole ritorna 0). Ad esempio se la stringa è "C'e' un errore nel programma", la funzione ritorna 9.

Lunedì 22/10/07

Discussione esercizio 8. Ordinamento: selection-sort e bubble-sort. Funzioni ricorsive: fattoriale, potenza, fibonacci, selection-sort.
Esercizio 9    Scrivere un programma che prende in input una stringa, ne ordina i caratteri e stampa il risultato. Ad esempio, se la stringa è "trova errore" allora il programma stampa " aeeoorrrrtv".

Martedì 23/10/07      Esercitazioni

Giovedì 25/10/07

Discussione esercizio 9. Insertion-sort: versione iterativa e ricorsiva. Ricerca binaria: versione iterativa e ricorsiva. Vettori multidimensionali ovvero vettori di vettori: dichiarazione, inizializzazione, rappresentazione in memoria. Passaggio di vettori multidimensionali a funzioni.
Esercizio 10    Scrivere una versione modificata della ricerca binaria che, nel caso il valore cercato non appaia nel vettore di input, ritorna la posizione in cui tale valore andrebbe inserito per mantenere ordinato il vettore.

Lunedì 29/10/07

Discussione esercizio 10. Esempi di uso di vettori multidimensionali: funzione che costruisce quadrati magici di ordine dispari. Vettori di stringhe. Allocazione dinamica della memoria: il tipo void *, le funzioni malloc() e free() la costante NULL. Esempio: programma che prende in input un testo e lo memorizza tramite un vettore di stringhe, una stringa per ogni linea del testo. Uso della costante EOF e il comando di redirezione di Linux < per fornire un file come input al programma.
Esercizio 11    Scrivere una funzione che prende in input una matrice nxn di interi e ritorna 1 se è un quadrato magico e 0 altrimenti.
Esercizio 12    Scrivere un programma che prende in input un testo e stampa le linee del testo ordinate alfabeticamente (si usi la funzione strcmp() per confrontare due stringhe).

Martedì 30/10/07      Esercitazioni

Lunedì 5/11/07

Discussione esercizi 11 e 12. Esempi di allocazione dinamica. Funzione che duplica una stringa. Funzione che legge in input una stringa di lunghezza arbitraria: la funzione realloc(). Aritmetica dei puntatori: addizione e sottrazione di un puntatore e un intero, differenza tra due puntatori. La sintassi delle parentesi quadre per i vettori espressa tramite l'aritmetica dei puntatori.

Martedì 06/11/07      Esercitazioni

Giovedì 8/11/07

Aritmetica dei puntatori: confronto di puntatori. Esempio: implementazioni della funzione memmove(). Il tipo "vettore di T" e il tipo "puntatore a T": conversione automatica e comportamento degli operatori sizeof e &. L'aritmetica dei puntatori per i vettori multidimensionali. Allocazione dinamica di matrici. Rinominare tipi tramite typedef.

Lunedì 19/11/07

Discussione soluzioni esercizi della prova intermedia. Tipi aggregati: struct. Dichiarazione e inizializzazione di struct. Uso di typedef. Esempio: mazzo di carte.
Esercizio 13    Scrivere una funzione, int ControllaMazzo(Mazzo M), che controlla che le carte del mazzo M siano giuste (cioè, ci siano tutte e senza ripetizioni).

Martedì 20/11/07      Esercitazioni

Giovedì 22/11/07

Discussione esercizio 13. Tipi aggregati: union. Dichiarazione ed inizializzazione di unioni. Il tipo enumerativo enum. Il costrutto switch - case. Esempio che illustra l'uso di struct, union, enum, switch - case e variabili globali: programma che gestisce un archivio dei dati relativi a dipendenti tramite le operazioni di inserimento, stampa, ricerca, eliminazione e modifica.
Esercizio 14    Completare l'implementazione della funzione void Inserisci(void).

Lunedì 26/11/07

Discussione esercizio 14. Completata l'implementazione del programma archivio. Strutture dati dinamiche: liste. Possibili applicazioni delle liste e vantaggi rispetto ai vettori. Esempi relativamente a liste di interi: inserimento in testa, ricerca ed eliminazione di un elemento.
Esercizio 15    Scrivere una funzione che inserisce un nuovo elemento in una lista di interi ordinata.

Martedì 27/11/07      Esercitazioni

Giovedì 29/11/07

Discussione esercizio 15. Implementazione della funzione dell'esercizio tramite la tecnica del "doppio puntatore". Cenni sulla progettazione e realizzazione di librerie: interfaccia, e indipendenza dell'interfaccia dall'implementazione. Esempio: piccola libreria per gestire insiemi di stringhe: interfaccia (funzioni SetCreate, SetAdd, SetFind, SetDel, SetDestroy. Implementazione tramite liste: SetCreate e SetAdd).
Esercizio 16    Implementare SetFind.

Lunedì 3/12/07

Discussione esercizio 16. Implementazione di SetFind, SetDel, SetDestroy. Funzione che permette di scandire un insieme di stringhe: uso di variabili locali static. Esempio di utilizzo della libreria: funzione che stampa le stringhe in comune tra due insiemi di stringhe. Inversione di una lista: versione ricorsiva e iterativa.
Esercizio 17    Utilizzare la libreria per scrivere una funzione che prende in input due insiemi di stringhe e ritorna 1 se i due insiemi sono uguali e 0 altrimenti.

Martedì 4/12/07      Esercitazioni

Giovedì 6/12/07

Discussione esercizio 17. I file: file di testo (sequenziali) e file binari (ad accesso casuale). Posizione del cursore e operazioni di lettura e scrittura. Apertura di un file: funzioni fopen e fclose. Funzioni per leggere e scrivere in file di testo: fgetc, fgets, fscanf, fputs, fprintf. Standard input stdin e standard output stdout. Funzioni per il riposizionamento e la lettura del cursore: rewind, fseek, ftell. Esempio: programma che prende in input il nome di un file di testo, lo apre (se non esiste lo crea), stampa a video il contenuto del file e poi prende in input una stringa e la aggiunge come ultima linea nel file.
Esercizio 18    Scrivere un programma che prende in input il nome di un file e una stringa, e poi cerca la stringa nel file, se la trova stampa "trovata" altrimenti stampa "non trovata".

Lunedì 10/12/07

Discussione esercizio 18. Varie versioni di una funzione che cerca una stringa in un file di testo e se la trova ne ritorna la posizione. File binari: uso di fseek, le funzioni di lettura e scrittura fread e fwrite.
Esercizio 19    Scrivere una funzione che prende in input il puntatore ad un file e una stringa e ritorna il numero di occorrenze della stringa nel file.

Martedì 11/12/07      Esercitazioni

Giovedì 13/12/07

Discussione esercizio 19. File binari (o ad accesso casuale): usi tipici e portabilità. Esempio: programma che gestisce un archivio mantenuto in un file binario con operazioni: STAMPA, INSERISCI, RICERCA, MODIFICA e ELIMINA. Iniziata implementazione: main, dichiarazioni dei tipi, funzione che conta i records nel file-archivio e funzione che apre il file-archivio.
Esercizio 20    Scrivere la funzione che implementa la stampa dei records dell'archivio in forma tabellare.

Lunedì 17/12/07

Discussione esercizio 20. Implementazione delle operazioni INSERISCI, RICERCA e MODIFICA.
Esercizio 21    Scrivere la funzione che implementa l'operazione ELIMINA.

Martedì 18/12/07      Esercitazioni

Giovedì 20/12/07

Discussione esercizio 21. Ricapitolazione delle regole di visibilità delle variabili e delle funzioni. Programmi su più files: qualificatore static usato in riferimento a funzioni, qualificatore extern. Rispiegazione di alcuni concetti: allocazione dinamica (malloc, realloc e free), liste e la tecnica del "doppio puntatore".








This topic: Programmazione1 > WebHome > Prog1PZ > DiarioPZ0708
Topic revision: r31 - 2007-12-28 - RiccardoSilvestri
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback