Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
LINGUAGGIO
Il linguaggio macchina è il linguaggio utilizzato dal calcolatore ed è differente in base al
o calcolatore. Un programma scritto in linguaggio macchina è formato da una sequenza di
istruzioni appartenenti al set di istruzioni del processore.
Un programma consiste in due parti:
o 1. istruzioni: contengono il codice del programma
2. dati: sono costituiti da celle di memoria destinate a contenere i dati sui quali il
programma opera
! Un programma è un’entità statica che descrive un algoritmo.
Un processo è un programma in esecuzione caratterizzato dal codice in esecuzione e da uno
stato.
Un tipo di linguaggio più facile da utilizzare è il linguaggio Assembly, in cui al posto di
o sequenze di numeri si usano abbreviazioni per rappresentare le operazioni elementari.
Per passare da “linguaggio macchina” a “linguaggio assembly” serve l’assembler (programma)
I linguaggi più usati sono quelli di alto livello, cioè sono i più vicini al linguaggio del
o programmatore. Per passare dal “linguaggio ad alto livello” al “linguaggio macchina” uso il
compilatore.
FASI DELLA PROGRAMMAZIONE
1. Editazione: consiste nella scrittura del codice in un file. Si esegue tramite un programma
chiamato editor di sviluppo e viene generato un programma sorgente.
2. Compilazione: il codice sorgente va nel compilatore che si occupa di tradurre il programma nel
codice in linguaggio macchina. Si genera così il programma oggetto.
3. Linking: i programmi scritti in linguaggio ad alto livello contengono riferimenti a funzioni
definite altrove. Si genera il programma eseguibile.
4. Caricamento: la fase di caricamento è eseguita dal loader, cioè un altro programma che fa
parte del sistema operativo.
5. Esecuzione: il computer esegue il programma
LINGUAGGIO C
Linguaggio ad alto livello molto diffuso e adatto ad un ampio spettro di applicazioni.
PROPRIETA’
1. È un linguaggio dichiarativo, cioè l’intenzione di voler usare una variabile o una funzione deve
essere dichiarata a priori.
2. È un linguaggio strutturato, cioè fornisce i costrutti base per la definizione di sequenza,
selezione e iterazione.
3. È un linguaggio case sensitive, cioè discrimina tra caratteri maiuscoli e minuscoli.
STRUTTURA
- Un programma scritto in C è un file di testo strutturato in modo opportuno.
- Il programma scritto correttamente può essere tradotto in linguaggio macchina tramite il
compilatore C.
ELEMENTI DEL LINGUAGGIO
1° PROGRAMMA IN C E’ un commento/nota e quindi viene ignorato dal compilatore.
- Dice al calcolatore che nel nostro programma verranno usate
funzioni esterne.
Stdio.h
- ci dice che le funzioni sono in quella specifica
libreria
Ogni programma deve contenere una funzione principale chiamata main, che
ha le istruzioni che verranno eseguite non appena il programma sarà caricato
in memoria.
- La sequenza di istruzioni della main, cioè il blocco, deve essere racchiusa nelle parentesi
graffe.
- Ogni istruzione deve essere seguita da un punto e virgola;.
printf
- stampa a video il messaggio.
- \n può essere usato per mandare il cursore a capo
return serve a terminare la funzione main e viene rimandato un valore che
descrive l’esito dell’esecuzione. Se il programma è stato eseguito con successo
di solito si usa il valore 0.
FUNZIONI DI INGRESSO E USCITA
In C, ingresso e uscita avvengono tramite chiamate (attivazioni) di funzioni (sottoprogrammi)
disponibili nella Standard Library, cioè una collezione di funzioni utilizzabili dai programmi.
%d mi sta ad indicare che in quel posto andrò a stampare un numero intero.
VARIABILI Perché un programma sia in grado di risolvere dei problemi, devo
introdurre il concetto di variabile.
Le variabili vanno dichiarate e bisogna specificarne tipo e nome; si
può inoltre assegnargli un valore.
Int indica che la variabile conterrà un numero intero.
LETTURA DATI DAL TERMINALE La lettura delle informazioni avviene tramite la
scanf
funzione fornita dalla libreria stdio.h;
&variabile
deve essere sempre seguita da .
Il parametro tra “ ” è la stringa di controllo.
È preferibile scegliere stringhe semplici e leggere
solo una variabile alla volta.
COMANDI UTILI
In generale posso modellizzare la struttura di C in questo modo:
1. Parte dichiarativa globale: librerie da usare, funzioni e variabili globali
2. Parte dichiarativa locale: dichiarazione di variabili locali
3. Parte esecutiva: sequenza di istruzioni del programma (INPUT, ELABORAZIONE, OUTPUT)
TIPI DI DATI SEMPLICI
È uno spazio di memoria centrale e quindi la variabile deve essere dichiarata perché deve essere
chiaro quanto spazio serve al programma.
Tutti gli accessi alla variabile indicano un accesso alla memoria quindi è fondamentale indicare quale
spazio di memoria è associato alla variabile.
Indirizzo di A valore di A
à
TIPI DI DATI
o In C ci sono diversi tipi di dati BUILT-IN:
Int
a) : numeri interi
Ci 3 varianti:
- Short int: per numeri di piccole dimensioni. Usa 2 byte di memoria
- Long int: per numeri di grandi dimensioni. Usa 4 byte di memoria
- Unsigned: solo per numeri positivi
La quantità di memoria usata dipende dalla macchina e dal compilatore ma deve essere
rispettata la seguente relazione: mem (short Int) <= mem (Int) <= mem (long Int)
mem (float) <= mem (double) <= mem (long double)
! per incremento e decremento: a++ a=a+1
à
a-- a=a-1
à
e = 10^
(guardare esempi su slide 6: pag.5…)
Float
b) : numeri con la virgola mobile (singola precisione). Usa 4 byte
Double : numeri con la virgola mobile (doppia precisione). Usa 8 byte
Si differenziano per la loro precisione, infatti il double permette di rappresentare numeri
reali in un intervallo più grande e con maggiore precisione.
(guardare esempi su slide 6: pag.9…)
Char
c) : caratteri (0 a 255). Usa un byte
’\n’ = a capo
’\t’ = tab
’\r’ = carriage return
’\b’ = backspace
Segue la codifica della tabella ASCII.
! per incremento e decremento: a = ‘c’ +1; /* a= ’d’ */
a = ‘c’ -1; /* a=’b’*/
In C si possono anche definire nuovi tipi di dato.
COSTANTI
o const
Possono essere definite in due modi: <tipo> <nome> = val
#define <nome> <valore>
In fase di compilazione, ogni riferimento ad una costante viene sostituito con il valore
corrispondente. Alla fine della sostituzione la costante è come se non fosse stata dichiarata; per
questo motivo il compilatore non riserva alcuna zona di memoria per la costante.
CONVERSIONI
o In C occorre sempre dichiarare il tipo di ogni variabile perché consente una verifica maggiore
durante la compilazione.
Nel caso delle espressioni aritmetiche il tipo inferiore viene convertito temporaneamente al
tipo superiore, secondo la regola: int < float < double
TIPI ENUMERATIVI
o enum
Il comando consente di elencare una sequenza di valori simbolici che la variabile può
assumere. Una volta elencati vengono codificati come interi a partire da 0.
RIDEFINIZIONE DI TIPO
o typedef
Il comando consente di ridefinire un tipo semplice con un nuovo nome.
STRUTTURE DI CONTROLLO
ISTRUZIONE CONDIZIONALE
o If
• Il comando consente di effettuare delle scelte nel
flusso di esecuzione e non è mai seguito da ;.
! Lo statement viene eseguito solo se la condizione
è vera.
• Se devo scegliere tra due alternative nel flusso di
if…else
esecuzione, uso i comandi
! Il primo statement viene eseguito solo se la
condizione è vera, mentre il secondo statement
solo se la condizione è falsa.
VERO E FALSO
o In C una condizione assume un valore intero pari a
• 0 se la condizione è falsa
• 1, oppure qualunque valore diverso da 0, se la condizione è vera
switch
Se devo scegliere tra molte alternative uso il comando e per terminare la sequenza di
o break.
istruzioni da eseguire uso
CICLO FOR
o Consente di eseguire un numero di iterazioni definito
run-time.
CICLO WHILE
o CICLO DO WHILE
o ARRAY E MATRICI
ARRAY
o - Danno la possibilità di rappresentare in
maniera compatta una collezione di variabili
che devono essere dello stesso tipo (int,
float…).
- L’accesso ad un elemento avviene attraverso il
nome dell’array seguito dalla posizione fra []
(subscript). ES. 12 mesi dell’anno = [12]
- La posizione deve essere di tipo intero e parte
da 0 fino alla dimensione dell’array -1.
- Ogni elemento dell’array è del tutto analogo
ad una variabile di tipo semplice.
- È molto comodo quando si ha un ciclo for.
- Inizializzazione: è possibile inizializzare un array in fase di dichiarazione, specificandone
tutti gli elementi fra parentesi graffe e separati da virgole:
{valore
tipo nome [N] = 1,…,valore N};
- Lettura e scrittura: avvengono un elemento per volta ad accezione delle stringhe. È quindi
utile ricorrere al ciclo for.
- Range: è compito del programmatore stare attento a non scrivere una variabile che non
è allocata nell’array.
- Char: gli array di tipo char sono detti anche
stringhe.
- Typedef mi serve per definire una nuova
variabile.
STRINGHE
o Le costanti di tipo stringa si rappresentano come una sequenza di caratteri racchiusi tra “ ”.
- Inizializzazione: può avvenire in fase di dichiarazione. %s
- Lettura e scrittura: si leggono sempre tramite la scanf con e il nome non deve essere
gets
preceduto da &. Per leggere stringhe con spazi utilizzo la funzione .
\0
- Fine: in C la fine di una stringa viene indicata dal carattere ‘ ’, quando printf trova questa
scrittura smette di stampare a video gli elementi della stringa.
- Funzioni: nella libreria esistono diverse funzioni per la manipolazione delle stringhe esono
string.h
definite in .
MATRICI
o Le matrici sono strutture dati bidimensionali che vengono rappresentati come array di array.
- Lettura: avviene un elemento per
volta e richiede due cicli for
innestati.
- Scrittura: si scrive un elemento alla
volta e si usano due cicli for
innestati.
- Somma, moltiplicazione, trasposta STRUCT
Permette di rappresentare in modo compatto ed incapsulato tipi di dati con una struttura
complessa. Il vantaggio è che rispetto agli array, gli elementi non sono numerati ma hanno un
nome e possono es