Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1....

38
Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Unità 1 Funzioni Domenico Daniele Bloisi

Transcript of Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1....

Page 1: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Corso di Laboratorio di Informatica

Ingegneria Clinica – BCLR

Unità 1

Funzioni

Domenico Daniele Bloisi

Page 2: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Docente

Ing. Domenico Daniele Bloisi, PhD

Ricercatore

Dipartimento di Ingegneria Informatica, Automatica

e Gestionale “Antonio Ruberti”

Via Ariosto 25

(adiacente Piazza Dante,

Manzoni

Tram 3 fermata via Labicana)

email: [email protected]

home page: http://www.dis.uniroma1.it/~bloisi

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Pagina 2

Page 3: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Ricevimento

In aula, subito dopo le lezioni

Su appuntamento (tramite invio di una email)

presso:

Dipartimento di Ingegneria Informatica,

Automatica e Gestionale “Antonio Ruberti”,

via Ariosto 25 - II piano, stanza A209

Si invitano gli studenti a controllare regolarmente la

bacheca degli avvisi

http://www.dis.uniroma1.it/~bloisi/didattica/labinf1415.html#Avvisi

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Pagina 3

Page 4: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Orari

Lunedì 12.00 – 13.30

Aula 4, via del Castro Laurenziano 7A

Martedì 14.00 – 17.15

Aula 15, Laboratorio Didattico via Tiburtina 205

Mercoledì 12.00 – 13.30

Aula 4, via via del Castro Laurenziano 7A

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Pagina 4

Page 5: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Funzione

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Pagina 5

Page 6: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Funzioni

#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) );

}

Nell’esempio vengono invocate (chiamate) tre funzioni:

main funzione principale

printf funzione di I/O (stampa a video)

sqrt funzione matematica (square root)

Pagina 6Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 7: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Funzione main

Pagina 7Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 8: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Indentazione

L’indentazione è l’inserimento di una certa quantità di spazio vuoto all’inizio

di una riga di codice.

Ogni riga viene indentata di un certo numero di spazi che dipende dalla sua

posizione all’interno della struttura logica del programma

int main() {

printf("Questo programma C esegue dei calcoli ");

printf("usando funzioni matematiche predefinite...\n");

printf("la radice quadrata di 169: %f", sqrt(169) );

}

int main() {

printf("Questo programma C esegue dei calcoli ");

printf("usando funzioni matematiche predefinite...\n");

printf("la radice quadrata di 169: %f", sqrt(169) );

}

Pagina 8Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 9: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Pagina 9Pagina 9

int main () {

printf("non indentato");

return 0;

}

int main () {

printf("indentato");

return 0;

}

Indentazione – inclusione logica

L’istruzione printf è

logicamente inclusa nella funzione main

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 10: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Pagina 10

Definizione vs Invocazione

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 11: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Invocazione di funzione

Sintassi:

nomeFunzione ( parametri )

• nomeFunzione (...) è la funzione invocata

• parametri sono i dati passati alla funzione

Semantica:

Invoca una funzione, fornendo ad essa eventuali

parametri addizionali. L’invocazione di una funzione

comporta l’esecuzione dell’operazione associata e, in

alcuni casi, la restituzione di un valore.

Pagina 11Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 12: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Esempio di invocazione di una funzione

(1/2)

Esempio:

sqrt(169)

• sqrt(...) è la funzione che calcola la radice

quadrata di un numero• 169 è il parametro (o argomento) passato alla

funzione• La funzione sqrt restituisce un risultato (13) che

viene usato dall’istruzione che ha chiamato la

funzione (nell’esempio, il valore restituito viene

stampato a video).

Pagina 12Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 13: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Le principali funzioni e costanti matematiche sono definite nel file di sistema math.h, che può essere

incluso mediante la direttiva #include <math.h>

Esempio di invocazione di una funzione

(2/2)

In caso di mancata inclusione delle librerie necessarie,

il sistema potrà segnalare la mancata dichiarazione di

alcune funzioni usate:

error: ‘sqrt’ was not declared in this scope

Pagina 13Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 14: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Dichiarazione vs Definizione

di funzione

Per poter invocare correttamente una funzione, il C

deve riconoscere il tipo di ritorno e il tipo dei

parametri che la funzione si aspetta.

Una funzione deve essere prima dichiarata tramite il

suo prototipo e poi definita nelle sue funzionalità

Pagina 14Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 15: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Dichiarazione di funzione

L'importanza della dichiarazione è doppia:

- viene fatta per avere un codice sorgente più

strutturato e perciò facile da leggere ed

interpretare;

- permette al compilatore C di controllare la

sintassi delle chiamate di funzioni.

Pagina 15Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 16: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Prototipo di funzione

Per dichiarare un prototipo di funzione bisogna

stabilire la descrizione (tipo) del risultato, il nome

della funzione e la descrizione (tipo, numero e

posizione) dei suoi parametri.

Ad esempio:double sqrt(double x )

double pow(double b, double e )

double è un tipo di dati predefinito che

rappresenta valori reali

facoltativi

(ignorati dal

compilatore)

Pagina 16Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 17: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Parametri di una funzione

I parametri di una funzione sono i valori passati dal modulo

chiamante alla funzione per poter svolgere i calcoli.

Esempio: la funzione sqrt(double x) deve essere invocata passando

un parametro che costituisce il valore di cui si vuole calcolare la

radice quadrata.

In generale, i parametri passati come argomenti possono essere

espressioni complesse formate a loro volta da invocazioni di

altre funzioni.

Esempio:sqrt(pow(5,2)+pow(12,2))

permette di calcolare la radice quadrata di 52 + 122

Pagina 17Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 18: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Risultato di una funzione

Il risultato (valore di ritorno) calcolato da una

funzione viene restituito al blocco di codice che ha

chiamato la funzione stessa.

Esempio:La funzione sqrt(double x) invocata con il

parametro 169, restituisce il valore 13, che

corrisponde alla radice quadrata di 169.

Pagina 18Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 19: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Funzioni definite in math.h (1/3)

Pagina 19Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 20: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Funzioni definite in math.h (2/3)

Pagina 20Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 21: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Funzioni definite in math.h (3/3)

Pagina 21Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 22: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

La funzione printf

printf è una funzione C che visualizza (stampa a

video) una sequenza di dati formattati come specificato dall’argomento format

Fa parte della libreria stdio.h

int printf(const char *format, ... )

Restituisce, in caso di successo, il numero di

caratteri stampati, altrimenti un numero negativo

Pagina 22Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 23: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

La funzione printf

Pagina 23Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 24: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Argomenti (specifier) di printf

Alcuni specifier del formato possibili sono:%c per il singolo carattere

%d per numeri decimali

%o per numeri ottali

%x per numeri esadecimali

%u per unsigned int

%f per float o double

%s per stringhe

%e per formato scientifico

Tra % e la lettera si può inserire un segno meno che indica giustificazione

a sinistra, un numero intero che indica l'ampiezza del campo che può

essere seguito da un punto e da un altro intero che indica il numero di cifre decimali o il numero di caratteri per una stringa (Es. %.4f)

Pagina 24Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 25: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Esempio d’uso per printf

#include <stdio.h>

int main()

{

printf("%d^ volta con il C\n", 1);

printf("%.4f\n", 123.987654);

return 0;

}

Output:

1^ volta con il C

123.9877

Pagina 25Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 26: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Sono sequenze di caratteri, inizianti per \ che non

vengono visualizzate sullo schermo, ma producono

altri effetti (ad es. sulla formattazione)

\n newline, va a capo

\t tabulazione

\r posiziona il cursore all’inizio della riga corrente

\a emette un suono

\\ stampa il carattere \

\' stampa il carattere '

\" stampa il carattere “

Sequenze di escape

La lista completa

sul libro di testo

Pagina 26Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 27: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Pagina 27

Esempio sequenze di escape

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 28: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Esercizi

Esercizio 1.1

Scrivere, compilare ed eseguire i programmi fin qui

presentati.

Esercizio 1.2

Scrivere un programma C che calcoli il valore 826 e lo

stampi a video.

Esercizio 1.3

Scrivere un programma C che stampi a video il valore

limitandosi a mostrare le prime 3 cifre decimali.

Pagina 28

√ 2

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 29: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Soluzione Esercizio 1.2

Scrivere un programma C che calcoli il valore 826 e lo

stampi a video.

#include <stdio.h>

#include <math.h>

int main()

{

printf("%f\n", pow(82.0, 6.0));

return 0;

}

Output:304006671424.000000

Pagina 29Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

double pow(double b, double e)

Page 30: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Soluzione Esercizio 1.3

Scrivere un programma C che stampi a video il valore

limitandosi a mostrare le prime 3 cifre decimali.

#include <stdio.h>

#include <math.h>

int main()

{

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

return 0;

}

Output:1.414

Pagina 30

√ 2

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 31: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Problemi pratici - tastiera italiana

Come posso digitare la graffa aperta ( { ) con la tastiera

italiana?

Alt + 123 (per i fissi)

oppure

Alt Gr + Shift + è

oppure

Fn + Alt + 123 (per i portatili)

Come posso digitare la graffa chiusa ( } )?

Alt + 125 (per i fissi)

oppure

Alt Gr + Shift + +

oppure

Fn + Alt + 125 (per i portatili)

Pagina 31Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 32: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Problemi pratici - esecuzione

Tale comportamento avviene perché il programma termina

immediatamente dopo aver eseguito le istruzioni in esso contenute.

Per visualizzare l’output aggiungere come ultima istruzione (prima del

return nel main)

system("PAUSE");

NOTA: potrebbe essere necessario inserire la direttiva#include <stdlib.h>

poiché la funzione system è definita in stdlib.h

In alternativa è possibile eseguire il programma direttamente da prompt ,

eseguendo il file

<nomeEseguibile>.exe

creato da gcc in fase di compilazione

Se provo ad eseguire il .exe non vedo l’output perchè

la finestra appare e scompare immediatamente dopo.

Pagina 32Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 33: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Esempio system("PAUSE");

Pagina 33

#include <stdio.h>

#include <stdlib.h>

int main()

{

printf("%d^ volta con il C\n", 1);

printf("%.4f\n", 123.987654);

system("PAUSE");

return 0;

}

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 34: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Approfondimento

Things to Avoid in C/C++ -- system("pause")

http://www.gidnetwork.com/b-61.html

Pagina 34Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 35: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

E’ possibile annotare il testo del programma con

dei commenti.

Il C dispone di due tipi di commento:

• // denota l’inizio di un commento che si estende

solo fino alla fine della riga

• /* ... */ delimita un commento che può occupare

più righe.

I commenti non hanno alcun effetto sull’esecuzione del

programma: sono usati per rendere il programma più

leggibile.

Commenti

Pagina 35Pagina 35Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 36: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Un altro esempio (1/3)

Pagina 36

#include <stdio.h>

#include "points.h"

/* Il codice sorgente di un

programma può essere diviso su più

file, ma per poter creare un

eseguibile uno (ed uno solo) di

questi deve contenere la definizione

della funzione main() */

int main()

{

/* Dichiarazione di variabili

di tipo double */

double p1x, p1y, p2x, p2y;

/* Assegnazione dei valori */

p1x = 0.0; p1y = 0.0;

p2x = 3.0; p2y = 2.0;

/* Dichiarazione di dist e assegnazione

del valore attraverso la chiamata

alla funzione getEuclideanDist()*/

double dist =

getEuclideanDist(p1x, p1y, p2x, p2y);

/* Chiamata alla funzione printf(),

dichiarata nell'header stdio.h,

che stampa in output la stringa

passata come parametro */

printf("La distanza tra il punto");

printf("(%f,%f) e il punto (%f,%f))";

printf(" è %f\n",

p1x, p1y, p2x, p2y, dist);

/* Restituisce al chiamante il

valore 0 (es., il terminale o

prompt) da cui è stata invocata,

un valore uguale a 0 che significa

di solito terminazione corretta */

return 0;

}

File main.c

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 37: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Un altro esempio (2/3)

Pagina 37

/* Dichiarazione della funzione

getEuclideanDist() che

calcola e restituisce la distanza

euclidea nel piano tra

2 punti passati come parametro */

double getEuclideanDist(

double point1x, double point1y,

double point2x, double point2y );

File points.h

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1

Page 38: Presentazione di PowerPoint · √ 2 Laboratorio di Informatica 2014/2015 Funzioni Unità 1. Problemi pratici - tastiera italiana Come posso digitare la graffa aperta ( { ) con la

Un altro esempio (3/3)

Pagina 38

#include <math.h>

#include "points.h"

/* Definizione della funzione

getEuclideanDist() dichiarata

nell'header points.h */

double getEuclideanDist(

double point1x, double point1y,

double point2x, double point2y)

{

/* Dichiarazione della variabile

dist e assegnazione

del suo valore attraverso la

chiamata alla funzione sqrt(),

dichiarata in math.h. Viene

chiamata anche la funzione

pow(), dichiarata in math.h */

double dist = sqrt(

pow(point1x - point2x, 2.0) +

pow(point1y - point2y, 2.0));

/* Restituisce al chiamante della

funzione il valore contenuto

nella variabile dist. Qui la

funzione getEuclideanDist()

termina, eventuali istruzioni

presenti dopo la chiamata di return

non vengono eseguite */

return dist;

}

File points.c

Per compilare l'esempio:

gcc -o euc_dist main.c points.c -lm

Laboratorio di Informatica

2014/2015

Funzioni

Unità 1