LINGUAGGIO C
Abbiamo un problema nel mondo reale e per risolverlo scriviamo un algoritmo che diamo in pasto
ad un calcolatore.
Questo algoritmo lo salviamo in un file, con estensione .c
Diamo il file ad un compilatore, che sarebbe un programma già esistente, già scritto.
Il compilatore produce un file scritto in linguaggio macchina, solo 0 e 1, che il calcolatore comprende
e può eseguire.
I due passaggi di compilatore e esecuzione sono automatici, noi non li vediamo. Perchè avvengano
dobbiamo dare dei comandi da terminale:
Per compilare: gcc nome.c - o nome
ovvero dico al compilatore prendi nome.c traducilo in linguaggio macchina e metti il risultato in
nome
Per eseguire: ./nome
Esistono molti linguaggi di programmazione.
Linguaggi di basso livello = vicini al linguaggio macchina
Linguaggi di alto livello = vicini al linguaggio umano
Il linguaggio C è ad alto livello, non usa 0 e 1 ma parole, anche se devono rispettare una sintassi.
Col tempo sono nate diverse versioni del C.
Il linguaggio C è:
- imperativo, perchè formato da comandi che dicono al compilatore cosa deve fare.
- dichiarativo perchè ogni volta che usiamo variabili dobbiamo prima averle dichiarate.
- strutturato: ben strutturato, ovvero diviso in varie parti
- case sensitive, scrivere una parola con minuscola o maiuscola è una cosa diversa
Macchina astratta C, uguale al calcolatore che avevamo immaginato.
Avrà una CPU (che svolge operazioni), una memoria (formata da varie celle in cui vengono allocate
le variabili), ci sono standard input e standard output.
Tutti questi elementi sono collegati con un bus.
int main ()
{
return 0;
}
Subito dopo int main devo dichiarare le variabili, nella forma:
nome_tipo nome_variabile;
nome_tipo definisce la classe dei valori ammissibili e le operazioni ammissibili.
Quando dichiaro una variabile, nella memoria si crea uno spazio di dimensione che dipende dal tipo
di dato.
Esistono alcuni tipi di dati predefiniti:
char usato per i caratteri, rappresentati con 8 bit come fossero dei numeri, per farlo si usa
la tabella ASCII che associa un numero
\ .
\
Es:
char c1;
oppure
char c1, c2, c3;
Esempio di assegnamento:
int usato per gli interi con segno, insieme Z
Questi saranno rappresentati con notazione 2C2 (complemento a 2), usando 32 bit
Es: int num1, num2;
float usato per rappresentare numeri reali, si usa la virgola mobile con standard IEEE 754
con precisione singola. Usa quindi 32 bit.
double usato sempre per i reali, ma usa IEEE 754 doppia precisione e quindi 64 bit
e ha la seguente sintassi:
scanf(stringa_di_controllo, lista_delle_variabili_da_leggere);
La stringa di controllo contiene dei caratteri che sono relativi al formato delle variabili, sono caratteri
predefiniti. Essi sono contenuti tra doppi apici.
Il carattere è:
Esempio: voglio leggere un intero e un float
.
Mentre la lista delle variabili indica dove devono essere messi i valori che vengono letti. Tali valori
devono essere preceduti da &.
La & ha un significato
per caso). Ogni cella di memoria è caratterizzata da un indirizzo, per risalire a questo indirizzo si usa
Le operazione di lettura e scrittura sono implementate in dei programmi, che si
di una libreria chiamata stdio.h
riferimento alla libreria sopra indicata.
Lo faccio scrivendo:
#include <stdio.h>
Questa cosa si scrive prima del main, ovvero
Sempre nella parte dichiarativa globale posso dichiarare una costante, usando la sintassi:
#define NOME_COSTANTE valore_costante
In tutto il programma PI avrà quel valore.
Ogni volta che ho un valore costante nel programma, è opportuno creare una costante.
:
printf(stringa di controllo, lista variabili);
La stringa di controllo è sempre la stessa, ovvero %d, %f, %c
Per andare a capo \n
Per dare un tab \t appaiano nella stampa.
\
In conclusione dovremo avere:
Una parte dichiarativa globale, con le direttive, ad esempio con le librerie, ci dovrà sempre
essere #include <stdio.h> (senza ;)
Altre librerie se servono e costanti se ci sono.
Parola chiave int (main){ return 0; }
Parte dichiarativa locale: dove dichiariamo le variabili che dobbiamo usare nel programma
Parte esecutiva: contiene tutte le istruzioni che fanno parte del nostro programma
Problema leggere l'
il calcolarne
di
del stamparla
valore cerchio
raggio area e
: un .
,
inizio
È
-
É
stamparne i
double
predefiniti int float
chan
tipi esiste
Tra ordine
i <
<
<
un : tipo nell' altrimenti
più
Quando assegnamento ordine
faccio destra
non assegnare a
posso un
un ,
,
perdo informazioni
delle . |
81 15.7
82
float fn ;
, & "
' °
int i
Munn MUU 2
, muli 7
una ,
1 7
nulle ;
=
2 8 ;
nun =
15.7
In ;
= (
numi ( problema
82 c'
) ) è
ad float DX
sx
iutero + a
; + un
un non
a
assegno :
→
= )
( ) ( decimale
perdo
DX
float
fn ad sx
intero parte
a la
+ a :
+
assegno
;
Menez un
un
→
= informazione
assegnamento tra tipi verificare
diversi si può
nel perché di
perdita
fare attento
stare
devo una
, |
(
81 15/7 O
7.
2
1 intero
risultato
interi
tra
num
nulla + ;
mene somma
= →
→ " + °
/ 2 7
nunez divisione 1512
resto
quoziente
intera
num e
; =
=
, &ra
-
Appunti di introduzione di Basi di dati
-
Introduzione al Restauro
-
Esame universitario di Introduzione alla programmazione
-
Introduzione semiotica e Saussure