introduzione al c unità 1 -introduzione - …salza/fi-c/1-c-16-17.pdfsommario –unità 1:...

56
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Unità 1 - Introduzione D. Bloisi, S. Peluso, A. Pennisi, S. Salza

Upload: tranthuy

Post on 16-Feb-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Corso di Fondamenti di InformaticaIngegneria delle Comunicazioni – BCORIngegneria Elettronica – BELR

Introduzione al C

Unità 1 - Introduzione

D. Bloisi, S. Peluso, A. Pennisi, S. Salza

Page 2: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Obiettivi del corso (parte II)

• Concetti di algoritmo e programma

• Risolvere problemi in modo algoritmico

• Tradurre un algoritmo in programma

• Sviluppare programmi in linguaggio C

2016/2017Unità 1 - Introduzione Pagina 2

Page 3: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Sommario – Unità 1: Introduzione

• Linguaggi macchina• Linguaggi ad alto livello• Traduzione ed esecuzione dei programmi• Dal problema al programma• Procedure ed algoritmi• Paradigmi di programmazione• Il linguaggio C• Ambiente di sviluppo ed esecuzione dei programmi• Sviluppo di un primo programma C• Funzioni

Unità 1 - Introduzione Pagina 32016/2017

Page 4: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

L’architettura di Von Neumann

Unità 1 - Introduzione Pagina 4

L’hardware dei nostri calcolatori è tuttora basato sulla cosiddetta architettura di Von Neumann

2016/2017

Page 5: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

L’architettura di Von Neumann (2)

• La macchina esegue una sequenza di istruzioni• Le istruzioni vengono lette dalla memoria• Ciascuna istruzione esegue una specifica azione su dati

che si trovano in memoria• Ciascuna istruzione è una sequenza di bit che, in una

opportuna codifica, specificano:a. L’azione che deve essere effettuatab. Dove si trovano i dati su cui essa deve essere

effettuatac. Dove mettere il risultato

Unità 1 - Introduzione Pagina 52016/2017

Page 6: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Programma

• Un programma specifica una procedura sistematica, per risolvere un determinato problema

• Una procedura è una sequenza di passi elementari il cui esito porta alla soluzione del problema

• Un programma è una sequenza di istruzioni • Un programma viene scritto con riferimento ad una

determinata piattaforma di elaborazione, usando le istruzioni che essa può eseguire direttamente

• Un programma può essere eseguito più volte su diverse istanze del problema, cioè su dati diversi

Unità 1 - Introduzione Pagina 62016/2017

Page 7: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Esempio: somma di due numeri

• Problema: calcolare la somma di due numeri• Procedura:

1. Leggi il primo numero e mettilo in memoria all’indirizzo n2. Leggi il secondo numero e mettilo in memoria all’indirizzo m3. Carica nella ALU (Arithmetic Logic Unit) il contenuto dell’indirizzo n4. Sommagli il contenuto dell’indirizzo m5. Sposta il contenuto della ALU in memoria all’indirizzo k6. Stampa il contenuto dell’indirizzo k

• Programma: ad ogni passo della procedura corrisponde un’istruzione del programma

Ma è necessario che i passi siano a livello delle operazioni elementari che la macchina può eseguire direttamente

Unità 1 - Introduzione Pagina 72016/2017

Page 8: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Linguaggio macchina

• Programmare direttamente un sistema di elaborazione è possibile ma poco pratico:

− Le istruzioni effettuano operazioni molto semplici− Occorrono moltissime istruzioni anche per procedure

che risolvono problemi molto semplici− Le istruzioni codificate in binario sono difficili da

scrivere e da leggere • Chi programmava i calcolatori agli inizi degli anni ‘60

doveva fare così: non aveva scelta!• La produttività (tempo necessario a scrivere e mettere a

punto i programmi ) era bassissima

Unità 1 - Introduzione Pagina 82016/2017

Page 9: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Linguaggi di programmazione

• Soluzione del problema: definire una macchina virtuale (cioè che uno vorrebbe avere ma non ha) che sia molto più potente della macchina reale

• Alla macchina virtuale corrisponde un linguaggio di programmazione molto più espressivo e più leggibile:

− Istruzioni più potenti: effettuato operazioni più complesse

− Procedure più semplici: sono necessari meno passi− Programmi più compatti e leggibili: più facili da

sviluppare e da mettere a punto

Unità 1 - Introduzione Pagina 92016/2017

Page 10: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Traduzione dei programmi

• Traduzione dei programmi:− Si realizza un traduttore − Il traduttore è un programma esso stesso− Input: il programma scritto per la macchina virtuale− Output: il programma eseguibile dalla macchina reale

• Ma almeno il traduttore dovrà essere eseguibile sulla macchina reale!

• Vuol dire che (alla peggio) si scriverà il traduttore, una tantum, in linguaggio macchina

Unità 1 - Introduzione Pagina 10

Problema: visto che la macchina virtuale non esiste, allora chi esegue questi programmi?

2016/2017

Page 11: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Traduzione dei programmi (2)

Unità 1 - Introduzione Pagina 11

TRADUTTORE

INPUT OUTPUT

Programma Sorgente: scritto nel linguaggio della macchina virtuale

Programma Oggetto: scritto nel linguaggio della macchina reale

Eseguibile sulla macchina reale

2016/2017

Page 12: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Tipologie di linguaggi

• LINGUAGGI MACCHINA− Le istruzioni sono sequenze di bit− Linguaggi diversi per piattaforme diverse (Pentium, ARM, Sparc)Es. 01001010111000100100101011100010 (istruzione a 32 bit)

• LINGUAGGI ASSEMBLATIVI− Istruzioni binarie codificate in forma più leggibile− Corrispondenza uno a uno con le istruzioni macchinaEs. ADD alfa, beta; (istruzione per la somma di due interi)

• LINGUAGGI AD ALTO LIVELLO− Più evocativi e ‘simili’ al linguaggio naturaleEs. if (i>0) i=i+1; else printf("Errore");

Unità 1 - Introduzione Pagina 122016/2017

Page 13: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Portabilità dei programmi

• Programmi scritti in linguaggio macchina ed assemblativonon sono portabili per definizione

• Programmi scritti in linguaggi ad alto livello nascono per essere portabili:

− I linguaggi ad alto livello non sono legati ad una specifica piattaforma

− Per eseguirli su una certa piattaforma basta disporre del traduttore per quella piattaforma

Unità 1 - Introduzione Pagina 13

Un programma è portabile se può essere eseguito su una piattaforma diversa da quella per la quale è stato sviluppato

2016/2017

Page 14: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Sintassi e semantica

Unità 1 - Introduzione Pagina 14

• In un linguaggio distinguiamo due aspetti fondamentali

• SINTASSI− Insieme di regole che specificano come scrivere un

programma formalmente corretto− Ma, come in italiano, posso scrivere un testo

formalmente corretto, ma senza alcun significato ….• SEMANTICA

− Regole per attribuire un significato alle istruzioni ed alla loro composizione, cioè ai programmi

− Analogamente in italiano assegna un significato alle parole ed una logica ai costrutti

2016/2017

Page 15: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Dati e operazioni

Unità 1 - Introduzione Pagina 15

• Un linguaggio di programmazione deve consentire di descrivere due aspetti fondamentali del processo di elaborazione

• DATI− Quali sono e come sono organizzate le informazioni sulle

quali il programma opera− Deve consentire di rappresentare le informazioni nel

dominio di interesse: es. numeri, stringhe di caratteri ecc.• OPERAZIONI

− Manipolazioni delle informazioni rappresentate− Devono consentire di coprire le esigenze del dominio in

cui si vuole utilizzare il linguaggio

2016/2017

Page 16: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Dal problema al programma

Unità 1 - Introduzione Pagina 16

• Problema− La specifica del problema definisce univocamente quello

che voglio− Non mi dice come posso ottenerlo

• Procedura risolutiva− Descrive, verbalmente o con qualche formalismo, i passi

che devo effettuare per arrivare alla soluzione• Programma

− Sequenza di istruzioni che codifica la procedura risolutiva in un certo linguaggio

2016/2017

Page 17: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Algoritmo

Unità 1 - Introduzione Pagina 17

Procedura sistematica seguendo la quale arriviamo alla soluzione di un problema, ovvero insieme di passi che, eseguiti nell’ordine, permettono di calcolare i risultati a partire dalle informazioni che vengono date in ingresso.

Informazioni in ingresso

INPUT

Sequenzaordinata di passi

ALGORITMO

RisultatiOUTPUT

Un algoritmo è una formalizzazione della procedura risolutiva

2016/2017

Page 18: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Esempio: Massimo Comun Divisore

Unità 1 - Introduzione Pagina 18

• Problema− Calcolare il massimo comun divisore di due interi m e n, cioè il più

grande intero che sia divisore di entrambi− Specifica cosa voglio, ma non mi indica come fare per trovarlo

• Algoritmo− Poni MCD=1; sia m < n.− Ripeti per tutti gli interi 1< k £m, nell’ordine, il seguente passo− Se k è divisore sia di n che m allora MCD=k altrimenti continua− Al termine MCD ha il valore del massimo comun divisore di m e n.

• Programma− Codifica in un linguaggio di programmazione, ad esempio C, della procedura

di cui sopra

N.B. L’algoritmo proposto non è l’unico, e nemmeno il più efficiente..

2016/2017

Page 19: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Paradigmi di programmazione

Unità 1 - Introduzione Pagina 19

I linguaggi di programmazione si ispirano a diversi paradigmi, cioè a diverse filosofie secondo cui gli algoritmi sono codificati• Imperativo

− Enfasi sulle operazioni, intese come azioni e comandi e istruzioni che cambiano lo stato dell’elaborazione

− Gli oggetti sono funzionali all’elaborazione

• Funzionale− Enfasi sulle operazioni, intese come funzioni che calcolano risultati− Gli oggetti sono funzionali all’elaborazione

• Orientato agli oggetti− Enfasi sugli oggetti che complessivamente rappresentano il dominio di

interesse− Operazioni e funzioni sono definite con riferimento agli oggetti

2016/2017

Page 20: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Il linguaggio C

Unità 1 - Introduzione Pagina 20

• C è un linguaggio di programmazione ad alto livello che supporta i paradigmi imperativo e funzionale

• Nato agli inizi degli anni ‘70 con l’obiettivo precipuo di riscrivere il sistema operativo UNIX (ormai non più gestibile in linguaggio macchina)

• Gli autori Ken Thompson e Dennis Ritchie lo chiamarono Cperché era il terzo tentativo: il precedente si chiamava B ….

• Come linguaggio nativo di UNIX (il primo sistema operativo open source) si diffuse rapidamente nel mondo universitario, e di lì nelle nuove imprese che andavano nascendo

• E’ forse oggi il linguaggio di programmazione più diffuso• Subisce un lungo processo di standardizzazione che si

concretizza nello standard ISO/IEC 9899-1990

2016/2017

Page 21: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Perché studiamo il C ?

Unità 1 - Introduzione Pagina 21

• E’ molto vicino alla struttura del calcolatore e ne permette, quando voglio, l’accesso anche a basso livello

• Consente un eccellente controllo a basso livello:− Controllo diretto degli indirizzi− Gestione efficiente di stringhe

• Offre anche strutture di controllo ad alto livello, che consentono anche la codifica di algoritmi molto complessi

• Punto di partenza per altri linguaggi molto diffusi: C++ e Java• Permette di sviluppare programmi molto efficienti

Il trend attuale è di iniziare, l’apprendimento con un linguaggio imperativo (come il C), rimandando ad una fase successiva

l’apprendimento dei linguaggi orientati agli oggetti (C++ e Java)

2016/2017

Page 22: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

L’ambiente di sviluppo

Unità 1 - Introduzione Pagina 22

Cosa ci occorre per scrivere ed eseguire un programma C?• Carta e penna (?)

Ma ormai molti di noi scrivono direttamente al PC!• Un Editor di testo

− Permette di scrivere il programma e salvarlo come file− Può offrire altre funzioni (editor diretto dalla sintassi)

• Un Compilatore C− Traduttore da C a linguaggio macchina− Genera un programma direttamente eseguibile sul nostro PC− Offre anche funzioni accessorie, come la segnalazione di

errori sintattici (ma non di quelli semantici!)

2016/2017

Page 23: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

L’ambiente consigliato

Unità 1 - Introduzione Pagina 23

• Editor di testo: Notapad++ (Windows e Mac)− Editor guidato dalla sintassi (colorazione ecc.)− Oltre al C supporta molti altri formati− Direttamente scaricabile http://notepad-plus-plus.org/

• Compilatore: gcc− Disponibile su diverse piattaforme (Windows, Linux, Mac) − Istruzioni per l’installazione sul sito del corso

Si tratta di software open source, non ci sono oneri di licenza. Distribuzione libera,qualità eccellente, diffusione altissima

2016/2017

Page 24: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Il nostro primo programma C

Unità 1 - Introduzione Pagina 24

#include <stdio.h>

int main() {printf("Il mio primo programma C.");return 0;

}

• Per essere semplice è semplice!• Ma qualcuno vuole seriamente sostenere che è leggibile?• Certo, a prima vista, non è evidente quello che fa?• E poi, che stile esoterico: ma era proprio necessario?

2016/2017

Page 25: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Cosa significa?

Unità 1 - Introduzione Pagina 25

• Il programma è costituito da direttive e istruzioni• Le direttive sono ordini rivolti al compilatore • Alle istruzioni corrispondono azioni che si chiede di effettuare in

fase di esecuzione, e strutture che ne precisano l’ordine e le modalità di esecuzione

1. #include <stdio.h>−È una direttiva che chiede al compilatore di includere una serie di

definizioni relative alle operazioni predefinite di I/O 2. int main() {...}−È la definizione della funzione main che racchiude il corpo

principale del programma, contenuto tra i due simboli { e }−Ogni programma C deve contenere una e una sola funzione main

2016/2017

Page 26: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Cosa significa? (continua)

Unità 1 - Introduzione Pagina 26

3. printf("Il mio primo programma C.");−È un’istruzione che stampa su video la stringa racchiusa tra apici−Più precisamente printf è una funzione predefinita, di quelle

incluse a seguito della direttiva #include <stdio.h>4. return 0;− È un’istruzione che termina l’esecuzione della funzione main e

restituisce il valore 0 (per dire che tutto è andato bene)

• La cosa non vi è chiara? Niente paura: è tutto normale!• Non c’è, purtroppo, un iter del tutto lineare per iniziare a lavorare in C• L’alternativa (noiosa) è spiegare tutto prima di far succedere qualcosa• Occorre un po’ di pazienza: le cose si chiariranno presto.

2016/2017

Page 27: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Sviluppare ed eseguire il programma

Unità 1 - Introduzione Pagina 27

1. SCRITTURA− Si scrive il programma usando un editor− Il programma viene salvato sul computer in un file

2. COMPILAZIONE− Il file contenente il programma viene consegnato al

compilatore− Il compilatore, se non rileva errori sintattici, genera un file

eseguibile contenente la traduzione− Altrimenti segnala gli errori e termina

3. ESECUZIONE− Il file eseguibile viene mandato in esecuzione − Anche più volte, senza doverlo ricompilare

2016/2017

Page 28: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Scrittura del programma

Unità 1 - Introduzione Pagina 28

Per chiarire che si tratta di un programma C, salviamo con un nome di file primo.c dove:

− primo è il nome che vogliamo dare al nostro programma

− c è l’estensione di file che tradizionalmente indica i programmi C

• La scrittura di un programma può essere effettuata con qualsiasi programma che consenta la scrittura di un testoEs. Edit, Notepad, Vim, Notepad++, Emacs,...

• Attenzione però che il formato di salvataggio sia quello di testo non formattato (ad esempio un file docx non va bene!)

2016/2017

Page 29: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

In Notapad++

Unità 1 - Introduzione Pagina 292016/2017

Page 30: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Compilazine del programma

Unità 1 - Introduzione Pagina 30

• In Windows ’interazione con il compilatore gcc avviene dando il comando direttamente, cioè non tramite l’interfaccia grafica

• I comandi vengono passati nella finestra ‘command prompt’1. Cambiare la directory corrente con quella che contiene il

programma, nel mio caso:C:\Users\Utente\Desktop\ProgrammiC

2. Mandare in esecuzione il compilatore:gcc –o first primo.c

Manda in esecuzione gccNome da assegnare al file eseguibile

Nome del programma da compilare

Come risultato della compilazione viene creato, nella directory corrente, il file first.exe

2016/2017

Page 31: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Esecuzione del programma

Unità 1 - Introduzione Pagina 31

• Se non ci sono errori il compilatore genera un file eseguibile:− Viene salvato nella directory corrente, col nome che si è

specificato e l’estensione .exe− Nel nostro caso first.exe in C:\...\Desktop\ProgrammiC

• Per mandare il programma in esecuzione basta passare il nome del file eseguibile come comando nella command prompt

− Non è necessario specificare l’estensione− Nel caso in esempio: first o first.exe

• Il risultato di ciascuna esecuzione sarà la visualizzazione nella command prompt della stringa:Il mio primo programma C.

2016/2017

Page 32: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Compilazione ed esecuzione

Unità 1 - Introduzione Pagina 322016/2017

Page 33: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

E se ci sono errori?

Unità 1 - Introduzione Pagina 33

SI

ERRORI SINTATTICI

?COMPILAZIONE

SCRITTURA E

MODIFICA

ERRORI SEMANTICI

?ESECUZIONE

INIZIO

FINE

SI NO

NO

2016/2017

Page 34: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Errori

Unità 1 - Introduzione Pagina 34

Questo programma contiene diversi errori, di diversi tipi:#include <stdio.h>int main () {

printf("I miei primi errori in C...\n")Printf("...e non saranno gli ultm!!!\n");return 0;

}

Tipi di errori:• Sintattici: riguardano la correttezza formale• Semantici: riguardano la correttezza sostanziale

Manca il ;

C’è un errore di ortografia

2016/2017

Maiuscola al posto di minuscola

Page 35: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Errori sintattici

Unità 1 - Introduzione Pagina 35

• Legati alla violazione delle regole del linguaggio#include <stdio.h>int main () {

printf("I miei primi errori in C...\n")Printf("...e non saranno gli ultm!!!\n");return 0;

}• Questi errori sono individuati dal compilatore• Non sempre però le segnalazioni sono chiare:>gcc -o errori errori.cerrori.c: In function 'main':errori.c:18:4: error: expected ';' before 'Printf'>

Manca il ;

2016/2017

Maiuscola al posto di minuscola

Page 36: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Errori semantici

Unità 1 - Introduzione Pagina 36

• Il programma non fa quello che vorrei che facesse• P. es. nel caso di errori.c viene stampata una stringa

contenente errori di ortografia (non è quello che vorrei):>gcc -o errori errori.c>erroriI miei primi errori in C......e non saranno gli ultm!!!>

• Il compilatore non segnala questi errori (e non può farlo!)• Lui che può saperne di quello che vorrei stampare?

Gli errori semantici possono essere individuati solo eseguendo il programma e analizzando i risultati

2016/2017

Page 37: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Programma corretto

Unità 1 - Introduzione Pagina 37

#include <stdio.h>

int main () {printf("I miei primi errori in C...\n");printf("...e non saranno gli

ultimi!!!\n");return 0;

}

2016/2017

Page 38: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Funzioni

Unità 1 - Introduzione Pagina 38

• L’organizzazione dei programmi C e fortemente basata sul concetto di funzione

• Gestire la complessità di un programma decomponendolo in moduli:

− Approccio divide et impera− Definire funzioni, cioè moduli corrispondenti a parti della

procedura che svolgono compiti precisi− Costruire il programma utilizzando questi moduli

• Due tipi di funzioni:− Funzioni di libreria: già definite da altri e raccolte in libreria− Funzioni definite dal programmatore: la loro definizione è

parte del programma

2016/2017

Page 39: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Parametri e valore di una funzione

Unità 1 - Introduzione Pagina 39

• Le funzioni prevedono normalmente parametri sui quali si basa l’elaborazione effettuata dalla funzione

• Devono essere passati ogni volta che la funzione è invocata• I parametri permettono di usare una funzione per effettuare più

volte la stessa elaborazione su dati diversi• In C una funzione ha (quasi) sempre un valore, che viene

restituito come risultato del calcolo della funzione• Se la funzione non restituisce un valore di dice che il suo valore

è voidESEMPIO: sin(x)

• x è un valore reale che viene passato alla funzione come parametro• la funzione calcola un valore reale • in C sin è una funzione di libreria predefinita

2016/2017

Page 40: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Definizione e invocazione

Unità 1 - Introduzione Pagina 40

• Occorre distinguere chiaramente tra:• DEFINIZIONE DI UNA FUNZIONE

− Parte del programma in cui viene definito cosa la funzione fa− Non è esplicita per le funzioni di libreria− Una funzione deve essere dichiarata prima di essere usata

• INVOCAZIONE DI UNA FUNZIONE− Parte di un programma in cui viene richiesta l’esecuzione

della funzione− Sintassi: nomeFunzione(Parametri)− Semantica: la funzione esegue le operazioni specificate nella

sua definizione sulle informazioni passate come parametri

2016/2017

Page 41: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Esempio

Unità 1 - Introduzione Pagina 41

#include <stdio.h>#include <math.h>

int main() {printf("Questo programma C esegue dei calcoli ");printf("usando funzioni matematiche predefinite..\n");printf("la radice quadrata di 169: %f", sqrt(169) );

}• Viene invocata la funzione di libreria sqrt che calcola la radice

quadrata del numero che gli viene passato come parametro• La libreria math di cui fa parte sqrt è indicata nella direttiva al

compilatore• Nell’esempio sqrt(169)calcola la radice di 169• Il risultato è passato come valore e usato dalla printf• Anche printf è una funzione di libreria: per poterla usare devo

chiedere al compilatore di includere la libreria stdio

2016/2017

Page 42: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

La funzione main

Unità 1 - Introduzione Pagina 42

• Un programma C deve sempre contenere una funzione main• La funzione main ha valore void, cioè non restituisce valore• La definizione di altre funzioni segue quella della funzione main• L’esecuzione del programma consiste nell’esecuzione della

funzione main, la quale, eventualmente, invoca altre funzioni provocandone l’esecuzione

PROBLEMA− Il compilatore, per poter tradurre il programma, deve conoscere

le definizioni delle funzioni− Quando trova le invocazioni deve almeno conoscere: numero

e tipo dei parametri e tipo del valore della funzione− Ma le definizioni vengono dopo il main …..

2016/2017

Page 43: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Prototipi di funzione

Unità 1 - Introduzione Pagina 43

• Per risolvere il problema, in C prevede la dichiarazione dei prototipi di funzione

• Un prototipo di funzione è una dichiarazione sintetica che specifica:

− Il nome della funzione− Il tipo del risultato− Il numero ed il tipo dei parametri

• La dichiarazione dei prototipi precede la definizione della funzione main

ESEMPIO: double sqrt(double)• La funzione sqrt restituisce un valore reale in doppia precisione• Ha un parametro anch’esso reale in doppia precisione (tipo double)

2016/2017

Page 44: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Parametri

Unità 1 - Introduzione Pagina 44

• I parametri di una funzione sono i valori passati dal modulo chiamante alla funzione per poter svolgere i calcoli

• In generale, i parametri passati come argomenti possono essere espressioni complesse che possono contenere, a loro volta, invocazioni di altre funzioni

ESEMPIO• la funzione double sqrt(double)deve essere invocata passando

un valore di cui vogliamo calcolare la radice quadrata• la funzione double pow(double,double)calcola la potenza e i

parametri sono base ed esponente• La chiamata sqrt(pow(5,2)+pow(12,2))calcola la radice

quadrata di 52+122 e restituisce un valore reale in doppia precisione, nella fattispecie 13

2016/2017

Page 45: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Funzioni definite in math.h

Unità 1 - Introduzione Pagina 452016/2017

Page 46: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

La funzione printf

Unità 1 - Introduzione Pagina 46

• Visualizza (stampa) a video una sequenza di dati formattati• Fa parte della libreria stdio.h e ha la forma:

printf (stringa di controllo del formato, altri argomenti )• La stringa di controllo del formato descrive il formato dell’output • Gli altri argomenti specificano i dati che si intende visualizzare• Restituisce come valore il numero di caratteri visualizzati• La stringa di controllo del formato è composta da una serie di

specifiche di conversione che indicano:− Il tipo del dato che si vuole stampare− L’ampiezza del campo in cui deve essere stampato− La suddivisione all’interno del campo

• Altri caratteri nella stringa vengono stampati direttamente

2016/2017

Page 47: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Specifiche di conversione

Unità 1 - Introduzione Pagina 47

• Alcune specifiche di conversione di uso frequente sono:%c singolo carattere%d intero in rappresentazione decimale%o intero in rappresentazione ottale%x intero in rappresentazione esadecimale%u intero in rappresentazione decimale senza segno%f reale in notazione virgola fissa%s stringa%e reale in notazione scientifica

Tra % e la lettera si può inserire un segno meno che indica giustificazione a sinistra, un numero intero che dà l'ampiezza del campo e può essere seguito da un punto e da un altro intero che dà il numero di cifre o il numero di caratteri per una stringa.

2016/2017

Page 48: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Pagina 48

Esempio di printf#include <stdio.h>

int main(){

printf("%d^ volta con il C\n", 1);printf("%.4f\n", 123.987654);return 0;

}

• Stampa la stringa:1^ volta con il C123.9877

N.B. Il carattere speciale \n provoca l’andata a capo

Unità 1 - Introduzione 2016/2017

Page 49: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Pagina 49

Escape sequence

Unità 1 - Introduzione

Sono sequenze di caratteri, inizianti per \ che non sono visualizzati sullo schermo, ma producono altri effetti

\n newline, va a capo\t tabulazione\r posiziona il cursore all’inizio della riga corrente\a emette un suono\t tabulazione\\ stampa il carattere \\' stampa il carattere '\" stampa il carattere “

Lista completa sul libro (o su Wikipedia)

2016/2017

Page 50: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Pagina 50

Stampa di apici e virgolette …

Unità 1 - Introduzione

#include <stdio.h>

int main(){

printf("l\'apostrofo non e\' \"facile\"");printf(" da stampare\n");return 0;

}

Visualizzal'apostrofo non e' "facile" da stampare

Attenzione alle “smart quotes” introdotte da molti editor!Evitare il copia e incolla (di testi formattati)

2016/2017

Page 51: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Esercizi

Unità 1 - Introduzione Pagina 51

Esercizio 1.1 • Provare a scrivere, compilare ed eseguire tutti gli esempi visti

finora. Introdurre piccole variazioni su tema, ricompilare e controllare l’effetto.

Esercizio 1.2 • Scrivere un programma C che calcoli il valore 826 e lo visualizzi

su video, preceduto dalla frase 82 elevato alla sesta è .

Esercizio 1.3 • Scrivere un programma che calcoli la radice quadrata di 2, e

visualizzi il risultato con 3 cifre decimali.

2016/2017

Page 52: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Esercizio 1.2 (soluzione)

Unità 1 - Introduzione Pagina 52

Esercizio 1.2 – Scrivere un programma C che calcoli il valore 866

e lo visulaizzi su video, preceduto dalla frase 86 elevato alla sesta è .

#include <stdio.h>#include <math.h>

int main(){

printf("86 elevato alla sesta e\' ");printf("%f\n", pow(82.0, 6.0));return 0;

}

Output:86 elevato alla sesta e' 304006671424.000000

2016/2017

Page 53: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Esercizio 1.3 (soluzione)

Unità 1 - Introduzione Pagina 53

Esercizio 1.3 – Scrivere un programma che calcoli la radice quadrata di 2, e visualizzi il risultato con 3 cifre decimali.#include <stdio.h>#include <math.h>

int main(){

printf("%.3f\n", sqrt(2.0));return 0;

}

Output:1.414

2016/2017

Page 54: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Problemi pratici: tastiera italiana

Unità 1 - Introduzione Pagina 54

Come si scrive la graffa aperta ( { ) ?Alt + 123oppureAlt Gr + Shift + èoppureFn + Alt + 123 (per i portatili)

Come si scrive la graffa chiusa ( } ) ?Alt + 125oppureAlt Gr + Shift + +oppureFn + Alt + 125 (per i portatili)

2016/2017

Page 55: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Escape sequences in C

Unità 1 - Introduzione Pagina 552016/2017

Page 56: Introduzione al C Unità 1 -Introduzione - …salza/FI-C/1-C-16-17.pdfSommario –Unità 1: Introduzione •Linguaggi macchina •Linguaggi ad alto livello •Traduzione ed esecuzione

Riferimenti per il linguaggio e le librerie

Unità 1 - Introduzione Pagina 562016/2017

• Una buona documentazione on-line sulle librerie del C ( e non solo) si può trovare ad esempio sul sito:

http://code-reference.com/c• Altri indirizzi interessanti sono:

http://www.cplusplus.com/reference/http://en.cppreference.com/w/c

• E poi, cercare con Google ….