PROGRAMMAZIONE PROCEDURALE E LOGICA
A.A. | CFU |
---|---|
2011/2012 | 12 |
Docente | Ricevimento studentesse e studenti | |
---|---|---|
Marco Bernardo | mercoledì 16:00-18:00 |
Assegnato al Corso di Studio
Giorno | Orario | Aula |
---|
Obiettivi Formativi
Questo insegnamento ha lo scopo di illustrare i principi di base, le tecniche e gli strumenti della programmazione di applicazioni informatiche, attraverso la presentazione dei concetti tipici della programmazione imperativa di natura procedurale e della programmazione dichiarativa di natura logica.
English version: The objective of this course is to illustrate the basic principles, the techniques, and the tools for programming computer applications, through the presentation of the concepts typical of procedural imperative programming and logical declarative programming.
Programma
01. Introduzione alla programmazione degli elaboratori
01.01 Definizioni di base dell'informatica.
01.02 Cenni di storia dell'informatica.
01.03 Architettura degli elaboratori.
01.04 Sistemi operativi.
01.05 Linguaggi di programmazione e compilatori.
01.06 Una metodologia di sviluppo software "in the small".
02. Programmazione procedurale: il linguaggio ANSI C
02.01 Cenni di storia del C.
02.02 Formato di un programma con una singola funzione.
02.03 Inclusione di libreria.
02.04 Funzione main.
02.05 Identificatori.
02.06 Tipi di dati predefiniti: int, double, char.
02.07 Funzioni di libreria per l'input/output interattivo.
02.08 Funzioni di libreria per l'input/output tramite file.
03. Espressioni
03.01 Definizione di costante simbolica.
03.02 Dichiarazione di variabile.
03.03 Operatori aritmetici.
03.04 Operatori relazionali.
03.05 Operatori logici.
03.06 Operatore condizionale.
03.07 Operatori di assegnamento.
03.08 Operatori di incremento/decremento.
03.09 Operatore virgola.
03.10 Espressioni aritmetico-logiche.
03.11 Precedenza e associatività degli operatori.
04. Istruzioni
04.01 Istruzione di assegnamento.
04.02 Istruzione composta.
04.03 Istruzioni di selezione: if, switch.
04.04 Istruzioni di ripetizione: while, for, do-while.
04.05 Istruzione goto.
04.06 Teorema fondamentale della programmazione strutturata.
05. Procedure
05.01 Formato di un programma con più funzioni su singolo file.
05.02 Dichiarazione di funzione.
05.03 Definizione di funzione e parametri formali.
05.04 Invocazione di funzione e parametri effettivi.
05.05 Istruzione return.
05.06 Parametri e risultato della funzione main.
05.07 Passaggio di parametri per valore e per indirizzo.
05.08 Funzioni ricorsive.
05.09 Modello di esecuzione a pila.
05.10 Formato di un programma con più funzioni su più file.
05.11 Visibilità degli identificatori locali e non locali.
06. Tipi di dati
06.01 Classificazione dei tipi di dati e operatore sizeof.
06.02 Tipo int: rappresentazione e varianti.
06.03 Tipo double: rappresentazione e varianti.
06.04 Funzioni di libreria matematica.
06.05 Tipo char: rappresentazione e funzioni di libreria.
06.06 Tipi enumerati.
06.07 Conversioni di tipo e operatore di cast.
06.08 Array: rappresentazione e operatore di indicizzazione.
06.09 Stringhe: rappresentazione e funzioni di libreria.
06.10 Strutture e unioni: rappresentazione e operatore punto.
06.11 Puntatori: operatori e funzioni di libreria.
07. Correttezza di programmi procedurali
07.01 Triple di Hoare.
07.02 Determinazione della precondizione più debole.
07.03 Verifica della correttezza di programmi procedurali iterativi.
07.04 Verifica della correttezza di programmi procedurali ricorsivi.
08. Introduzione alla logica matematica
08.01 Cenni di storia della logica.
08.02 Teoria degli insiemi.
08.03 Relazioni e funzioni.
08.04 Principio di induzione.
09. Logica proposizionale
09.01 Sintassi della logica proposizionale.
09.02 Semantica e decidibilità della logica proposizionale.
09.03 Conseguenza ed equivalenza nella logica proposizionale.
09.04 Proprietà algebriche dei connettivi logici.
09.05 Sistemi deduttivi per la logica proposizionale.
10. Logica dei predicati
10.01 Sintassi della logica dei predicati.
10.02 Semantica e indecidibilità della logica dei predicati.
10.03 Conseguenza ed equivalenza nella logica dei predicati.
10.04 Proprietà algebriche dei quantificatori.
10.05 Sistemi deduttivi per la logica dei predicati.
11. Programmazione logica: il linguaggio Prolog
11.01 Forme normali per formule logiche.
11.02 Teoria di Herbrand e algoritmo di refutazione.
11.03 Metodo di risoluzione per la logica proposizionale.
11.04 Unificazione e risoluzione per la logica dei predicati.
11.05 Prolog: clausole di Horn e strategia di risoluzione SLD.
11.06 Prolog: predicati predefiniti, taglio e negazione.
12. Attività di laboratorio
12.01 Sessione di lavoro in Linux.
12.02 Accesso ad Internet in Linux.
12.03 Gestione dei file in Linux.
12.04 L'editor gvim.
12.05 Il compilatore gcc.
12.06 L'utility di manutenzione make.
12.07 Il debugger gdb.
12.08 Implementazione dei programmi C introdotti a lezione.
12.09 Il compilatore/interprete gprolog.
12.10 Implementazione dei programmi Prolog introdotti a lezione.
English version:
01. Introduction to computer programming
01.01 Basic definitions in informatics.
01.02 A bit of history of informatics.
01.03 Computer architecture.
01.04 Operating systems.
01.05 Programming languages and compilers.
01.06 A methodology for developing software "in the small".
02. Procedural programming: the language ANSI C
02.01 A bit of history of C.
02.02 Format of a program with a single function.
02.03 Library inclusion.
02.04 Function main.
02.05 Identifiers.
02.06 Predefined data types: int, double, char.
02.07 Library functions for interactive input/output.
02.08 Library functions for file-based input/output.
03. Expressions
03.01 Symbolic constant definition.
03.02 Variable declaration.
03.03 Arithmetical operators.
03.04 Relational operators.
03.05 Logical operators.
03.06 Conditional operator.
03.07 Assignment operators.
03.08 Increment/decrement operators.
03.09 Comma operator.
03.10 Arithmetical-logical expressions.
03.11 Operator precedence and associativity.
04. Statements
04.01 Assignment statement.
04.02 Compound statement.
04.03 Selection statements: if, switch.
04.04 Repetition statements: while, for, do-while.
04.05 Goto statement.
04.06 Fundamental theorem of structured programming.
05. Procedures
05.01 Format of a program with several functions on a single file.
05.02 Function declaration.
05.03 Function definition and formal parameters.
05.04 Function invocation and actual parameters.
05.05 Return statement.
05.06 Parameters and result of function main.
05.07 Passing parameters by value and by reference.
05.08 Recursive functions.
05.09 Stack-based execution model.
05.10 Format of a program with several functions on several files.
05.11 Scope of local and nonlocal identifiers.
06. Data types
06.01 Data type classification and sizeof operator.
06.02 Type int: representation and variants.
06.03 Type double: representation and variants.
06.04 Mathematical library functions.
06.05 Type char: representation and library functions.
06.06 Enumerated types.
06.07 Type conversions and cast operator.
06.08 Arrays: representation and indexing operator.
06.09 Strings: representation and library functions.
06.10 Structures and unions: representation and dot operator.
06.11 Pointers: operators and library functions.
07. Correctness of procedural programs
07.01 Hoare triples.
07.02 Determining the weakest precondition.
07.03 Verifying the correctness of iterative procedural programs.
07.04 Verifying the correctness of recursive procedural programs.
08. Introduction to mathematical logic
08.01 A bit of history of logic.
08.02 Set theory.
08.03 Relations and functions.
08.04 Induction principle.
09. Propositional logic
09.01 Syntax of propositional logic.
09.02 Semantics and decidability of propositional logic.
09.03 Consequence and equivalence in propositional logic.
09.04 Algebraic properties of the logical connectives.
09.05 Deduction systems for propositional logic.
10. Predicate logic
10.01 Syntax of predicate logic.
10.02 Semantics and undecidability of predicate logic.
10.03 Consequence and equivalence in predicate logic.
10.04 Algebraic properties of the quantifiers.
10.05 Deduction systems for predicate logic.
11. Logic programming: the language Prolog
11.01 Normal forms for logical formulas.
11.02 Herbrand theory and refutation algorithm.
11.03 Resolution method for propositional logic.
11.04 Unification and resolution for predicate logic.
11.05 Prolog: Horn clauses and SLD resolution strategy.
11.06 Prolog: predefined predicates, cut, and negation.
12. Laboratory activities
12.01 Work session in Linux.
12.02 Internet access in Linux.
12.03 File management in Linux.
12.04 The editor gvim.
12.05 The compiler gcc.
12.06 The maintenance utility make.
12.07 The debugger gdb.
12.08 Implementation of the C programs introduced in the lectures.
12.09 The compiler/interpreter gprolog.
12.10 Implementation of the Prolog programs introduced in the lectures.
Eventuali Propedeuticità
Matematica Discreta
Modalità Didattiche, Obblighi, Testi di Studio e Modalità di Accertamento
- Modalità didattiche
Lezioni teoriche ed esercitazioni di laboratorio, sia in presenza che a distanza.
English version: Theory lectures and laboratory exercises, both face-to face and on-line.
- Testi di studio
Hanly, Koffman, "Problem Solving and Program Design in C", Addison-Wesley, 2003.
Kernighan, Ritchie, "The C Programming Language", Prentice Hall, 1988
(Kernighan, Ritchie, "Il Linguaggio C", Pearson/Prentice Hall, 2004).
Asperti, Ciabattoni, "Logica a Informatica", McGraw-Hill, 1997
(Schöning, "Logic for Computer Scientists", Birkhäuser, 2008).
Console, Lamma, Mello, Milano, "Programmazione Logica e Prolog", UTET, 1997
(Sterling, Shapiro, "The Art of Prolog", MIT Press, 1997).
- Modalità di
accertamento Progetto individuale, prova scritta e prova orale.
English version: Individual project, written exam, and oral exam.
- Disabilità e DSA
Le studentesse e gli studenti che hanno registrato la certificazione di disabilità o la certificazione di DSA presso l'Ufficio Inclusione e diritto allo studio, possono chiedere di utilizzare le mappe concettuali (per parole chiave) durante la prova di esame.
A tal fine, è necessario inviare le mappe, due settimane prima dell’appello di esame, alla o al docente del corso, che ne verificherà la coerenza con le indicazioni delle linee guida di ateneo e potrà chiederne la modifica.
Note
L'insegnamento è erogato sia in presenza che a distanza nel Corso di Laurea in Informatica Applicata.
English version: The course is offered both face-to-face and on-line within the Laurea Degree Program in Applied Computer Science.
« torna indietro | Ultimo aggiornamento: 22/12/2011 |