1
Elementi di informatica Elementi di informatica
Programmare in C
Conosciamo
Calcolare l’area di un rettangolo Calcolare l’area di un rettangolo
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base;
int altezza;
int area;
base = 3;
altezza = 7;
area = base*altezza;
printf("%d", area);
}
3
Calcolare l’area di un rettangolo Calcolare l’area di un rettangolo
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base;
int altezza;
int area;
base = 3;
altezza = 7;
area = base*altezza;
printf("%d", area);
}
Commenti:
Commenti: /* */ /* */
/* Calcolo area rettangolo */
tutto ciò che appare nella zona racchiusa tra /* */
non viene preso in considerazione dal compilatore
può estendersi su più linee
/* Questo programma
calcola l'area di un
rettangolo */
5
Errori tipici Errori tipici
• Dimenticare di terminare un commento con */
• Incominciare un commento con i caratteri */ o terminarlo con /*
Commenti:
Commenti: // //
Un altro modo per inserire un commento è farlo precedere da // , ma in questo caso deve terminare a fine linea, non può andare a capo
OK
// Questo programma calcola // l'area di un rettangolo
NOK
// Questo programma calcola
l'area di un rettangolo
7
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base;
int altezza;
int area;
base = 3;
altezza = 7;
area = base*altezza;
printf("%d", area);
}
Variabili Variabili
Variabili (
Variabili (cont cont.) .)
Un linguaggio di programmazione necessita di contenitori per informazioni
Questi contenitori sono indicati in generale con il nome di variabile, per enfatizzare che il loro contenuto può variare
variabile = cella di memoria (contenitore)
identificata da un nome simbolico
9
Una metafora delle variabili Una metafora delle variabili
Dichiaro una variabile:
area
nome simbolico
Le variabili a cui non è stato assegnato un valore iniziale contengono un valore non specificato.
A volte questi vengono chiamati valori sporchi perché nelle celle di memoria può essere contenuto un valore qualunque, utilizzato da programmi
che hanno occupato quelle posizioni di memoria in precedenza.
?
Dichiarazioni di variabili Dichiarazioni di variabili
int base;
int altezza;
int area;
area altezza
memoria
base
tipo identificatori
Ogni linguaggio di programmazione richiede di
dichiarare in un programma quali variabili verranno
usate dicendo il loro nome simbolico ed il loro tipo
11
Dichiarazioni di variabili (
Dichiarazioni di variabili (cont cont.) .)
Sintassi:
tipo identificatore;
Semantica:
Una dichiarazione informa il compilatore su:
spazio di memoria;
operazioni
Osservazione Osservazione
Tutte le variabili devono essere
dichiarate prima di essere usate
13
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base;
int altezza;
int area;
base = 3;
altezza = 7;
area = base*altezza;
printf("%d", area);
}
Dichiarare prima di usare Dichiarare prima di usare
dichiaro uso
Identificatori Identificatori
Un identificatore è formato da uno o più caratteri Regole da rispettare
1. Primo carattere: lettera o una sottolineatura ( _ ) 2. Caratteri successivi al primo: numeri o lettere o
sottolineature
3. Caratteri di punteggiatura o altri caratteri che hanno significati speciali: non ammessi
4. Maiuscole diverse da minuscole
5. Ogni identificatore deve essere diverso dalle parole
riservate utilizzate per il linguaggio C
15
Identificatori (
Identificatori ( cont.) cont .)
Validi Non validi
Nome1 1nome
cognome_nome Vero?
_num Num;pippo
Attenzione
Totale è diverso da TOTALE è diverso da totale
… … ritornando al nostro programma ritornando al nostro programma
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base;
int altezza;
int area;
base = 3;
altezza = 7;
area = base*altezza;
printf("%d", area);
}
17
Istruzione di assegnamento Istruzione di assegnamento
base = 3;
altezza = 7;
area = base*altezza;
area altezza 7
memoria
21
base 3
Istruzione di assegnamento (
Istruzione di assegnamento (cont cont.) .)
Sintassi:
identificatore = espressione;
espressione può essere semplice come una singola costante o può essere una combinazione di variabili, operatori, …
Semantica:
calcola il valore di un’espressione (lato destro) ed assegnalo ad una variabile (lato sinistro)
L’eventuale valore memorizzato precedentemente
nella variabile viene sostituito dal nuovo valore
19
Assegnamento: nota Assegnamento: nota
x=x+1;
Questa espressione in algebra non avrebbe senso perché un valore non può essere uguale a se stesso più uno. In C = non vuol dire uguaglianza ma assegnamento: alla variabile x viene
assegnato il valore già presente nella variabile x incrementato di 1
x 5 x=x+1 x 6
(a)
Calcola valore dell’espressione (2+3*(5+2)) = 23
Assegna tale valore alla variabile x
Assegnamento: esempio Assegnamento: esempio
(a) x = z + 3 * (y + 2);
(b) x = x+2;
z y 5
memoria
2 3 inizio
x
(b)
Calcola valore dell’espressione (23+2) = 25
Assegna tale valore alla variabile x
z y 5
memoria
2 3 dopo (a)
x 23 25
dopo (b)
21
Attenzione Attenzione
Istruzioni di assegnamento errati errati x+2=0;
x+y=7+3;
… … ritornando al nostro programma ritornando al nostro programma
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base;
int altezza;
int area;
base = 3;
altezza = 7;
area = base*altezza;
printf("%d", area);
}
23
Stampare il valore di area Stampare il valore di area
area altezza 7
memoria
21
base 3
Stampare il valore di una variabile Stampare il valore di una variabile
printf("%d", area);
area 21
stampa un intero decimale
%d sarà rimpiazzata da una stringa che rappresenta il valore di area
area altezza 7
memoria
21 3
base
25
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base, altezza, area;
base = 3;
altezza = 7;
area = base*altezza;
printf("%d", area);
}
Nota Nota
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base;
int altezza;
int area;
base = 3;
altezza = 7;
area = base*altezza;
printf("%d", area);
} equivalenti
… … ancora sulle dichiarazioni di ancora sulle dichiarazioni di variabili
variabili
tipo lista di identificatori;
Esempio:
Esempio: int x,y,z;
Nota:
nella lista gli identificatori sono separati da
virgola
27
Struttura del programma Struttura del programma
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base;
int altezza;
int area;
base = 3;
altezza = 7;
area = base*altezza;
printf("%d", area);
}
direttive dichiarazioni
istruzioni
Stile Stile
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base, altezza, area;
base = 3;
altezza = 7;
area = base*altezza;
printf("%d", area);
}
/* Calcolo area rettangolo */
#include <stdio.h>
main(){int base,altezza,area;
base = 3;altezza = 7;
area = base*altezza;
printf("%d", area);}
Più leggibile Meno leggibile
eq uiv ale nt i
29
Stampa più chiara Stampa più chiara
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base, altezza, area;
base = 3;
altezza = 7;
area = base*altezza;
printf("Base: %d\n", base);
printf("Altezza: %d\n", altezza);
printf("Area: %d\n", area);
}
Base: 3 Altezza: 7 Area: 21
Buone abitudini Buone abitudini
• Scegliere nomi significativi di variabile aiuterà a rendere il programma auto esplicativo
• I nomi di variabile formati da più parole possono aiutare a rendere il programma più leggibile.
valorefinale Î poco leggibile
valore_finale Î OK
valoreFinale Î OK
• Separare le dichiarazioni e le istruzioni con una
riga vuota
31
Il primo programma Il primo programma
Programma che stampa sullo schermo la frase
“Ciao, mondo.”
#include <stdio.h>
main() {
printf("Ciao, mondo.\n");
}
Ciao, mondo.
Analisi del programma:
Analisi del programma: main main
main() {
printf("Ciao, mondo.\n");
}
33
Analisi del programma:
Analisi del programma: printf printf
printf("Ciao, mondo.\n");
printf: istruzione per stampare su video
sequenza di caratteri (racchiusa tra " " ) spazio carattere come gli atri
\n carattere di new line (a capo)
; terminatore di istruzione
Analisi del programma: inclusione Analisi del programma: inclusione
#include <stdio.h>
consente di aggiungere al programma istruzioni presenti nel file di intestazione (header) stdio.h ( standard di input/output)
stdio.h
contiene le informazioni relative all’istruzione di output usata dal programma
è stato scritto da altri programmatori e può essere riusato
nel nostro programma
35
Ciao, mondo.
Programma “Ciao, mondo”
Programma “Ciao, mondo”
La funzione printf può visualizzare Ciao, mondo in molti modi diversi.
#include <stdio.h>
main() {
printf("Ciao, mondo.\n");
}
#include <stdio.h>
main() {
printf("Ciao, ");
printf("mondo.");
printf("\n");
}
#include <stdio.h>
main() {
printf("Ciao, mondo");
printf(".\n");
}
Cosa stampa?
Cosa stampa?
#include <stdio.h>
main() {
printf("Ciao, mondo ");
printf(".\n");
}
#include <stdio.h>
main() {
printf("Ciao,\nmondo.\n");
}
Ciao, mondo . Ciao,
mondo.
37
Cosa stampa il seguente programma?
Cosa stampa il seguente programma?
#include<stdio.h>
main() {
printf("Tre\nmamme");
printf(" con\n tre\n");
printf(" bimbi");
}
Tre mamme con
tre bimbi
Cosa stampa il seguente programma?
Cosa stampa il seguente programma?
#include<stdio.h>
main() {
printf("Tre");
printf("mamme");
printf("con\n");
printf("\ntre");
printf(" bimbi");
}
Tremammecontre bimbi
39 This is a C
program.
Scrivere una singola istruzione C per visualizzare il messaggio:
This is a C program.
su due righe, dove la prima termina con C
Esercizio Esercizio
#include<stdio.h>
main() {
printf("This is a C\n program.\n");
}
… … e se volessi stampare e se volessi stampare
#include <stdio.h>
main() {
printf("\"Ciao, mondo.\"");
}
“Ciao, mondo.”
41
Attenzione Attenzione
Il C distingue tra lettere maiuscole e lettere minuscole.
Scrivere MAIN() oppure Main() invece di main()
Î errore
Sviluppo di un programma usando
Cygwin
43
Un esempio Un esempio
Scrivere “Ciao, mondo.”
#include <stdio.h>
main() {
printf("Ciao, mondo.\n");
}
Sviluppo di un programma Sviluppo di un programma
Esecuzione
Ciao, mondo.
#include <stdio.h>
main() {
printf("Ciao, mondo.\n");
}
Editing
Codice sorgente
………
011000100010010111100
………
Codice eseguibile
Compilazione +
Collegamento
45
Sviluppo di un programma usando Sviluppo di un programma usando Cygwin
Cygwin
1. Scrittura 2. Traduzione 3. Collegamento 4. Esecuzione
Scrittura di un programma Scrittura di un programma
Prima fase
Scrittura di un programma su un file detto file sorgente , residente sulla memoria secondaria Come?
Usando un editor
47
Editor Editor
• gestisce i vari caratteri battuti da tastiera e produce un file di caratteri
• consente di effettuare immissione di nuove porzioni di programma
• consente di effettuare correzioni Nota Nota
estensione del file deve essere .c Esempio: primo.c
Quale editor scegliere?
Quale editor scegliere?
VI
Notepad Emacs
Source Edit
49
Notepad Notepad
Notepad
Notepad (cont ( cont.) .)
Alt + 123: {
Alt + 125: }
51
Sviluppo di un programma usando Sviluppo di un programma usando Cygwin
Cygwin
1. Scrittura 2. Traduzione 3. Collegamento 4. Esecuzione
Traduzione di un programma Traduzione di un programma
Seconda fase
Tradurre un programma scritto in C in linguaggio macchina.
Come?
Usando il compilatore
53
Compilatore Compilatore
• effettua un’analisi sintattica e segnala eventuali errori
• produce un altro file contenente il codice oggetto : programma tradotto in binario
Sviluppo di un programma usando Sviluppo di un programma usando Cygwin
Cygwin
1. Scrittura
2. Traduzione
3. Collegamento
4. Esecuzione
55
Collegamento Collegamento Terza fase
Effettuare il collegamento con le librerie
Come?
Usando il collegatore o linker
Produce un altro file detto eseguibile
Comando usando
Comando usando cygwin cygwin
Digitate il comando:
gcc primo.c -o primo.exe
57
… … più in dettaglio più in dettaglio
gcc primo.c -o primo.exe
Effettua la compilazione ed il collegamento alternativa gcc primo.c
Il codice eseguibile è adesso nel file a.exe
Se successivamente viene eseguita la compilazione di un altro programma, il nuovo codice rimpiazzerà il primo a.exe , per cui è bene usare l’opzione –o che permette di specificare il nome del file
Sviluppo di un programma usando Sviluppo di un programma usando Cygwin
Cygwin
1. Scrittura
2. Traduzione
3. Collegamento
4. Esecuzione
59
Esecuzione di un programma Esecuzione di un programma
Quarta fase
Una volta che un programma è in forma eseguibile, può essere trasferito dal file in cui risiede (memoria secondaria) in memoria centrale ed essere quindi eseguito
Come?
Usando il caricatore o loader
Cygwin Cygwin
./primo.exe
61
Esempio completo Esempio completo
#include<stdio.h>
main() {
print("Ciao, mondo.\n");
}
Errori riconosciuti dal compilatore Errori riconosciuti dal compilatore
error1.c
Qual è l’errore
63
Errori riconosciuti dal compilatore Errori riconosciuti dal compilatore
#include<stdio.h>
main() {
print("Ciao, mondo.\n");
}
error1.c
#include<stdio.h>
main() {
printf("Ciao, mondo.\n") }
Errori riconosciuti dal compilatore Errori riconosciuti dal compilatore
error2.c
Qual è l’errore
65
#include<stdio.h>
main() {
printf("Ciao, mondo.\n") }
Errori riconosciuti dal compilatore Errori riconosciuti dal compilatore
error2.c
manca ;
Errori riconosciuti dal compilatore Errori riconosciuti dal compilatore
#include<stdio.h>
Main() {
printf("Ciao, mondo.\n");
}
error3.c
67