Tags:
tag this topic
create new tag
view all tags
<h1>Programmazione 1 <small> (canale P-Z) a.a. 2007-08</small></h1> <big>Docente: R. Silvestri<br> Esercitatore: A. Carosi<br> Tutor: J. Stefa</big><br> <br> <br> <h2>Diario delle lezioni ed esercitazioni</h2> <b>Lunedì 24/9/07</b> <div align="justify"><blockquote> 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 <tt>printf</tt> per gli interi. </blockquote> </div> <br> <b>Martedì 25/9/07</b> [[eser250907][Esercitazioni]] <br> <br> <b>Giovedì 27/9/07</b> <div align="justify"> <blockquote> Il tipo <tt>int</tt>. Variabili e memoria. Assegnamenti. Programma che calcola la 100-esima potenza di un numero. Istruzione di selezione: <tt>if () else</tt>. Operatori relazionali: <tt><, <=, >, >=, ==, !=</tt>. Programmi che stampano il massimo di due e di tre numeri: diverse versioni. Operatori logici: <tt>&, ||, !</tt>. Istruzioni per iterare: <tt>for ( ; ; )</tt>. Programma che stampa il massimo di 10 numeri. <br> <b>Esercizio 1</b> Scrivere un programma che prende in input 3 numeri e li stampa in ordine crescente. <br> <b>Esercizio 2</b> Scrivere un programma che prende in input 20 numeri e ne stampa la somma. </blockquote> </div> <br> <b>Lunedì 1/10/07</b> <div align="justify"> <blockquote> Discussione esercizi 1 e 2. Il tipo <tt>float</tt>. Programma che stampa la media di 10 numeri (in virgola mobile). Specifiche di conversione <tt>%f</tt> e <tt>%.2f</tt>. Operatore di divisione <tt>/</tt> e conversione automatica degli operandi. I tipi primitivi (<tt>int, short, long, unsigned, long long, char, unsigned char, float, double, long double</tt>) e loro proprietà (<tt>limits.h</tt>). Operatore <tt>sizeof()</tt>. Annidamento di cicli for: programma che stampa una matrice di nxn caratteri e alcune variazioni. Operatore di postincremento <tt>++</tt>. <br> <b>Esercizio 3</b> 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. </blockquote> </div> <br> <b>Martedì 2/10/07</b> [[eser021007][Esercitazioni]] <br> <br> <b>Giovedì 4/10/07</b> <div align="justify"> <blockquote> Discussione esercizio 3. Istruzioni per iterare: <tt>while ()</tt> e <tt>do while ()</tt>. Equivalenza con il <tt>for</tt>. Programma che determina se un numero è primo (diverse versioni). Operatori <tt>%, +=, *=, /=, -=</tt>. 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. <br> <b>Esercizio 4</b> Scrivere un programma che prende in input un intero <tt>n</tt> e lo stampa in base 2. Ad esempio, se <tt>n = 23</tt> deve stampare <tt>10111</tt> (oppure <tt>11101</tt>). </blockquote> </div> <br> <b>Lunedì 8/10/07</b> <div align="justify"> <blockquote> Discussione esercizio 4. Stringhe e carattere terminatore <tt>'\0'</tt>. Programma che prende in input una stringa e la stampa invertita. Specifica di conversione <tt>%s</tt> per <tt>scanf</tt> e per <tt>printf</tt>. Preprocessore C e la direttiva <tt>#define</tt>. Costanti simboliche. Programma che stampa le frequenze relative al lancio di un dado (simulato). Funzioni <tt>rand</tt> e <tt>srand</tt> in <tt>stdlib.h</tt>. Funzione <tt>time</tt> in <tt>time.h</tt>. <br> <b>Esercizio 5</b> 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 <tt>"non ci sono doppioni"</tt>. </blockquote> </div> <br> <b>Martedì 9/10/07</b> [[eser091007][Esercitazioni]] <br> <br> <b>Giovedì 11/10/07</b> <div align="justify"> <blockquote> 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 <tt>#include</tt>. <br> <b>Esercizio 6</b> Scrivere una funzione che prende in input una stringa e un carattere e ritorna il numero di occorrenze del carattere nella stringa. </blockquote> </div> <br> <b>Lunedì 15/19/07</b> <div align="justify"> <blockquote> 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 <tt>&</tt> e operatore di indirezione <tt>*</tt>. Tipi puntatore. Macro. Funzione che legge in input una stringa tramite <tt>getchar</tt>. <br> <b>Esercizio 7</b> Scrivere una funzione che prende in input due stringhe <tt>s1</tt> e <tt>s2</tt> e ritorna 1 se <tt>s1</tt> è un anagramma di <tt>s2</tt> e ritorna 0 altrimenti. Ad esempio, "torre" è un anagramma di "retro". </blockquote> </div> <br> <b>Martedì 16/10/07</b> [[eser161007][Esercitazioni]] <br> <br> <b>Giovedì 18/10/07</b> <div align="justify"> <blockquote> Discussione esercizio 7. Funzione che ritorna il numero di parole in una stringa: funzione <tt>isalpha</tt> in <tt>ctype.h</tt> 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 <tt>break</tt>. Operatore condizionale <tt>( ? ; )</tt>. Cenni sulla conversione forzata dei tipi, cast. <br> <b>Esercizio 8</b> 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 è <tt>"C'e' un errore nel programma"</tt>, la funzione ritorna 9. </blockquote> </div> <br> <b>Lunedì 22/10/07</b> <div align="justify"> <blockquote> Discussione esercizio 8. Ordinamento: selection-sort e bubble-sort. Funzioni ricorsive: fattoriale, potenza, fibonacci, selection-sort. <br> <b>Esercizio 9</b> Scrivere un programma che prende in input una stringa, ne ordina i caratteri e stampa il risultato. Ad esempio, se la stringa è <tt>"trova errore"</tt> allora il programma stampa <tt>" aeeoorrrrtv"</tt>. </blockquote> </div> <br> <b>Martedì 23/10/07</b> [[eser231007][Esercitazioni]] <br> <br> <b>Giovedì 25/10/07</b> <div align="justify"> <blockquote> 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.<br> <b>Esercizio 10</b> 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. </blockquote> </div> <br> <b>Lunedì 29/10/07</b> <div align="justify"> <blockquote> 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 <tt>void *</tt>, le funzioni <tt>malloc()</tt> e <tt>free()</tt> la costante <tt>NULL</tt>. 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 <tt>EOF</tt> e il comando di redirezione di Linux < per fornire un file come input al programma.<br> <b>Esercizio 11</b> Scrivere una funzione che prende in input una matrice nxn di interi e ritorna 1 se è un quadrato magico e 0 altrimenti.<br> <b>Esercizio 12</b> Scrivere un programma che prende in input un testo e stampa le linee del testo ordinate alfabeticamente (si usi la funzione <tt>strcmp()</tt> per confrontare due stringhe). </blockquote> </div> <br> <b>Martedì 30/10/07</b> [[eser301007][Esercitazioni]] <br> <br> <b>Lunedì 5/11/07</b> <div align="justify"> <blockquote> 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 <tt>realloc()</tt>. 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. </blockquote> </div> <br> <b>Martedì 06/11/07</b> [[eser061107][Esercitazioni]] <br> <br> <b>Giovedì 8/11/07</b> <div align="justify"> <blockquote> Aritmetica dei puntatori: confronto di puntatori. Esempio: implementazioni della funzione <tt>memmove()</tt>. Il tipo "vettore di T" e il tipo "puntatore a T": conversione automatica e comportamento degli operatori <tt>sizeof</tt> e <tt>&</tt>. L'aritmetica dei puntatori per i vettori multidimensionali. Allocazione dinamica di matrici. Rinominare tipi tramite <tt>typedef</tt>. </blockquote> </div> <br> <b>Lunedì 19/11/07</b> <div align="justify"> <blockquote> Discussione soluzioni esercizi della prova intermedia. Tipi aggregati: <tt>struct</tt>. Dichiarazione e inizializzazione di <tt>struct</tt>. Uso di <tt>typedef</tt>. Esempio: mazzo di carte. <br> <b>Esercizio 13</b> Scrivere una funzione, <tt>int !ControllaMazzo(Mazzo M)</tt>, che controlla che le carte del mazzo <tt>M</tt> siano giuste (cioè, ci siano tutte e senza ripetizioni). </blockquote> </div> <br> <b>Martedì 20/11/07</b> [[eser201107][Esercitazioni]] <br> <b>Giovedì 22/11/07</b> <div align="justify"><blockquote>Discussione esercizio 13. Tipi aggregati: <tt>union</tt>. Dichiarazione ed inizializzazione di unioni. Il tipo enumerativo <tt>enum</tt>. Il costrutto <tt>switch - case</tt>. Esempio che illustra l'uso di <tt>struct</tt>, <tt>union</tt>, <tt>enum</tt>, <tt>switch - case</tt> e variabili globali: programma che gestisce un archivio dei dati relativi a dipendenti tramite le operazioni di inserimento, stampa, ricerca, eliminazione e modifica. <br> <b>Esercizio 14</b> Completare l'implementazione della funzione <tt>void Inserisci(void)</tt>. </blockquote> </div> <br> <b>Lunedì 26/11/07</b> <div align="justify"> <blockquote>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.<br> <b>Esercizio 15</b> Scrivere una funzione che inserisce un nuovo elemento in una lista di interi ordinata. </blockquote> </div> <br> <b>Martedì 27/11/07</b> [[eser271107][Esercitazioni]] <br> <b>Giovedì 29/11/07</b> <div align="justify"> <blockquote>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 <tt>SetCreate</tt>, <tt>SetAdd</tt>, <tt>SetFind</tt>, <tt>SetDel</tt>, <tt>SetDestroy</tt>. Implementazione tramite liste: <tt>SetCreate</tt> e <tt>SetAdd</tt>).<br> <b>Esercizio 16</b> Implementare <tt>SetFind</tt>. </blockquote> </div> <br> <b>Lunedì 3/12/07</b> <div align="justify"> <blockquote>Discussione esercizio 16. Implementazione di <tt>SetFind</tt>, <tt>SetDel</tt>, <tt>SetDestroy</tt>. Funzione che permette di scandire un insieme di stringhe: uso di variabili locali <tt>static</tt>. 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.<br> <b>Esercizio 17</b> 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. </blockquote> </div> <br> <b>Martedì 4/12/07</b> [[eser041207][Esercitazioni]] <br> <b>Giovedì 6/12/07</b> <div align="justify"> <blockquote>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 <tt>fopen</tt> e <tt>fclose</tt>. Funzioni per leggere e scrivere in file di testo: <tt>fgetc</tt>, <tt>fgets</tt>, <tt>fscanf</tt>, <tt>fputs</tt>, <tt>fprintf</tt>. Standard input <tt>stdin</tt> e standard output <tt>stdout</tt>. Funzioni per il riposizionamento e la lettura del cursore: <tt>rewind</tt>, <tt>fseek</tt>, <tt>ftell</tt>. 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. <br> <b>Esercizio 18</b> 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". </blockquote> </div> <br> <b>Lunedì 10/12/07</b> <div align="justify"> <blockquote>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 <tt>fseek</tt>, le funzioni di lettura e scrittura <tt>fread</tt> e <tt>fwrite</tt>.<br> <b>Esercizio 19</b> 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. </blockquote> </div> <br> <b>Martedì 11/12/07</b> [[eser111207][Esercitazioni]] <br> <b>Giovedì 13/12/07</b> <div align="justify"> <blockquote>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: <tt>main</tt>, dichiarazioni dei tipi, funzione che conta i records nel file-archivio e funzione che apre il file-archivio.<br> <b>Esercizio 20</b> Scrivere la funzione che implementa la stampa dei records dell'archivio in forma tabellare. </blockquote> </div> <br> <b>Lunedì 17/12/07</b> <div align="justify"> <blockquote>Discussione esercizio 20. Implementazione delle operazioni INSERISCI, RICERCA e MODIFICA. <br> <b>Esercizio 21</b> Scrivere la funzione che implementa l'operazione ELIMINA. </blockquote> </div> <br> <b>Martedì 18/12/07</b> [[eser181207][Esercitazioni]] <br> <b>Giovedì 20/12/07</b> <div align="justify"> <blockquote>Discussione esercizio 21. Ricapitolazione delle regole di visibilità delle variabili e delle funzioni. Programmi su più files: qualificatore <tt>static</tt> usato in riferimento a funzioni, qualificatore <tt>extern</tt>. Rispiegazione di alcuni concetti: allocazione dinamica (<tt>malloc</tt>, <tt>realloc</tt> e <tt>free</tt>), liste e la tecnica del "doppio puntatore". </blockquote> </div> <br> <br> <br> <br> <br> <br> <br>
E
dit
|
A
ttach
|
Watch
|
P
rint version
|
H
istory
: r31
<
r30
<
r29
<
r28
<
r27
|
B
acklinks
|
V
iew topic
|
Ra
w
edit
|
M
ore topic actions
Topic revision: r31 - 2007-12-28
-
RiccardoSilvestri
Log In
or
Register
Programmazione1 Web ...
Programmazione1 Web
Programmazione1 Web Home
Users
Groups
Index
Search
Changes
Notifications
Statistics
Preferences
User Reference ...
User Reference
ATasteOfTWiki
TextFormattingRules
TWikiVariables
FormattedSearch
TWikiDocGraphics
TWikiSkinBrowser
InstalledPlugins
ChangeEmailAddress
ChangePassword
ResetPassword
Prenotazioni esami
Laurea Triennale ...
Laurea Triennale
Algebra
Algoritmi
Introduzione agli algoritmi
Algoritmi 1
Algoritmi 2
Algoritmi per la
visualizzazione
Architetture
Prog. sist. digitali
Architetture 2
Basi di Dati
Basi di Dati 1 Inf.
Basi di Dati 1 T.I.
Basi di Dati (I modulo, A-L)
Basi di Dati (I modulo, M-Z)
Basi di Dati 2
Calcolo
Calcolo differenziale
Calcolo integrale
Calcolo delle Probabilitą
Metodi mat. per l'inf. (ex. Logica)
canale AD
canale PZ
Programmazione
Fond. di Programmazione
Metodologie di Programmazione
Prog. di sistemi multicore
Programmazione 2
AD
EO
PZ
Esercitazioni Prog. 2
Lab. Prog. AD
Lab. Prog. EO
Lab. Prog. 2
Prog. a Oggetti
Reti
Arch. di internet
Lab. di prog. di rete
Programmazione Web
Reti di elaboratori
Sistemi operativi
Sistemi Operativi (12 CFU)
Anni precedenti
Sistemi operativi 1
Sistemi operativi 2
Lab. SO 1
Lab. SO 2
Altri corsi
Automi, Calcolabilitą
e Complessitą
Apprendimento Automatico
Economia Aziendale
Elaborazione Immagini
Fisica 2
Grafica 3D
Informatica Giuridica
Laboratorio di Sistemi Interattivi
Linguaggi di Programmazione 3° anno Matematica
Linguaggi e Compilatori
Sistemi Informativi
Tecniche di Sicurezza dei Sistemi
ACSAI ...
ACSAI
Computer Architectures 1
Programming
Laurea Magistrale ...
Laurea Magistrale
Percorsi di studio
Corsi
Algoritmi Avanzati
Algoritmica
Algoritmi e Strutture Dati
Algoritmi per le reti
Architetture degli elaboratori 3
Architetture avanzate e parallele
Autonomous Networking
Big Data Computing
Business Intelligence
Calcolo Intensivo
Complessitą
Computer Systems and Programming
Concurrent Systems
Crittografia
Elaborazione del Linguaggio Naturale
Estrazione inf. dal web
Fisica 3
Gamification Lab
Information Systems
Ingegneria degli Algoritmi
Interazione Multi Modale
Metodi Formali per il Software
Methods in Computer Science Education: Analysis
Methods in Computer Science Education: Design
Prestazioni dei Sistemi di Rete
Prog. avanzata
Internet of Things
Sistemi Centrali
Reti Wireless
Sistemi Biometrici
Sistemi Distribuiti
Sistemi Informativi Geografici
Sistemi operativi 3
Tecniche di Sicurezza basate sui Linguaggi
Teoria della
Dimostrazione
Verifica del software
Visione artificiale
Attivitą complementari
Biologia Computazionale
Design and development of embedded systems for the Internet of Things
Lego Lab
Logic Programming
Pietre miliari della scienza
Prog. di processori multicore
Sistemi per l'interazione locale e remota
Laboratorio di Cyber-Security
Verifica e Validazione di Software Embedded
Altri Webs ...
Altri Webs
Dottorandi
Commissioni
Comm. Didattica
Comm. Didattica_r
Comm. Dottorato
Comm. Erasmus
Comm. Finanziamenti
Comm. Scientifica
Comm Scientifica_r
Corsi esterni
Sistemi Operativi (Matematica)
Perl e Bioperl
ECDL
Fondamenti 1
(NETTUNO)
Tecniche della Programmazione 1° modulo
(NETTUNO)
Seminars in Artificial Intelligence and Robotics: Natural Language Processing
Informatica generale
Primo canale
Secondo canale
II canale A.A. 10-11
Informatica
Informatica per Statistica
Laboratorio di Strumentazione Elettronica e Informatica
Progetti
Nemo
Quis
Remus
TWiki ...
TWiki
Tutto su TWiki
Users
Main
Sandbox
Home
Site map
AA web
AAP web
ACSAI web
AA2021 web
Programming web
AA2021 web
AN web
ASD web
Algebra web
AL web
AA1112 web
AA1213 web
AA1920 web
AA2021 web
MZ web
AA1112 web
AA1213 web
AA1112 web
AA1314 web
AA1415 web
AA1516 web
AA1617 web
AA1819 web
Old web
Algo_par_dis web
Algoreti web
More...
Programmazione1 Web
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
P
View
Raw View
Print version
Find backlinks
History
More topic actions
Edit
Raw edit
Attach file or image
Edit topic preference settings
Set new parent
More topic actions
Account
Log In
Register User
Questo sito usa cookies, usandolo ne accettate la presenza. (
CookiePolicy
)
Torna al
Dipartimento di Informatica
E
dit
A
ttach
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