Vai al contenuto principale
Oggetto:
Oggetto:

Programmazione II

Oggetto:

Programming II

Oggetto:

Anno accademico 2023/2024

Codice dell'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 studi
[008707] Laurea in Informatica
Anno
1° anno
Periodo didattico
Secondo semestre
Tipologia
Caratterizzante
Crediti/Valenza
6 CFU - Numero di ore - Number of hours: 32 (in aula) + 20 (in laboratorio)
SSD dell'attività didattica
INF/01 - informatica
Modalità di erogazione
Tradizionale
Lingua di insegnamento
Italiano
Modalità di frequenza
Facoltativa
Tipologia d'esame
Scritto
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:

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: l'esposizione dei contenuti del corso utilizza numerosi esempi sia di problemi artificiali, pensati per consentire l’acquisizione dei concetti e dei procedimenti, sia di problemi ispirati alla realtà quotidiana. 

AUTONOMIA DI GIUDIZIO: I partecipanti sono incoraggiati a 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: the explanations delivered during the lessons will strongly rely on many examples of application, concerning both artificial problems, devised in order to target specific concepts and procedures, and problems taken from the real world. 

MAKING JUDGMENTS: students are encouraged to reason about the possible representation and coding alternatives and on the consequences of their 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:

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

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 nei giorni immediatamente precedenti il giorno ufficiale 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 Moodle in laboratorio e/o con esercizi su carta.

 

The exam will be written, and will take place in the dates and times that are published in the platform MyUnito. Students may be divided in turns to avoid overcrowding. Turns may be distributed over more than one day, following the date in MyUnito. Turns will be communicated in the days that immediately precede the official date of the exam. 

The form of the exam will be the same for all students, independently from the teacher they had (group A, B, …). The exam is carried out altogether.

Enrolling is mandatory. Students who did not enroll within the deadline will not be allowed to take the exam (attention: enrolling ends about one week before the date of the exam).

The exam will include close and open questions, either to be answered on the Moodle platform in the teaching labs and/or on paper.

Oggetto:

Programma

Il programma dell’insegnamento è articolato nei seguenti argomenti:

  1. Ripasso dei concetti di base della programmazione imperativa e di C.
  2. 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.
  3. Gestione esplicita della memoria principale tramite allocazione, accesso e deallocazione di strutture dati.
  4. 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.
  5. Tipi di dati astratti pila e coda realizzati tramite array e liste.
  6. Introduzione alla strutturazione di un programma in più file (inclusi i file header) e sua compilazione.
  7. Alberi binari.
  8. Tipi union.
  9. 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:

  1. Revision of the basic concepts of imperative programming and of the C language.
  2. 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.
  3. Explicit management of main memory by way of (dynamic) allocation, deallocation and access to data structures.
  4. 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.
  5. Abstract data types: stack and queue, implemented by means of arrays and lists.
  6. Introduction to the distribution of a program across many files (including header files) and compilation.
  7. Binary trees.
  8. Unions.
  9. 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.

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:
Ultimo aggiornamento: 11/09/2023 08:41
Location: https://laurea.informatica.unito.it/robots.html
Non cliccare qui!