Fondamenti di Informatica e Programmazione Elementi di...

14
Fondamenti di Informatica e Programmazione Elementi di Informatica e Progrmmazione prof. Massimiliano Redolfi [email protected] 2013/2014 prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 2 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.

Transcript of Fondamenti di Informatica e Programmazione Elementi di...

Page 1: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

Fondamenti di Informatica e Programmazione

Elementi di Informatica e Progrmmazione

prof. Massimiliano Redolfi

[email protected]

2013/2014

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 2

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 BENELe dispense NON sostiuiscono i libri di testo e NON sostiuiscono gli

appunti delle lezioni sono fornite solo quale traccia e materiale didattico addizionale.

Page 2: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 3

All'inizio era B...

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 4

… 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…

Page 3: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 5

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 6

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

Page 4: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 7

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 8

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!”

Page 5: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 9

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 10

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

Page 6: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 11

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 12

Programma Ciao

In C si scrive:

1. #include <stdio.h>2. int main(void)3. {4. printf("Ciao!");5. return 0;6. }

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)

le parentesi {} definiscono l’ambito

di visibilità della funzione main

Page 7: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 13

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 14

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.

Page 8: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 15

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 16

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).

Page 9: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

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>}

<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 18

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!”

Page 10: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 19

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 20

Programma Ciao

printf("Ciao!");

Beh… ora abbiamo compreso che:1. printf è il nome di una funzione2. 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-virgola4. la funzione printf non restituisce valori!? Più che

altro in C si possono tranquillamente ignorare i valori restituiti da una funzione

Page 11: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 21

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 22

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…

Page 12: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 23

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 24

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…

Page 13: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 25

Dal file sorgente al programma eseguibile

File sorgente.c

Librerie

Compilatore

File oggetto.o

Linker

Programma Eseguibile Il processo è un po’ più

complesso, scopriremo i dettagli più avanti…

Applicazioni/Tools utilizzati per sviluppare

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 26

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)

Page 14: Fondamenti di Informatica e Programmazione Elementi di ...apollo.ing.unibs.it/fip/wp-content/uploads/2013/10/ING-FIP-LZ-C011.pdf · prof. Massimiliano Redolfi – Fondamenti/Elementi

prof. Massimiliano Redolfi – Fondamenti/Elementi di Informatica e Programmazione 2013/2014 27

Tools per lo sviluppo

Per soluzioni professionali si utilizzano ambienti di sviluppo più complessi e costosi:

• Eclipse• XCode• Microsoft Visual Studio • Borland C++Builder