Guida degli insegnamenti

Syllabus

Partially translatedTradotto parzialmente
[3I084] - FONDAMENTI DI INFORMATICAFUNDAMENTALS OF COMPUTER SCIENCE [Cognomi M-Z]
Aldo Franco DRAGONI
Lingua di erogazione: ITALIANOLessons taught in: ITALIAN
Laurea - [IT04] INGEGNERIA INFORMATICA E DELL'AUTOMAZIONE First Cycle Degree (3 years) - [IT04] COMPUTER AND AUTOMATION ENGINEERING
Dipartimento: [040040] Dipartimento Ingegneria dell'InformazioneDepartment: [040040] Dipartimento Ingegneria dell'Informazione
Anno di corsoDegree programme year : 1 - Secondo Semestre
Anno offertaAcademic year: 2020-2021
Anno regolamentoAnno regolamento: 2020-2021
Obbligatorio
Crediti: 9
Ore di lezioneTeaching hours: 72
TipologiaType: A - Base
Settore disciplinareAcademic discipline: ING-INF/05 - SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI

LINGUA INSEGNAMENTO LANGUAGE

Italiano

Italian


PREREQUISITI PREREQUISITES

nessuno

none


MODALITÀ DI SVOLGIMENTO DEL CORSO DEVELOPMENT OF THE COURSE

I contenuti teorici sono affidati principalmente alle lezioni videoregistrate dal docente e rese disponibili sul sito di e_learning, oltre che ai testi consigliati. In aula vengono sinteticamente richiamati i contenuti teorici, dopodiché viene effettuata una sessione di domande e risposte. La maggior parte del tempo è spesa con esercitazioni pratiche di programmazione in C++ utilizzando il Laptop oppure lo Smartphone dello studente.

The theoretical content is mainly based on video lessons available on the e_learning site and recommended texts. The theoretical contents are briefly recalled in the classroom, after which a question and answer session is carried out. Most of the time you spend practical programming exercises in C++ using your Laptop or Smartphone.


RISULTATI DI APPRENDIMENTO ATTESI LEARNING OUTCOMES
Conoscenze e comprensione.

L'insegnamento mira a dare le basi concettuali dell'Informatica e della programmazione di un elaboratore elettronico digitale. Esso si pone due obiettivi:
1. introdurre consapevolmente lo studente alla rappresentazione digitale dell’informazione ed all’architettura funzionale di un calcolatore
2. spiegando come quest’ultimo elabori quell'informazione digitale, fornendo cioè i concetti fondamentali della “programmazione” di un elaboratore digitale: dal “linguaggio macchina” del processore al più diffuso linguaggio di programmazione evoluto, cioè il C/C++, utilizzando sia i concetti base della “programmazione imperativa” (C) che quelli della “programmazione ad oggetti” (C++).


Capacità di applicare conoscenze e comprensione.

Grazie al portale per l’ “e-learning” messo a disposizione dall’Ateneo, ogni argomento teorico è impartito mediante videolezioni tenute dal docente scaricabili sui propri “devices”. L’apprendimento dei contenuti teorici viene verificato in aula tramite esercizi online ed approfondito mediante scrittura, compilazione ed esecuzione di programmi in C/C++ direttamente sui propri dispositivi. Alla conclusione del corso gli studenti sono quindi in grado di formulare semplici problemi computazionali in forma di algoritmi e tradurli in programmi usando la sintassi del C/C++


Competenze trasversali.

L’acquisita capacità di pianificare i passi da svolgere per risolvere un dato problema, arrivando a concepire per esso un algoritmo risolutivo, contribuisce a sviluppare la capacità di “problem solving” dello studente. Questa capacità è il fulcro delle competenze e delle abilità che deve possedere un progettista in qualunque settore dell’attività umana, dai campi prettamente tecnici a quelli più umanistici.


Knowledge and Understanding.

The aim of the course is to provide the conceptual basis for computer science and the programming of a digital computer. It has two objectives:
1. consciously introduce the student to the digital representation of information and the functional architecture of a computer
2. explaining how the latter processes that digital information, that is, providing the fundamental concepts of the "programming" of a digital processor: from the "machine language" of the processor to the most widespread evolved programming language, that is the C/C++, using both the basic concepts of "imperative programming" (C) and those of "object programming" (C++)


Capacity to apply Knowledge and Understanding.

Thanks to the portal for "e-learning" made available by the University, every theoretical subject is imparted through video lectures held by the teacher that can be downloaded on his "devices". The learning of theoretical contents is verified in the classroom through online exercises and deepened directly on your devices by writing, compiling and executing programs in C/C++. At the end of the course, students are then able to formulate simple computational problems in the form of algorithms and translate them into programs using the syntax of C/C++


Transversal Skills.

The acquired ability to plan the steps to be taken to solve a given problem, going so far as to devise a solution algorithm for it, helps to develop the student's problem solving ability. This ability is at the heart of the skills and abilities that a designer must possess in any area of human activity, from the purely technical fields to the more humanistic ones.



PROGRAMMA PROGRAM

Codifica binaria dei testi: ASCII, ISO_8859/1-15, UNICODE, UTF-8.
Codifica binaria dei suoni, delle immagini e dei video.
Codifica dei numeri Naturali, Interi e Reali; lo standard IEEE-754. Endianess. Principali operazioni aritmetiche.
Architettura di Von Neumann. Architettura funzionale di un microprocessore (IA-32). Memorie di Massa.
Programmazione in Assembly: operandi, istruzioni, direttive dati, etichette, sottoprogrammi, Stack, "call" e "ret", programmazione modulare, I/O, compilazione.
Evoluzione dei Linguaggi Imperativi e Programmazione strutturata.
Concetto di algoritmo, di linguaggio di programmazione, di programma, compilatore, interprete, sintassi, semantica, errori a tempo di compilazione e di esecuzione.
Software, copyright e copyleft.
Programmazione in C/C++.
Tipi di dato fondamentali. Costanti. Variabili . Dichiarazione e definizione. Istruzione di assegnamento. Operazioni con il tipo int, unsigned, float e double, bool, char, enum. Operazioni con tipi misti e conversioni di tipo: implicite, esplicite.
Operatori. Precedenza ed associatività. Assegnamento. Operatori aritmetici e assegnamento composto. Operatori relazionali e logici. Operatori condizionale e virgola.
Input/Output. Il concetto di “flusso” , lettura e scrittura modo testo. Flusso di input con caratteri o numeri. Flusso di output. Redirezione dei flussi.
Blocchi e visibilità degli identificatori, spazio dei nomi (namespace), direttiva using.
Programmazione strutturata. Strutture di controllo. Istruzione composta (blocco). if (cond) istr, if (cond) istr1 else istr2. switch. while (cond) istr, do istr while (cond), for (iniz; cond; passo)istr. Cicli annidati. Istruzioni di salto: break, continue, goto. Teorema di Böhm-Jacopini.
Definizione, dichiarazione e chiamata di una funzione. Procedure. Passaggio di argomenti ad una funzione “per valore”. Funzione e stack. Funzioni ricorsive. Argomenti di default. Funzioni inline. Storage classes
Funzioni di libreria e compilazione modulare. Sovraccaricamento delle funzioni
Puntatori e operazioni coi puntatori. Puntatori a puntatori. Passaggio di puntatori a funzioni e restituzione argomenti puntatori. Riferimenti e passaggio “per riferimento”. Restituzione argomenti riferimento. Riferimento: dietro le quinte. Puntatori a funzioni
Definizione di vettori e accesso agli elementi di un vettore. Limiti dei vettori in C++. Vettori di caratteri, stringhe ed I/O. Vettori multidimensionali. Vettori come argomenti di funzione. Vettori e aritmetica dei puntatori.
Dichiarazione di un tipo struct e accesso ai suoi campi. Vettori di strutture e algoritmi di ordinamento: insertion sort, selection sort, bubble sort, quick sort.
Memoria dinamica in C++: new, delete. Liste semplici e principali 6 funzioni: inserimento in testa, estrazione dalla testa, inserimento in fondo, estrazione dal fondo, inserimento ordinato, estrazione di un elemento dato. Gestione dell’overflow dello heap.
Header files e librerie. Compilazione header file. Problema inclusioni multiple e compilazione condizionale (header guards). Argomenti del main().
Object Oriented Programming: dalla struct alla class. Oggetti. Attributi e metodi. Specificatori di accesso, information hiding/incapsulamento. Costruttore e distruttore. Header files ed intestazioni di classe.
Classi derivate e tipi di ereditarietà. Ereditarietà multipla e binding dinamico. Funzioni virtuali e Polimorfismo. Vantaggi del polimorfismo
Cenni di complessità computazionale, spaziale e temporale.
Cenni alla correzione dei programmi (“debugging”).

Binary encoding of texts: ASCII, ISO_8859/1-15, UNICODE, UTF-8.
Binary encoding of sounds, images and videos.
Coding of Natural, Whole and Real numbers; the IEEE-754 standard. Endianess. Main arithmetical operations.
Architecture by Von Neumann. Functional architecture of a microprocessor (IA-32). Mass Memories.
Programming in Assembly: operands, instructions, data directives, labels, subprograms, stacks, "call" and "ret", modular programming, I/O, compilation.
Evolution of Imperative Languages and Structured Programming.
Concept of algorithm, programming language, program, compiler, interpreter, syntax, semantics, errors at compilation and execution time.
Software, copyright and copyleft.
Programming in C/C++.
Basic data types. Constant. Variables . Declaration and definition. Assignment instruction. Operations with the type int, unsigned, float and double, bool, char, enum. Operations with mixed types and type conversions: implicit, explicit.
Operators. Precedence and associativity. Assignment. Arithmetic operators and compound assignment. Relational and logical operators. Conditional and comma operators.
Input/Output. The concept of "flow" reading and writing mode text. Input stream with characters or numbers. Output flow. Redirection of flows.
Blocks and visibility of identifiers, namespace, directive using.
Structured programming. Control structures. Compound instruction (block). if (cond) istr, if (cond) istr1 else istr2. switch. while (cond) istr, do istr while (cond), for (iniz; cond; passo)istr. Nested cycles. Jumping Instructions: break, continue, goto. Böhm-Jacopini's theorem.
Definition, declaration and call of a function. Procedures. Switching arguments to a "by value" function. Function and stack. Recursive functions. Default topics. Inline functions. Storage classes
Library functions and modular compilation. Overload of functions
Pointers and pointer operations. Pointers to pointers. Switching pointers to functions and returning pointers topics. References and passage "for reference". Return reference topics. Reference: behind the scenes. Function pointers
Definition of carriers and access to carrier elements. Vector limits in C++. Character, string and I/O carriers. Multidimensional vectors. Vectors as function arguments. Vectors and arithmetic of the pointers.
Declaration of a struct type and access to its fields. Structure vectors and sorting algorithms: insertion sort, selection sort, bubble sort, quick sort.
Dynamic memory in C++: new, delete. Simple and main lists 6 functions: head insertion, head extraction, bottom insertion, bottom extraction, tidy insertion, extraction of a given element. Management of heap overflow.
Header files and libraries. Compiling header files. Problem of multiple inclusions and conditional compilation (header guards). Topics of the main().
Object Oriented Programming: from struct to class. Objects. Attributes and methods. Access specifiers, information hiding/encapsulation. Builder and destroyer. Header files and class headings.
Derived classes and types of inheritance. Multiple inheritance and dynamic binding. Virtual functions and polymorphism. Advantages of polymorphism
Notes on computational, spatial and temporal complexity.
Remarks on the correction of programs ("debugging").


MODALITÀ DI SVOLGIMENTO DELL'ESAME DEVELOPMENT OF THE EXAMINATION
Modalità di valutazione dell'apprendimento.

L'apprendimento viene valutato sulla base di due prove. La prima di programmazione in C++ e la seconda di esercizi sulla teoria della rappresentazione delle informazioni e della programmazione in C++.


Criteri di valutazione dell'apprendimento.

Viene valutata la capacità di programmare, cioè quella di concepire algoritmi per risolvere problemi ed implementarli in C++.


Criteri di misurazione dell'apprendimento.

Normalmente la prova di programmazione vale 18/30 e quella di teoria vale 12/30.


Criteri di attribuzione del voto finale.

per la valutazione finale si sommano i voti riportati nelle due prove


Learning Evaluation Methods.

Learning is assessed on the basis of two tests. The first is programming in C++ and the second is exercises on the theory of information representation and programming in C++.


Learning Evaluation Criteria.

The ability to program is evaluated, that is to conceive algorithms to solve problems and implement them in C++.


Learning Measurement Criteria.

Normally the programming test is worth 18/30 and the theory test is worth 12/30.


Final Mark Allocation Criteria.

for the final evaluation, the marks obtained in the two tests will be added together



TESTI CONSIGLIATI RECOMMENDED READING

Luis Joyanes Aguilar, "Fondamenti di programmazione in C++", The McGraw-Hill Companies.
John R. Hubbard, "Programmare in C++, seconda edizione, (470 esercizi svolti)", The McGraw-Hill Companies
Materiale didattico disponibile sul sito https://learn.univpm.it

Luis Joyanes Aguilar, "Fondamenti di programmazione in C++", The McGraw-Hill Companies.
John R. Hubbard, "Programmare in C++, seconda edizione, (470 esercizi svolti)", The McGraw-Hill Companies
e-learning https://learn.univpm.it


E-LEARNING E-LEARNING

SI

YES


Scheda insegnamento erogato nell’A.A. 2020-2021
Le informazioni contenute nella presente scheda assumono carattere definitivo solo a partire dall'A.A. di effettiva erogazione dell'insegnamento.
Academic year 2020-2021

 


Università Politecnica delle Marche
P.zza Roma 22, 60121 Ancona
Tel (+39) 071.220.1, Fax (+39) 071.220.2324
P.I. 00382520427