GNU Linear Programming Kit

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "GNU Linear Programming Kit"

Transcript

1 GNU Linear Programming Kit Modeling Language GNU MathProg Versione 4.11 (Draft Edition, July 2006) (Traduzione in italiano, agosto 2007)

2 2 The GLPK package is part of the GNU Project released under the aegis of GNU. Copyright c 2000, 2001, 2002, 2003, 2004, 2005, 2006 Andrew Makhorin, Department for Applied Informatics, Moscow Aviation Institute, Moscow, Russia. All rights reserved. Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA , USA. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.

3 3 Indice 1 Introduzione Problema di programmazione lineare Oggetti di un modello Struttura della descrizione di un modello Codifica della descrizione di un modello Nomi simbolici Stringhe numeriche Stringhe alfabetiche Parole-chiave Delimitatori Commenti Espressioni Espressioni numeriche Espressioni simboliche Espressioni indicizzanti e indici dummy Espressioni di insiemi Espressioni logiche Espressioni lineari Asserzioni Asserzione di insieme Asserzione di parametro Asserzione di variabile Asserzione di vincoli (lineari) Asserzione della funzione obiettivo Asserzione di soluzione Asserzione di controllo (check) Asserzione di display Asserzione di printf Asserzione di for Definizione dei dati di un modello Codifica della sezione dati Blocco dati di insiemi Blocco dati di parametro A Uso del traduttore di MathProg con le API di GLPK 45 B Risoluzione di modelli con il solver glpsol 46 C Esempio di descrizione di modello 47 C.1 Descrizione di modello scritto in GNU MathProg C.2 Problema LP generato C.3 Soluzione ottima del problem LP generato

4 4 1 Introduzione GNU MathProg è un linguaggio di modeling che permette di descrivere modelli matematici di programmazione lineare 1. La descrizione di un modello scritto nel linguaggio GNU MathProg consiste in un insieme di asserzioni (statements) e di blocchi di dati definiti dall utente usando gli elementi del linguaggio descritto in questo documento. Un programma, chiamato traduttore di modello, analizza il modello descritto con il linguaggio GNU MathProg e lo traduce in strutture dati interne, le quali possono essere usate sia per generare un instanza di un problema di programmazione matematica, sia per ottenere una soluzione numerica del problema. Per ottenere una soluzione numerica si deve usare un altro programma chiamato solver (risolutore). 1.1 Problema di programmazione lineare In MathProg si considera la formulazione di programmazione lineare (LP, Linear Programming) seguente: minimize (maximize) Z = c 1 x m+1 + c 2 x m c n x m+n + c 0 (1) rispettando i vincoli lineari: x 1 = a 11 x m+1 + a 12 x m a 1n x m+n x 2 = a 21 x m+1 + a 22 x m a 2n x m+n (2) x m = a m1 x m+1 + a m2 x m a mn x m+n e i limite (bounds) sulle variabili: l 1 x 1 u 1 l 2 x 2 u 2... l m+n x m+n u m+n (3) dove: x 1,x 2,...,x m sono variabili ausiliarie; x m+1,x m+2,...,x m+n sono variabili strutturali; Z è la funzione obiettivo; c 1,c 2,...,c n sono i coefficienti della funzione obiettivo; c 0 è il termine costante della funzione obiettivo; a 11, a 12,..., a mn sono i coefficienti dei vincoli; l 1,l 2,...,l m+n sono i lower bounds delle variabili; u 1,u 2,...,u m+n sono i upper bounds delle variabili. I bounds delle variabili possono essere sia limitati che illimitati. Inoltre, i bounds di una variabile potrebbero essere uguali tra loro. Quindi, i seguenti tipi di variabili sono possibili: Bounds di una variabile < x k < + l k x k < + < x k u k l k x k u k l k = x k = u k Tipo di variabile Variabile libera e illimitata Variabile con lower bound Variabile con upper bound Variabile con doppio bound Variabile fissata 1 Il linguaggio GNU MathProg è un sottoinsieme del linguaggio AMPL.

5 5 I tipi di variabili mostrati sopra sono validi sia per le variabili strutturalli che le variabili ausiliarie. Oltre a problemi di programmazione lineare puri, MathProg permette di definire problemi di programmazione lineare intera (MIP, Mathematical Integer Programming), dove alcune (o tutte) tra le variabili strutturali sono vincolate ad assumere valori interi. 1.2 Oggetti di un modello In MathProg il modello è descritto in termini di insiemi, parametri, variabili, vincoli, e obiettivi, che sono chiamati gli oggetti di un modello. L utente introduce dei particolari oggetti del modello usando le asserzioni del linguaggio. Ogni oggetto di un modello ha associato un nome simbolico che lo identifica unicamente ed è usato come riferimento all oggetto stesso. Gli oggetti di un modello, compresi gli insiemi, possono essere vettori multidimensionali indicizzati da elementi di un insieme. Formalmente, il vettore n-dimensionali A è la funzione: A : Ξ, (4) dove S 1 S 2... S n è un sottoinsieme del prodotto Cartesiano degli insiemi indice, ed Ξ è un insieme degli elementi del vettore. In MathProg l insieme è chiamato dominio dei pedici (subscript domain). I suoi elementi sono n-tuple (i 1,i 2,...,i n ), dove i 1 S 1, i 2 S 2,..., i n S n. Se n = 0, il prodotto cartesiano (4) ha esattamente un elemento (la 0-tupla), cosi che si può pensare ad oggetti scalari come vettori 0-dimensionali che hanno un solo elemento. Il tipo di elementi di un vettore è determinato dal tipo del corrispondente oggetto di modello come segue: Oggetto di modello Set Parameter Variable Constraint Objective Elemento del vettore Membro dell insieme Numero o simbolo Variabile strutturale Vincolo Funzione obiettivo Per poter accedere ad un particolare membro di un oggetto, l oggetto stesso deve essere provvisto di un pedice. Per esempio, se a è un vettore di parametri a due dimensioni costruito sul prodotto Cartesiano I J, un riferimento al suo particolare membro può essere scritto come a[i,j], dove i I e j J sono gli indici. Gli oggetti scalari essendo a 0-dimensione non hanno bisogno di pedici. 1.3 Struttura della descrizione di un modello È spesso auspicabile descrivere un modello che può usare dati diversi per ogni istanza di problema che si può risolvere usando quel modello. Per questo motivo in MathProg la descrizione del modello consiste di due parti: la sezione di modello e la sezione dati. Sezione di modello è la parte principale di descrizione del modello che contiene la dichiarazione degli oggetti di modello ed è comune per tutti i problemi che corrispondono a quel modello matematico. Sezione dati è una parte opzionale della descrizione del modello che contiene dati specifici per una particolare istanza del problema descritto dal modello.

6 6 Le sezione di modello e di dati possono essere incluse nello stesso file oppure in due file separati. Di solito conviene avere due file separati in modo da poter definire più istanze di uno stesso modello matematico, riutilizzando la stessa sezione di modello.

7 7 2 Codifica della descrizione di un modello La descrizione di un modello è codificata in semplice formato testo usando solo alcuni caratteri ASCII. I caratteri che possono essere usati nella descrizione di un modello sono i seguenti: i caratteri dell alfabeto (inglese): A B... Z a b... z _ i caratteri numerici: i caratteri speciali:! " # & ( ) * +, -. / : ; < = > [ ] ^ { } i caratteri di spaziatura (white-spaces): SP HT CR NL VT FF All interno dei commenti si può usare qualsiasi carattere ASCII (a parte i caratteri di controllo). I caratteri di spaziatura vengono ignorati, ma possono essere usati liberamente per migliorare la leggibilità della descrizione di un modello. Sintatticamente la descrizione di un modello è una sequenza di unità lessicali appartenenti ad una delle seguenti categorie: nomi simbolici; stringhe numeriche; stringhe alfabetiche; parole chiavi; delimitatori; commenti. Le unità lessicali del linguaggio sono descritte nei prossimi paragrafi. 2.1 Nomi simbolici I nomi simbolici consistono di stringhe di caratteri alfabetici e numerici, in cui il primo carattere deve essere obbligatoriamente alfabetico. Tutti i nomi simbolici sono diversi e case sensitive. alpha123 This_is_a_name _P123_abc_321 I nomi simbolici sono usati per identificare gli oggetti di modello (insiemi, parametri, variabili, vincoli, funzione obiettivo) e gli indici dummy. Tutti i nomi simbolici (eccetto gli indici dummy) devono essere unici, cioè la descrizione di un modello non deve avere oggetti con lo stesso nome. I nomi simbolici e gli indici dummy devono essere unici all interno della loro visibilità, ossia dove rimangono validi. 2.2 Stringhe numeriche Una stringa numerica ha la forma xxesyy, dove xx è un numero reale con eventualmente il punto per i decimali, s è il segno + oppure -, yy è un intero per l esponente decimale. La lettera E non è case sensitive e alternativamente può essere usata la e E+5.78

8 e-7 Le stringhe numeriche rappresentano quantità numeriche, ed hanno il loro ovvio significato matematico. 2.3 Stringhe alfabetiche Una stringa alfabetica è una sequenza di caratteri racchiusa tra virgolette singole o doppie. L uso di virgolette singole o doppie è equivalente. Se un virgoletta singola è parte di una stringa alfabetica racchiusa da virgolette singole, allora deve essere inserita due volte. Analogamente, se una virgoletta doppia è parte di una stringa alfabetica racchiusa da virgolette doppie, allora deve essere inserita due volte. This is a string "This is another string" = 3 That s all "She said: ""No""" Le stringhe alfabetiche sono usate per rappresentare quantità simboliche. 2.4 Parole-chiave Una parola-chiave è una sequenza di caratteri alfabetici ed eventualmente di qualche carattere speciale. Tutte le parole chiavi ricadono in due categorie: parole chiavi riservate, che non possono essere usate come nomi simbolici, e parole chiavi non riservate, le quali se riconosciute dal contesto possono essere usate come nomi simbolici. Le parole chiavi sono: and diff if less or union by div in mod symdiff within cross else inter not then Le parole chiavi non riservate sono descritte nelle sezioni seguenti. Tutte la parole chiavi hanno un significato ben preciso, che sarà spiegato quando verrano discussi i relativi costrutti sintattici, dove le parole chiavi sono usate. 2.5 Delimitatori Un delimitatore può essere sia un singolo carattere speciale, che una sequenza di due caratteri speciali: + ^ ==! : ) - & >= && ; [ * < > := ] / <= <>... { ** =!=, ( } Se un delimitatore consiste di due caratteri, non ci può essere nessuno spazio tra i due caratteri. Tutti i delimitatori hanno un significato preciso, che sarà spiegato quando verrano discussi i costrutti sintattici in cui sono usati.

9 9 2.6 Commenti Al fine di documentare la descrizione codificata di un modello matematico si possono inserire dei commenti in due possibili forme. La prima forma è quella di un commento su di una singola linea, che comincia con il carattere # e continua sino alla fine della linea. La seconda forma è una sequenza di commenti, la quale è una sequenza qualsiasi di caratteri racchiusa tra /* e */. set s{1..10}; # This is a comment /* This is another comment */ I commenti sono ignorati dal traduttore di modello e possono apparire in qualsiasi punto della descrizione di un modello, in cui sono consentiti i caratteri di spaziatura.

10 10 3 Espressioni Un espressione è una regola per calcolare un valore. Le espressioni nella descrizione di un modello sono usate come componenti di alcune asserzioni. Nel caso più generale le espressioni consistono di operandi e operatori. Le espressioni sono classificate in base al loro valore di ritorno nel modo seguente: espressioni numeriche; espressioni simboliche; espressioni di indicizzazione; espressioni di insiemi; espressioni logiche; espressioni lineari. 3.1 Espressioni numeriche Un espressione numerica è una regola per calcolare un singolo valore numerico rappresentato come numero in virgola mobile. L espressione numerica primaria può essere una stringa numerica, un indice dummy, un parametro non indicizzato (uno scalare), un parametro con indici, un riferimento ad una funzione interna, un espressione numerica iterata, un espressione numerica condizionale, oppure un altra espressione numerica racchiusa tra parentesi stringa numerica j indice dummy time parametro non indicizzato a[ May 2003,j+1] parametro con pedice (indice) abs(b[i,j]) riferimento a funzione interna sum{i in S diff T} alpha[i] * b[i,j] espressione iterata if i in I and p >= 1 then 2 * p else q[i+1] espressione condizionale (b[i,j] +.5 * c) espressione tra parentesi Espressioni numeriche più generali contenenti due o più espressioni numeriche primarie possono essere costruite usando degli opportuni operatori aritmetici. j+1 2 * a[i-1,j+1] - b[i,j] sum{j in J} a[i,j] * x[j] + sum{k in K} b[i,k] * x[k] (if i in I and p >= 1 then 2 * p else q[i+1]) / (a[i,j] + 1.5) Stringhe numeriche. Se l espressione numerica primaria è una stringa numerica, il valore risultante è ovvio. Indici dummy. Se l espressione numerica primaria è un indice dummy, il valore risultante è il valore corrente assegnato all indice dummy. Parametri senza indici. Se l espressione numerica primaria è un parametro senza indice (che deve essere 0-dimensionale), il valore risultante è il valore del parametro.

11 11 Parametri indicizzati. L espressione numerica primaria, che si riferisce ad un parametro indicizzato, ha la seguente forma sintattica: nome[i 1,i 2,...,i n ] dove nome è il nome simbolico di un parametro, e i 1, i 2,..., i n sono indici (pedici). Ogni indice deve essere un espressione numerica o simbolica. Il numero di indici n deve essere uguale alla dimensione del parametro alla quale la lista di indici è associato. I valori delle espressioni indice sono usati per identificare un particolare membro del parametro che determina il valore risultante dell espressione primaria. Riferimenti a funzioni. In MathProg esistono le seguenti funzioni interne che possono essere utilizzate in espressioni numeriche: abs(x) valore assoluto atan(x) arctan x (in radianti) atan(y,x) arctan y/x (in radianti) card(x) cardinalità (numero di elementi) di un insieme x ceil(x) il più piccolo intero non minore di x ( ceiling of x ) cos(x) cos x (in radianti) floor(x) il più grande intero non maggiore di x ( floor of x ) exp(x) esponenziale base-e: e x length(x) lunghezza della stringa di caratteri x log(x) logaritmo naturale log x log10(x) logaritmo decimale log 10 x max(x 1,x 2,...,x n ) il massimo tra x 1,x 2,...,x n min(x 1,x 2,...,x n ) il minimo tra x 1,x 2,...,x n round(x) arrotondamento di x all intero più vicino round(x,n) arrotondamento di x a n cifre decimali sin(x) sin x (in radianti) sqrt(x) radice quadrata x trunc(x) x arrotondato all intero più vicino trunc(x,n) x arrotondato alla n-essima cifra decimale Irand224() numero intero pseudo-casuale uniformemente distribuito in [0,2 24 ) Uniform01() numero pseudo-casuale uniformemente distribuito in [0,1) Uniform(a,b) numero pseudo-casuale uniformemente distribuito in [a,b) Normal01() numero pseudo-casuale con distribuzione gaussiana µ = 0 e σ = 1 Normal(µ,σ) numero pseudo-casuale con distribuzione gaussiana µ e σ Gli argomenti di queste funzioni (ad eccezione di card e length) devono essere espressioni numeriche. L argomento di card deve essere un espressione di insiemi. L argomento di length deve essere un espressione simbolica. Il valore risultante di un espressione numerica costituita da un riferimento ad una funzione è il risultato dell applicazione della funzione ai suoi argomenti. Si consideri che ogni funzione che genera un numero pseudo-casuale ha un argomento nascosto (un suo proprio stato interno), il quale viene modificato ogni volta che viene applicata la funzione stessa. Quindi, se la funzione è applicata ripetutamente anche con argomenti identici, il valore risultante cambia ogni volta.

12 12 Espressioni iterate. un espressione numerica iterata è un espressione primaria con la seguente forma sintattica: operatore-di-iterazione espressione-di-indici integrando dove operatore-di-iterazione è il nome simbolico dell operatore di iterazione da eseguire, espressione-di-indici è un espressione la quale introduce degli indici dummy e controlla le iterazioni, l integrando è un espressione numerica che partecipa nell operazizone. In MathProg ci sono quattro operatori di iterazione che possono essere usati in espressioni numeriche: sum sommatoria (i 1,...,i x(i n) 1,...,i n ) prod produttoria (i 1,...,i x(i n) 1,...,i n ) min minimo min (i1,...,i n) x(i 1,...,i n ) max massimo max (i1,...,i n) x(i 1,...,i n ) dove i 1,...,i n sono gli indici dummy introdotti dall espressione di indici; è il domino, un insieme di n-tuple specificate dall espressione indicizzante la quale definisce particolare valori assegnati agli indici dummy durante ogni singola iterazione; e x(i 1,...,i n ) è l integrando, un espressione numerica il cui valore risultante dipende dagli indici dummy. Il valore risultante di un espressione numerica iterata è il risultato dell applicazione di un operatore di iterazione ai suoi integrandi appartenenti a tutte le n-tuple contenute nel dominio. Espressioni condizionali. un espressione numerica condizionale è un espressione numerica primaria avente la seguente forma sintattica: if b then x else y if b then x dove b è un espressione logica, ed x e y sono espressioni numeriche. Il valore risultante di un espressione condizionale dipende dal valore dell espressione logica che segue la parola-chiave if. Se il suo valore è true, il valore dell espressione condizionale è il valore dell espressione che segue la parola-chiave then. Altrimenti, se il suo valore è false, il valore dell espressione condizionale è il valore dell espressione che segue la parola-chiave else. Se si usa la forma abbreviata dell espressione condizionale e il valore dell espressione logica è false, allora il valore risultante è zero. Espressioni tra parentesi. Qualsiasi espressione numerica può essere racchiusa tra parentesi che sintatticamente la rendono un espressione numerica primaria. Le parentesi possono essere usate in espressioni numeriche, come in algebra, per specificare l ordine desiderato con il quale le operazioni devono essere eseguite. Quando si usano le parentesi, l espressione tra parentesi viene valutata prima che il suo valore di ritorno sia utilizzato. Il valore di ritorno di un espressione tra parentesi è lo stesso dell espressione racchiusa tra parentesi.

13 13 Operazioni aritmetiche. In MathProg esistono le seguenti operazioni aritmetiche, le quali possono essere usate all interno di espressioni numeriche: x + y addizione x - y sottrazione + x addizione unaria (equivalente a 0+x) - x sottrazione unaria (equiavalente a 0-x) x less y differenza positiva (i.e., if x < y then 0 else x y) x * y moltiplicazione x / y divisione x div y quoziente di una divisione esatta x mod y resto di una divisione esatta x ** y, x ^ y esponenziale (elevazione a potenza) dove x e y sono espressioni numeriche. Se l espressione ha più di un operatore aritmetico, tutte le operazione sono calcolate da sinistra a destra secondo delle regole precise di precedenza (vedi sotto) con la sola eccezzione dell esponenziale che viene eseguito da destra verso sinistra. Il valore risultante di un espressione cha ha degli operatori aritmetici, è il risultato dell applicazione degli operatori ai suoi operandi. Regole di precedenza degli operatori aritmetici. La lista seguente definisce le regole di precedenza degli operatori aritmetici: Operazione Precedenza Valutazione di funzioni (abs, ceil, etc.) 1 Esponenziale (**, ^) 2 Addizione e sottrazione unaria (+, -) 3 Moltiplicazione e sottrazzione (*, /, div, mod) 4 Operatori di iterazioni (sum, prod, min, max) 5 Adddizione e sottrazione (+, -, less) 6 Espressioni condizionali (if...then...else) 7 Queste regole di precedenza definiscono quale tra due operazioni consecutive deve essere eseguita per prima. Se il primo operatore ha una precedenza maggiore o uguale al secondo, viene valutato per primo. Altrimenti, il secondo operatore è confrontato con il terzo, e cosi via. Quando si raggiunge la fine dell espressione, tutte le operazioni rimanenti sono eseguite in ordine inverso. 3.2 Espressioni simboliche Un espressione simbolica è una regola per calcolare un singolo valore simbolico rappresentato come stringa alfabetica. L espressione simbolica primaria può essere una stringa di carattei, un indice dummy, un parametro non indicizzato (una costante), un parametro indicizzato, un riferimento ad funzione interna, un espressione condizionale simbolica, oppure un altra espressione racchiusa tra parentesi. È anche possibile usare un espressione numerica come espressione primaria simbolica, in qual caso il valore risultante di un espressione numerica è automaticamente convertita nel suo tipo simbolico.

14 14 May 2003 stringa alfabetica j indice dummy p parametro non indicizzato s[ abc,j+1] parametro indicizzato substr(name[i],k+1,3) riferimento a funzione if i in I then s[i,j] & "..." else t[i+1] espressione condizionale ((10 * b[i,j]) &.bis ) espressione tra parentesi Espressioni simboliche più generali contenenti due o più espressioni primarie simboliche possono essere costruite utilizzanto degli operatori di concatenazione. abc[ & i &, & j & ] "from " & city[i] & " to " & city[j] I principi di valutazione di espressioni simboliche sono completamente analoghi a quelli dati per le espressioni numeriche (vedi sopra). Riferimenti a funzione. In MathProg ci sono le seguenti funzioni interne che possono essere utilizzate in espressioni simboliche: substr(x,y) substr(x,y,z) sottostringa di x che inizia alla posizione y sottostringa di x che inizia alla posizione y avendo lunghezza z Il primo argomento di substr deve essere un espressione numerica, mentre gli altri due devono essere delle espressioni numeriche. Il valore risultante di un espressioni simbolica costituita da un riferimento ad una funzione, è il risultato di appplicare la funzione ai suoi argomenti. Operatori simbolici. Attualmente in MathProg ci sono gli operatori simbolici seguenti: x & y dove x e y sono espressioni simboliche. Questo operatore concatena i suoi due operandi simbolici, che possono essere delle stringhe alfabetiche. Regole di precedenza delle operazioni La lista seguente definisce le regole di precedenza degli operatori simbolici: Operazione Precedenza Valutazione delle espressioni numeriche 1 7 Concatenazione (&) 8 Valutazione condizionale (if...then...else) 9 Queste regole di precedenza hanno lo stesso significato di quelle definite nella sottosezione Espressioni numeriche.

15 Espressioni indicizzanti e indici dummy Un espressione indicizzante è una costruzione ausiliaria che specifica un insieme di n-tuple e introduce degli indici dummy, e ha due forme sintattiche: {entry 1, entry 2,..., entry m } {entry 1, entry 2,..., entry m : predicato} (5) dove entry 1, entry 2,..., entry m sono entries di indici, e predicato è un espressione logica che specifica un predicato opzionale. Ogni entries di indici può avere una delle tre forme seguenti: t in S (t 1,t 2,...,t k ) in S S (6) dove t,t 1,t 2,...,t k sono indici, ed S è un espressione-insieme (discussa nella sezione seguente) che specifica gli elementi di un insieme. Il numero di indici nella entry indicizzante deve essere lo stesso della dimensione dell insieme base S, cioè se S consiste di 1-tuple, deve essere usate la prima forma, e se S consiste di n-tuple con n > 1 deve essere usata la seconda forma. Se si utilizza la prima forma, l indice t può solo essere un indice dummy. Se invece si usa la seconda forma, gli indici t 1,t 2,...,t k possono essere degli indici dummy o delle espressioni numeriche o simboliche, dove almeno un indice deve essere un indice dummy. La terza forma indicizzante ha lo stesso effetto come se ci fossero t (se S è 1-dimensionale) o t 1,t 2,...,t k (se S è n-dimensionale) elementi tutti specificati come indici dummy. Un indice dummy è un oggetto di modello ausiliare che agisce come una singola variable. I valori assegnati agli indici dummy sono compenenti di n-tuple di insiemi base, cioè sono quantità numeriche o simboliche. A scopi di riferimento, agli indici dummy possono essere dati dei nomi simbolici. Comunque, diversamente dagli oggetti di modello (insiemi, parametri,...) non devono essere esplicitamente dichiarati. Ogni nome simbolico non dichiarato, e usato come indice, è riconosciuto come nome simbolico del corrispondente indice dummy. I nomi simbolici di indici dummy sono validi solo all interno della visibilità delle espressioni indicizzanti, dove gli indici dummy sono introdotti. Al di fuori della loro visibilità gli indici dummy sono completamente inaccesibili, cosi che gli stessi nomi simbolici posson essere usati per altri scopi, in particolare per rappresentare indici dummy di altre espressioni indicizzanti. La visibilità di espressioni indicizzanti, dove la dicharazione implicita di indici dummy rimane valida, dipende dal contesto nel quale l espressione indicizzante è usata: 1. Se l espressione indicizzante è usata in operator di iterazione, la sua visibilità si estende sino alla fine dell integrando. 2. Se l espressione indicizzante è usata come espressione di insiemi primaria, la sua visibilità si estende sino alla fine della stessa espressione indicizzante. 3. Se l espressione indicizzante è usata per definire il dominio degli indici nella dichiarazione di qualche oggetto di modello, la sua visibilità si estende sino alla fine dell asserzione corrispondente. Il meccanismo di indicizzazione realizzato tramite le espressioni indicizzanti è spiegato meglio attraverso gli esempi mostrati sotto

16 16 Supponiamo di avere tre insiemi: A = {4,7,9} B = {(1,Jan),(1,Feb),(2,Mar),(2,Apr),(3, May),(3,Jun)} C = {a,b,c} (7) dove A e C consistono di 1-tuple (singoli valori), B consiste di 2-tuple (coppie). Considera la seguente espressione indicizzante: {i in A, (j,k) in B, l in C} (8) dove i, j, k, e l sono indici dummy. Anche se MathProg non è un linguaggio procedurale, per ogni espressione indicizzante può essere date una descrizione algoritmica-procedurale. In particolare, la descrizione algoritmica dell espressione indicizzante (8) è la seguente: for all i A do for all (j,k) B do for all l C do azione; dove agli indici dummy i, j, k, l sono assegnati consecutivamente gli elementi corrispondenti delle n-tuple dagli insiemi base A, B, C, e azione è una qualche azione che dipende dal contesto in cui l espressione indicizzante è usata. Per esempio, se l azione fosse la stampa a video dei valori correnti degli indici dummy, vedremmo: i = 4 j = 1 k = Jan l = a i = 4 j = 1 k = Jan l = b i = 4 j = 1 k = Jan l = c i = 4 j = 1 k = Feb l = a i = 4 j = 1 k = Feb l = b i = 9 j = 3 k = Jun l = b i = 9 j = 3 k = Jun l = c Suppponiamo di usare l espressione indicizzante (8) nella seguente operazione di iterazione: sum{i in A, (j,k) in B, l in C} p[i,j,k,l] ** 2 (9) dove p[i, j, k, l] può essere un parametro numerico 4-dimensionale oppure qualche espressione numerica il cui valore risultante dipende da i, j, k, e l. In questo caso l azione è una somma, e il valore risultante dell espressione numerica primaria (9) è : i A,(j,k) B,l C (p ijkl ) 2. Ora supponiamo che l espressione indicizzante (8) sia utilizzata come espressione primaria di insieme. In questo caso l azione è di raccogliere tutte le 4-tuple (quadruple) della forma (i, j, k, l) in un singolo insieme, il cui valore risulatante è semplicemente il prodotto cartesiano: A B C = {(i,j,k,l) i A,(j,k) B,l C}.

17 17 Si noti che in questo caso la stessa espressione indicizzante può essere scritta nella forma ridotta: {A, B, C} perchè gli indici dummy i,j,k,l non sono utilizzati e quindi il loro nome simbolico non è necessario. Infine, supponiamo che l espressione indicizzante (8) sia usata come il dominio di indici nella dichiarazione di un oggetto di modello 4-dimensionale, per esempio, di un parametro numerico: par p{i in A, (j,k) in B, l in C}... ; In questo caso l azione è di generare i membri del parametro, dove ogni membro ha la forma p[i, j, k, l]. Come detto prima, alcuni indici in (6) possono essere espressioni numeriche o simboliche, ma non indici dummy. In questo caso il valore risultante di tale espressione gioca il ruolo di qualche condizione logica di selezionare solo le n-tuple dal prodotto Cartesiano degli insiemi base, le quali soddisfano queste condizioni. Considera, per esempio, l espressione indicizzante seguente: {i in A, (i-1,k) in B, l in C} (10) dove i, k, l sono indici dummy, e i 1 è un espressione numerica. La descrizione algoritmica dell espressione indicizzante (10) è la seguente: for all i A do for all (j,k) B and j = i 1 do for all l C do action; Quindi, se l espressione indicizzante (10) è usata come set primario di base, il valore risultante è il seguente: {(4,May,a),(4,May,b),(4,May,c), (4,Jun,a),(4,Jun,b),(4,Jun,c)} Si noti che in questo caso l insieme risultante consiste di triple, e non di quadruple, perchè nell espressione indicizante (10) non c è un indice dummy che corrisponde al primo elemento delle coppie appartenenti all insieme B. La regola generale è : il numero di componenti di n-tuple definito da un espressione indicizzante è lo stesso del numero di indici dummy introdotti da quell espressione indicizzante, dove la corrispondenza tra indici dummy e componenti nelle n-tuple nell insieme risultante è posizionale, cioè il primo indice dummy corrisponde al primo elemento, il secondo indice dummy corrisponde al secondo elemento, e cosi via. In molti casi è necessario selezionare un sottoinsieme del prodotto Cartesiano di alcuni insiemi. Questo può essere ottenuto usando un predicato logico opzionale, il quale è specificato nell espressione indicizzante dopo l ultima o l unica entry indicizzante. Considera, per esempio, la seguente espressione indicizzante: {i in A, (j,k) in B, l in C: i <= 5 and k <> Mar } (11) dove l espressione logica che segue i due punti è un predicato. La descrizione algoritmica di questa espressione indicizzante è la seguente:

18 18 for all i A do for all (j,k) B do for all l C do if i 5 and k Mar then action; Quindi, se l espressione indicizzante (11) è usata come espressione primaria di un insieme, l insieme risultante è il seguente: {(4,1,Jan,a),(4,1,Feb,a),(4,2,Apr,a),...,(4,3,Jun,c)}. Se nessun predicato è specificato nell espressione indicizzante, ne è presente uno implicito di valore true. 3.4 Espressioni di insiemi Un espressione di insiemi è una regola per calcolare un insieme di elementi, ossia una collezione di n-tuple, dove i componenti delle n-tuple sono quantità numeriche o simboliche. L espressione primaria di insieme può essere un insieme alfa-numerico, un insieme non indicizzato, un insieme indicizzato, un insieme aritmetico, un espressione indicizzante, un espressione di insieme iterata, un espressione di insieme condizionale, o un altra espressione di insieme racchiusa tra parentesi. {(123, aaa ), (i+1, bbb ), (j-1, ccc )} insieme alfa-numerico I insieme non indicizzato S[i-1,j+1] insieme indicizzato 1..t-1 by 2 insieme aritmetico {t in 1..T, (t+1,j) in S: (t,j) in F} espressione indicizzante setof{i in I, j in J}(i+1,j-1) espressione iterata di insieme if i < j then S[i,j] else F diff S[i,j] espressione di insiemi condizionale (1..10 union ) espressione di insiemi tra parentesi Espressioni di insiemi più generali contenti due o più espressione primari di insiemi possono essere costruite usando alcuni operatori su insiemi. (A union B) inter (I cross J) cross (if i < j then { a, b, c } else { d, e, f }) Insiemi alfa-numerici. Un insieme alfa-numerico è un espressione primaria di insieme, la quale ha una delle due seguenti forme sintattiche: {e 1,e 2,...,e m } {(e 11,...,e 1n ),(e 21,...,e 2n ),...,(e m1,...,e mn )} dove e 1,..., e m, e 11,..., e mn sono espressioni numeriche o simboliche. Se si usa la prima forma, l insieme risultante consiste di 1-tuple enumerate all interno delle parentesi graffe. Si può specificare un insieme vuoto non avente 1-tuple. Se si usa la seconda forma, l insieme risultante consiste di n-tuple enumerate all interno delle parentesi graffe, dove una particolare n-tupla consiste degli elementi corrispondenti enumerati tra parentesi. Tutte le n-tuple devono avere lo stesso numero di componenti.

19 19 Insiemi non indicizzati. Se l espressione primaria di insieme è un insieme non indicizzato (il quale deve essere 0-dimensionale), l insieme risultante è un insieme di elementi associato con il corrispondente oggetto insieme. Insieme indicizzato. L espressione primaria di insieme, che si riferisce ad un insieme indicizzato, ha la seguente forma sintattica: nome[i 1,i 2,...,i n ] dove nome è un nome simbolico dell oggetto insieme, e i 1, i 2,..., i n sono i pedici (indici). Ogni pedice deve essere un espressione numerica o simbolica. Il numero di pedici nella lista di pedici deve essere della stessa dimensione dell oggetto insieme alla quale la lista è associata. I valori correnti delle espressioni di pedici sono usate per identificare un particolare membro dell insieme oggetto che determina l insieme risultante. Insiemi aritmetici. L espressione primaria di insieme, che costituisce un insieme aritmetico, ha una delle due seguenti forme sintattiche: t 0.. t f by δt t 0.. t f dove t 0, t 1, e δt sono espressioni numeriche (il valore di δt deve essere diverso da zero). La seconda forma è equivalente alla prima con δt = 1. Se δt > 0, l insieme risultante è determinato nel modo seguente: {t : k Z(t = t 0 + kδt, t 0 t t f )} Se δt < 0, l insieme risultante è determinato come segue: {t : k Z(t = t 0 + kδt, t f t t 0 )} Espressioni indicizzanti. Se l espressioni primaria di insieme è un espressione indicizzante, l insieme risultante è determinato come descritto nella sezione Espressioni indicizzanti e indici dummy (vedi sopra). Espressioni di iterazione. un espressione di insieme di iterazione è un espressione primaria di insieme avente una delle due forme seguenti: setof espressione-indicizzante integrando dove l espressione-indicizzante introduce gli indici dummy e controlla le iterazioni, l integrando è o un singolo valore numerico o simbolica, oppure una lista di espressioni numeriche o simboliche separate da virgole e racchiuse tra parentesi. Se l integrando è una singola espressione numerica o simbolica, l insieme risultante è costituito da 1-tuple ed è calcolato come segue: {x : (i 1,...,i n ) },

20 20 dove x è una valore dell integrando, i 1,...,i n sono indici dummy introdotti nell espressione indicizzante, è il dominio, un insieme di n-tuple specificato dall espressione indicizzante che definisce i valori specifici assegnati agli indici dummy durante l eseguzione dell operazione di iterazione. Se l integrando è una lista contente m espressioni numeriche o simboliche, l insieme risultante consiste di m-tuple ed è determinata come segue: {(x 1,...,x m ) : (i 1,...,i n ) }, dove x 1,...,x m sono valori di espressioni nella lista degli integrandi, i 1,...,i n e hanno lo stesso significato visto prima. Espressioni condizionali. Un espressione condizionale di insieme è un espressione primaria di insieme avente la seguente forma sintattica: if b then X else Y dove b è un espressione logica, X e Y sono espressioni di insieme, le quali devono definire insiemi della stessa dimensione. Il valore risultante delle espressione condizionale dipende dal valore dell espressione logica dell espressione condizionale che segue la parola-chiave if. Se il valore è true, l insieme risultante è il valore dell espressione che segue la parola-chiave then. Altrimenti, se l espressione logica assume il valore false, l insieme risultante è il valore dell espressione che segue la parola-chiave else. Espressioni tra parentesi. Qualsiasi espressione di insieme può essere racchiusa tra parentesi e diventare un espressione primaria di insieme. Le parentesi possono essere usate in espressioni di insiemi, come in algebra, per specificare l ordine desiderato in cui le operazioni deveno essere esguite. Dove le parentesi sono usate, l espressioni tra parentesi sono valutate prima di usare il valore di ritorno. Il valore risultante di un espressione tra parentesi è lo stesso del valore dell espressione racchiusa tra parentesi. Operatori di insieme. In MathProg ci sono i seguenti operatori di insieme che possono essere usati in espressioni di insiemi: X union Y X diff Y X symdiff Y X inter Y X cross Y unione X Y differenza X\Y differenenza simmetrica X Y intersezione X Y prodotto Cartesiano X Y dove X e Y sono espressioni di insiemi, i quali devono definire insiemi della stessa dimensione (ad eccezione del prodotto cartesiano). Se l espressione ha più di un operatore di insieme, tutti gli operatori sono eseguiti da sinistra verso destro secondo le regole di precedenza definite nel prossimo paragrafo (vedi sotto). Il valore risultante dell espressione, contenente degli operatori di insieme, è il risultato dell applicazione degli operatori ai loro operandi.

Breve guida all uso di AMPL

Breve guida all uso di AMPL Breve guida all uso di AMPL Renato Bruni AMPL (A Modeling Language for Mathematical Programming) è un linguaggio di modellazione per la programmazione matematica. Serve ad esprimere un problema di ottimizzazione

Dettagli

Corso di Laurea in INFORMATICA

Corso di Laurea in INFORMATICA Corso di Laurea in INFORMATICA Algoritmi e Strutture Dati MODULO 2. Algebre di dati Dati e rappresentazioni, requisiti delle astrazioni di dati, costrutti. Astrazioni di dati e dati primitivi. Specifica

Dettagli

Corso di Programmazione I dati nei linguaggi di programmazione Tipi Semplici. I dati nei linguaggi di programmazione. Dati. Dott.

Corso di Programmazione I dati nei linguaggi di programmazione Tipi Semplici. I dati nei linguaggi di programmazione. Dati. Dott. Materiale didattico preparato dal dott. Stefano Ferilli Corso di Programmazione I dati nei linguaggi di programmazione Tipi Semplici Dott. Pasquale Lops lops@di.uniba.it Corso di Programmazione - DIB 1/49

Dettagli

Gli algoritmi: definizioni e proprietà

Gli algoritmi: definizioni e proprietà Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Gli algoritmi: definizioni e proprietà La presente dispensa e da

Dettagli

Regole sintattiche. Simboli

Regole sintattiche. Simboli Simboli Regole sintattiche Ogni sequenza di caratteri alfanumerici che inizi con un carattere alfabetico e non contenga spazi o caratteri speciali è interpretata come un unico simbolo. Le lettere maiuscole

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 05 La rappresentazione dell informazione Carla Limongelli Ottobre 2011 http://www.dia.uniroma3.it/~java/fondinf/ La rappresentazione

Dettagli

Rappresentazione dei numeri in un calcolatore

Rappresentazione dei numeri in un calcolatore Corso di Calcolatori Elettronici I A.A. 2010-2011 Rappresentazione dei numeri in un calcolatore Lezione 2 Università degli Studi di Napoli Federico II Facoltà di Ingegneria Rappresentazione dei numeri

Dettagli

Algebra Booleana ed Espressioni Booleane

Algebra Booleana ed Espressioni Booleane Algebra Booleana ed Espressioni Booleane Che cosa è un Algebra? Dato un insieme E di elementi (qualsiasi, non necessariamente numerico) ed una o più operazioni definite sugli elementi appartenenti a tale

Dettagli

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

1 Breve introduzione ad AMPL

1 Breve introduzione ad AMPL 1 Breve introduzione ad AMPL Il primo passo per risolvere un problema reale attraverso strumenti matematici consiste nel passare dalla descrizione a parole del problema al modello matematico dello stesso.

Dettagli

Tipo intero. Esempio. Tipo intero: operatori. Programma PortaMonete.java. Tipi base o primitivi

Tipo intero. Esempio. Tipo intero: operatori. Programma PortaMonete.java. Tipi base o primitivi Tipo intero Tipi base o primitivi Tipi interi: int, byte, short, long Tipi float: float, double Caratteri: char Tipo booleano: boolean Operatori numerici e logici La parola chiave int definisce una variabile

Dettagli

SISTEMI DI NUMERAZIONE DECIMALE E BINARIO

SISTEMI DI NUMERAZIONE DECIMALE E BINARIO SISTEMI DI NUMERAZIONE DECIMALE E BINARIO Il sistema di numerazione decimale (o base dieci) possiede dieci possibili valori (0, 1, 2, 3, 4, 5, 6, 7, 8 o 9) utili a rappresentare i numeri. Le cifre possiedono

Dettagli

7 : I DATI E LA LORO STRUTTURA NELLA PROGRAMMAZIONE

7 : I DATI E LA LORO STRUTTURA NELLA PROGRAMMAZIONE 7 : I DATI E LA LORO STRUTTURA NELLA PROGRAMMAZIONE TIPO DI DATO Un tipo di dato è una entità caratterizzata dai seguenti elementi: un insieme X di valori che raprresenta il dominio del tipo di dato; un

Dettagli

L INNOVAZIONE SCIENTIFICO-TECNOLOGICA NEI PROCESSI PRODUTTIVI

L INNOVAZIONE SCIENTIFICO-TECNOLOGICA NEI PROCESSI PRODUTTIVI L INNOVAZIONE SCIENTIFICO-TECNOLOGICA NEI PROCESSI PRODUTTIVI Scienza ed industria hanno oggi costituito legami molto forti di collaborazione che hanno portato innovazione tecnologica sia a livello organizzativo-amministrativo

Dettagli

Progetto e analisi di algoritmi

Progetto e analisi di algoritmi Progetto e analisi di algoritmi Roberto Cordone DTI - Università degli Studi di Milano Polo Didattico e di Ricerca di Crema Tel. 0373 / 898089 E-mail: cordone@dti.unimi.it Ricevimento: su appuntamento

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dell informazione negli elaboratori

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dell informazione negli elaboratori Informazione e computer Si può rappresentare l informazione attraverso varie forme: Numeri Testi Suoni Immagini 0001010010100101010 Computer Cerchiamo di capire come tutte queste informazioni possano essere

Dettagli

Vettori ed assegnamenti in R

Vettori ed assegnamenti in R Università degli Studi di Milano Laurea Specialistica in Genomica Funzionale e Bioinformatica Corso di Linguaggi di Programmazione per la Bioinformatica Vettori ed assegnamenti in R Giorgio Valentini e

Dettagli

+ / operatori di confronto (espressioni logiche/predicati) / + 5 3 9 = > < Pseudo codice. Pseudo codice

+ / operatori di confronto (espressioni logiche/predicati) / + 5 3 9 = > < Pseudo codice. Pseudo codice Pseudo codice Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova linguaggio testuale mix di linguaggio naturale ed elementi linguistici con sintassi ben definita e semantica

Dettagli

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata Esempi di Problema: Prendere un Caffè al Distributore Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica, e Programmi D. Gubiani

Dettagli

LA NUMERAZIONE BINARIA

LA NUMERAZIONE BINARIA LA NUMERAZIONE BINARIA 5 I SISTEMI DI NUMERAZIONE Fin dalla preistoria l uomo ha avuto la necessità di fare calcoli, utilizzando svariati tipi di dispositivi: manuali (mani, bastoncini, sassi, abaco),

Dettagli

Sistemi di numerazione: generalità

Sistemi di numerazione: generalità Sistemi di numerazione: generalità Nel corso della storia sono stati introdotti diversi sistemi di numerazione, dettati di volta in volta dalle specifiche esigenze dei vari popoli. Poiché ogni numero maggiore

Dettagli

Ottimizzazione Combinatoria

Ottimizzazione Combinatoria Ottimizzazione Combinatoria Esercitazione AMPL A.A. 2009-2010 Esercitazione a cura di Silvia Canale contatto e-mail: canale@dis.uniroma1.it Università di Roma La Sapienza Dipartimento di Informatica e

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione La Codifica dell informazione (parte 1) Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente:

Dettagli

Richiesta pagina PHP (es: index.php)

Richiesta pagina PHP (es: index.php) PHP PHP = personal home page SERVER Richiesta pagina PHP (es: index.php) Server Web (Apache) in ascolto sulla porta 80, si accorge che la pagina richiesta è una pagina PHP in base all'estensione o con

Dettagli

Elementi di Informatica

Elementi di Informatica Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica Algoritmi, e Programmi D. Gubiani 29 marzo 2010 D. Gubiani Algoritmi, e Programmi

Dettagli

Progetto e ottimizzazione di reti 2

Progetto e ottimizzazione di reti 2 Progetto e ottimizzazione di reti 2 Esercitazione AMPL A.A. 29-2 Esercitazione a cura di Silvia Canale contatto e-mail: canale@dis.uniroma.it Università di Roma La Sapienza Dipartimento di Informatica

Dettagli

CODIFICA BINARIA. ... sono rappresentati ricorrendo a simboli che sintezzano il concetto di numerosità.

CODIFICA BINARIA. ... sono rappresentati ricorrendo a simboli che sintezzano il concetto di numerosità. I METODI DI NUMERAZIONE I numeri naturali... sono rappresentati ricorrendo a simboli che sintezzano il concetto di numerosità. Il numero dei simboli usati per valutare la numerosità costituisce la base

Dettagli

Rappresentazione delle informazioni

Rappresentazione delle informazioni Rappresentazione delle informazioni Rappresentazione delle informazioni L informatica si occupa di rappresentare ed elaborare informazioni diverse: numeri caratteri audio immagini video I caratteri: ASCII

Dettagli

Sistemi di Numerazione

Sistemi di Numerazione Fondamenti di Informatica per Meccanici Energetici - Biomedici 1 Sistemi di Numerazione Sistemi di Numerazione I sistemi di numerazione sono abitualmente posizionali. Gli elementi costitutivi di un sistema

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica per chimica industriale e chimica applicata e ambientale LEZIONE 2 Rappresentazione delle informazioni: numeri e caratteri 1 Codice La relazione che associa ad ogni successione ben formata di simboli di

Dettagli

Appunti di Informatica 1. Gianluca Rossi

Appunti di Informatica 1. Gianluca Rossi Appunti di Informatica 1 Gianluca Rossi Versione maggio 2011 Indice 1 Algoritmi, macchine e linguaggi di programmazione 3 1.1 La macchina di Von Neumann........................ 5 1.2 Dal linguaggio macchina

Dettagli

Corso di Analisi Matematica. Funzioni reali di variabile reale

Corso di Analisi Matematica. Funzioni reali di variabile reale a.a. 2011/12 Laurea triennale in Informatica Corso di Analisi Matematica Funzioni reali di variabile reale Avvertenza Questi sono appunti informali delle lezioni, che vengono resi disponibili per comodità

Dettagli

Programma precorso di matematica

Programma precorso di matematica Programma precorso di matematica a.a. 015/16 Quello che segue è il programma dettagliato del precorso. Si fa riferimento al testo [MPB] E. Acerbi, G. Buttazzo: Matematica Preuniversitaria di Base, Pitagora

Dettagli

Gli algoritmi. Gli algoritmi. Analisi e programmazione

Gli algoritmi. Gli algoritmi. Analisi e programmazione Gli algoritmi Analisi e programmazione Gli algoritmi Proprietà ed esempi Costanti e variabili, assegnazione, istruzioni, proposizioni e predicati Vettori e matrici I diagrammi a blocchi Analisi strutturata

Dettagli

I sistemi di numerazione

I sistemi di numerazione I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Aritmetica: operazioni ed espressioni

Aritmetica: operazioni ed espressioni / A SCUOLA DI MATEMATICA Lezioni di matematica a cura di Eugenio Amitrano Argomento n. : operazioni ed espressioni Ricostruzione di un abaco dell epoca romana - Museo RGZ di Magonza (Germania) Libero da

Dettagli

TSP con eliminazione di sottocicli

TSP con eliminazione di sottocicli TSP con eliminazione di sottocicli Un commesso viaggiatore deve visitare 7 clienti in modo da minimizzare la distanza percorsa. Le distanze (in Km) tra ognuno dei clienti sono come segue: 3 5 7-8 9 57

Dettagli

TSP con eliminazione di sottocicli

TSP con eliminazione di sottocicli TSP con eliminazione di sottocicli Un commesso viaggiatore deve visitare 7 clienti in modo da minimizzare la distanza percorsa. Le distanze (in Km) tra ognuno dei clienti sono come segue: 7-8 9 7 9-8 79

Dettagli

SISTEMI DI NUMERAZIONE IL SISTEMA DECIMALE

SISTEMI DI NUMERAZIONE IL SISTEMA DECIMALE SISTEMI DI NUMERAZIONE IL SISTEMA DECIMALE La base del sistema decimale è 10 I simboli del sistema decimale sono: 0 1 2 3 4 5 6 7 8 9 Il sistema di numerazione decimale è un sistema posizionale. L aggettivo

Dettagli

La programmazione con vincoli in breve. La programmazione con vincoli in breve

La programmazione con vincoli in breve. La programmazione con vincoli in breve Obbiettivi Introdurre la nozione di equivalenza di CSP. Dare una introduzione intuitiva dei metodi generali per la programmazione con vincoli. Introdurre il framework di base per la programmazione con

Dettagli

FONDAMENTI di INFORMATICA Prof. Lorenzo Mezzalira

FONDAMENTI di INFORMATICA Prof. Lorenzo Mezzalira FONDAMENTI di INFORMATICA Prof. Lorenzo Mezzalira Appunti del corso 1 Introduzione all informatica: algoritmi, linguaggi e programmi Indice 1. Introduzione 2. Risoluzione automatica di problemi - Algoritmi

Dettagli

OR true null false true true true true null true null null false true null false NOT

OR true null false true true true true null true null null false true null false NOT Il linguaggio SQL è un linguaggio standard per la definizione, manipolazione e interrogazione delle basi di dati relazionali ed ha le seguenti caratteristiche: è dichiarativo; opera su multiset di tuple,

Dettagli

Manuale programmazione ISO

Manuale programmazione ISO DOCUMENTAZIONE PER L UTENTE Manuale programmazione ISO SIDAC S.r.L 21017 Samarate (Varese) Via Acquedotto, 111 E_Mail info@sidaccnc.it Tel. 0331.22.30.19 r.a. Fax. 0331.22.30.78 1 Ver. 1.0 - Aggiornamento

Dettagli

Entropia. Motivazione. ? Quant è l informazione portata dalla sequenza? Abbiamo una sequenza S di N simboli (campioni audio, pixel, caratteri,...

Entropia. Motivazione. ? Quant è l informazione portata dalla sequenza? Abbiamo una sequenza S di N simboli (campioni audio, pixel, caratteri,... Entropia Motivazione Abbiamo una sequenza S di N simboli (campioni audio, pixel, caratteri,... ) s,s 2,s 3,... ognuno dei quali appartiene ad un alfabeto A di M elementi.? Quant è l informazione portata

Dettagli

MATLAB (1) Introduzione e Operazioni con array

MATLAB (1) Introduzione e Operazioni con array Laboratorio di Informatica per Ingegneria elettrica A.A. 2010/2011 Prof. Sergio Scippacercola MATLAB (1) Introduzione e Operazioni con array N.B. le slide devono essere utilizzate solo come riferimento

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione

Dettagli

90.1 Sistemi di numerazione. 90.1.1 Sistema decimale. 605 Capitolo 90 Dai sistemi di numerazione all organizzazione della memoria

90.1 Sistemi di numerazione. 90.1.1 Sistema decimale. 605 Capitolo 90 Dai sistemi di numerazione all organizzazione della memoria 605 Capitolo 90 Dai sistemi di numerazione all organizzazione della memoria 90.1 Sistemi di numerazione.................................................... 605 90.1.1 Sistema decimale..................................................

Dettagli

ISTRUZIONI VELOCI DI PYTHON Versione 1.0 - (manuale realizzato con Google Documenti)

ISTRUZIONI VELOCI DI PYTHON Versione 1.0 - (manuale realizzato con Google Documenti) ISTRUZIONI VELOCI DI PYTHON Versione 1.0 - (manuale realizzato con Google Documenti) Realizzato da NiktorTheNat e diffuso in rete da: 8thPHLOOR Iniziato il giorno 8 febbraio 2010 - terminato il giorno

Dettagli

Rappresentazione e Memorizzazione dei Dati

Rappresentazione e Memorizzazione dei Dati Rappresentazione e Memorizzazione dei Dati Giuseppe Nicosia CdL in Matematica (Laurea Triennale) Facoltà di Scienze MM.FF.NN. Università di Catania Bit e loro Memorizzazione Definizioni Algoritmo: una

Dettagli

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari

Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari Introduzione allo Scilab Parte 1: numeri, variabili ed operatori elementari Felice Iavernaro Dipartimento di Matematica Università di Bari http://dm.uniba.it/ iavernaro 6 Giugno 2007 Felice Iavernaro (Univ.

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Algebra Booleana 1 ALGEBRA BOOLEANA: VARIABILI E FUNZIONI LOGICHE

Algebra Booleana 1 ALGEBRA BOOLEANA: VARIABILI E FUNZIONI LOGICHE Algebra Booleana 1 ALGEBRA BOOLEANA: VARIABILI E FUNZIONI LOGICHE Andrea Bobbio Anno Accademico 2000-2001 Algebra Booleana 2 Calcolatore come rete logica Il calcolatore può essere visto come una rete logica

Dettagli

2.12 Esercizi risolti

2.12 Esercizi risolti Codifica dell'informazione 55 Lo standard IEEE prevede cinque cause di eccezione aritmetica: underflow, overflow, divisione per zero, eccezione per inesattezza, e eccezione di invalidità. Le eccezioni

Dettagli

Fondamenti di Programmazione

Fondamenti di Programmazione Fondamenti di Programmazione Capitolo 2 Variabili, Espressioni e Comandi Prof. Mauro Gaspari: gaspari@cs.unibo.it Valori e Tipi Un valore (= value) è una delle entità fondamentali che i programmi sono

Dettagli

Le funzioni elementari. La struttura di R. Sottrazione e divisione

Le funzioni elementari. La struttura di R. Sottrazione e divisione Le funzioni elementari La struttura di R La struttura di R è definita dalle operazioni Addizione e moltiplicazione. Proprietà: Commutativa Associativa Distributiva dell addizione rispetto alla moltiplicazione

Dettagli

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati Basi di dati Linguaggi di Interrogazione: SQL Prof.Angela Bonifati 1 SQL Il nome stava per Structured Query Language Più che un semplice linguaggio di query: si compone di una parte DDL e di una DML DDL:

Dettagli

Università di Pisa Dipartimento di Informatica Programmazione in JavaScript

Università di Pisa Dipartimento di Informatica Programmazione in JavaScript Università di Pisa Dipartimento di Informatica Programmazione in JavaScript Vincenzo Ambriola Versione 3.2 ~~~ 30 gennaio 2013 Prefazione Per chi si avvicina alla programmazione gli ostacoli da superare

Dettagli

Linguaggi di modellizzazione

Linguaggi di modellizzazione p. 1/5 Linguaggi di modellizzazione Come visto, il primo passo per risolvere un problema di decisione consiste nel formularne il modello matematico. Una volta definito il modello matematico lo dobbiamo

Dettagli

LA RAPPRESENTAZIONE DELLE INFORMAZIONI

LA RAPPRESENTAZIONE DELLE INFORMAZIONI ISTITUTO TECNICO E LICEO SCIENTIFICO TECNOLOGICO ANGIOY LA RAPPRESENTAZIONE DELLE INFORMAZIONI Prof. G. Ciaschetti DATI E INFORMAZIONI Sappiamo che il computer è una macchina stupida, capace di eseguire

Dettagli

Algoritmi, dati e programmi

Algoritmi, dati e programmi 1 Algoritmi, dati e programmi 2 Informatica Informatica: Scienza che studia l informazione e la sua elaborazione. informazione rappresentazione dell informazione (dati) dati elaborazione dei dati tramite

Dettagli

Appunti sulla rappresentazione dell informazione

Appunti sulla rappresentazione dell informazione Appunti sulla rappresentazione dell informazione Roberto Beraldi DISPENSA PER IL CORSO DI FONDAMENTI DI INFORMATICA CORSI DI LAUREA IN INGEGNERIA CHIMICA, DEI MATERIALI,NUCLEARE (vecchi ordinamenti) Anno

Dettagli

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri

Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri Architettura degli Elaboratori I Esercitazione 1 - Rappresentazione dei numeri 1 Da base 2 a base 10 I seguenti esercizi richiedono di convertire in base 10 la medesima stringa binaria codificata rispettivamente

Dettagli

Esercitazione 2 di verifica

Esercitazione 2 di verifica Architettura degli Elaboratori, 27-8 Esercitazione 2 di verifica Soluzione: mercoledì 24 ottobre Una unità di elaborazione U è così definita: Domanda 1 i) possiede al suo interno due componenti logici

Dettagli

Algoritmo = Dati e Azioni Sistema numerico binario Rappresentazioni di numeri binari Rappresentazione in modulo e segno

Algoritmo = Dati e Azioni Sistema numerico binario Rappresentazioni di numeri binari Rappresentazione in modulo e segno Algoritmo = Dati e Azioni Dati: Numeri (naturali, interi, reali, ) Caratteri alfanumerici (a, b, c, ) Dati logici (vero, falso) Vettori di elementi, matrici, ([1,2,3], [[1,1],[1,2], ]) Azioni o istruzioni:

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica Introduzione a Python Dottore Paolo Parisen Toldin - parisent@cs.unibo.it Argomenti trattati Che cosa è python Variabili Assegnazione Condizionale Iterazione in una lista di

Dettagli

COMPETENZE SPECIFICHE

COMPETENZE SPECIFICHE COMPETENZE IN MATEMATICA DISCIPLINA DI RIFERIMENTO: MATEMATICA TRAGUARDI PER LO SVILUPPO DELLE COMPETENZE FISSATI DALLE INDICAZIONI NAZIONALI PER IL CURRICOLO 2012. MATEMATICA TRAGUARDI ALLA FINE DELLA

Dettagli

Nel seguito verranno esaminati i diversi tipi di dato e il modo in cui essi sono rappresentati all interno del calcolatore.

Nel seguito verranno esaminati i diversi tipi di dato e il modo in cui essi sono rappresentati all interno del calcolatore. In una delle molteplici possibili definizioni di informazione, questa viene fatta corrispondere a qualunque elemento, in grado di essere rappresentato e comunicato, che consenta di fornire o aumentare

Dettagli

Sistemi di Numerazione Binaria NB.1

Sistemi di Numerazione Binaria NB.1 Sistemi di Numerazione Binaria NB.1 Numeri e numerali Numero: entità astratta Numerale : stringa di caratteri che rappresenta un numero in un dato sistema di numerazione Lo stesso numero è rappresentato

Dettagli

ESERCIZI DI PREPARAZIONE E

ESERCIZI DI PREPARAZIONE E ESERCIZI DI PREPARAZIONE E CONSOLIDAMENTO PER I FUTURI STUDENTI DEL PRIMO LEVI si campa anche senza sapere che cos è un equazione, senza sapere suonare uno strumento musicale, senza conoscere il nome del

Dettagli

Elementi di informatica

Elementi di informatica Elementi di informatica Sistemi di numerazione posizionali Rappresentazione dei numeri Rappresentazione dei numeri nei calcolatori rappresentazioni finalizzate ad algoritmi efficienti per le operazioni

Dettagli

(anno accademico 2008-09)

(anno accademico 2008-09) Calcolo relazionale Prof Alberto Belussi Prof. Alberto Belussi (anno accademico 2008-09) Calcolo relazionale E un linguaggio di interrogazione o e dichiarativo: at specifica le proprietà del risultato

Dettagli

Cos è un Calcolatore?

Cos è un Calcolatore? Cos è un Calcolatore? Definizione A computer is a machine that manipulates data according to a (well-ordered) collection of instructions. 24/105 Riassumendo... Un problema è una qualsiasi situazione per

Dettagli

SQL - Tipi di dato Il linguaggio SQL

SQL - Tipi di dato Il linguaggio SQL SQL - Tipi di dato Il linguaggio SQL I tipi di dato in SQL:1999 si suddividono in tipi predefiniti tipi strutturati tipi user-defined ci concentreremo sui tipi predefiniti i tipi predefiniti sono suddivisi

Dettagli

la scienza della rappresentazione e della elaborazione dell informazione

la scienza della rappresentazione e della elaborazione dell informazione Sistema binario Sommario informatica rappresentare informazioni la differenza Analogico/Digitale i sistemi di numerazione posizionali il sistema binario Informatica Definizione la scienza della rappresentazione

Dettagli

SISTEMI DI NUMERAZIONE

SISTEMI DI NUMERAZIONE Università degli Studi di Roma Tor Vergata Facoltà di Ingegneria Corso di Laurea in Ingegneria Medica SISTEMI DI NUMERAZIONE Come nei calcolatori sono rappresentati i numeri Numeri I numeri rappresentano

Dettagli

GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno

GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno La Vista CAS L ambiente di lavoro Le celle Assegnazione di una variabile o di una funzione / visualizzazione

Dettagli

ALGEBRA BOOLEANA FONDAMENTI DI INFORMATICA 1. Algebra di Boole. Definizione NOT, AND, OR

ALGEBRA BOOLEANA FONDAMENTI DI INFORMATICA 1. Algebra di Boole. Definizione NOT, AND, OR Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica, Chimica, Elettrica e Meccanica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011 Docente: Gian

Dettagli

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici Il linguaggio SQL Il linguaggio SQL il linguaggio SQL è un linguaggio per la definizione e la manipolazione dei dati, sviluppato originariamente presso il laboratorio IBM a San Jose (California) è diventato

Dettagli

Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013

Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013 Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013 In questo documento vengono illustrate brevemente le operazioni aritmetiche salienti e quelle logiche ad esse strettamente collegate.

Dettagli

la scienza della rappresentazione e della elaborazione dell informazione

la scienza della rappresentazione e della elaborazione dell informazione Sistema binario Sommario informatica rappresentare informazioni la differenza Analogico/Digitale i sistemi di numerazione posizionali il sistema binario Informatica Definizione la scienza della rappresentazione

Dettagli

Vincoli di Integrità

Vincoli di Integrità Vincoli di Integrità Antonella Poggi Dipartimento di informatica e Sistemistica Sapienza Università di Roma Progetto di Applicazioni Software Anno accademico 2010-2011 Questi lucidi sono stati prodotti

Dettagli

Dispensa 3. 1.1 YACC: generalità

Dispensa 3. 1.1 YACC: generalità Dispensa 3 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in un

Dettagli

JAVASCRIPT. Tale file è associato alla pagina web mediante il tag