L’insegnamento si pone come secondo passo, per gli studenti in Ingegneria Informatica, nel percorso di avvio alla programmazione come strumento per la risoluzione di problemi reali. In tale ambito, si consolida da un canto l’introduzione all’informatica, da un punto di vista sia “culturale” che tecnologico, mentre dall’altro si affronta il linguaggio C, come secondo linguaggio di programmazione, e come strumento per il problem-solving, visto come attività creativa e progettuale. Al di là dell’abituale formazione al problem-solving, basata su apprendimento per esperienza e imitazione, l’insegnamento fornisce agli studenti una caratterizzazione delle principali tipologie di problemi semplici affrontati e risolti mediante programmi in linguaggio C, nonché di strategie per la scelta di adeguate strutture dati e costrutti algoritmici. Saranno inoltre introdotti i concetti base di analisi della complessità per guidare lo sviluppo di soluzioni efficienti dal punto di vista computazionale.
This course is the second one, for Computer Engineering students, in the process of learning programming as a tool for solving real problems. In this context, the introduction to Computer Science is consolidated on the one hand, from both a "cultural" and a technological point of view, while on the other hand the C language is introduced, as a second programming language , and as a tool for problem-solving, seen as creative and design-oriented activity. Beyond usual training to problem-solving, based on learning from experience and on imitation, this course provides students with a classification of the main types of simple problems addressed and solved with programs in C, as well as with strategies for the choice of appropriate data structures and algorithmic constructs. Basic concepts of complexity analysis will also be introduced to guide the development of computationally efficient solutions.
Nozioni elementari di architettura e di logica
• Conoscenza dell’architettura e del modo di funzionamento di una CPU e della memoria centrale, con particolare riferimento all’indirizzamento dei dati in una memoria RAM
• Algebra di Boole e funzioni logiche
Problem-solving
• Conoscenza di nozioni elementari di analisi della complessità
• Conoscenza di nozioni elementari di problem-solving come risoluzione di problemi progettuali, basata su caratterizzazione di problemi dal punto di vista del contesto applicativo e/o delle strategie algoritmiche adottate
• Conoscenza di strategie algoritmiche elementari, ad esempio per la risoluzione di problemi iterativi di verifica basati sul principio dei quantificatori universali ed esistenziali, sull’uso di vettori come contenitori per collezioni di dati e/o per la realizzazione di tabelle ad accesso diretto
• Conoscenza degli algoritmi di ordinamento iterativi
• Abilità nel passare dalla formulazione di un problema algoritmico alla sua soluzione, basata su passi di riconoscimento del tipo di problema e scelta di adeguate strutture dati e algoritmi risolutivi
• Abilità nella soluzione di problemi di tipo iterativo, basati su dati scalari, oppure sulla collezione di dati, sia ordinati che non ordinati.
Linguaggio C
• Conoscenza dei costrutti base della programmazione in linguaggio C, quali: tipi di dato scalari, input/output elementare su standard I/O e su file testo, costrutti iterativi e condizionali, uso di funzioni come sotto-programmi, tipi di dato strutturato, struct, vettori e matrici, manipolazione di stringhe di caratteri
• Conoscenza del tipo di dato puntatore come riferimento a dati e suo utilizzo per accedere a parti di vettori e matrici, nonché come strumento per realizzare in C il passaggio di parametri a funzioni per riferimento (o meglio “by pointer”)
• Abilità nel realizzare algoritmi iterativi, in grado di manipolare sia dati scalari che aggregati in tipi struct e/o vettori e matrici come collezioni di dati
• Abilità nel realizzare programmi modulari, basati su scomposizione di un problema in sotto-problemi risolti mediante un efficace utilizzo di funzioni
• Abilità di utilizzo di strumenti di ausilio alla programmazione.
Basic notions of architecture and logic
• Knowledge of the architecture and operating mode of a CPU and of central memory, with particular reference to the data addressing in RAM
• Boolean Algebra and logic functions
Problem-solving
• Knowledge of basic notions of complexity analysis and of iterative sorting algorithms
• Knowledge of problem-solving fundamentals, based on the characterization of problems from the point of view of the application context and / or algorithmic strategies
• Knowledge of elementary algorithmic strategies, for example for solving iterative verification problems with universal and existential quantifiers, with arrays as storage for collections of data and / or for implementing direct access tables
• Knowledge of iterative sorting algorithms
• Ability to move from the formulation of an algorithmic problem to its solution, based on steps of recognition of the type of problem and choice of adequate data structures and solution algorithms
• Ability to solve iterative problems, based on scalar data, or on the collection of data, both sorted and unsorted.
C Language
• Knowledge of the basic constructs of the C language, such as: scalar data types, elementary input / output on standard I/O and on text files, iterative and conditional constructs, use of functions such as sub-programs, structured data types, struct, vectors and arrays, manipulation of character strings
• Knowledge of the pointer data type as a reference to data and its use for the dynamic allocation of vectors and matrices, as well as a tool for carrying out by reference (or better "by pointer ") parameter passing in C to functions
• Ability to create iterative algorithms, capable of manipulating both scalar and aggregated data in struct types and / or vectors and matrices as data collections
• Ability to create modular programs, based on the decomposition of a problem into sub-problems solved by an effective use of functions
• Ability to use tools for programming assistance.
L’insegnamento ha natura incrementale rispetto a quello di “Informatica”, tenuto al primo semestre. Vi sono prerequisiti stringenti in termini di abilità di programmazione e conoscenza delle principali strategie algoritmiche, basate su costrutti condizionali e iterativi, su uso di dati scalari e strutturati. Si assume poi una capacità di soluzione di problemi (algoritmici) elementari.
Tuttavia, l’introduzione del C come nuovo linguaggio, a valle dell’insegnamento del Python, fa si che, pur assumendo concetti di base come prerequisiti, una parte di questi siano rivisitati e presentati come nuovi. Più in dettaglio, si ritengono importanti, dal corso di “informatica”, conoscenze ed abilità, acquisite mediante il linguaggio Python, su: rappresentazione e manipolazione di dati scalari, di stringhe e di collezioni di dati quali liste e insiemi, input/output elementare, costrutti condizionali e iterativi, funzioni e loro utilizzo per realizzare programmi modulari.
Si assume poi, sempre dall’insegnamento di “Informatica”, una conoscenza elementare dell’architettura dei sistemi di elaborazione (modello di Von Neumann) e della rappresentazione di numeri a caratteri.
The course is conceptually incremental compared to "Informatica", held in the first semester. There are stringent prerequisites in terms of programming skills and knowledge of the main algorithmic strategies, based on conditional and iterative constructs, on the use of scalar and structured data. Students are supposed to be able to solve elementary (algorithmic) problems. However, the introduction of C as a new language, downstream from the teaching of Python, means that, while assuming basic concepts as prerequisites, some of them are revisited and presented as new. More specifically, expected results from the "Informatica" are knowledge and skills in Python to represent and manipulate of scalar data, strings and data collections like lists and sets, elementary input / output , conditional and iterative constructs, functions and their use to create modular programs.
Students are expected to have an elementary knowledge of the architecture of data processing systems(Von Neumann model) and of the representation of characters and numbers.
Nozioni elementari di architettura e di logica (10 h)
• richiami di architettura e funzionamento dell’elaboratore e della memoria centrale
• il concetto di puntatore/indirizzo
• compilazione, link esecuzione, organizzazione programma in memoria
• Algebra di Boole e funzioni logiche
Il C come secondo linguaggio (20 h)
• Tipi base e I/O
o tipi di dato primitivi (scalari), costanti simboliche
o operazioni di I/O (su stdin/stdout e su file testo)
• Costrutti di controllo condizionali e iterativi
• Funzioni e passaggio parametri (by value/reference)
• Dati aggregati
o vettori e matrici statiche (di interi, float e caratteri)
o stringhe e vettori di stringhe
o strutture (tipi aggregati)
Puntatori e allocazione dinamica in C (10 h)
• il puntatore come riferimento a dato
• elementi sintattici
• dualità puntatore/vettore e aritmetica dei puntatori
Problem-solving elementare (20 h)
• analisi della complessità computazionale
• problem solving:
o algoritmi di ordinamento iterativi
o problemi su numeri (problemi matematici e/o di algebra/geometria con matrici e vettori)
o problemi di elaborazione testi (manipolazione testi, menu di selezione)
o problemi di codifica di numeri e testi (es. crittografia, compressione ecc.)
o problemi di verifica, selezione, ordinamento.
Basic notions of architecture and logic (10 h)
• fundamentals of computer architecture and operation as regards to central memor
• the notion of pointer / address
• compilation , execution link, program organization in memory
• Boolean algebra and logic functions
The C as a second language (20 h)
• Basic and I / O types
o primitive (scalar) data types , symbolic constants
o I/O operations (on stdin / stdout , and text files)
• Conditional and iterative control constructs
• Functions and parameter passing (by value / reference )
• Aggregated data
o vectors and static matrices (of integers, floats and characters)
o strings and string vectors
o structures (aggregate types)
Pointers and dynamic allocation in C ( 1 0 h)
• the poiter as a reference to data
• syntactic elements
• pointer / vector duality and pointer arithmetic
• dynamic allocation, dynamic arrays and matrices
Elementary problem-solving (20 h)
• computational complexity analysis
• problem solving :
o iterative sorting algorithms
o problems on numbers (mathematical and / or algebra / geometry problems with matrices and arrays)
o word processing problems (text manipulation, menus)
o coding problems of numbers and texts (e.g. encryption, compression, etc.)
o verification, selection and sorting problems.
Lezioni: 30h
Esercitazioni in aula: 15 h
Esercitazioni in laboratorio: 15 h
In aula si svolgeranno lezioni ed esercitazioni integrate. In laboratorio verranno proposti esercizi, da iniziare a svolgere anticipatamente a casa, che mettono in pratica le nozioni apprese.
Lecture: 30h
Classroom exercises: 15 h
Laboratory exercises: 15 h
Integrated lectures and exercises will take place in the classroom. In the laboratory, exercises will be proposed, to be started in advance at home, which put the notions learned into practice.
• Deitel & Deitel, ‘Corso completo di programmazione C’, Apogeo, 2010
• G. Cabodi, P. Camurati, P. Pasini, D. Patti, D. Vendraminetto, ‘Dal problema al programma: introduzione al problem-solving in linguaggio C’, Apogeo, II edizione, 2016
• Deitel & Deitel, ‘Corso completo di programmazione C’, Apogeo, 2010
• G. Cabodi, P. Camurati, P. Pasini, D. Patti, D. Vendraminetto, ‘Dal problema al programma: introduzione al problem-solving in linguaggio C’, Apogeo, II edizione, 2016
Modalità di esame: Prova scritta (in aula); Prova scritta in aula tramite PC con l'utilizzo della piattaforma di ateneo;
Exam: Written test; Computer-based written test in class using POLITO platform;
...
Struttura dell’esame
L’esame, di durata massima 1h30, si compone di:
• domande a risposta aperta o multipla su argomenti di cui si valuta il grado di conoscenza
• esercizi di programmazione in cui si deve completare un programma, correggere un programma, simulare l’esecuzione di un programma
• esercizi di problem-solving elementare in C: date le specifiche, si devono definire le strutture dati e l’algoritmo di soluzione e poi implementarli in linguaggio C.
Il punteggio complessivo assomma a 33.
L’esame sarà a risposta aperta tramite PC con l'utilizzo della piattaforma di ateneo. Nel caso di problemi tecnici, si passerà ad esame scritto su carta, con contenuti e struttura immutati.
Materiale consultabile durante lo scritto:
• Sarà fornito accesso materiale di riferimento per il linguaggio C (elenco di funzioni di libreria)
• NON è possibile consultare testi, appunti, dispense, etc.
• NON è possibile utilizzare supporti ditipo elettronico oltre al PC (cellulari, palmari, portatili,
etc.)
Al termine dello scritto, lo studente riceve un file .pdf con il suo elaborato. Qualora si adotti la versione cartacea, è possibile fare fotografie del proprio elaborato al termine dell'esame stesso.
In seguito lo studente deve caricare sul Portale entro tre giorni dalla data dello scritto:
• una relazione (max 1 pagina) sulla soluzione adottata (strutture dati, algoritmo, etc.) per gli esercizi in cui è richiesta la scrittura di codice in C
• una copia del o dei programmi corretti, con evidenziate le modifiche rispetto quanto consegnato.
Qualora lo studente non carichi il materiale indicato entro la data prevista, la prova scritta non viene
corretta.
Gli studenti e le studentesse con disabilità o con Disturbi Specifici di Apprendimento (DSA), oltre alla segnalazione tramite procedura informatizzata, sono invitati a comunicare anche direttamente al/la docente titolare dell'insegnamento, con un preavviso non inferiore ad una settimana dall'avvio della sessione d'esame, gli strumenti compensativi concordati con l'Unità Special Needs, al fine di permettere al/la docente la declinazione più idonea in riferimento alla specifica tipologia di esame.
Exam: Written test; Computer-based written test in class using POLITO platform;
Struttura dell’esame
L’esame, di durata massima 1h30, si compone di:
• domande a risposta aperta o multipla su argomenti di cui si valuta il grado di conoscenza
• esercizi di programmazione in cui si deve completare un programma, correggere un programma, simulare l’esecuzione di un programma
• esercizi di problem-solving elementare in C: date le specifiche, si devono definire le strutture dati e l’algoritmo di soluzione e poi implementarli in linguaggio C.
Il punteggio complessivo assomma a 33.
L’esame sarà a risposta aperta tramite PC con l'utilizzo della piattaforma di ateneo. Nel caso di problemi tecnici, si passerà ad esame scritto su carta, con contenuti e struttura immutati.
Materiale consultabile durante lo scritto:
• Sarà fornito accesso materiale di riferimento per il linguaggio C (elenco di funzioni di libreria)
• NON è possibile consultare testi, appunti, dispense, etc.
• NON è possibile utilizzare supporti ditipo elettronico oltre al PC (cellulari, palmari, portatili,
etc.)
Al termine dello scritto, lo studente riceve un file .pdf con il suo elaborato. Qualora si adotti la versione cartacea, è possibile fare fotografie del proprio elaborato al termine dell'esame stesso.
In seguito lo studente deve caricare sul Portale entro tre giorni dalla data dello scritto:
• una relazione (max 1 pagina) sulla soluzione adottata (strutture dati, algoritmo, etc.) per gli esercizi in cui è richiesta la scrittura di codice in C
• una copia del o dei programmi corretti, con evidenziate le modifiche rispetto quanto consegnato.
Qualora lo studente non carichi il materiale indicato entro la data prevista, la prova scritta non viene
corretta.
In addition to the message sent by the online system, students with disabilities or Specific Learning Disorders (SLD) are invited to directly inform the professor in charge of the course about the special arrangements for the exam that have been agreed with the Special Needs Unit. The professor has to be informed at least one week before the beginning of the examination session in order to provide students with the most suitable arrangements for each specific type of exam.