FISICA

LAUREA TRIENNALE

PROGRAMMAZIONE

Crediti: 
6
Sede: 
PARMA
Anno accademico di offerta: 
2021/2022
Responsabile della didattica: 
GRANATA DONATELLA
Settore scientifico disciplinare: 
INFORMATICA (INF/01)
Semestre dell'insegnamento: 
Primo Semestre
Anno di corso: 
1

Obiettivi formativi

L'obiettivo principale del corso è quello di far acquisire allo studente le tecniche fondamentali della programmazione. Il corso mira anche a fornire allo studente la capacità di applicare tecniche di analisi dei problemi per risolvere in modo algoritmico semplici problemi pratici e quindi tradurre tali soluzioni in programmi eseguibili. Infine il corso mira a sviluppare capacità di analisi, di astrazione e di scomposizione di problemi in sottoproblemi.

Con riferimento agli Indicatori di Dublino:
Conoscenza e capacità di comprensione
:

Il corso introduce i primi concetti relativi alla programmazione imperativa, con particolare attenzione alla comprensione delle tecniche algoritmiche di base dei linguaggi imperativi. Il testo di riferimento è in italiano, ma durante le lezioni viene utilizzata anche la terminologia ed eventuali slides in lingua inglese come avviamento alla consultazione di letteratura scientifica internazionale. Durante il corso, lo studente impara i fondamenti della programmazione. Lo studente acquisisce inoltre adeguate competenze informatiche, legate all’architettura dei calcolatori e alla rappresentazione dell’informazione. Inoltre, lo studente è in grado di comprendere le applicazioni di base della matematica all’informatica.

Capacità di applicare conoscenza e comprensione
:

Le conoscenze teoriche presentate vengono sempre applicate alla risoluzione di problemi specifici, spesso di carattere modellistico/matematico. Lo studente è quindi in grado di utilizzare strumenti informatici e computazionali, sia come supporto ai processi matematici, sia per acquisire ulteriori informazioni. Le esercitazioni che affiancano il corso sono incentrate sulla risoluzione di esercizi e problemi. Molti metodi risolutivi vengono applicati a problemi di natura matematica e numerica e vengono presentati e analizzati sotto forma algoritmica.

Autonomia di giudizio:

Gli esercizi proposti relativamente alla parte teorica svolta a lezione possono essere affrontati individualmente o in gruppo e, spesso, possono essere risolti in modi molto diversi. Il confronto con i compagni di corso e l'ascolto delle soluzioni proposte da altri, nel lavoro a casa o durante gli svolgimenti in aula, favoriscono lo sviluppo di capacità specifiche per poter a chiarire le proprie argomentazioni e individuare strutture comuni tra i diversi approcci.

Abilità comunicative:
Le discussioni in aula e durante le esercitazioni consentono di migliorare le capacità di comunicazione. Tali discussioni riguardano i metodi per risolvere i problemi proposti, evidenziando vantaggi e svantaggi dei diversi approcci proposti. Lo studente impara a lavorare sia in autonomia che in gruppo.

Capacità di apprendimento:

Lo studio delle tecniche algoritmiche di base e la loro applicazione a problemi di natura eterogenea contribuiscono a realizzare negli studenti la capacità di apprendere in modo approfondito e non solo superficiale e ripetitivo. Le conoscenze così acquisite non sono mai rigide e meccaniche, ma sono perfettamente adattabili ad ogni evoluzione e cambiamento di prospettiva e di contesto. Lo studente è in grado di acquisire tecniche di calcolo scientifico per il mondo del lavoro, in modo autonomo o in collaborazione con studiosi di altre materie.

Prerequisiti

Nozioni di base su funzioni, insiemi ed espressioni logiche.

Contenuti dell'insegnamento

Nella prima parte del corso sono presentati concetti relativi all'architettura hardware e software degli elaboratori e alla rappresentazione dell'informazione, con particolare attenzione alla rappresentazione dei numeri interi e dei numeri reali. Successivamente, sono introdotti i fondamenti della programmazione. In particolare, sono sviluppate le nozioni di variabile, tipo di dato, algoritmo, espressione e sono introdotte le funzioni e le funzioni ricorsive. Concentrandoci sulla programmazione in linguaggio C e cenni del linguaggio Python.

Programma esteso

1) Rappresentazione dell’Informazione
- Definizione di alfabeto, stringa, linguaggio (esempi)
- Definizione di informazione
- Codifiche binarie e loro proprietà
- Rappresentazione dei numeri nei calcolatori

2) Architettura hardware e software
- Problemi e soluzioni
- Definizione di processo, programma, algoritmo
- Macchine astratte e gerarchia di macchine (cenni)
- Architettura dei calcolatori (CPU; memorie e gerarchia di memorie)
3) Introduzione ai linguaggi di alto livello e loro descrizione: problem solving.

4) Programmazione in linguaggio C
-Programmazione strutturata
-Decomposizione funzionale
-Programmazione modulre
-I file
-Sviluppo di algoritmi

5) Il linguaggio Python

Bibliografia

P. J Deitel, H.M Deitel. Il linguaggio C- Fondamenti e Tecniche di Programmazione, Pearson.

Altro materiale:
-S. Das, Computers Fundamentals and C Programming, McGraw-Hill India, 2018.
- D. Mandrioli, S. Ceri, L. Sbattella, P. Cremonesi, G. Cugola. Informatica arte e mestiere, McGraw-Hill, 2014.
- A. Bellini. Linguaggio C, guida alla programmazione con elementi in Python. Sesta edizione.McGraw-Hill.
- Esercizi caricati di volta in volta sulla piattaforma elly.smfi.unipr.it

Metodi didattici

Il corso consiste in lezioni frontali svolte in aula.

Modalità verifica apprendimento

L'esame consiste in una prova scritta e in una prova di programmazione. Il voto finale tiene conto dei risultati di entrambe le prove.