Fondamenti di Informatica e
Programmazione
Elementi di Informatica e Progrmmazione
prof. Massimiliano Redolfi
[email protected]
2013/2014
Prima di iniziare…
L’approccio che adotteremo è di tipo incrementale.
Non preoccupatevi se qualcosa non vi è immediatamente chiaro nei
minimi dettagli … alcuni argomenti verranno introdotti prima ad un
livello d’astrazione alto e successivamente approfonditi.
Gli esempi sono fondamentali, analizzateli con attenzione anche il
semplice “hello world” contiene molte informazioni.
NOTA BENE
Le dispense NON sostiuiscono i libri di testo e NON sostiuiscono gli
appunti delle lezioni sono fornite solo quale traccia e materiale
didattico addizionale.
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
2
All'inizio era B...
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
3
… un po’ di storia
Lo scenario:
• anni: 1970
• personal computer: inesistenti!!
• computer? si mainframe e mini! pdp7 / pdp11
pdp11: sistema Unix lento e macchinoso, si
programma in ASSEMBLER
Serve qualcosa di meglio…
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
4
Kernighan e Ritchie creano il C
Serviva qualcosa di efficiente e sufficientemente
generico da permettere la scrittura di svariati tipi di
programmi: dal nucleo di un sistema operativo, alle
librerie di sistema agli applicativi
Serviva efficienza (basso livello) ma anche flessibilità
e leggibilità (alto livello).
Nasce così il C che poggia le proprie origini su
linguaggi precedenti in particolare il BCPL ed il B e
che a distanza di oltre 30 anni è più che mai vivo!
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
5
Perché imparare il linguaggio C?
• il C è un linguaggio di medio(/basso) livello
estremamente efficiente e facilmente leggibile
• il numero di parole chiave è contenuto ed il
linguaggio è omogeneo, quindi è facile da imparare
e ricordare
• un programma scritto in C può essere compilato su
qualsiasi piattaforma: dai mainframe ai sistemi
embedded ai DSP, basta avere un compilatore … o
scriverne uno
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
6
Perché imparare il linguaggio C?
• in C è scritta buona parte dei sistemi operativi (da
Unix a Linux a Windows) … imparando il C si impara
a leggere un sistema operativo (capirlo è più
complesso)
• la sintassi di molti linguaggi di programmazione ad
oggetti quali C++, C# e persino Java deriva dalla
sintassi C
• perché se dopo 30 anni parliamo ancora di C e non
di Z un motivo ci sarà!
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
7
Pronti … via!
Ora che la storia è chiara ed abbiamo validi motivi per
imparare il C proviamo a scrivere una semplice
programma (applicazione?) che ci saluta…
Vogliamo un programma C che scriva sullo schermo la
frase “Ciao!”
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
8
Programma Ciao
Ma com’è scritto un programma C?
Immaginiamolo come un file di testo che contiene una
sequenza di istruzioni strutturate composte da
parole chiave, operandi, operatori e funzioni che
istruiscono il sistema, il PC, su cosa fare (…
chiariremo in seguito cosa significano in dettaglio i
vari termini)
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
9
Programma Ciao
Proviamo a scrivere le istruzioni in italiano (meglio in
uno pseudo-linguaggio).
Il programma Ciao dovrebbe essere una cosa del tipo:
INIZIO PROGRAMMA
SCRIVI “Ciao!”
FINE PROGRAMMA
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
10
Programma Ciao
INIZIO PROGRAMMA
SCRIVI “Ciao!”
FINE PROGRAMMA
E’ infatti necessario dire al sistema (quale sistema?)
qual è il punto di inizio del programma ed
altrettanto utile è specificare il punto di fine del
programma stesso.
E’ poi ovvio che tra l’inizio e la fine del programma
dovremo pur far qualcosa…
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
11
Programma Ciao
In C si scrive:
1.
2.
3.
4.
5.
6.
#include <stdio.h>
int main(void)
{
printf("Ciao!");
return 0;
}
le parentesi {}
definiscono l’ambito
di visibilità della
funzione main
direttiva di inclusione della
libreria standard per l’Input/
Output
La definizione della funzione
main: ogni programma C ne
deve contenere una, l’esecuzione
del programma inizia da main
La chiamata ad una funzione per
scrivere sullo schermo una frase
meglio una stringa
return: una parola chiave che fa
terminare la funzione e restituire il
valore riportato come argomento (in
questo caso 0 ! tutto ok)
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
12
Programma Ciao
Il semplice “Ciao!” racchiude un’infinità di informazioni
che ci aiutano a capire il linguaggio C…
Procediamo per passi ed analizziamo il programma
una istruzione dopo l’altra ed iniziamo ad
addentrarci nel significato delle stesse …
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
13
Programma Ciao
#include <stdio.h>
Non è un’istruzione (notare che inizia con #) ma una
direttiva al pre-processore, una funzionalità che
permette di inserire in un file sorgente un altro file
sorgente.
Nel caso viene incluso nel file sorgente del programma
un file header standard “stdio.h” che contiene la
dichiarazione delle funzioni standard per la gestione
dell’input/output del sistema.
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
14
Programma Ciao
int main(void) {…}
Costituisce la dichiarazione della funzione main.
La funzione main è il punto di ingresso (entry point) di
ogni programma scritto in C.
In genere una funzione è dichiarata tramite la sintassi:
<tipo di dato ritornato> <nome funzione> (<parametri funzione>)
{ <sequenza istruzioni>}
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
15
Programma Ciao
int main(void) {…}
<tipo di dato ritornato> <nome funzione> (<parametri funzione>) { <sequenza istruzioni>}
<tipo di dato ritornato>
Nel nostro caso la funzione main restituisce un intero,
specificato tramite la parola chiave int
Il tipo di dato ritornato serve per indicare alle funzioni
che chiamano la funzione in esame cosa aspettarsi
come valore restituito (già … una funzione può
richiamarne un’altra).
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
16
Programma Ciao
int main(void) {…}
<tipo di dato ritornato> <nome funzione> (<parametri funzione>) { <sequenza istruzioni>}
<nome funzione>
Il nome assegnato alla funzione (main nell’esempio),
puo comprendere lettere, numeri e il carattere
“_” (underscore)
Deve iniziare con una lettera o un “_” (underscore)
Identifica univocamente una funzione ed è case
sensitive
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
17
Programma Ciao
int main(void) {…}
<tipo di dato ritornato> <nome funzione> (<parametri funzione>) { <sequenza istruzioni>}
<parametri>
nel nostro caso main non ha parametri, il che si indica
con la parola chiave void (nulla), vuol dire che non
la funzione non accetta dati in ingresso (vedremo
più avanti che main può essere dichiarata in modo
diverso)
Una funzione con parametri è, ad esempio, printf che
accetta come parametro la stringa “Ciao!”
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
18
Programma Ciao
int main(void) {…}
<tipo di dato ritornato> <nome funzione> (<parametri funzione>) { <sequenza istruzioni>}
{<sequenza istruzioni>}
Il corpo della funzione, la sequenza delle istruzioni che
ne stabiliscono il comportamento, le azioni, il
risultato, viene racchiuso tra parentesi graffe.
Le {} definiscono lo spazio di visibilità della funzione
(capiremo più avanti cosa vuol dire, iniziamo a
ricordare che le {} non sono solo decorative…)
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
19
Programma Ciao
printf("Ciao!");
Beh… ora abbiamo compreso che:
1. printf è il nome di una funzione
2. la funzione printf accetta come parametro la stringa
“Ciao!”
3. notiamo che l’istruzione finisce con ; Ogni istruzione
C si conclude con un punto-e-virgola
4. la funzione printf non restituisce valori!? Più che
altro in C si possono tranquillamente ignorare i
valori restituiti da una funzione
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
20
Programma Ciao
return 0;
La parola chiave return indica che il controllo del
processo può essere ritornato alla funzione
chiamante.
Essendo main la funzione in questione, return termina
il nostro programma e restituisce il controllo
sistema operativo (alla shell del sistema operativo)
Il valore restituito da return deve essere chiaramente
del tipo specificato nella definizione della funzione.
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
21
Programma Ciao
Con cosa lo scriviamo un programma C?
Il programma viene scritto in un file di testo, file
sorgente, che ha come estensione .c
Possiamo quindi scrivere il nostro programma C con
un qualsiasi editor di testo e salvarlo con il nome
“ciao.c”
A questo punto è necessario trasformare il file
sorgente in un programma eseguibile…
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
22
Compilatore e Linker
Il C è un linguaggio compilato. Questo significa che
per poter essere eseguito un programma C deve
essere prima trasformato in codice macchina.
La trasformazione C ! codice macchina (file oggetto)
avviene tramite un apposito programma
(compilatore).
Il compilatore trasforma le istruzioni ad ‘alto’ livello C
in istruzioni macchina proprie dell’hardware su cui
verrà eseguito il programma.
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
23
Compilatore e Linker
Una volta creato il file oggetto del sorgente è
necessario collegarlo alle librerie esterne (ad
esempio la libreria che definisce printf)
Il collegamento viene realizzato tramite un apposito
tool, il linker…
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
24
Dal file sorgente al programma eseguibile
File sorgente
.c
Compilatore
Librerie
Applicazioni/Tools utilizzati
per sviluppare
File oggetto
.o
Linker
Programma
Eseguibile
Il processo è un po’ più
complesso, scopriremo i
dettagli più avanti…
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
25
Tools per lo sviluppo
Quali tools utilizzare per lo sviluppo?
Oggi sono molto diffusi ambienti di sviluppo integrati
(IDE) che semplificano la scrittura, la generazione
ed il test di programmi scritti in C.
Tra gli ambienti IDE free:
- codelite (http://codelite.org)
- lcc-win32 (quello che utilizzeremo nei laboratori)
- Pelles C
- Anjuta (ottimo IDE per Linux)
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
26
Tools per lo sviluppo
Per soluzioni professionali si utilizzano ambienti di
sviluppo più complessi e costosi:
•
•
•
•
Eclipse
XCode
Microsoft Visual Studio
Borland C++Builder
prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014
27
Scarica

Fondamenti di Informatica e Programmazione Elementi di