- Home
- Didattica
- I corsi di studio
- Corsi di laurea
FONDAMENTI DI PROGRAMMAZIONE A
Obiettivi formativi
Un obiettivo del corso è quello di far acquisire allo studente le
conoscenze di base per la progettazione e la realizzazione di semplici
programmi scritti in un linguaggio di programmazione convenzionale. In
particolare lo studente acquisirà conoscenze approfondite sugli strumenti
di programmazione messi a disposizione dal sottoinsieme del linguaggio
C++ relativo alla programmazione imperativa.
Il corso mira anche a fornire allo studente la capacità di applicare le
tecniche di analisi dei problemi e le conoscenze sugli strumenti di
programmazione acquisite, per risolvere in modo algoritmico semplici
problemi pratici (quali, ad esempio, problemi di calcolo matematico, di
ordinamento di dati, di gestione di archivi) e quindi tradurre tali soluzioni
in programmi eseguibili tramite calcolatore.
Infine il corso mira a sviluppare nello studente, più generali capacità di
analisi, di astrazione (intesa principalmente come capacità di descrivere
e comprendere un'entità in termini delle funzioni offerte piuttosto che dei
dettagli della sua implementazione), di scomposizione di problemi in
sottoproblemi, e di sviluppo di soluzioni “dall'alto al basso” (“top.down”)
e per raffinamenti successivi.
Prerequisiti
Nozioni di base su funzioni e insiemi e su connettivi ed espressioni
logiche.
Nozioni di base su organizzazione fisica di un calcolatore e sulla
rappresentazione dell'informazione.
Contenuti dell'insegnamento
Il corso introduce i fondamenti della programmazione imperativa,
utilizzando come linguaggio di programmazione di riferimento il
frammento imperativo del C++.
In particolare, nella prima parte del corso vengono introdotte nozioni
fondamentali per la programmazione quali quelle di algoritmo,
diagramma di flusso, variabili, tipi di dato semplici e strutturati,
espressioni e statement per il controllo di sequenza.
Nella seconda parte del corso si affronta lo sviluppo di programmi più
complessi, introducendo, da una parte, la nozione di sottoprogramma e
altre nozioni a questa collegate, come funzioni ricorsive e regole di
scope, dall'altra altre forme di gestione dei dati, come l'input/output da
file e la manipolazione di strutture dati dinamiche con puntatori.
Per entrambe le parti viene mostrata la realizz
Bibliografia
- L.J. Aguilar. Fondamenti di programmazione in C++ , McGraw-Hill, 2008.
- R. Miller, D. Clark, B. White, e W. Knottenbel: An Introduction to the
Imperative Part of C++, 1999, disponibile su WEB all'indirizzo http:
//www.doc.ic.ac.uk/~wjk/C++Intro/CourseStructure.html#S
- Dispense del corso, disponibili su WEB all'indirizzo http://people.math.
unipr.it/gianfranco.rossi/Teaching/FondProgr/index.html
- Programmi C++ mostrati a lezione e in laboratorio, disponibili su Web
agli indirizzi http://people.math.unipr.it/gianfranco.
rossi/Teaching/FondProgr/EsempiLezione/index.html e http://lea.unipr.
it/course/view.php?id=324
Metodi didattici
Il corso prevede una sua pagina Web per tutte le informazioni generali,
gestita direttamente dal docente (http://people.math.unipr.it/gianfranco.
rossi/Teaching/FondProgr/index.html) e una pagina sul sistema dii Web
Learning dell'Ateneo per la gestione delle esercitazioni (http://lea.unipr.
it/course/view.php?id=324)
Modalità verifica apprendimento
L'esame finale del corso e' costituito da una prova scritta ed una prova
orale.
La prova scritta consiste nella soluzione (su carta) di alcuni esercizi di
programmazione, utilizzando il frammento imperativo del linguaggio C++
presentato nel corso.
La prove orale consiste in alcune domande (di norma tre) sugli aspetti più
di base e generali trattati nell'intero corso.
Per gli studenti del Corso di Laurea in Informatica la prova d'esame è
integrata con quella del corso di Fondamenti di Programmazione B, che
prevede una prova pratica ed una prova orale. La prova pratica consiste
nella soluzione (su PC, nell'Aula Informatica del Dipartimento di
Matematica e Informatica) di alcuni esercizi di programmazione,
utilizzando le possibilità "Object-Oriented" del C++ presentate nel corso
di Fondamenti di Programmazione B.
Ad ognuna delle prove (scritta, pratica e orali) è assegnato un voto in
trentesimi. Le prove sono ritenute superate se il voto è maggiore od
uguale a 15/30. L'esame è superato se sono superate tutte le prove da
cui è costituito e il voto finale è maggiore od uguale a 18/30. Il voto finale
è ottenuto come media pesata dei voti riportati nelle singole prove. La
prova scritta "pesa" il doppio delle altre prove.
Altre informazioni
Il corso prevede una sua pagina Web per tutte le informazioni generali,
gestita direttamente dal docente (http://people.math.unipr.it/gianfranco.
rossi/Teaching/FondProgr/index.html) e una pagina sul sistema dii Web
Learning dell'Ateneo per la gestione delle esercitazioni (http://lea.unipr.
it/course/view.php?id=324)
Obiettivi di apprendimento
Un obiettivo del corso è quello di far acquisire allo studente le conoscenze di base per la progettazione e la realizzazione di semplici programmi scritti in un linguaggio di programmazione convenzionale. In particolare lo studente acquisirà conoscenze approfondite sugli strumenti di programmazione messi a disposizione dal sottoinsieme del linguaggio C++ relativo alla programmazione imperativa.
Il corso mira anche a fornire allo studente la capacità di applicare le tecniche di analisi dei problemi e le conoscenze sugli strumenti di programmazione acquisite, per risolvere in modo algoritmico semplici problemi pratici (quali, ad esempio, problemi di calcolo matematico, di ordinamento di dati, di gestione di archivi) e quindi tradurre tali soluzioni in programmi eseguibili tramite calcolatore.
Infine il corso mira a sviluppare nello studente, più generali capacità di analisi, di astrazione (intesa principalmente come capacità di descrivere e comprendere un'entità in termini delle funzioni offerte piuttosto che dei dettagli della sua implementazione), di scomposizione di problemi in sottoproblemi, e di sviluppo di soluzioni “dall'alto al basso” (“top.down”) e per raffinamenti successivi.
Prerequisiti
Nozioni di base su funzioni e insiemi e su connettivi ed espressioni logiche.
Nozioni di base su organizzazione fisica di un calcolatore e sulla rappresentazione dell'informazione.
Contenuti dell'insegnamento
Il corso introduce i fondamenti della programmazione imperativa, utilizzando come linguaggio di programmazione di riferimento il frammento imperativo del C++.
In particolare, nella prima parte del corso vengono introdotte nozioni fondamentali per la programmazione quali quelle di algoritmo, diagramma di flusso, variabili, tipi di dato semplici e strutturati, espressioni e statement per il controllo di sequenza.
Nella seconda parte del corso si affronta lo sviluppo di programmi più complessi, introducendo, da una parte, la nozione di sottoprogramma e altre nozioni a questa collegate, come funzioni ricorsive e regole di scope, dall'altra altre forme di gestione dei dati, come l'input/output da file e la manipolazione di strutture dati dinamiche con puntatori.
Per entrambe le parti viene mostrata la realizzazione di semplici programmi C++ che utilizzano le nozioni introdotte.
Programma esteso
FONDAMENTI.
Problemi e algoritmi - La nozione di algoritmo. I diagrammi di flusso. Risoluzione di semplici problemi.
Linguaggi e ambienti di programmazione - Linguaggi esistenti (cenni). Modalita' d'esecuzione (cenni). Ambienti integrati di sviluppo programmi (IDE).
Variabili: caratteristiche, dichiarazione. Identificatori. Costanti. Espressioni: sintassi, valutazione (associativita' e precedenza), tipo. Assegnamento.
Tipi di dato: definizione, tipi semplici e strutturati, primitivi e definiti da utente. Costruttori di tipo. Strutture dati astratte e concrete. Utilita' dei tipi. Compatibilita' e conversioni di tipo.
Nomi, ambienti e regole di "scope": struttura a blocchi, ambiente locale e non-locale, variabili globali.
Programmazione strutturata - Strutture di controllo. Teorema di Bohm-Jacopini. Statement goto. Progetto "top-down" e sviluppo programmi "per raffinamenti successivi".
LINGUAGGIO C++.
Dichiarazione di variabile. Tipi semplici primitivi: valori, costanti, operazioni. Dichiarazione di costante.
Input/output di base. Operatori di estrazione ed inserimento. Input/output a caratteri (funzioni get e put).
Assegnamento e statement composto. Espressioni.
Statement per il controllo di sequenza: if, switch, while, do_while, for, break. Esempio. Verifica dell'input.
Tipi strutturati. Array: dichiarazione, selezione elementi, memorizzazione, operazioni. Array bi-dimensionali. Matrici. Esempi operazioni su matrici e vettori (in partic., ordinamento per selezione). Stringhe: realizzazione tramite array, operazioni, funzioni di libreria. struct: dichiarazione, selezione elementi, operazioni. Tabelle: definizione, realizzazione tramite array di struct.
Dichiarazione e chiamata di funzione. Passaggio parametri: per valore, per riferimento. Passaggio parametri di tipo array. Funzioni void.
Strutturazione di un programma e regole di "scope".
Input/output su file. Creazione ed apertura di uno stream. Lettura/scrittura "tipata" e a caratteri.
Puntatori ed allocazione dinamica della memoria (operatore new). Operazioni su puntatori. Puntatori ed array. Esempio: liste concatenate.
Sviluppo di semplici programmi nel frammento imperativo del C++. Utilizzo di funzioni di libreria.
Bibliografia consigliata
- L.J. Aguilar. Fondamenti di programmazione in C++ , McGraw-Hill, 2008.
- R. Miller, D. Clark, B. White, e W. Knottenbel: An Introduction to the Imperative Part of C++, 1999, disponibile su WEB all'indirizzo http://www.doc.ic.ac.uk/~wjk/C++Intro/CourseStructure.html#S
- Dispense del corso, disponibili su WEB all'indirizzo http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/index.html
- Programmi C++ mostrati a lezione e in laboratorio, disponibili su Web agli indirizzi
http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/EsempiLe... e https://elly.dmi.unipr.it/
Metodi didattici
L'insegnamento si svolge principalmente tramite lezioni frontali ed esercitazioni su computer, sia assistite che svolte in modo autonomo dallo studente.
Le lezioni prevedono tra l'altro la presentazione di numerosi esempi pratici di problemi e relativi programmi per la loro soluzione scritti in C++ che verranno resi disponibili su Web nel sito del corso (all'indirizzo http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/EsempiLe... ).
Le esercitazioni prevedono l'assegnazione da parte del docente, con cadenza settimanale, di uno o piu' esercizi, inerenti gli argomenti trattati a lezione, che lo studente dovrà svolgere in modo autonomo e consegnare entro una settimana, avvalendosi della piattaforma di e-learning di Ateneo (https://elly.dmi.unipr.it/). La piattaforma permette tra l'altro al docente di monitorare la consegna degli esercizi e di fornire suggerimenti per il loro svolgimento.
Per gli studenti che incontrano difficoltà nella realizzazione degli esercizi assegnati sono previsti incontri in Laboratorio, a cadenza settimanale, con il docente e gli eventuali suoi collaboratori.
Modalità verifica apprendimento
L'esame finale del corso e' costituito da una prova di programmazione ed una prova di teoria.
La prova di programmazione consiste nella soluzione (su carta) di alcuni esercizi di programmazione, utilizzando il frammento imperativo del linguaggio C++ presentato nel corso.
La prova di teoria consiste in alcune domande sugli aspetti di base e generali trattati nell'intero corso.
Per gli studenti del Corso di Laurea in Informatica la prova d'esame è integrata con quella del corso di Fondamenti di Programmazione B, che prevede una prova pratica ed una prova di teoria. La prova pratica consiste nella soluzione (su PC, nell'Aula Informatica del Dipartimento di Matematica e Informatica) di alcuni esercizi di programmazione, utilizzando le possibilità "Object-Oriented" del C++ e di Java presentate nel corso di Fondamenti di Programmazione B.
Ad ognuna delle prove (di programmazione, pratica e di teoria) è assegnato un voto in trentesimi. Le prove sono ritenute superate se il voto è maggiore od uguale a 16/30. L'esame è superato se sono superate tutte le prove da cui è costituito e il voto finale è maggiore od uguale a 18/30. Il voto finale è ottenuto come media aritmetica dei voti riportati nelle singole prove.
È prevista una prova in itinere (non obbligatoria) che verrà svolta alla fine del mese di novembre dell'a.a. in corso. La prova in itinere è riservata agli studenti del I anno che abbiano risolto e consegnato almeno 75% degli esercizi assegnati durante lo svolgimento del corso.
Altre informazioni
Il corso prevede una sua pagina Web per tutte le informazioni generali, gestita direttamente dal docente (http://people.math.unipr.it/gianfranco.rossi/Teaching/FondProgr/index.html) e una pagina sul sistema dii Web Learning dell'Ateneo per la gestione delle esercitazioni (https://elly.dmi.unipr.it/).
Attività Mutua
Altri insegnamenti
ANNO DI CORSO: 1
ANNO DI CORSO: 2




