Programmazione Introduzione. Tipi numerici.srotabul/files/programmazione/lezione_001.pdfI...

Post on 08-Feb-2020

14 views 0 download

Transcript of Programmazione Introduzione. Tipi numerici.srotabul/files/programmazione/lezione_001.pdfI...

ProgrammazioneIntroduzione. Tipi numerici.

Samuel Rota Bulo

DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Outline

Informazioni generali

Introduzione alla programmazione

Il linguaggio OCaML

Numeri interi e reali

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Il corso

Docente : Samuel Rota Bulo (srotabul@dsi.unive.it)

Ricevimento : da concordare via email

Homepage : www.dsi.unive.it/∼srotabul/programming.html

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Testi di riferimento

I M. Hailperin, B. Kaiser, K. Knight.Concrete Abstractions.(http://gustavus.edu/+max/concrete-abstractions-pdfs/index.html)

I J. Hickey.Introduction to Objective Caml.(http://files.metaprl.org/doc/ocaml-book.pdf)

I Emmanuel Chailloux, Pascal Manoury and Bruno Pagano.Developing Applications With Objective CaML.(http://caml.inria.fr/pub/docs/oreilly-book/ocaml-ora-book.pdf)

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Outline

Informazioni generali

Introduzione alla programmazione

Il linguaggio OCaML

Numeri interi e reali

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

You think you know when you can learn, are moresure when you can write, even more when you can teach,but certain when you can program.

– Alan J. Perlis, “Epigrams in Programming”

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

A good programmer is someone who looks both waysbefore crossing a one-way street.

– Doug Linder, systems administrator

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

When someone says - I want a programming languagein which I need only say what I wish done -, give him alollipop.

– Alan J. Perlis, “Epigrams in Programming”

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

The only way to learn a new programming language isby writing programs in it.

– B. Kernighan & D. Ritchie

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Cosa significa programmare?

I Programmare significa estendere le capacita di una“macchina” con nuove funzionalita finalizzate a risolverenuovi problemi.

I Il compito del programmatore e “insegnare” alla macchina ilprocedimento attraverso il quale un determinato problema puoessere risolto .

I Il linguaggio con cui il programmatore comunica questoprocedimento alla “macchina” e detto linguaggio diprogrammazione.

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Problem-solving

I Un bravo programmatore deve essere in grado di:

1. analizzare un problema (generalmente espresso in linguaggionaturale);

2. esprimerlo in modo astratto e formale (magari, aiutandosi conesempi);

3. formalizzare un procedimento risolutivo in un linguaggiopreciso (algoritmo);

4. verificare che il procedimento sia corretto ed eventualmenterivisitarlo;

5. fare attenzione ai dettagli con atteggiamento auto-critico.

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Insegnante ≈ Programmatore

I Insegnante ≈ Programmatore

I Studente ≈ Macchina

I Linguaggio di programmazione ≈ Linguaggio naturale

I L’insegnante insegna allo studente degli “algoritmi” espressi inlinguaggio naturale affinche quest’ultimo possa risolvaproblemi.

Un programmatore in genere ha a che fare con macchine molto piu“stupide” !

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Macchina alla von Neumann

I Le macchine con cui abbiamo (comunemente) a che farepresentano un architettura alla von Neumann.

ArithmeticLogicUnit

ControlUnit

Memory

Input Output

Accumulator

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Programmazione imperativa

I Paradigma di programmazione in cui la computazione edescritta mediante comandi che modificano lo stato delprogramma.

I Lo stato viene tipicamente modificato con comandi diassegnamento del tipo v = E o v := E .

I I comandi sono scritti sequenzialmente, separati tra di loro.

I E possibile esprimere condizioni, ripetizioni o organizzare ilcodice in procedure o funzioni.

I E il paradigma piu diffuso: C, C++, Java, Pascal e derivati,Basic e derivati, . . .

I Caratteristiche strettamente legate all’architettura di vonNeumann.

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Paradigma funzionale

I Radicalmente diverso dal paradigma imperativo.I Il paradigma e slegato dalla macchina di von NeumannI Paradigma di programmazione in cui la computazione e

descritta mediante valutazioni di funzioni.I Il programma e un’espressione e l’esecuzione del programma e

la valutazione di questa espressione.I In senso puro, un linguaggio funzionale non ha variabili e non

ha stato.I Non ci sono assegnamenti. Non c’e sequenzialita dei comandi.I Le funzioni sono alla base di tutto. Possono essere

interpretate come valori, e possono essere argomento o valoredi ritorno di altre funzioni.

I Al posto di istruzioni di ciclo vi e la ricorsione di funzioni.

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Programma in astratto

Siano σ0 e σn stato iniziale e finale di un programmaI Programma in un linguaggio imperativo

I Descrive una sequenza di comandi ci , i = 0, · · · , n − 1 tale percui

σ0c0−→ σ1

c1−→ σ2c2−→ · · · cn−1−−→ σn .

I Programma in un linguaggio funzionaleI Descrive una funzione f che dato l’argomento σ0 ritorna σn

σn = f (σ0) .

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Un esempio concreto: calcolo del fattoriale

Fattoriale di n

n! = n · (n − 1) · · · 1 , 0! = 1

Imperativo

funzione FATTORIALE (n)

x <- 1

mentre n>0

x <- n*x

n <- n-1

ritorna x

Funzionale

funzione FATTORIALE (n)

ritorna se n=0

1

altrimenti

n * FATTORIALE(n-1)

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Outline

Informazioni generali

Introduzione alla programmazione

Il linguaggio OCaML

Numeri interi e reali

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Il linguaggio OCaML

I Linguaggio funzionale (non puro)

I Dialetto di ML (Meta-Language)

I Progetto Open Source dell’INRIA(Istituto nazionale francese di ricerca in informatica)

I interprete/compilatore reperibile all’indirizzohttp://caml.inria.fr/

I disponibile per Windows, Linux, Unix e MacOSX.

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Alcune caratteristiche di ML

I Linguaggio funzionale: funzioni sono gli oggetti principalidel linguaggio.

I Fortemente tipato: il tipo di ogni variabile ed espressione edeterminato al momento della compilazione.

I Inferenza di tipo: i tipi delle espressioni vengono inferite.Raramente il programmatore assegna tipo direttamente.

I Polimorfismo: si possono scrivere funzioni che sonoindipendenti dai tipi degli argomenti.

I Semantica formale: hanno interpretazione matematica.

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Perche OCaML?

I Didatticamente altri linguaggi funzionali sarebbero preferibiliad OCaML, come per es. Scheme.

I Infatti, OCaML non e un linguaggio funzionale puro, ma eprevalentemente funzionale.

I Utilizzato nel mondo del lavoro, ed e molto compatibile conF# (linguaggio della famiglia .NET di Microsoft).

I Open source

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

L’interprete OCaML

I Avviamo l’interprete invocando ocaml

Objective Caml version 3.10.2

#

I L’interprete rimane in attesa di espressioni da valutare.

I Le espressioni devono terminare con ;; per essere valutate.

I Per uscire digitare

# exit 0;;

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Outline

Informazioni generali

Introduzione alla programmazione

Il linguaggio OCaML

Numeri interi e reali

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

I numeri interi

I Il programma piu semplice consiste in un numero:

# 1;;

- : int = 1

I L’interprete valuta l’espressione ritornandone il valore 1 e iltipo int.

I Il tipo int rappresenta un sottoinsieme dei numeri interi Z.

# 100000000000000000000;;

Integer literal exceeds the range of representable

integers of type int

I Il tipo int in OCaML ha una rappresentazione a 32/64 bit aseconda dell’architettura.

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Alcune espressioni sugli interi

# - -2;; (* Negazione *)

- : int = 2

# 2 + 3;; (* Addizione *)

- : int = 5

# 2 - 3;; (* Sottrazione *)

- : int = -1

# 2 * 3;; (* Moltiplicazione *)

- : int = 6

# 7 / 3;; (* Divisione intera *)

- : int = 2

# 7 mod 3;; (* Modulo *)

- : int = 1

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Eccezioni

I Alcune espressioni possono generare degli errori “controllabili”chiamate eccezioni.

I Verranno approfondite piu avanti.

# 1 / 0;; (* Eccezione ! *)

Exception: Division by zero.

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Forme alternative per i numeri interi

I Accanto alla forma decimale, possiamo esprimere un intero informa ottale . . .

# 0o17;; (* Forma ottale *)

- : int = 15

I . . . esadecimale . . .

# 0x1F;; (* Forma esadecimale *)

- : int = 31

I . . . e binaria.

# 0b11110;; (* Forma binaria *)

- : int = 30

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

I numeri reali

I Il tipo float rappresenta un sottoinsieme dei numeri reali Restesi con i simboli ±∞ e Nan (Not a number).

# 1.2;;

- : float = 1.2

# -1.2e-10;; (* notazione scientifica *)

- : float = -1.2e-10

# -1.2E-10;;

- : float = -1.2E-10

# 1E400;; (* approssimato a +infinito *)

- : float = infinity

# -1E400;; (* approssimato a -infinito *)

- : float = neg_infinity

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Tipizzazione forte di ML

I Ogni espressione deve avere un tipo.

I Se non e possibile determinare il tipo di un’espressione questagenera un errore.

# 1.1 + 2;; (* Errore di tipo ! *)

^^^

This expression has type float but is here used

with type int

# 1.1 * 0;; (* Errore di tipo ! *)

^^^

This expression has type float but is here used

with type int

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Alcune espressioni sui reali

# 2.0 +. 3.0;; (* Addizione *)

- : float = 5.

# 2. -. 3.;; (* Sottrazione *)

- : float = -1.

# 2. *. 3.;; (* Moltiplicazione *)

- : float = 6.

# 7. /. 3.;; (* Divisione *)

- : float = 0.42857142857142854

# 2. ** 3.;; (* Potenza *)

- : float = 8.

# int of float 1.2;; (* Conversione float -> int *)

- : int = 1

# float of int 1;; (* Conversioni int -> float *)

- : float = 1.

# -.(-2. +. 3.);; (* Negazione *)

- : float = -1.

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Aritmetica floating-point

I L’aritmetica dei floating-point e estesa tenendo conto deisimboli di infinito e Nan.

I Alcuni esempi sono:

# -1. /. 0.;; (* -Infinito *)

- : float = neg infinity

# 0. /. 0.;; (* Indefinito *)

- : float = nan

# 1. /. infinity;; (* Zero *)

- : float = 0.

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Attenzione agli errori di tipo !

# 1.1 +. 2;; (* Errore di tipo ! *)

^

This expression has type int but is here used

with type float

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia

Informazioni generali Introduzione alla programmazione Il linguaggio OCaML Numeri interi e reali

Una calcolatrice poco tascabile !

I Per ora abbiamo solo visto che possiamo fare semplicioperazioni !

I Se scriviamo espressioni piu complicate le operazionirispettano l’ordine di precedenza standard.

I Possiamo forzare la precedenza mediante parentesi.

# 1 + 2 * 3;;

- : int = 7

# (1 + 2) * 3;;

- : int = 9

# 1 + int_of_float (2.*.3.**2.**2.);;

- : int = 163

Programmazione Introduzione. Tipi numerici. DAISUniversita Ca’ Foscari di Venezia