Questo corso fornisce un'introduzione completa alla programmazione in Python, insieme a una comprensione degli algoritmi principali e delle strutture dati. Il corso è pensato per fornire agli studenti le competenze necessarie per scrivere e correggere programmi Python e per progettare algoritmi e strutture dati per risolvere problemi. Gli studenti apprenderanno sia le basi teoriche che le applicazioni pratiche della programmazione e degli algoritmi attraverso una combinazione di lezioni e sessioni di laboratorio.
Prerequisiti
Non sono previsti requisiti
Metodi didattici
Il corso si articola in lezioni frontali ed esercitazioni. Ogni lezione presenta sia elementi teorici sia immediate applicazioni ed esempi. Il docente rende disponibile preventivamente tutto il materiale didattico e invita lo studente ad essere presente in aula dopo aver preso visione del materiale della lezione, che verrà svolta in modo tale da aumentare interazione, discussione e di conseguenza apprendimento.
Verifica Apprendimento
L’obiettivo della prova d’esame è l'accertamento dell’acquisizione delle conoscenze e delle abilità descritte nella sezione “Obiettivi formativi”, valutando il livello di conoscenza e soprattutto la capacità di mettere in pratica, anche integrandole tra loro, le tecniche di progettazione viste a lezione. L'esame finale è composto da una prova scritta/pratica e una facoltativa prova orale. La prova scritta/pratica - della durata indicativa di 180 minuti - prevede una serie di 2 problemi e 3 quesiti relativi agli argomenti trattati a lezione. La prova orale copre invece solamente gli argomenti visti nella seconda parte del corso
Contenuti
Le lezioni affronteranno i seguenti argomenti: Parte I - Introduzione alla programmazione Python: - Variabili, costanti e tipi di dati elementari - Assegnazione e dichiarazioni composite - Nozioni di base sull'input/output - Espressioni e operatori - Strutture di controllo: selezione e cicli - Array - Introduzione alla ricorsione - Classi Parte II - Teoria della computazione - Modelli di calcolo e complessità (formalizzazione, notazioni asintotiche, modelli RAM e RASP, criteri di costo, linguaggi procedurali) - Algoritmi e strutture dati di base (vettori, matrici, liste, pile, code, grafi e alberi - rappresentazione e attraversamento, ordinamento) - Algoritmi e strutture dati avanzati (ordinamento digitale, heap e heapsort) - Tecniche di progettazione (divide et impera)
Lingua Insegnamento
Italiano
Altre informazioni
Il docente riceve su appuntamento, previa richiesta via e-mail a alessandro.lupi@uninsubria.it.