Introduzione al C

Variabili e tipi

Una variabile è un’entità che può assumere un valore qualunque all’interno di un insieme di valori (tipo)

I tipi possono essere predefiniti dal linguaggio di programmazione (tipi primitivi) o definibili attraverso appositi costrutti messi a disposizione dal linguaggio (tipi di utente)

I tipi possono essere semplici, l’informazione è definita come un oggetto non decomponibile in altri oggetti; o strutturati, l’informazione è definita come un oggetto decomponibile in altri oggetti


Dati e funzioni

Analisi e specifica

Definizione di cosa fa il programma: individuazione dei dati di ingresso e di uscita, di precondizione e postcondizione

Dizionario dei dati: tabella il cui schema è attributo, tipo, descrizione

Progettazione

Definizione di come il programma effettua la trasformazione specificata; progettazione dell’algoritmo per raffinamenti successivi (stepwise refinement); decomposizione funzionale

Tipi di dati

Un tipo di dato $T$ astratto è definito da: un dominio $D$ di valori; un insieme finito $F$ di operatori $op_1,op_2,..,op_k$, manipolazione dei valori di $D$: $op_i:D\times D \rightarrow D$ se è un operatore binario, $op_i:D \rightarrow D$ se è unario

I tipi di dati possono essere: primitivi, strutturati, definiti dall’utente

Sottoprogrammi

I sottoprogrammi sono utilizzati per semplificare la soluzione di problemi complessi attraverso il principio del divide et impera: dividi il problema in sottoproblemi, risolvi separatamente i sottoproblemi, ricombina i risultati

Un sottoprogramma consente di raggruppare insieme dati ed azioni in modo da consentirne il trattamento come se si trattasse di azioni primitive: un sottoprogramma rappresenta una soluzione ad un sottoproblema, progettazione top-down (decomposizione funzionale)

Comunicazione tra sottoprogrammi

Il meccanismo di chiamata di funzione consente ad un sottoprogramma di utilizzare un altro sottoprogramma come se fosse una operazione elementare: il controllo dell’esecuzione è trasferito dal sottoprogramma chiamante al sottoprogramma chiamato, insieme ai dati di ingresso (attivazione); al termine dell’esecuzione, il sottoprogramma chiamato restituisce il controllo al sottoprogramma chiamante insieme ai dati di uscita