Programmazione Introduzione. Tipi numerici.

Documenti analoghi
Programmazione Caratteri, stringhe, tipo unit ed ennuple

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Lezione 6 Introduzione al C++ Mauro Piccolo

Introduzione alla programmazione in C

Introduzione alla programmazione in C

Primi passi col linguaggio C

Salvatore Cuomo Prolusione

Linguaggi di programmazione

Sistemi di numerazione

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Il Modello di von Neumann (2) Prevede 3 entità logiche:

C O P Y R I G H T ( C ) W W W. F O N D A M E N T I. I N F O

Basi della programmazione in Java. Anteprima. Uso delle variabili. Il concetto di variabile Uso delle variabili. Input da tastiera I tipi Esercizi

Problemi, algoritmi, calcolatore

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Il concetto di calcolatore e di algoritmo

Il computer. Il case e l'unità di elaborazione. Il computer, una macchina aggiornabile.

Tipi di dato primitivi

Struttura del calcolatore

Il potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO

Caratteristiche di un linguaggio ad alto livello

Informatica 3. Informatica 3. Lezione 1- Modulo 1. LEZIONE 1: Introduzione. Concetti di linguaggi di programmazione. Introduzione

Cosa si intende con stato

Laboratorio di Informatica Ingegneria Clinica Lezione 9/11/2011. Prof. Raffaele Nicolussi

Il calcolatore. Architettura di un calcolatore (Hardware)

ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06

LINGUAGGI DI PROGRAMMAZIONE!

Introduzione agli Algoritmi

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

La principale modalità di calcolo è l applicazione di funzioni

Introduzione alla programmazione in linguaggio C

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Fondamenti di Programmazione

Appunti del corso di Informatica 1 (IN110 Fondamenti) 5 Rappresentazione delle informazioni

Linguaggi di alto livello, compilatori e interpreti

Linguaggi di Programmazione

Elementi di programmazione

Concetti Introduttivi. Il Computer

Linguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Costanti e Variabili

1: Linguaggi di Programmazione

Introduzione a C# Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Programmazione Ricorsione in coda

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Programmazione Ricorsione

Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo

Reporting Aziendale e Sistemi Informativi

Linguaggi di programmazione. Paradigmi di programmazione

Programmare in C. Maurizio Palesi Salvatore Serrano. Valori. Operazioni. Un insieme di valori del tipo. Per operare su tali valori Tipi

Unità aritmetica e logica

Linguaggio C. Tipi predefiniti. Università degli Studi di Brescia. Prof. Massimiliano Giacomin. Prof. M. Giacomin

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Informatica Generale Andrea Corradini I linguaggi di programmazione

Introduzione alla Programmazione. Giselda De Vita

Tipi di dato, Alessandra Giordani Lunedì 7 maggio 2011

Programmazione in Python. Moreno Marzolla

Introduzione alla programmazione. Walter Didimo

Unità di apprendimento 6. Il software: dal linguaggio alla applicazione

Rappresentazione dell informazione. Argomenti trattati: Codifica: Teoria generale. Proprietà di una codifica:

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Linguaggi, Traduttori e le Basi della Programmazione

Fondamenti di Informatica T-1. Introduzione al linguaggio Java Input/output, variabili, tipi

Espressioni e Comandi

Linguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl

Programmazione 2. Introduzione al corso

Programmazione C Massimo Callisto De Donato

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Dal problema a un programma comprensibile dal calcolatore. Il Progetto degli Algoritmi. Dall analisi del problema all esecuzione

Introduzione alla programmazione

Introduzione alla Programmazione Funzionale

ELABORAZIONE DELLE INFORMAZIONI (ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE)

Rappresentazione dell informazione. Argomenti trattati: Codifica: Teoria generale. Proprietà di una codifica:

Introduzione alla programmazione strutturata

Il linguaggio di programmazione Python

Rappresentazione dei dati in memoria

Programmazione Funzionale

Macchine Astratte. Luca Abeni. February 22, 2017

Argomenti trattati: Rappresentazione dell informazione. Proprietà di una codifica: Codifica: Teoria generale

Progettazione Curricolare di MATEMATICA. Dalla Progettazione Curricolare alla Progettazione per Competenze. SCUOLA SECONDARIA di PRIMO GRADO

PROGRAMMAZIONE DISCIPLINARE

Fondamenti di Informatica Il linguaggio C

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Laurea triennale - Comunicazione&DAMS - UNICAL. Dr. Annamaria Bria 1

I.4 Rappresentazione dell informazione

PROGETTAZIONE DISCIPLINARE DI DIPARTIMENTO

Corso di Laurea in INFORMATICA

Introduzione al Calcolo Scientifico

Dalla prima lezione. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 7 VARIABILI E COSTANTI 28/02/2016. Concetto di algoritmo

La codifica. dell informazione

Corso di Fondamenti di Informatica Linguaggi di Programmazione

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

Lez. 8 La Programmazione. Prof. Pasquale De Michele (Gruppo 2) e Raffaele Farina (Gruppo 1) 1

Componenti principali

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Introduzione al funzionamento di un calcolatore elettronico

CURRICOLO DI ISTITUTO

Transcript:

Programmazione Introduzione. Tipi numerici. Samuel Rota Bulò DAIS Università Ca Foscari di Venezia

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

Il corso Docente : Samuel Rota Bulò (srotabul@dsi.unive.it) Ricevimento : da concordare via email Homepage : www.dsi.unive.it/ srotabul/programming.html

Testi di riferimento M. Hailperin, B. Kaiser, K. Knight. Concrete Abstractions. (http://gustavus.edu/+max/concrete-abstractionspdfs/index.html) J. Hickey. Introduction to Objective Caml. (http://files.metaprl.org/doc/ocaml-book.pdf) Emmanuel Chailloux, Pascal Manoury and Bruno Pagano. Developing Applications With Objective CaML. (http://caml.inria.fr/pub/docs/oreilly-book/ocaml-orabook.pdf)

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

You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain when you can program. Alan J. Perlis, Epigrams in Programming

A good programmer is someone who looks both ways before crossing a one-way street. Doug Linder, systems administrator

When someone says - I want a programming language in which I need only say what I wish done -, give him a lollipop. Alan J. Perlis, Epigrams in Programming

The only way to learn a new programming language is by writing programs in it. B. Kernighan & D. Ritchie

Cosa significa programmare? Programmare significa estendere le capacità di una macchina con nuove funzionalità finalizzate a risolvere nuovi problemi. Il compito del programmatore è insegnare alla macchina il procedimento attraverso il quale un determinato problema può essere risolto. Il linguaggio con cui il programmatore comunica questo procedimento alla macchina è detto linguaggio di programmazione.

Problem-solving Un bravo programmatore deve essere in grado di: 1. analizzare un problema (generalmente espresso in linguaggio naturale); 2. esprimerlo in modo astratto e formale (magari, aiutandosi con esempi); 3. formalizzare un procedimento risolutivo in un linguaggio preciso (algoritmo); 4. verificare che il procedimento sia corretto ed eventualmente rivisitarlo; 5. fare attenzione ai dettagli con atteggiamento auto-critico.

Insegnante Programmatore Insegnante Programmatore Studente Macchina Linguaggio di programmazione Linguaggio naturale L insegnante insegna allo studente degli algoritmi espressi in linguaggio naturale affinchè quest ultimo possa risolva problemi. Un programmatore in genere ha a che fare con macchine molto più stupide!

Macchina alla von Neumann Le macchine con cui abbiamo (comunemente) a che fare presentano un architettura alla von Neumann. Memory Control Unit Arithmetic Logic Unit Accumulator Input Output

Programmazione imperativa Paradigma di programmazione in cui la computazione è descritta mediante comandi che modificano lo stato del programma. Lo stato viene tipicamente modificato con comandi di assegnamento del tipo v = E o v := E. I comandi sono scritti sequenzialmente, separati tra di loro. È possibile esprimere condizioni, ripetizioni o organizzare il codice in procedure o funzioni. È il paradigma più diffuso: C, C++, Java, Pascal e derivati, Basic e derivati,... Caratteristiche strettamente legate all architettura di von Neumann.

Paradigma funzionale Radicalmente diverso dal paradigma imperativo. Il paradigma è slegato dalla macchina di von Neumann Paradigma di programmazione in cui la computazione è descritta mediante valutazioni di funzioni. Il programma è un espressione e l esecuzione del programma è la valutazione di questa espressione. In senso puro, un linguaggio funzionale non ha variabili e non ha stato. Non ci sono assegnamenti. Non c è sequenzialità dei comandi. Le funzioni sono alla base di tutto. Possono essere interpretate come valori, e possono essere argomento o valore di ritorno di altre funzioni. Al posto di istruzioni di ciclo vi è la ricorsione di funzioni.

Programma in astratto Siano σ 0 e σ n stato iniziale e finale di un programma Programma in un linguaggio imperativo Descrive una sequenza di comandi ci, i = 0,, n 1 tale per cui c σ 0 c 0 1 c σ1 2 c n 1 σ2 σn. Programma in un linguaggio funzionale Descrive una funzione f che dato l argomento σ 0 ritorna σ n σ n = f (σ 0 ).

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)

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

Il linguaggio OCaML Linguaggio funzionale (non puro) Dialetto di ML (Meta-Language) Progetto Open Source dell INRIA (Istituto nazionale francese di ricerca in informatica) interprete/compilatore reperibile all indirizzo http://caml.inria.fr/ disponibile per Windows, Linux, Unix e MacOSX.

Alcune caratteristiche di ML Linguaggio funzionale: funzioni sono gli oggetti principali del linguaggio. Fortemente tipato: il tipo di ogni variabile ed espressione è determinato al momento della compilazione. Inferenza di tipo: i tipi delle espressioni vengono inferite. Raramente il programmatore assegna tipo direttamente. Polimorfismo: si possono scrivere funzioni che sono indipendenti dai tipi degli argomenti. Semantica formale: hanno interpretazione matematica.

Perchè OCaML? Didatticamente altri linguaggi funzionali sarebbero preferibili ad OCaML, come per es. Scheme. Infatti, OCaML non è un linguaggio funzionale puro, ma è prevalentemente funzionale. Utilizzato nel mondo del lavoro, ed è molto compatibile con F# (linguaggio della famiglia.net di Microsoft). Open source

L interprete OCaML Avviamo l interprete invocando ocaml Objective Caml version 3.10.2 # L interprete rimane in attesa di espressioni da valutare. Le espressioni devono terminare con ;; per essere valutate. Per uscire digitare # exit 0;;

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

I numeri interi Il programma più semplice consiste in un numero: # 1;; - : int = 1 L interprete valuta l espressione ritornandone il valore 1 e il tipo int. Il tipo int rappresenta un sottoinsieme dei numeri interi Z. # 100000000000000000000;; Integer literal exceeds the range of representable integers of type int Il tipo int in OCaML ha una rappresentazione a 32/64 bit a seconda dell architettura.

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

Eccezioni Alcune espressioni possono generare degli errori controllabili chiamate eccezioni. Verranno approfondite più avanti. # 1 / 0;; (* Eccezione! *) Exception: Division by zero.

Forme alternative per i numeri interi Accanto alla forma decimale, possiamo esprimere un intero in forma ottale... # 0o17;; (* Forma ottale *) - : int = 15... esadecimale... # 0x1F;; (* Forma esadecimale *) - : int = 31... e binaria. # 0b11110;; (* Forma binaria *) - : int = 30

I numeri reali Il tipo float rappresenta un sottoinsieme dei numeri reali R estesi 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

Tipizzazione forte di ML Ogni espressione deve avere un tipo. Se non è possibile determinare il tipo di un espressione questa genera 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

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.

Aritmetica floating-point L aritmetica dei floating-point è estesa tenendo conto dei simboli di infinito e Nan. Alcuni esempi sono: # -1. /. 0.;; (* -Infinito *) - : float = neg infinity # 0. /. 0.;; (* Indefinito *) - : float = nan # 1. /. infinity;; (* Zero *) - : float = 0.

Attenzione agli errori di tipo! # 1.1 +. 2;; (* Errore di tipo! *) ^ This expression has type int but is here used with type float

Una calcolatrice poco tascabile! Per ora abbiamo solo visto che possiamo fare semplici operazioni! Se scriviamo espressioni più complicate le operazioni rispettano l ordine di precedenza standard. 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