Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Corso di Laboratorio di Informatica
Ingegneria Clinica – BCLR
Unità 1
Funzioni
Domenico Daniele Bloisi
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
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
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
Funzione
Laboratorio di Informatica
2014/2015
Funzioni
Unità 1
Pagina 5
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
Funzione main
Pagina 7Laboratorio di Informatica
2014/2015
Funzioni
Unità 1
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
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
Pagina 10
Definizione vs Invocazione
Laboratorio di Informatica
2014/2015
Funzioni
Unità 1
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
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
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
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
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
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
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
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
Funzioni definite in math.h (1/3)
Pagina 19Laboratorio di Informatica
2014/2015
Funzioni
Unità 1
Funzioni definite in math.h (2/3)
Pagina 20Laboratorio di Informatica
2014/2015
Funzioni
Unità 1
Funzioni definite in math.h (3/3)
Pagina 21Laboratorio di Informatica
2014/2015
Funzioni
Unità 1
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
La funzione printf
Pagina 23Laboratorio di Informatica
2014/2015
Funzioni
Unità 1
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
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
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
Pagina 27
Esempio sequenze di escape
Laboratorio di Informatica
2014/2015
Funzioni
Unità 1
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
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)
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
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
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
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
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
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
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
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
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