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


PROGRAMMAZIONE PROCEDURALE
PROCEDURAL PROGRAMMING

A.A. CFU
2021/2022 9
Docente Email Ricevimento studentesse e studenti
Marco Bernardo Giovedì 16:00 - 18:00 oppure su appuntamento
Didattica in lingue straniere
Insegnamento con materiali opzionali in lingua straniera Inglese
La didattica è svolta interamente in lingua italiana. I materiali di studio e l'esame possono essere in lingua straniera.

Assegnato al Corso di Studio

Informatica Applicata (L-31)
Curriculum: PERCORSO COMUNE
Giorno Orario Aula
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, assieme a una metodologia per sviluppare sistemi software di piccole dimensioni e valutare la loro correttezza.

Programma

01. Introduzione alla Programmazione degli Elaboratori
  01.01 Definizioni di Base dell'Informatica
  01.02 Cenni di Storia dell'Informatica
  01.03 Elementi di Architettura degli Elaboratori
  01.04 Elementi di Sistemi Operativi
  01.05 Elementi di 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 Linguaggio 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 Tipo delle Espressioni
  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 un 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 Principio di Induzione e Funzioni Ricorsive
  05.09 Modello di Esecuzione Sequenziale Basato su 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 Stato della Computazione e Triple di Hoare
  07.02 Precondizione Più Debole e Regole di Dijkstra
  07.03 Verifica della Correttezza di Programmi Procedurali Iterativi
  07.04 Verifica della Correttezza di Programmi Procedurali Ricorsivi

08. Attività di Laboratorio in Linux
  08.01 Cenni di Storia di Linux
  08.02 Gestione dei File e Principali Comandi in Linux
  08.03 L'Editor gvim
  08.04 Il Compilatore gcc
  08.05 L'Utility di Manutenzione make
  08.06 Il Debugger gdb
  08.07 Implementazione e Modifica di Programmi e Librerie C

Eventuali Propedeuticità

Non vi sono propedeuticità obbligatorie. Si suggerisce di sostenere l'esame di Programmazione Procedurale dopo aver sostenuto l'esame di Logica, Algebra e Geometria e prima di sostenere tutti gli altri esami di informatica ad eccezione dell'esame di Reti Logiche e dell'esame di Architettura degli Elaboratori.

Risultati di Apprendimento (Descrittori di Dublino)

Conoscenza e comprensione
Lo studente acquisirà le conoscenze fondamentali nel campo della programmazione degli elaboratori, con particolare riferimento al paradigma di programmazione imperativo di natura procedurale esemplificato attraverso il linguaggio ANSI C, e diverrà familiare con la terminologia relativa a definizioni di costanti, dichiarazioni di variabili, espressioni aritmetico-logiche, istruzioni di programmazione, funzioni, parametri, librerie e tipi di dati. Apprenderà inoltre una metodologia per sviluppare sistemi software di piccole dimensioni, come pure la tecnica delle triple di Hoare per verificarne la correttezza.

Capacità di applicare conoscenza e comprensione
Lo studente sarà in grado di progettare e sviluppare sistemi software di piccole dimensioni tramite l'applicazione di una metodologia che copre l'analisi del problema, la progettazione dell'algoritmo e l'implementazione, il testing, la verifica e la manutenzione del programma. Per quanto riguarda la fase di implementazione, lo studente saprà condurla attraverso un linguaggio di programmazione imperativo di natura procedurale.

Autonomia di giudizio
Lo studente sarà in grado di valutare e confrontare progetti alternativi di uno stesso sistema software di piccole dimensioni, così come di analizzare e comparare implementazioni alternative di uno stesso progetto software.

Abilità comunicative
Lo studente sarà in grado di usare in modo appropriato la terminologia dei linguaggi di programmazione imperativi di natura procedurale. Inoltre saprà illustrare le caratteristiche salienti del progetto e dell'implementazione di un sistema software di piccole dimensioni, inclusa la produzione della documentazione del sistema software in termini di relazione tecnica, commenti interni e manuale d'uso.

Capacità di apprendimento
Lo studente acquisirà la capacità di apprendere le peculiarità sintattiche e semantiche di qualsiasi linguaggio di programmazione imperativo di natura procedurale.

Materiale Didattico

Il materiale didattico predisposto dalla/dal docente in aggiunta ai testi consigliati (come ad esempio diapositive, dispense, esercizi, bibliografia) e le comunicazioni della/del docente specifiche per l'insegnamento sono reperibili all'interno della piattaforma Moodle › blended.uniurb.it

Modalità Didattiche, Obblighi, Testi di Studio e Modalità di Accertamento

Modalità didattiche

Lezioni teoriche ed esercitazioni guidate in laboratorio.

Obblighi

Sebbene fortemente consigliata, la frequenza non è obbligatoria.

Testi di studio

Hanly, Koffman, "Problem Solving and Program Design in C", Addison-Wesley, 2016
(Hanly, Koffman, "Problem Solving e Programmazione in C", Apogeo, 2013).

Kernighan, Ritchie, "The C Programming Language", Prentice Hall, 1988
(Kernighan, Ritchie, "Il Linguaggio C", Pearson/Prentice Hall, 2004).

Modalità di
accertamento

Progetto, prova scritta e prova orale.

Il progetto, che deve essere sviluppato da gruppi composti da uno o preferibilmente due studenti su un problema che cambia ad ogni sessione d'esame, consiste nell'implementazione di un programma o di una libreria ANSI C per quel problema seguendo la metodologia di sviluppo software "in the small" presentata a lezione. Il progetto deve essere consegnato almeno 10 giorni prima della prova scritta; in caso di consegna tardiva, viene applicata una penale di 3/30 per ogni giorno di ritardo. Qualora il progetto venga riconsegnato in un successivo appello d'esame, il voto del progetto precedentemente consegnato viene annullato; la riconsegna del progetto nella medesima sessione d'esame è ammessa una sola volta per sessione e in tal caso al voto del nuovo progetto consegnato viene applicata una penale di 4/30 perché gli sviluppatori possono beneficiare della correzione del progetto precedentemente consegnato. Il progetto è superato se il voto è di almeno 18/30; il voto rimane valido, anche se la prova scritta od orale viene sostenuta ma non superata, fino alla terza sessione d'esame successiva a quella in cui il progetto viene consegnato.

La prova scritta, che cambia ad ogni appello d'esame e può essere sostenuta solo se il progetto è stato superato, consiste in 8 domande più 2 esercizi da svolgere in 90 minuti. Essa è superata se il voto è di almeno 18/30; il voto rimane valido solo per l'appello d'esame in cui la prova scritta viene sostenuta.

La prova orale, che può essere sostenuta solo se il progetto e la prova scritta sono stati superati, consiste in una discussione del progetto e della prova scritta, più ulteriori domande. Se superata, essa determina un aggiustamento compreso tra -5/30 e 5/30 della media dei due precedenti voti, producendo così il voto finale.

Per ulteriori informazioni › www.sti.uniurb.it/bernardo/teaching/prog_proc/

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.

« torna indietro Ultimo aggiornamento: 16/06/2022


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