- Oggetto:
- Oggetto:
Programmazione I
- Oggetto:
Programming I
- Oggetto:
Anno accademico 2024/2025
- Codice attività didattica
- MFN0582
- Docenti
- Alessandro Mazzei (Corso C + Corso C Turno 1 + Corso C Turno 2)
Luca Roversi (Corso B)
Attilio Fiandrotti (Corso A)
Valerio Basile (Corso B Turno 1 + Corso B Turno 2)
Elvio Gilberto Amparore (Corso A Turno 1)
Alessia Antelmi (Corso A Turno 2) - Corso di studio
- [008707] Laurea in Informatica
- Anno
- 1° anno
- Periodo
- Primo semestre
- Tipologia
- Caratterizzante
- Crediti/Valenza
- 9 CFU - Numero di ore - Number of hours: 48 (in aula) + 30 (in laboratorio)
- Crediti percorso 24 CFU
- 1
- SSD attività didattica
- INF/01 - informatica
- Erogazione
- Tradizionale
- Lingua
- Italiano
- Frequenza
- Facoltativa
- Tipologia esame
- Scritto
- Tipologia unità didattica
- corso
- Prerequisiti
-
Non è richiesto alcun prerequisito specifico alla programmazione. È consigliabile avere capacità di uso del calcolatore con sistema a finestre. È invece opportuno possedere conoscenze di base, quali i concetti di numero (naturale, intero, razionale, reale), di funzione, le quattro operazioni, elevamento a potenza, radice, esponenziale, logaritmo, piano cartesiano, calcolo algebrico elementare. Infine, è indispensabile una buona padronanza della lingua madre, possibilmente accompagnata da una propensione al ragionamento strutturato.
Insegnamenti propedeutici (forniscono le competenze attese in ingresso): nessunoNo programming skills are required to take this course, however it is advisable to be comfortable at using a windowing system based personal computer. Instead, it is required to to have a grasp on the basic of maths, such as the concepts of number (natural, integer, rational, real), function, four basic operations, power elevation, root, exponential, logarithm, Cartesian plane and elementary algebraic calculation. Finally, a good mastery of the mother tongue is essential, possibly accompanied by a tendency to structured reasoning.
Preparatory Courses (providing the expected entry skills): none - Oggetto:
Sommario insegnamento
- Oggetto:
Avvisi
- Oggetto:
Obiettivi formativi
Questo insegnamento concorre al raggiungimento degli obiettivi formativi specifici del Corso di Laurea in Informatica (L31), in particolare di quelli dell’area Informatica di base, mirando a fornire le conoscenze di base della programmazione e del funzionamento di un interprete virtuale, propedeutici alla quasi totalità dei corsi a seguire.In compliance with the training objectives of the Corso di Laurea in Informatica (L31) and being part of the area “Informatica di base”, the present module aiming at providing the basic knowledge about programming and about how a virtual interpreter behaves, preparatory to almost all of the subsequent courses.- Oggetto:
Risultati dell'apprendimento attesi
CONOSCENZA E CAPACITÀ DI COMPRENSIONE. Acquisizione di metodologie di progettazione e sintesi di algoritmi di base.CAPACITÀ DI APPLICARE CONOSCENZA E COMPRENSIONE. Acquisizione dell'uso di strumenti linguistici e del calcolatore elettronico per tradurre algoritmi di base in programmi funzionanti.
AUTONOMIA DI GIUDIZIO. Acquisizione di criteri per stabilire correttezza e coerenza dei programmi sintetizzati rispetto a semplici specifiche.
ABILITÀ COMUNICATIVE. Acquisizione dei primi elementi del lessico che caratterizzano un informatico finalizzati al passaggio da una descrizione algoritmica informale, per descrivere la soluzione ad un problema, alla sua versione in linguaggio di programmazione vero e proprio.
CAPACITÀ DI APPRENDIMENTO. Acquisizione di capacità autonome di apprendimento e di autovalutazione della propria preparazione, atte ad intraprendere gli studi successivi con un alto grado di autonomia.
KNOWLEDGE AND UNDERSTANDING. Acquisition of methodologies for designing and synthesizing basic algorithms.APPLYING KNOWLEDGE AND UNDERSTANDING. Acquisition of the use of linguistic and computational tools to translate basic algorithms into working programs.
MAKING JUDGMENTS. Acquisition of criteria for checking correctness and consistency of synthesized programs with respect to simple specifications.
COMMUNICATION SKILLS. Acquisition of the first elements of the vocabulary that characterize a computer scientist aimed at moving from an informal algorithmic description, to describe the solution to a problem, up to its translation into actual programming language.
LEARNING SKILLS. Acquisition of autonomous learning skills and self-assessment, suitable for undertaking further studies with a high degree of autonomy.
- Oggetto:
Programma
- Modello di memoria
- Tipi elementari: struttura, operazioni
- Comando “assegnazione”: espressioni a valori di tipo elementare
- Stato con elementi di tipo elementare: definizione e proprietà
- Tipo puntatore: struttura e operazioni come incremento, decremento, malloc(), free()
- Stato con elementi di tipo elementare e puntatore
- Comando “selezione” e verifica proprietà
- Programmazione iterativa con cicli
- problemi numerici su dati di tipo elementare: addizione, moltiplicazione, serie numeriche
- problemi su dati di tipo puntatore/array: filtri, riorganizzazione elementi, conteggi
- Funzioni e Frame-stack
- struttura funzione e “signature”
- meccanismo della chiamata: parametri attuali/formali, frame, variabili locali, frame-stack
- rientro dalla chiamata: collocazione risultato, operand stack
- classificazione chiamate
- Ricorsione e correttezza
- problemi numerici su dati di tipo elementare (addizione, moltiplicazione, quadrato, etc.)
- problemi numerici su dati di tipo stringa
- problemi c/controvarianti e dicotomici su array monodimensionali
- problemi su strutture puntate
- Schemi algoritmici e strutture dati avanzate
- collezioni di dati di tipo eterogeneo (struct)
- quantificatori alternati su coppie di array monodimensionali
- quantificatori alternati su coppie di matrici
- quantificatori alternati su array/matrici
-
Memory model
-
Elementary types: structure, operations
-
Assignment command: expressions to elementary type values
-
State with elementary type elements: definition and properties
-
Pointer type: structure and operations such as increment, decrement, malloc(), free()
-
State with elements of elementary type and pointer type
-
"Selection" command and property checking
-
- Iterative programming with loops
- Number problems on elementary type data: addition, multiplication, number series
- problems on pointer/array type data: filters, element reorganization, counts
- Functions and Frame-stack
- function structure and "signature"
- call mechanism: actual/formal parameters, frames, local variables, frame-stack
- return from call: result placement, operand stack
- call classification
- recursion and correctness
- numerical problems on elementary type data (addition, multiplication, square, etc.)
- numerical problems on string type data
- c/contravariant and dichotomous problems on one-dimensional arrays
- problems on point structures
- Advanced algorithms and data structures
- collections of heterogeneous data types (struct)
- alternating quantifiers on pairs of one-dimensional arrays
- alternating quantifiers on pairs of arrays
- alternating quantifiers on arrays/matrices
- Modello di memoria
- Oggetto:
Modalità di insegnamento
L'insegnamento si sviluppa in 48 ore di lezione in aula e di 30 ore di lezione in laboratorio. In entrambi i casi la frequenza è facoltativa. Le lezioni potranno essere costituite dall'esposizione di parti delle dispense o di elementi specifici di una tecnica algoritmica, da esercizi svolti sotto la guida del docente, dalla sintesi, per mezzo di un calcolatore, dello schema di un algoritmo, da piccole dimostrazioni di correttezza parziale di un algoritmo, etc.The course comprises 48 hours of lectures and 30 hourse of laboratory. Attendance is optional for both parts. The lectures could involve explanation of parts of the course material o specific elements of an algorithmic technique, exercises guided by the teachers, synthesis of an algorithm schema with the computer, simple correctness proofs, and so on.- Oggetto:
Modalità di verifica dell'apprendimento
L'esame è essenzialmente uno scritto che si svolge al calcolatore o su carta. Esso verifica la capacità di saper:- progettare semplici algoritmi iterativi e ricorsivi;
- codificare programmi che implementano algoritmi iterativi e ricorsivi;
- rispondere a domande su aspetti fondamentali della programmazione, come correttezza o terminazione;
- simulare il funzionamento di un linguaggio di programmazione a runtime
La somma dei punteggi degli esercizi proposti permetterà di ottenere voti sino al "30 e Lode".
The test is a written examination at the computer or on paper. The following skills will be evaluated:- design simple iterative and recursive algorithms;
- write programming code to implement iterative and recursive algorithms;
- answer questions on core aspects of programming, such as correctness and termination;
- emulate a language behaviour at runtime
The total score of the exercises may sum up to "30 e lode".
Testi consigliati e bibliografia
- Oggetto:
- Libro
- Titolo:
- Il linguaggio C. Fondamenti e tecniche di programmazione - IX ed. ITA 08/2022
- Anno pubblicazione:
- 2022
- Editore:
- Pearson
- Autore:
- Paul J. Deitel, Harvey M. Deitel, G. Maselli
- Permalink:
- Obbligatorio:
- No
- Oggetto:
- Libro
- Titolo:
- C Primer Plus, Sixth Edition
- Anno pubblicazione:
- 2013
- Editore:
- Addison-Wesley Professional
- Autore:
- Stephen Prata
- ISBN
- Permalink:
- Obbligatorio:
- No
- Oggetto:
- Libro
- Titolo:
- Problem solving e programmazione in C
- Anno pubblicazione:
- 2015
- Editore:
- APOGEO
- Autore:
- Jeri R. Hanly, Elliot B. Koffman, C. Bolchini, M. Carminati, A. Miele
- Permalink:
- Obbligatorio:
- No
- Permalink:
- Oggetto:
- Dispense o lucidi ufficiali, distribuiti dai docenti.Official notes and slides, provided by the teachers.
- Oggetto: