Elementi di informatica Elementi di informatica
Programmare in C
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);
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;
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 */
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
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base;
int altezza;
int area;
base = 3;
altezza = 7;
area = base*altezza;
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
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.
?
Dichiarazioni di variabili Dichiarazioni di variabili
int base;
int altezza;
int area;
area altezza
memoria
base
Ogni linguaggio di programmazione richiede di
dichiarare in un programma quali variabili verranno usate dicendo il loro nome simbolico ed il loro tipo
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
/* Calcolo area rettangolo */
#include <stdio.h>
main() {
int base;
int altezza;
int area;
base = 3;
altezza = 7;
area = base*altezza;
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
Identificatori (
Identificatori ( cont.) cont .)
Validi Non validi
Nome1 1nome
cognome_nome Vero?
_num Num;pippo
Attenzione
… … 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);
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
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+1x 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)
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);
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
base 3
/* 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
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;
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
equivalenti
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
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");
}
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)
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
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, ");
#include <stdio.h>
main() {
printf("Ciao, mondo");
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.
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");
} Tremammecon
tre bimbi
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.”
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
Un esempio Un esempio
Scrivere “Ciao, mondo.”
#include <stdio.h>
main() {
printf("Ciao, mondo.\n");
}
Sviluppo di un programma Sviluppo di un programma
Esecuzione
#include <stdio.h>
main() {
printf("Ciao, mondo.\n");
}
Editing
Codice sorgente
………
011000100010010111100
………
Codice eseguibile
Compilazione + Collegamento
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
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 NotaNota
estensione del file deve essere .c
Quale editor scegliere?
Quale editor scegliere?
VI
Notepad Emacs
Source Edit
Notepad
Notepad
Notepad
Notepad (cont ( cont.) .)
Alt + 123: { Alt + 125: }
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
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
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
… … 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
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
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
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
#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
Errori
Errori non non riconosciuti dal compilatore riconosciuti dal compilatore
#include<stdio.h>
main() {
printf("Ciao, mnodo.\n");
}
error4.c
Conclusioni Conclusioni
Avete scritto ed eseguito il vostro primo programma.