- Oggetto:
- Oggetto:
Programmazione II
- Oggetto:
Programming II
- Oggetto:
Anno accademico 2024/2025
- Codice attività didattica
- INF0330
- Docenti
- Ferruccio Damiani (Corso A + Corso A Turno 1 + Corso A Turno 2)
Gianluca Torta (Corso B Turno 2)
Cristina Baroglio (Corso B)
Michele Garetto (Corso C + Corso C Turno 1)
Marino Segnan (Corso B Turno 1)
Giorgio Audrito (Corso C Turno 2) - Corso di studio
- [008707] Laurea in Informatica
- Anno
- 1° anno
- Periodo
- Secondo semestre
- Tipologia
- Caratterizzante
- Crediti/Valenza
- 6 CFU - Numero di ore - Number of hours: 32 (in aula) + 20 (in laboratorio)
- Crediti percorso 24 CFU
- 2
- SSD attività didattica
- INF/01 - informatica
- Erogazione
- Tradizionale
- Lingua
- Italiano
- Frequenza
- Facoltativa
- Tipologia esame
- Scritto
- Tipologia unità didattica
- corso
- Prerequisiti
-
Affinché possano fruire con successo di questo insegnamento, agli studenti e alle studentesse è richiesta la conoscenza delle nozioni fondamentali di programmazione imperativa e della loro implementazione nel linguaggio C (comandi di assegnamento, condizionali e iterativi, tipi di dato semplici, array e struct, stringhe, nozione di puntatore, nozioni di astrazione procedurale e ricorsione) lettura da standard input, scrittura su standard output. Tali nozioni sono, per esempio, fornite dall’insegnamento Programmazione I dello stesso corso di laurea.
In order to fruitfully attend this course, the students should have knowledge of fundamental concepts of programming in the imperative paradigm and of their realization in the C language (assignment, conditional and iterative instructions, basic data structures, arrays, struct, strings, notion of pointer, notion of procedural abstraction, and recursion), reading and writing from/on standard input/output. Such notions are, for instance, supplied by the Programmazione I course of the same curriculum. - Oggetto:
Sommario insegnamento
- Oggetto:
Avvisi
- Oggetto:
Obiettivi formativi
Questo insegnamento concorre agli obiettivi formativi specifici dell'ambito delle conoscenze di programmazione del Corso di Laurea in Informatica (L31) e fa parte dell’area Informatica caratterizzante.
Permette a studenti e studentesse di proseguire il percorso di introduzione alla programmazione, iniziato con Programmazione I, con l'obiettivo di approfondire concetti di informatica di base e in particolare il paradigma di programmazione imperativa, affrontando in maniera sistematica l’allocazione dinamica di dati in memoria principale e il relativo accesso, le strutture dati ricorsive, la ricorsione e fornendo un’introduzione alla strutturazione del codice in più file. In particolare, l’insegnamento mostrerà come definire ed utilizzare semplici strutture dati (liste, alberi binari, pile, code), i meccanismi di base per favorire riuso e modularità del software, la gestione di casi eccezionali, quali per esempio input malformati, così come alcune librerie fondamentali per la programmazione in C. Si darà particolare enfasi agli aspetti di buona progettazione del software, utilizzando concetti presi a prestito dall'ingegneria del software e formalismi grafici.
This course contributes to the learning goals concerning programming of the Corso di Laurea in Informatica (L31) and is part of the distinguishing area “computer science”.
It allows students to continue their introduction to programming, that began with Programmazione I, with the objective of bettering their knowledge of basic computer science concepts, and in particular the imperative programming paradigm, by facing in a systematic way dynamic memory allocation and its access, recursive data structures, the development of recursive functions, and by acquiring basic skills for structuring code into many files. In particular, the course will explain how to define and use simple data structures (lists, binary trees, stacks, queues), the basic mechanisms for facilitating software modularity and re-use, the management of exceptional conditions, such as ill-formed input data, as well as the main library functions that are fundamental for programming in C. Special emphasis will be given to the aspects of software design by borrowing concepts and graphical formalisms from the area of software engineering.
- Oggetto:
Risultati dell'apprendimento attesi
CONOSCENZA E CAPACITÀ DI COMPRENSIONE: Dal punto di vista della acquisizione di contenuti di programmazione e metodologici, studenti e studentesse acquisiranno la capacità di progettare e realizzare piccole/medie applicazioni in C sfruttando gli strumenti di base della programmazione imperativa, impareranno a utilizzare e a realizzare alcune strutture dati fondamentali e approfondiranno la conoscenza della gestione dinamica della memoria.
CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE: capacita di comprendere semplici specifiche scritte in linguaggio naturale, di individuarne eventuali ambiguità, di riformularle in modo non ambiguo, e di sviluppare funzioni/programmi C (adeguatamente commentati e dotati di una test suite) che soddisfino tali specifiche.
AUTONOMIA DI GIUDIZIO: capacità di ragionare sulle possibilità alternative di rappresentazione e di codifica e sulle conseguenze delle varie scelte.
ABILITÀ COMUNICATIVE: acquisizione di una buona capacità di comprensione delle consegne e di spiegazione delle scelte implementative, unita all’uso corretto della terminologia del settore (e più in generale dell’informatica).
CAPACITÀ DI APPRENDIMENTO: acquisizione di capacità autonome di apprendimento e di autovalutazione.
KNOWLEDGE AND UNDERSTANDING: concerning the acquisition of knowledge about programming and programming methodologies, students will learn how to design and implement small/medium programs in the C language by using the basic tools that are offered by imperative programming, they will learn to use and implement some fundamental data structures and will deepen their knowledge about dynamic memory allocation.
APPLYING KNOWLEDGE AND UNDERSTANDING: ability to understand simple specifications written in natural language, to identify any ambiguities, to reformulate them in an unambiguous way, and to develop C functions/programs (adequately commented and equipped with a test suite) that satisfy these specifications.
MAKING JUDGMENTS:ability to reason about the alternative possibilities of representation and coding and the consequences of the various choices.
COMMUNICATION SKILLS: acquisition of good understanding skills of the problem to be tackled, as well as of good explanation skills of the taken choices and of the pros and cons of their alternatives. Acquisition of the vocabulary of the programming sector (and, more in general, of computer science).
LEARNING SKILLS: acquisition of autonomy in learning and of self-evaluation skills.
- Oggetto:
Programma
Il programma dell’insegnamento è articolato nei seguenti argomenti:
- Ripasso dei concetti di base della programmazione imperativa e di C.
- Leggere e comprendere una consegna: identificazione dei dati utili da prevedere quali input, rilevazione di eventuali dati inutili, comprensione del compito da svolgere, articolazione di una soluzione e produzione dell’output richiesto.
- Gestione esplicita della memoria principale tramite allocazione, accesso e deallocazione di strutture dati.
- Strutture dati dinamiche lineari (es. liste collegate ordinate), accesso agli elementi, modifica degli elementi e della struttura, sintesi di informazione dai dati contenuti tramite approccio iterativo e ricorsivo.
- Tipi di dati astratti pila e coda realizzati tramite array e liste.
- Introduzione alla strutturazione di un programma in più file (inclusi i file header) e sua compilazione.
- Alberi binari.
- Tipi union.
- Lettura e scrittura formattata su file (fopen, fscanf, fprintf, fclose).
La presentazione di argomenti teorici sarà completata dalla risoluzione di problemi pratici, affrontata sia sul piano concettuale che su quello della programmazione al computer.
The program of the course includes the following topics:
- Revision of the basic concepts of imperative programming and of the C language.
- Reading and understanding a programming request: identifying useful data to be used as input, identification of possible useless data, understanding the exercise text, structuring a solution, production of the requested output.
- Explicit management of main memory by way of (dynamic) allocation, deallocation and access to data structures.
- Linear data structures (e.g. ordered linked lists), access to the elements, changing the values of the fields, synthesizing information from data in iterative and in recursive ways.
- Abstract data types: stack and queue, implemented by means of arrays and lists.
- Introduction to the distribution of a program across many files (including header files) and compilation.
- Binary trees.
- Unions.
- File formatted reading and writing (fopen, fscanf, fprintf, fclose).
Theory will be complemented by the resolution of practical problems that will be faced both at a conceptual level and by computer programming.
- Oggetto:
Modalità di insegnamento
L’insegnamento consta di una parte teorica (32 ore) e una pratica (20 ore).
La parte teorica si svolge in aula e non prevede l’utilizzo di strumenti di calcolo da parte di studenti e studentesse, ai quali sarà richiesto di concentrarsi sugli aspetti concettuali della programmazione, per acquisire le capacità di astrazione e formalizzazione necessarie alla scrittura di programmi.
La parte pratica si svolge nei laboratori didattici e richiede a studenti e studentesse di affrontare esercizi di programmazione da risolvere al calcolatore. I docenti dei vari turni (eventualmente supportati dai tutor dell’insegnamento) illustrano gli esercizi, effettuano i raccordi con i concetti di teoria coinvolti, guidano ed assistono gli studenti e le studentesse nella risoluzione degli esercizi assegnati.
A seconda delle risorse disponibili al corso di laurea, sono definiti anno per anno incontri di tutorato facoltativi, che si aggiungono alle lezioni dell’insegnamento. Tali incontri non sono finalizzati a introdurre nuovi concetti bensì a fornire, a chi dovesse sentirne il bisogno, un’occasione di chiarimento e di revisione di concetti, approcci, esercizi.
The course consists of a theory part (32 hours) and a hands-on part (20 hours).
The theory lessons will take place in a classic classroom, and will engage students in unplugged activities. Students will be requested to focus on the conceptual aspects of programming in order to build those abstraction and formalization skills that are essential to program writing.
The practical lessons will take place in teaching labs, where students will face programming exercises to be solved by using computers. Teachers (possibly assisted by course tutors) will explain the exercises, make connections with the topics from the theory part that are involved, guide the solution and assist students in their work.
Depending on the resources that are available in the specific academic year, standard lessons might be supported by optional meetings with tutors. Such meetings will not be aimed at introducing new concepts but rather to provide, to the students who may need it, an additional tool for clarifying or revising concepts, as well as exercises.
- Oggetto:
Modalità di verifica dell'apprendimento
La verifica è articolata in tre fasi.
1. PROGETTI DI LABORATORIO.
Gli/le studenti dovranno svolgere e consegnare sulla piattaforma Moodle i PROGETTI DI LABORATORIO che verranno assegnati durante lo svolgimento dell'insegnamento.
Per essere ammessi all'ESONERO e all'ESAME è necessario aver consegnato con successo tutti i PROGETTI DI LABORATORIO.
La consegna dei PROGETTI DI LABORATORIO può essere effettuata durante tutto l'anno e sarà chiusa solo nei periodi di esame.
Saranno valide solo le consegne effettuate entro la data di scadenza delle iscrizioni all’ESONERO.
I PROGETTI DI LABORATORIO possono essere svolti individualmente o in un gruppo di 2 persone.
Se i PROGETTI DI LABORATORIO sono svolti in gruppo, entrambi i componenti del gruppo devono consegnare.
Il codice di ciascun progetto sarà sottoposto a dei test automatici.
Condizione necessaria ma non sufficiente per effettuare la consegna con successo è che TUTTI i test siano superati (colore verde) senza eccezione.
Sarà a cura dei docenti segnalare agli studenti eventuali problemi nel codice non rilevati automaticamente.
2. ESONERO
L’ESONERO sarà scritto e inizierà nelle date e orari pubblicati sulla bacheca di MyUnito. Gli studenti potranno essere divisi in turni in caso di appelli con alta numerosità. I turni potranno essere distribuiti anche in giorni successivi alla data di inizio dell’appello. I turni, se istituiti, verranno comunicati nei giorni immediatamente precedenti il giorno ufficiale dell'ESONERO.
Non ci saranno differenze per gli studenti dei vari canali di erogazione della didattica, che effettueranno l’ESONERO insieme.
L’iscrizione è obbligatoria e i non iscritti NON saranno in alcun caso ammessi a sostenere l’ESONERO (attenzione: le iscrizioni chiudono una settimana prima dell’appello).
La prova consisterà in un esercizio di programmazione erogato tramite la Piattaforma Esami in laboratorio e/o su carta.
Se il programma contiene errori ritenuti significativi dai docenti, ricevete 0 punti su 3 e dovrete ripetere l’ESONERO agli appelli successivi.
Chi ottiene almeno 1 punto su 3 sarà ammesso/a all’ESAME ed il voto, che avrà la validità di un anno solare, contribuirà alla valutazione finale.
3. ESAME
L’ESAME sarà scritto e inizierà nelle date e orari pubblicati sulla bacheca di MyUnito. Gli studenti potranno essere divisi in turni in caso di appelli con alta numerosità. I turni potranno essere distribuiti anche in giorni successivi alla data di inizio dell’appello. I turni, se istituiti, verranno comunicati dopo l'ESONERO e prima dell’ESAME.
Non ci saranno differenze per gli studenti dei vari canali di erogazione della didattica, che effettueranno l’ESAME insieme.
L’iscrizione è obbligatoria e i non iscritti NON saranno in alcun caso ammessi a sostenere l’ESAME (attenzione: le iscrizioni chiudono una settimana prima dell’appello).
La prova consisterà in una serie di domande a risposta chiusa e aperta sul programma dell'insegnamento, erogate tramite la Piattaforma Esami in laboratorio e/o su carta.The verification is divided into three phases.
1. LABORATORY PROJECTS.
Students will have to carry out and submit the LABORATORY PROJECTS that will be assigned during the course of the course on the Moodle platform.
To be eligible for the EXEMPTION and the EXAM it is necessary to have successfully delivered all the LABORATORY PROJECTS.
The delivery of LABORATORY PROJECTS can be carried out throughout the year and will only be closed during examination periods.
Only deliveries made by the EXEMPTION registration deadline date will be valid.
LABORATORY PROJECTS can be done individually or in a group of 2 people.
If LABORATORY PROJECTS are done in groups, both group members must deliver.
The code of each project will be subjected to automatic tests.
A necessary but not sufficient condition for successful delivery is that ALL tests are passed (green color) without exception.
It will be the responsibility of the teachers to report to the students any problems in the code not detected automatically.
2. EXEMPTION
The EXEMPTION will be written and will begin on the dates and times published on the MyUnito noticeboard. Students may be divided into shifts in the event of high-volume sessions. Shifts may also be distributed in days following the start date of the appeal. The shifts, if established, will be communicated in the days immediately preceding the official EXEMPTION day.
There will be no differences for students of the various teaching delivery channels, who will complete the EXEMPTION together.
Registration is mandatory and non-registered participants will NOT be eligible to take the EXEMPTION under any circumstances (attention: registrations close one week before the exam).
The test will consist of a programming exercise delivered via the Exam Platform in the laboratory and/or on paper.
If the program contains errors deemed significant by the teachers, you will receive 0 points out of 3 and will have to repeat the EXEMPTION at subsequent exam sessions.
Anyone who obtains at least 1 point out of 3 will be admitted to the EXAM and the mark, which will be valid for one calendar year, will contribute to the final evaluation.3. EXAM
The EXAM will be written and will begin on the dates and times published on the MyUnito noticeboard. Students may be divided into shifts in the event of high-volume sessions. Shifts may also be distributed in days following the start date of the appeal. The shifts, if established, will be communicated after the EXEMPTION and before the EXAM.
There will be no differences for students of the various teaching delivery channels, who will take the EXAM together.
Registration is mandatory and non-registered participants will NOT be admitted to take the EXAM under any circumstances (attention: registrations close one week before the exam).
The test will consist of a series of closed and open-ended questions on the teaching programme, administered via the Laboratory Exam Platform and/or on paper.Testi consigliati e bibliografia
- Oggetto:
L’insegnamento si avvarrà di un libro di testo di riferimento ma, nello spirito dello Universal Design for Learning per l’inclusione didattica, saranno forniti materiali didattici aggiuntivi in varie forme, pubblicati tramite la pagina Moodle dell'insegnamento (si veda http://informatica.i-learn.unito.it/).
Oltre alle slide utilizzate a lezione e ai testi degli esercizi affrontati, nei limiti delle risorse disponibili in aula, saranno fornite anche risorse multimediali quali registrazioni audio-video delle lezioni e relative trascrizioni, e quiz di autovalutazione.
La scelta del libro di testo è in corso e sarà comunicata a breve.
The choice of the textbook is on-going and will be communicated as soon as possible.
- Oggetto: