- Engineering for Innovation
- Bachelor's Degree in COMPUTER ENGINEERING
- FOUNDATIONS OF COMPUTER SCIENCE AND PROGRAMMING
FOUNDATIONS OF COMPUTER SCIENCE AND PROGRAMMING
- Teaching in italian
- FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE
- Teaching
- FOUNDATIONS OF COMPUTER SCIENCE AND PROGRAMMING
- Subject area
- ING-INF/05
- Reference degree course
- COMPUTER ENGINEERING
- Course type
- Bachelor's Degree
- Credits
- 9.0
- Teaching hours
- Frontal Hours: 81.0
- Academic year
- 2024/2025
- Year taught
- 2024/2025
- Course year
- 1
- Language
- ITALIAN
- Curriculum
- Percorso comune
- Reference professor for teaching
- PULIMENO MARCO
- Location
- Lecce
Teaching description
Nessun prerequisito.
Il corso mira a fornire sia elementi di teoria dell’informatica che i principi e le basi per la programmazione. Partendo dal concetto di macchina programmabile in grado di svolgere operazioni seguendo una sequenza codificata di istruzioni elementari si passa alla strutturazione di un algoritmo e quindi alla competenze che permettono di scomporre un problema “complesso” per la macchina in una sequenza di operazioni “elementari”. Durante il corso verranno inoltre studiati gli algoritmi di ordinamento e di ricerca più noti con l’obiettivo di illustrare come differenti scelte nella risoluzione di uno stesso problema possano incidere sull’efficienza di un algoritmo e sui tempi di esecuzione al calcolatore. Si affornteranno infine elementi sull'architettura dei calcolatori.
Strutturare i dati in modo opportuno è uno dei principali fattori che influenzano l’efficienza di un algoritmo. Durante il corso si studieranno le strutture dati base quali le liste. Infine il corso fornirà gli strumenti per lo sviluppo di applicazioni attraverso ambienti di programmazione integrati IDE utilizzando il linguaggio C e alcuni cenni sull’analisi della complessità computazionale degli algoritmi.
Conoscenze e comprensione
I risultati attesi di apprendimento prevedono che al termine del corso gli studenti siano in grado di:
1) illustrare le principali caratteristiche dell’architettura di un calcolatore;
2) comprendere le metodologie di rappresentazione e codifica dell’informazione;
3) progettare e implementare un algoritmo;
4) riconoscere ed applicare gli elementi caratterizzanti un linguaggio di programmazione procedurale strutturato (tipi dato, strutture di controllo, funzioni e procedure, gestione dei file e strutture dinamiche);
5) riconoscere le principali strutture dati dinamiche (liste, code, alberi) e i principali algoritmi di oridnamento e di ricerca;
6) analizzare, interpretare, comprendere e produrre listati di codice in linguaggio C utilizzando degli appositi ambienti di programmazione (IDE).
7) comprendere l'architettura hardware dei calcolatori.
Capacità di applicare conoscenze e comprensione
Gli studenti saranno in grado di impiegare le conoscenze acquisite in diversi ambiti applicativi e per la risoluzione al computer di processi e sistemi.
Autonomia di giudizio
Il corso favorisce l'autonomia di giudizio degli studenti attraverso l'analisi critica di problemi computazionali per i quali trovare soluzioni software in grado di risolverlo. Diverse soluzioni proposte dagli studenti sono poste a confronto e valutate criticamente dagli studenti stessi.
Abilità comunicative
È fondamentale che gli studenti siano in grado di comunicare con un pubblico vario e composito, non omogeneo culturalmente, in modo chiaro, logico ed efficace, utilizzando gli strumenti metodologici acquisiti e le loro conoscenze scientifiche e, in particolar modo, il lessico di specialità.
Il corso favorisce lo sviluppo delle abilità inerenti le capacità di esporre in termini precisi e formali le proprietà e le caratteristiche di algoritmi e la descrizione di possibili soluzioni algoritmiche a problemi reali.
Le lezioni teoriche si svolgeranno in aula utilizzando slide ed esempi alla lavagna. Le esercitazioni si svolgeranno in laboratorio informatico con esercizi svolti direttamente al computer inerenti la programmazione in linguaggio C.
L’esame è composto da una prova scritta e da una prova di programmazione con discussione a seguire.
Durante la prova scritta si verificheranno le capacità acquisite nella progettazione di un algoritmo, nel riconoscimento delle principali strutture dati e degli algoritmi di base visti a lezione e nell'analisi della complessità computazionale di un algoritmo, oltre agli aspetti teorici affrontati nel corso.
Nella prova di programmazione, alla quale si potrà accede solo dopo aver superato la prova scritta, si valuterà la capacità pratica nello sviluppare un semplice programma eseguibile al calcolatore in linguaggio C. Il programma realizzato durante la prova di programmazione verra’ discusso appena terminata la prova.
- Architettura di Von Neumann, concetto di algoritmo, macchina astratta.
- Rapresentazione delle informazioni
- Strutturare un algoritmo
- Costrutti del linguaggio C, variabili e tipi di dato, funzioni, array puntatori e gestione dinamica della memoria
- Funzioni ricorsive
- Tipi di dato astratto: Pila, Coda, Lista, Heap Tree
- Cenni su analisi della complessità computazionale
- Algoritmi di ordinamento: insertion sort, selection sort, bubble sort, merge sort, quick sort, heap sort
- Porte logiche e algebra booleana
- Reti combinatorie e reti sequenziali
- Processore e unità aritmetico-logica
- Gerarchia della memoria
- Pipeline e parallelismo a livello di istruzione
- Materiale didattico fornito dal docente
https://elearning.unisalento.it/course/view.php?id=1854
- “Informatica arte e mestiere” – IV edizione
Dino Mandrioli et al. – MCGrawHill
- “Algorithms in C” Parts 1-4 – Third Edition
Robert Sedgewick - Pearson Education
- “Reti Logiche”
Cristiana Bolchini et al.
Riferimenti per il linguaggio C:
- “Il linguaggio C. Principi di programmazione e manuale di riferimento” – Second Edition
Kernighan and Ritchie
- “C Reference” - https://en.cppreference.com/w/c
- “C: A Reference Manual” – Fifth Edition
Samuel P. Harbison, Guy L. Steele - Pearson Education
Semester
First Semester (dal 16/09/2024 al 20/12/2024)
Exam type
Compulsory - Characterizing
Type of assessment
Oral - Final grade
Course timetable
https://easyroom.unisalento.it/Orario