Alberto Castellini
PROGRAMMING - THEORY (2017/2018) (official webpage)
Bachelor in Bioinformatics, Verona University


Syllabus

Introduction to computers and programming Algorithms and structured programming Flow control structures Functions and the concept of abstraction Arrays and pointers Characters and strings Formatted Input/Output Structures, unions, bit manipulations Lists, trees, stacks and queues and their implementation. File processing Preprocessor.

Learning outcomes

The objective is to introduce students to statistical modelling and exploratory data analysis. The mathematical foundations of Statistical Learning (supervised and unsupervised learning, deep learning) are developed with emphasis on the underlying abstract mathematical framework, aiming to provide a rigorous, self-contained derivation and theoretical analysis of the main models currently used in applications. Complimentary laboratory sessions will illustrate the use of both the key algorithms and relevant case studies, mainly by using standard software environments such as R or Python.

Reference books

Al Kelley, Ira Pohl. C Didattica e Programmazione. Pearsons Education Italia, 2004.

Material: Exercises in C (code)
  • Lecture 1: operatori incremento e assegnamento, controllo di flusso (if, for, while), funzioni e programmi composti da piu' file. (code)
  • Lecture 2: Ricorsione: somma dei primi n numeri interi positivi, fattoriale, confronto con metodo iterativo, stampa di una riga di testo al contrario, sequenza di Fibonacci, torre di Hanoi (code)
  • Lecture 3: Array monodimensionali: dichiarazione, inizializzazione, accesso/indici e modifica. Puntatori: definizione, memoria del sistema, indirizzi, dichiarazione di variabile di tipo puntatore ad intero, double, char ed altri tipi, assegnamento di valori alle variabili di tipo puntatore, puntatore nullo, operatori di indirizzo (&) e di indirizzamento indiretto (*) (code)
  • Lecture 4: Chiamata per indirizzo tramite puntatori, funzione swap di scambio puntatori tra due variabili, relazioni tra array e puntatori, indicizzazione di puntatori, aritmetica dei puntatori (code)
  • Lecture 5: Aritmetica dei puntatori (sottrazione tra puntatori senza e con cast ad interi), array come parametri di funzione e relativo passaggio per riferimento, Bubble sort con funzione swap basata su scambio di puntatori (definizione del problema di ordinamento e complessità computazionale dell'algoritmo Bubble sort), allocazione dinamica della memoria con funzioni calloc e malloc, deallocazione tramite la funzione free (code)
  • Lecture 6: Allocazione di memoria per array tramite funzione malloc, spostamento di puntatore in array per ottenere indicizzazione a partire da 1. Variabili di tipo stringa: definizione, marcatore di fine stringa, lunghezza, indicizzazione come array, applicazione dell'aritmetica dei puntatori alle variabili stringa. Elaborazione di stringhe: calcolo del numero di parole in una stringa, macro della libreria ctype(.h) (es: isspace()). Libreria string(.h): funzioni strcat, strcmp, strcpy, strlen (definizione, implementazione ed esempio di utilizzo) (code)
  • Lecture 7: Array multidimensionali (dichiarazione, inizializzazione, accesso), indirizzo base, mappa di memorizzazione. Array multidimensionali come parametri di funzione. Array di puntatori. Ordinamento lessicografico di parole contenute in un file di testo, tramite l'utilizzo di array di puntatori (code)
  • Lecture 8: Operatori orientati ai bit: espressioni intere rappresentate da stringhe binarie, codifica dei numeri interi in complement a due, operatore di complemento unario bit a bit, and, or esclusivo ed inclusivo bit a bit, operatori di scorrimento a sinistra e destra, maschere e stampa bit a bit di numeri interi (code)
  • Lecture 9: array di puntatori ed operatori orientati ai bit. Tipi enumerativi (enum): definizione, dichiarazione di variabili, assegnamento, identificatori e loro inizializzazione. Strutture (struct): definizione, membri, dichiarazione variabili, operatori "." e "->" di accesso ai membri, copia di variabili struct, array di struct, esempi vari, strutture come parametri di funzione (code)
  • Lecture 10: dichiarazione struttura, dichiarazione variabili tipo struttura, accesso ai membri tramite operatori "." e "->", copia di strutture, uso di typedef, array di struct, analisi dell'esercizio class_info sull'accesso a membri di strutture, struttura per numeri complessi e relativa funzione per la somma di due numeri complessi, utilizzo di strutture come parametri di funzioni (passaggio per valore, passaggio di puntatori a struct e relative considerazioni sull'efficienza dei due approcci), inizializzazione di struct con la notazione basata su parentesi graffe. Analisi dettagliata del codice "poker.c" per il calcolo della probabilita' di "flush" (colore) per mezzo di campionamento. Unioni: definizione tipo union, dichiarazione variabili di tipo union e loro utilizzo, accesso ai membri. Esercizio sull'utilizzo di unioni per i tipi int e double (code)
  • Lecture 11: unioni contenenti strutture ed enumeratori annidati. Elaborazione di file, input/output: funzionalità avanzate delle funzioni printf e scanf, funzioni fprintf e fscanf, relativi parametri di input e valori di output, identificatore FILE della libreria stdio.h, puntatori a fie stdin, stdout, stderr, equivakenze printf-fprintf e scanf-fscanf, funzioni fopen ed fclose, modalità apertura file in lettura, scrittura, append, operatore fflush. Esercizio: acquisizione numeri interi da file di testo e scrittura della somma in un secondo file di testo. Esercizio: aggiunta di doppia spaziatura (new line) in file di testo. Parametri argc ed argv del metodo main. Funzioni getc e putc. Identificatore EOF. (code)
  • Lecture 12: funzioni ftell ed fseek. Esercizio: scrittura di un file di testo al contrario per mezzo di funzioni ftell ed fseek. Esercizio: caricamento di file fasta del genoma E. coli, calcolo del numero di codoni di start ed individuazione delle relative posizioni, misurazione della lunghezza del file, scrittura dei risultati su file di testo. Tipo di dato astratto (ADT) pila (stack): esempio di definizione del tipo stack per oggetti di tipo carattere, operazioni push, pop, top, empty, full, reset. Preprocessore: macro con parametri (code)