Calcolabilità
- Revisione della lezione precedente, sistemi di transizione, algoritmo, nozioni di calcolabilità
- Problema della Fermata.
- Complessità Computazionale, misura di tempo come tempo impiegato dall’istanza peggiore di dimensione $$n$$.
Linguaggio C
- Strutture. Definizione e dichiarazioni del tipo struttura.
- Dichiarazione di variabili di tipo struttura, esempi.
- Operatore “.” per accedere ai campi di una struttura a partire da una variabili.
- Semantica delle variabili struttura per “valore”, uso dell’assegnamento tra variabili, passaggio delle strutture per valore.
- Uso della typedef per semplificare e abbreviare i nomi dei tipi.
- Tipi di dato misti, vettori di strutture, strutture che contengono altre strutture o vettori, strutture che contengono puntatori.
- Puntatori a strutture, uso dell’operatore freccia ->
Esercizi:
- Scrivete un programma C che implementa un piccolo CAD 2d. Il programma presenta un interfaccia in stile “linea di comando” con una serie di comandi a disposizione:
- help (stampa un elenco di tutti i comandi e per ogni comando gli argomenti e la descrizione di cosa fa).
- load project (carica il file “project.cad”, dove avete salvato una descrizione dei vostri dati, nota: project.dat è solo un esempio di un nome generico)
- save, saveas project (salva il progetto corrente sul file con il nome associato al progetto (save) o con il nome specificato “project.cad”)
- clear all (cancella tutte le primitive definite nel progetto, si torna ad uno stato iniziale).
- new project (crea un nuovo progetto, implica che il nome del progetto sarà project)
- point (x,y) (crea un punto alle coordinate (x,y))
- line (x1,y1) (x2,y2) (crea il segmento passante da (x1,y1) a (x2,y2))
- rect (x1,y1) (x2,y2) (crea il rettangolo con vertice inferiore sinisto in (x1,y1) e vertice superiore destro in (x2,y2) con i lati paralleli agli assi cartesiani).
- square (x1,y1) l (crea un quadrato di lato l, con vertice inferiore sinistro in (x1,y1)).
- list (elenca tutte le primitive inserite nel progetto e per ogni primitiva stampa i suoi attributi e un numero che la identifica univocamente).
- scale (sx,sy) id (modifica la primitiva di identificatore id, scalandone le dimensioni del fattore sx,sy, si applica a tutte le primitive tranne che ai punti).
- translate (tx,ty) id (sposta la primitiva di (tx,ty)).
- rotate (ax,ay) id (ruota rispetto al suo centro la primitiva di un angolo ax rispetto all’asse x e ay rispetto all’asse y) attenzione, per poter
ruotare correttamente rispetto al centro, si dovrà prima traslare nel centro degli assi la primitiva, poi svolgere la rotazione e
infine ritraslare la primitiva nella posizione originale.
- Provate a definire le strutture dati associate ad un social network. Quali strutture definite, quali informazioni serve memorizzare?