Università degli Studi di Urbino Carlo Bo / Portale Web di Ateneo


PROGRAMMAZIONE PROCEDURALE E LOGICA
PROCEDURAL AND LOGIC PROGRAMMING

Informatica Applicata
Procedural and Logic Programming

A.A. CFU
2012/2013 12
Docente Email 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: termini, predicati, taglio e negazione.

12. Attività di laboratorio
  12.01 Sessione di lavoro in Linux.
  12.02 Gestione dei file in Linux.
  12.03 L'editor gvim.
  12.04 Il compilatore gcc.
  12.05 L'utility di manutenzione make.
  12.06 Il debugger gdb.
  12.07 Implementazione dei programmi C introdotti a lezione.
  12.08 Il compilatore/interprete gprolog.
  12.09 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: terms, predicates, cut, and negation.

12. Laboratory activities

  12.01 Work session in Linux.
  12.02 File management in Linux.
  12.03 The editor gvim.
  12.04 The compiler gcc.
  12.05 The maintenance utility make.
  12.06 The debugger gdb.
  12.07 Implementation of the C programs introduced in the lectures.
  12.08 The compiler/interpreter gprolog.
  12.09 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 guidate in laboratorio, sia in presenza che a distanza.


English version: Theory lectures and laboratory exercises, both face-to-face and on-line.

Obblighi

Sebbene consigliata, la frequenza non è obbligatoria.


English version:
Although recommended, course attendance is not mandatory.

Testi di studio

Hanly, Koffman, "Problem Solving and Program Design in C", Addison-Wesley, 2012.

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: 17/10/2012


Il tuo feedback è importante

Raccontaci la tua esperienza e aiutaci a migliorare questa pagina.

Posta elettronica certificata

amministrazione@uniurb.legalmail.it

Social

Università degli Studi di Urbino Carlo Bo
Via Aurelio Saffi, 2 – 61029 Urbino PU – IT
Partita IVA 00448830414 – Codice Fiscale 82002850418
2024 © Tutti i diritti sono riservati

Top