Introduzione. 1 Manuale d uso 1. 2 Nozioni preliminari Linguaggi formali XML DTD... 5

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Introduzione. 1 Manuale d uso 1. 2 Nozioni preliminari 2 2.1 Linguaggi formali... 2 2.2 XML... 4 2.3 DTD... 5"

Transcript

1

2 Introduzione Obiettivo di questo progetto è calcolare quantitativamente quanto due file siano simili tra loro. Vengono infatti presi in input due file di un tipo preciso (Document Type Definition, d ora in poi DTD) e viene restituito in output un numero percentuale che ne rappresenta il grado di similarità. In seguito, si precisa il concetto di similarità strutturale ed esso viene messo in pratica tramite l implementazione in Java di una metrica ad hoc, in modo da poter individuare e valutare elementi in comune e differenze tra i due file, o meglio tra i due alberi corrispondenti che vengono costruiti univocamente dal parser, il quale costituisce una prima parte dell applicazione. Il programma esegue poi un algoritmo ricorsivo sulla radice dei due alberi ottenuti nella prima fase; ciò costituisce la computazione della similarità vera e propria. Le due fasi di computazione rispettivamente parsing ed esecuzione dell algoritmo di similarità sono ben distinte dal punto di vista della programmazione, ma non lo sono per l utente: visto dall esterno, tutto avviene in modo trasparente. Dopo l esecuzione del programma, vengono visualizzati su schermo i due alberi DTD seguiti dal punteggio di similarità calcolato. ii

3 Indice Introduzione Indice ii iii 1 Manuale d uso 1 2 Nozioni preliminari Linguaggi formali XML DTD Parsing e alberi DTD Grammatiche LL(k) e LL(1) Grammatica fornita a JavaCC: DTDParser.jj Alberi DTD Semplificazioni Metriche di similarità Similarità tra DTD: princìpi di base Come valutare le differenze La funzione livello Rilevanza di un nodo La funzione peso Ruolo del parametro γ Casi particolari di input Caso generale dell algoritmo di similarità Implementazione Java La classe DTDSimilarity Strutture dati Il package similarity.dtdparser Gestione delle eccezioni iii

4 Bibliografia 35 Indice analitico 36 iv

5 Capitolo 1 Manuale d uso Se si dispone di un sistema operativo Microsoft Windows, la prima volta che si usa l applicazione occorre lanciare i seguenti file batch presenti sul CDROM del progetto: setenv.bat, per impostare correttamente le variabili di ambiente CLASSPATH e PATH; build.bat, per compilare sia la grammatica DTDParser.jj (supponendo che JavaCC sia installato in c:\programmi\javacc-3.2) che i sorgenti Java del progetto. Poi, si può eseguire il programma digitando da riga di comando run seguito dai nomi dei due file di input. Esempio: run file1.dtd file2.dtd Alternativamente, si può lanciare uno dei seguenti file batch con input predefiniti: empty.bat; hotel.bat; normal.bat; uni.bat. Se il sistema operativo è UNIX, GNU/Linux o Mac OSX, fare riferimento al file README.txt di istruzioni sul CDROM. 1

6 Capitolo 2 Nozioni preliminari Prima di entrare nel merito del progetto, vale a dire nella trattazione di file DTD, è bene spendere qualche parola sulla teoria dei linguaggi formali in informatica e su uno strumento ben più famoso delle DTD stesse, in funzione del quale esse sono state inventate: il linguaggio a marcatura estensibile, meglio noto come XML (dal suo nome in inglese, Extensible Markup Language). 2.1 Linguaggi formali Per approfondire le nozioni che vengono in questa sede soltanto accennate, si vedano [LSF] e [LMC] in bibliografia. Definizione 2.1 (alfabeto). Chiamiamo alfabeto un insieme finito di simboli (o caratteri) e lo denotiamo con la lettera A. Esempio 2.2. I seguenti sono alfabeti: L alfabeto latino, A = {a... z, A... Z {simboli di interpunzione e spazio. L insieme dei 128 simboli ASCII. L insieme delle cifre arabe: A = {0, 1,..., 9. L alfabeto binario: A = {0, 1. Definizione 2.3 (stringa). Una stringa o parola s su A è una sequenza finita di simboli di A; inoltre, ɛ denota la stringa vuota. Una stringa si ottiene concatenando simboli di un alfabeto. Esempio 2.4. Stringhe o parole su un alfabeto A: 2

7 A è l alfabeto latino e s = Buongiorno. A è l insieme dei simboli ASCII e s = arw A = {0, 1 e s = A = { e s = ɛ, cioè la stringa vuota. Definizione 2.5 (linguaggio). Un linguaggio su A è un insieme, finito o infinito, di stringhe su A. Equivalentemente si può dire che, dato A, un linguaggio è un qualsivoglia sottoinsieme di A, dove l asterisco indica la chiusura transitiva e riflessiva. Quando si parla di definizione di un linguaggio si intende in effetti la definizione di un insieme di stringhe; la definizione stabilisce quali stringhe appartengono al linguaggio e quali no. La teoria dei linguaggi formali si occupa pertanto della definizione della sintassi di un linguaggio ma non della sua semantica; in seguito preciseremo l importanza di questo fatto. Definizione 2.6 (grammatica). Definiamo grammatica G la quadrupla A, V N, S, P, dove A e V N sono insiemi disgiunti finiti, non vuoti e: 1. A è detto l alfabeto terminale di G. 2. V N è detto l alfabeto non terminale o alfabeto delle variabili. 3. S è il simbolo iniziale o assioma, S V N. 4. P è l insieme delle produzioni di G, dove una produzione è una coppia v, w con v (A V N ) + e contiene almeno un simbolo non terminale, mentre w è un elemento arbitrario di (A V N ). Per specificare la definizione di un linguaggio esistono diversi formalismi; i più noti sono: espressioni regolari; automi a stati finiti; grammatiche non contestuali in Backus-Naur Form o Extended Backus- Naur Form; XML Schema; DTD. 3

8 Tra quelli appena citati, gli strumenti formali usati concretamente in questo progetto sono le DTD e le grammatiche EBNF, rispettivamente per i file di input e per la definizione di una grammatica che riconosca tutte e sole le DTD valide. 2.2 XML XML è un metalinguaggio, vale a dire che è più astratto, espressivo, potente dei comuni linguaggi formali dell informatica, anzi serve proprio a definirne di nuovi: XML crea linguaggi a marcatura personalizzati. È dunque un metodo per mettere dei dati strutturati in file di testo. Per comprendere cosa si intende per dati strutturati, conviene pensare innanzitutto a comuni applicazioni informatiche dagli usi più disparati: fogli elettronici, agende, parametri di configurazione, transazioni finanziarie, disegni tecnici e quant altro. Ebbene, di norma i programmi che producono e gestiscono tali dati li salvano anche su disco, per cui possono usare il formato binario oppure quello testuale; quest ultimo ha l immediato vantaggio di essere leggibile da un comune editor di testi. XML è proprio l insieme di linee guida per progettare file di testo atti a contenere i dati, in un modo che produca file che siano: facili da generare e leggere da parte di un computer; non ambigui; tali da scongiurare pericoli tipici dei formati per dati né strutturati né standard, quali la mancanza di estensibilità, la carenza di supporto per l internazionalizzazione e la dipendenza da una particolare piattaforma hardware o da un particolare sistema operativo. L ascesa di XML prosegue senza sosta dal 1998, anno in cui è diventato uno standard approvato dal W3C (World Wide Web Consortium). È oggi accettato come standard de facto per l archiviazione di testi su Web, in particolare per applicazioni professionali che consentono un indicizzazione dei documenti assai articolata. Tra i possibili impieghi di XML citiamo la gestione avanzata dei link, distribuiti in varie categorie funzionali, lo sviluppo di protocolli platformindependent per lo scambio dei dati, e non ultima la possibilità di far comunicare dispositivi elettronici (ad esempio PDA, agende elettroniche, navigatori satellitari etc.) tra di loro o con un computer, comunicazione questa che in passato non era affatto scontata da ottenere a causa della mancanza di standard nell interfacciamento. 4

9 Altri progressi sono rappresentati dalla possibilità di processare automaticamente i documenti ricevuti e dalla personalizzazione, in quanto i dati strutturati ricevuti possono essere visualizzati grazie ai fogli di stile a cascata (Cascading Style Sheet, CSS), secondo modalità scelte dall utente. Qualcosa di confrontabile con le query di SQL, benché in quel caso si abbia a che fare con basi di dati ovverosia tabelle, mentre XML tratta strutture ad albero. 2.3 DTD Passiamo ora alle DTD, il mezzo più semplice per specificare proprietà strutturali di documenti XML. Per inciso, un documento XML può contenere una DTD ma questo non è obbligatorio. Quando essa è presente, però, la DTD stessa deve precedere il primo elemento del documento XML, cioè l elemento radice. Per associare una DTD a un istanza di documento XML, si deve inserire in testa a esso una marca che viene chiamata Document Type Declaration e non Definition, la quale a sua volta è concettualmente divisa in due: interna ed esterna. Quest ultima è tutta scritta in un file come suggerisce il nome esterno e con estensione.dtd; ecco il tipo di file d interesse per il nostro progetto. Precisiamo quanto appena detto secondo la definizione delle specifiche [W3C], facendo attenzione a non confondere DTD (Document Type Definition) con Document Type Declaration. Una XML Document Type Declaration contiene o punta a dichiarazioni di marcatura che costituiscono una grammatica per una classe di documenti. La grammatica è la DTD (Document Type Definition). La Document Type Declaration, per quel che la riguarda, può puntare a un sottoinsieme esterno il quale è propriamente un tipo particolare di ENTITY esterna contenente dichiarazioni di marcatura, oppure può contenere tali dichiarazioni direttamente in un sottoinsieme esterno, oppure può fare entrambe le cose. La DTD di un documento XML consiste nell unione dei due sottoinsiemi, interno ed esterno. Un esempio di Document Type Declaration è la seguente: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> Per riassumere quanto detto finora, una DTD, che di per sé non è un file XML in quanto la sua sintassi interna conserva delle vestigia del vecchio formato SGML (decisamente non XML: risale agli anni 60!), serve a definire 5

10 le strutture ammesse per l istanza di documenti XML; essa elenca quindi degli insiemi di dichiarazioni: di tipi di elemento; di attributi; di entità; di notazione. L insieme delle dichiarazioni di tipi di elemento sarà l unico preso in considerazione dall analizzatore di similarità del progetto. Tutti gli altri verranno solo considerati dal punto di vista della correttezza sintattica, ma ai fini della nostra applicazione non hanno alcun contenuto semantico e, in parole povere, vengono dimenticati dall applicazione non appena passa dalla prima fase di parsing a quella di calcolo di similarità. Si ricorda che una dichiarazione di tipo di elemento ha la seguente sintassi: <!ELEMENT nome-elemento content-model> Il content model è un espressione regolare (particolarmente adatta a essere rappresentata come un albero, così come i documenti XML) la quale specifica la struttura degli elementi di tipo nome-elemento. Inoltre, il content model è costruito su: ulteriori tipi di elemento; #PCDATA, che rappresenta del testo libero senza etichette. Gli operatori usati nel content model, che sono poi quelli tipici delle espressioni regolari, sono: sequenza ovvero AND, indicata con (a, b,..., h); alternativa ovvero OR, indicata con (a b... k); opzionalità, indicata con a?; ripetizione zero o più volte, indicata con a*; ripetizione una o più volte, indicata con a+. Con a, b,... abbiamo indicato un generico content model. 6

11 Capitolo 3 Parsing e alberi DTD Illustriamo ora la prima fase del programma, che consiste nel parsing validante di ciascuno dei due file DTD che vengono forniti dall utente. Ragioniamo su una singola DTD. L applicazione ha a disposizione una classe Java DTDParser, che è stata generata automaticamente a partire dalla grammatica DTDParser.jj che definisce tutte e sole le DTD valide. Ciò significa che, qualora vi siano errori sintattici nel file, l applicazione deve terminare immediatamente, stampando su schermo un messaggio esplicativo che segnali quale dichiarazione ovvero quale riga della DTD ha causato l errore violando la grammatica. Contestualmente a tale parsing, avviene una traduzione guidata dalla sintassi; è qui che, oltre agli aspetti prettamente sintattici, si aggiunge un ulteriore strato stavolta semantico, che in generale è diverso da applicazione ad applicazione. Il fatto che la grammatica sia univoca e precisa mentre l aspetto semantico da associare a ciascuna regola di derivazione non si possa generalizzare, ma debba essere specificato di volta in volta al seconda del programma che si deve implementare, è fondamentalmente la conferma del fatto che gli aspetti sintattici di qualsiasi programma che prenda in input delle DTD siano generalizzabili, mentre quando si tratta di significato si spalanca una porta che costringe a ragionare su ogni particolare problema e formalizzare algoritmi ad hoc, non esistendo un comun denominatore. Questo ci porta a descrivere uno strumento usato per l implementazione del parser di DTD: JavaCC. JavaCC è un compiler-compiler, vale a dire un programma che riceve in input una grammatica formale con una sintassi di tipo EBNF, e genera automaticamente un analizzatore sintattico e lessicale (cioè un parser) topdown. Il fatto che l analisi sintattica sia di tipo top-down significa che l albero 7

12 sintattico di derivazione della stringa di input (da non confondersi con gli alberi DTD ad hoc che andremo a costruire in fase di traduzione guidata dalla sintassi) viene generato a partire dalla radice o assioma scendendo fino alle foglie, che sono i simboli terminali della medesima stringa di input. Nel nostro caso, la stringa di input al parser sarà un intero file DTD comprensivo dei suoi caratteri di a capo. Poiché riconoscere una stringa rispetto a una grammatica è un operazione di per sé non deterministica, in generale questo porta a tempi esponenziali dunque inaccettabili per risolvere il problema del riconoscimento e di conseguenza anche quello dell analisi sintattica. Di contro, un analizzatore sintattico deve essere molto efficiente: 1. tipicamente si esige che l analizzatore sintattico giri in tempi lineari rispetto alle dimensioni della stringa di input; 2. inoltre, si richiede allo stesso analizzatore di costruire l albero sintattico leggendo solo pochi simboli della stringa per volta; anzi, di norma solo 1 simbolo della stringa per volta, che viene detto simbolo di lookahead. Questo vincolo è dettato dal fatto che memoria e disco rigido dei computer non sono infiniti: sarebbe bello per un analizzatore poter leggere un grande file atomicamente ovvero in un colpo solo, ma questo non è possibile per motivi pratici e a causa delle dimensioni notevoli (ordini di grandezza del gigabyte, 10 9 caratteri) che un file può raggiungere nelle applicazioni moderne. È pertanto necessario che le regole di produzione della grammatica rispettino dei vincoli che la rendano adatta all analisi sintattica. In particolare, essa è adatta allo scopo se per tale grammatica è possibile costruire un algoritmo di analisi sintattica deterministico. La grammatica non può essere ambigua, altrimenti il problema diventerebbe inerentemente non deterministico perché esisterebbero tanti alberi sintattici per la stessa sequenza di input, inoltre la forma delle regole deve essere tale da evitare il non determinismo. Per JavaCC, la grammatica deve essere di tipo LL(1), e vedremo ora che questa è una condizione molto forte ma necessaria. 3.1 Grammatiche LL(k) e LL(1) Definizione 3.1 (grammatica LL(k)). Una grammatica è LL(k) se ammette un riconoscitore deterministico che è in grado di costruire la derivazione canonica sinistra della stringa di input usando k simboli di lookahead e leggendo la stringa da sinistra verso destra. 8

13 La prima L di LL(k) indica la direzione in cui si legge la stringa: da sinistra a destra (Left-to-right). La seconda L indica che la stringa di input viene ricostruita per derivazione sinistra (Leftmost derivation), dunque il parser è top-down. Il numero tra parentesi indica il numero di simboli di lookahead. Meccanicamente, possiamo ora dare la seguente definizione sulla falsariga della precedente. Definizione 3.2 (grammatica LL(1)). Una grammatica è LL(1) se ammette un riconoscitore deterministico che è in grado di costruire la derivazione canonica sinistra della stringa di input usando 1 simbolo di lookahead e leggendo la stringa da sinistra verso destra. Occorrono un altro paio di nozioni per far capire come si è lavorato con JavaCC. Definizione 3.3 (ricorsione sinistra). Una grammmatica presenta ricorsione sinistra (diretta) se esiste almeno una sua regola di produzione che ha forma X Xα Definizione 3.4 (prefisso comune). Una grammatica presenta un prefisso comune se esistono almeno due sue regole nella forma A αβ 1 con α V N A αβ 2 indicante una qualsiasi forma di frase. Ciò detto, condizioni necessarie ma non sufficienti affinché una grammatica sia LL(1) sono: la grammatica deve essere priva di ricorsioni sinistre; la grammatica deve essere priva di prefissi comuni. Per fortuna, quando una grammatica presenta una di queste due caratteristiche che la rendono non LL(1), è sempre possibile operare trasformazioni equivalenti che portino a rispettare le due condizioni necessarie lasciando invariato il linguaggio corrispondente. Come già sottolineato, le due condizioni di cui sopra non sono sufficienti per poter affermare che una grammatica è LL(1). Quello che si fa quando si deve scrivere un parser è: 9

14 1. presentare una grammatica non contestuale al compiler-compiler e provare a compilarla; 2. se il compiler-compiler rileva delle ambiguità perché la grammatica non è LL(1), eliminare le ricorsioni sinistre e i prefissi comuni; 3. se non ci sono alternative, aumentare il numero di lookahead solo per la regola di produzione che causa i problemi; 4. se ora la grammatica è LL(1) fermarsi, altrimenti tornare al primo passo. Illustriamo a questo punto alcune parti salienti della nostra grammatica DTDParser.jj. 3.2 Grammatica fornita a JavaCC: DTDParser.jj In sintassi EBNF, la grammatica di tutte e sole le DTD è la seguente: ctypedecl ::= <!DOCTYPE S Name (S ExternalID)? S? ( [ intsubset ] S?)? > DeclSep ::= PEReference S intsubset ::= (markupdecl DeclSep)* markupdecl ::= elementdecl AttlistDecl EntityDecl NotationDecl PI Comment I non terminali usati nella parte destra delle regole di derivazione hanno questo significato: il nonterminale S indica spazi bianchi (tabulazioni, invio, etc.); NameChar ::= Letter Digit. - _ : CombiningChar Extender Name ::= (Letter _ : ) (NameChar)* Names ::= Name (#x20 Name)* Nmtoken ::= (NameChar)+ Nmtokens ::= Nmtoken (#x20 Nmtoken)* EntityValue ::= " ([^%&"] PEReference Reference)* " " " ([^%& ] PEReference Reference)* " " 10

15 AttValue ::= " ([^<&"] Reference)* " " " ([^<& ] Reference)* " " SystemLiteral ::= ( " [^"]* " ) (" " [^ ]* " ") PubidLiteral ::= " PubidChar* " " " (PubidChar - " ")* " " PubidChar ::= #x20 #xd #xa [a-za-z0-9] [- La grammatica DTDParser.jj si basa proprio sulla grammatica ufficiale delle DTD appena illustrata. Un esempio significativo è la regola qui di seguito, corredata di azioni semantiche. ElementDeclaration elem_decl() throws ElementDeclarationException, NodeException : { /* attributi: */ Token t; Node cm; { "<!ELEMENT" t=<alpha_string> cm=content_model() <CTAG> { if(cm.getname().equals("ignore") cm.getname().equals("") (t.image.length() >= 3 && t.image.substring(0,3).tolowercase().equals("xml")) ) return null; return new ElementDeclaration(t.image, cm); In sostanza, cosa fa la regola elem_decl()? Sintatticamente, espande il non terminale elem_decl() nella sequenza: "<!ELEMENT" <ALPHA_STRING> content_model() <CTAG> dove content_model() è a sua volta un non terminale da espandere, mentre le altre tre parole sono token, ovvero identificatori letterali predefiniti. Poi aspetto pregnante della regola di produzione c è un contenuto semantico associato, con un istruzione if. 11

16 Se il content model della dichiarazione di elemento corrisponde alla stringa IGNORE (una stringa di comodo definita da noi per fare la potatura degli alberi, come verrà spiegato in seguito) oppure corrisponde alla stringa vuota, oppure inizia per i tre caratteri xml a meno delle maiuscole (cosa vietata nelle specifiche XML), allora la regola deve restituire un valore null al non terminale padre, che saprà come gestirlo opportunamente. In tutti gli altri casi, ovvero se la dichiarazione è valida, deve restituire un istanza della struttura dati ElementDeclaration contenente il nome dell elemento e la struttura ad albero del content model. Dal momento che già abbiamo dato cenno di alberi e di strutture dati personalizzate per il progetto, sarà bene ora illustrarle. Ricordiamo che il fine ultimo di questa prima fase (fase di parsing) dell applicazione è quello di rappresentare una DTD come un albero in Java, sufficientemente semplice per essere visitato da un algoritmo e per subire operazioni, ma al tempo stesso che preservi il significato del file DTD in questione. 3.3 Alberi DTD Definizione 3.5 (albero). Dato un insieme N di nodi, un albero è definito in modo induttivo in questo modo: v N è un albero; se T 1,..., T n sono alberi, allora (v, [T 1,..., T n ]) è un albero 1. Definizione 3.6 (albero etichettato). Dato un insieme A di etichette e indicando con N(T ) N l insieme dei nodi di un albero T, un albero etichettato è una coppia (T, ϕ), dove ϕ è una funzione etichettatrice tale che per ogni v N(T ), ϕ(v) A. Le etichette usate per etichettare un albero appartengono a un insieme di marche di elemento, insieme che indichiamo con EN ; chiamiamo inoltre V l insieme delle foglie del generico albero. Per rappresentare in memoria l albero di una DTD ai fini di poter applicare alla sua radice vari algoritmi, si è scelto di scrivere da zero una struttura dati molto semplice: la struttura Node (nodo), avente le seguenti variabili: private String name; public Node[] children; 1 Per alleggerire la notazione, d ora in poi denoteremo con C i sottoalberi di T, nel senso che C = [T 1,..., T n ], qualora sia rilevante sapere che T è un sottoalbero interno di una DTD. 12

17 <!ELEMENT biblioteca (libro+,registro?,impiegato)> <!ELEMENT libro (autore,titolo)> <!ELEMENT registro (#PCDATA)> <!ELEMENT impiegato (#PCDATA)> <!ELEMENT autore (#PCDATA)> <!ELEMENT titolo (#PCDATA)> Figura 3.1: Esempio di DTD Figura 3.2: Esempio di albero DTD 13

18 Tali variabili rappresentano rispettivamente il nome del nodo e l elenco dei suoi figli come array di Node, eventualmente vuoto. Aggiungendo nodi in modo gerarchico tra loro grazie a un opportuno metodo void addchild(node n, int numero_del_figlio) si ottiene proprio una struttura dati ad albero. In particolare, si tratta di un albero n-ario ordinato. Per una spiegazione degli altri metodi presenti nella classe Node si veda l ultimo capitolo. 3.4 Semplificazioni Una delle caratteristiche di XML consiste nelle tante opzioni possibili quando si modellano i sottoelementi di un documento nelle DTD. Nella stesura del content model di una DTD, c è a disposizione una certa gamma di operatori, che sono quelli tipici delle espressioni regolari. Per ciascun sottoelemento è possibile specificare se esso è opzionale (? ), se esso può comparire molteplici volte ( se zero o più volte, e + se una o più volte), se alcuni sottoelementi sono alternativi tra di loro ( cioè OR logico) oppure sono raggruppati in sequenze in cui tutti devono comparire (, cioè AND logico). È nostra intenzione concentrarci su un sottoinsieme di DTD, per semplicità. Facciamo pertanto le seguenti ipotesi: consideriamo solo le dichiarazioni di elemento, eventualmente annidate; scartiamo gli attributi, i quali del resto possono essere pensati come un caso particolare degli elementi; ne consegue che di fatto consideriamo solo elementi non vuoti; ciò non è particolarmente limitativo né deve sconvolgere in quanto gli elementi vuoti sono sempre trattabili al pari di elementi #PCDATA col vincolo di avere contenuto nullo; non prendiamo in considerazione sequenze di operatori unari (?, *, + ) dal momento che esiste sempre una rappresentazione equivalente più concisa che usi un singolo operatore; ogni nodo corrisponde a un elemento, o a un tipo di elemento, o a un operatore. 14

19 L albero che il parser costruisce dalla DTD che riceve in ingresso è un albero etichettato sui nodi. Introduciamo l insieme di operatori OP = {?, *, +, AND, OR per poter rappresentare vincoli su opzionalità, ripetizioni, sequenze, alternative tra elementi. L operatore AND causa una sequenza di elementi tutti obbligatori, l operatore OR un alternativa di elementi (una tra le alternative deve essere presente), l operatore? l opzionalità, mentre gli operatori * e + rappresentano ripetizione di elementi (zero o più volte, una o più volte, rispettivamente). In tutti gli alberi DTD, l etichetta del nodo radice appartiene a EN e tale nodo possiede un solo arco uscente. Osservazione 3.7. Sotto le ipotesi fatte, gli unici nodi con più di un arco uscente possono essere solamente quelli etichettati AND o OR, e mai nodi con nome di elemento. Infine, si ha che tutti i nodi etichettati da tipi di elemento sono foglie dell albero. Sia ET l insieme dei possibili tipi di elemento base; per la nostra applicazione, ET = {#PCDATA, ANY. Con l armamentario formale che abbiamo definito, precisiamo ora la nozione di DTD vista come albero. Definizione 3.8 (albero DTD). Una DTD è un albero etichettato (T, ϕ T ) definito dall insieme di etichette (EN ET OP), e gode delle seguenti proprietà: 1. T è nella forma (v, [T ]), con ϕ T (v) EN ; 2. per ogni sottoalbero (v, C) di T, ϕ T (v) (EN OP); 3. per ogni sottoalbero foglia v di T, ϕ T (v) ET ; 4. per ogni sottoalbero (v, C) di T, se ϕ T (v) {OR, AND allora C = [T 1,..., T n ], con n > 1; 5. per ogni sottoalbero (v, C) di T, se ϕ T (v) ({?, *, + EN ) allora C = [T ]. L introduzione degli operatori OP = {?, *, +, AND, OR permette di rappresentare univocamente e formalmente la struttura di tutte le DTD possibili. Introdurre l operatore AND è stato necessario per poter distinguere tra il caso di un elemento contenente un alternativa tra sequenze (per esempio <!ELEMENT a(b c1,c2))>) e il caso di un elemento contenente invece l alternativa tra tutti gli elementi di una sequenza (<!ELEMENT a(b c1 c2)>). 15

20 Capitolo 4 Metriche di similarità La similarità, che gioca un ruolo di notevole importanza in diversi campi di ricerca, funge da principio di organizzazione e catalogazione in molti aspetti pratici: è usata dagli uomini per classificare concetti ed enti anche astratti, oltre che per formare nuovi concetti e generalizzazioni. Da un punto di vista informatico si distinguono astrattamente diversi possibili tipi di similarità misurabile: 1. a livello di dati; 2. a livello di tipi di dato, cioè di schemi o modelli o strutture, a seconda del dominio di applicazione in cui si opera; 3. a entrambi i livelli, confrontando tanto i dati quanto i loro tipi. Il primo modo è utile se si vogliono creare cluster di informazioni relativi allo stesso argomento e classificare tali informazioni; ad esempio, raggruppare immagini grafiche che riguardano lo stesso soggetto. Il secondo approccio di similarità possibile, relativo ai tipi, diventa rilevante per lo schema clustering oppure nell ambito di integrazioni di tanti schemi che descrivono sì lo stesso tipo di informazione ma usano strutture dati diverse. È questo il concetto su cui opera il progetto in questione. Infine, la similarità sia di dato che di tipo può essere usata per identificare un generatore di dati comune e per applicare a questi ultimi le proprietà specificate nel tipo. Ortogonalmente a questa prima classificazione, la similarità si può concentrare sui contenuti oppure sulle strutture di dati coinvolti. Poiché una quantità enorme di informazioni scambiate sul Web sta man mano aderendo al formato XML e le applicazioni hanno sempre più bisogno di parlare XML (ricevere, accedere, manipolare documenti XML con vincoli 16

21 e condizioni più o meno rilassati e risultati più o meno approssimati), è logico comprendere come la possibilità di valutare la similarità sia utile e attuale. 4.1 Similarità tra DTD: princìpi di base Confrontando due file DTD ovvero i due alberi corrispondenti, può capitare che alcuni elementi presenti nella prima DTD manchino nella seconda oppure che la prima ne abbia in eccesso rispetto all altra, o viceversa. Non solo: gli elementi, pur essendo comuni, potrebbero essere disposti in un ordine (gerarchia) differente tra i due alberi. E ancora: un sottoinsieme delle marche di una delle DTD potrebbero essere non proprio identiche ma concettualmente vicine a marche dell altro file, secondo relazioni definite in un dizionario. Questo implicherebbe la necessità di gestire, oltre all uguaglianza tra nomi di marche, anche la similarità semantica tra essi. Il lettore avrà già intuito che il problema di definire una metrica per stabilire la similarità tra due DTD è arduo, e il grado di raffinatezza dell algoritmo che si vuole progettare è inversamente proporzionale alla facilità di concepirlo, pianificarlo, gestirlo informaticamente a livello algoritmico e di codice. Non c è limite alla granularità che potremmo implementare, a scapito però di complicazioni concettuali. Per fini pratici scegliamo una raffinatezza limitata operando alcune ipotesi semplificative. Tanto per cominciare, consideriamo solo l uguaglianza tra marche e mai una vicinanza concettuale tra esse: o una certa marca è presente in entrambe le DTD in input (e in questo caso il grado di similarità restituita sarà maggiore di 0%), oppure due marche in posizioni corrispondenti hanno nomi diversi. Non ci sono vie di mezzo. Un altra semplificazione che operiamo è quella di confrontare solo le marche di tipo ELEMENT e di scartare a priori i vari ATTLIST ed ENTITY. Del resto, questa scelta era stata messa in atto già a livello di parsing. 4.2 Come valutare le differenze L algoritmo di similarità, in buona sostanza, consiste nell identificazione e successiva valutazione numerica di: elementi comuni, cioè che appaiono in entrambe le DTD; elementi differenti: quelli che compaiono solo in una delle due DTD. Per quanto riguarda la valutazione degli elementi, questa avviene prendendo in considerazione principalmente due fattori. 17

22 1. L algoritmo assegna un peso a seconda del livello a cui gli elementi comuni sono situati nei due alberi da confrontare. Elementi a livelli più alti, cioè vicini alla radice del documento, devono possedere un coefficiente di peso maggiore dei sottoelementi più periferici, quelli profondamente annidati nell albero, vicino alla sua fronda. 2. Successivamente, la valutazione prende in considerazione la struttura degli elementi in comune. Trovare in comune due elementi complessi i quali sono a loro volta grandi sottoalberi deve premiare di più che trovare in comune due elementi foglia. Introdurremo ora alcune funzioni matematiche ricorsive di ausilio per questa prima parte dell algoritmo, quella di parsing. 4.3 La funzione livello Come già accennato, è auspicabile che la misura di similarità sia coerente col fatto che elementi in alto nell albero, dunque vicini alla radice, abbiano un peso maggiore di quelli più periferici. Il concetto di livello di un elemento è strettamente collegato a quello della sua altezza nell albero, oppure specularmente della sua profondità. Dato un albero T che rappresenta una DTD, definiamo il livello di T come il numero dei nodi, non contando gli operatori, toccati lungo il massimo cammino possibile in T, dalla radice verso una foglia. Il motivo per cui i nodi in OP non contano ai fini della funzione livello è il seguente: i nodi operatore di una DTD influenzano soltanto la larghezza degli alberi corrispondenti alla classe di XML associati, non la loro profondità; siccome a noi in questo momento interessa la funzione livello, che associa a ogni nodo un valore dipendente proprio dalla sua profondità nell albero, ecco spiegato perché questi operatori non incrementano il conteggio lungo i cammini radice-foglia. Formalizziamo quanto appena stabilito. Definizione 4.1 (funzione livello). Sia T = (v, [T 1,..., T n ]) un sottoalbero di una DTD. Allora la funzione livello è così definita: 1 + max n i=1 level(t i ) se T EN level(t ) = max n i=1 level(t i ) se T OP 0 altrimenti. Ricordiamo che EN è l insieme delle marche elemento, mentre OP denota gli operatori {?, *, +, AND, OR. Nella definizione precedente, inoltre, T i denota il generico eventuale sottoalbero figlio di T. 18

23 4.4 Rilevanza di un nodo Chiamiamo l = level(d) il livello di una DTD D (del suo nodo radice) e γ = 2 un fattore di rilevanza di un livello dell albero di D rispetto al successivo. Il nodo radice ha dunque rilevanza r l = γ l ; quelli del livello inferiore sono divisi per un fattore γ e hanno dunque rilevanza γ l 1, e così via. Definizione 4.2 (rilevanza). Per un generico livello i dell albero corrispondente a una DTD D, la rilevanza vale γ l i. Dopo aver parlato di level, andiamo ora a definire una seconda, fondamentale funzione che associa un valore a ciascun nodo. 4.5 La funzione peso Abbiamo scritto di voler considerare la più semplice struttura possibile di una DTD. Questa scelta è particolarmente sensata per applicazioni che lavorino, invece che con sole DTD in input come la nostra, con un mix di file DTD e file XML in ingresso; si veda ad esempio [BGM]. Per motivi di semplicità, non prendiamo in considerazione gli elementi opzionali o ripetuti. Inoltre, per quanto riguarda elementi alternativi (in OR logico), l algoritmo dovrà considerare solo uno di tali elementi: presumibilmente quello con la struttura (sottoalbero) più semplice. Si capisce già che la seguente funzione ricorsiva assocerà un valore diverso a ogni nodo a seconda che esso sia una marca di elemento oppure un vincolo operatore. Definizione 4.3 (funzione peso). Sia D una DTD con r l rilevanza corrispondente. Allora si definisce la seguente funzione peso 1 : se D {#PCDATA, ANY r l 0 se D {*,? weight(d, r l ) se D = + ; D è il figlio di D weight(d, r l ) = n i=1 weight(d i, r l ) se D = AND ; D i sono i figli di D min n i=1 weight(d i, r l ) n i=1 weight(d i, r l ) + r γ l se D = OR ; D i sono i figli di D altrimenti. Cominciamo a illustrare l ultimo caso della funzione, il più importante e delicato. Dice questo: se il nodo di cui occorre calcolare il peso è una marca 1 Con un leggero abuso di notazione, indichiamo con D non la DTD nel suo insieme ma il nodo che inizialmente è il nodo radice della DTD stessa, mentre nelle chiamate ricorsive D sarà meramente la radice del sottoalbero attuale. 19

24 un nome di elemento, allora aggiungi r l al subtotale della similarità poi applica l algoritmo ai vari figli, dividendo per un fattore γ = 2 il secondo parametro (r l ), che dalla prossima chiamata, inclusa, è quindi aggiornato. Il significato del quarto e del quinto caso si intuisce facilmente. Se il nodo di cui vogliamo calcolare il peso è un vincolo AND, allora il suo peso sarà uguale alla somma dei pesi di tutti i figli, mantenendo il parametro r l di cui sopra immutato. Se il nodo è invece un OR, il suo peso è il minimo dei pesi di tutti i figli del nodo OR stesso, anche qui lasciando il parametro di rilevanza immutato; esplorare solo il sottoalbero figlio con peso minimo corrisponde a selezionare il sottoalbero con la struttura DTD più semplice possibile. Continuiamo ad analizzare le varie possibilità della funzione dal basso verso l alto. Il terzo caso dice che il peso di un nodo di vincolo + è il peso del suo figlio, che tra l altro è per forza di cose un figlio unico, per come abbiamo costruito l albero a partire dalla DTD in fase di parsing. La seconda opzione della funzione peso è quella che essa incontri un nodo * o? ; in questi casi, coerentemente con le ipotesi semplificative sugli alberi DTD, appiattiamo il vincolo di cardinalità al valore 0, potando di fatto il nodo in questione con tutti i suoi eventuali figli. Infine, il primo caso elencato della funzione considera i nodi foglia, che per ipotesi possono essere solo #PCDATA o ANY. A essi la funzione associa direttamente il valore attuale del parametro di rilevanza r l, che sarà tanto più piccolo quanto la foglia è profonda, in quanto a ogni livello si ha un aumento esponenziale del denominatore dell espressione. La rilevanza del primo livello, in altre parole della radice, vale r l = γ l ; la rilevanza del secondo livello r l /γ = r l /2; quella del terzo livello r l /γ 2 = r l /4 e così via. Pertanto, trovare una marca di elemento in comune tra i due alberi a un livello i-esimo aggiungerà al subtotale di similarità una quantità r l /γ i 1, il che rispetta uno degli obiettivi iniziali: più un nodo è vicino alla radice, più esso pesa nel computo in positivo o in negativo (a seconda che sia in comune tra le due DTD o meno, rispettivamente). La figura 4.1 a pagina 21 rappresenta un esempio dei valori risultanti dalle due funzioni level e weight su ogni nodo. 4.6 Ruolo del parametro γ Al crescere del valore assegnato al numero naturale γ, l algoritmo assegna maggiore rilevanza a elementi in comune che si trovano a un livello alto vicino alla radice piuttosto che a elementi periferici, prossimi alla fronda dell albero, in definitiva strutturalmente poco rilevanti. 20

25 Figura 4.1: Esempio di livelli e pesi Se poniamo γ = 1, tutte le informazioni sono valutate rilevanti alla stessa maniera, perciò il fatto che un elemento appaia al terzo o al quarto livello della struttura dati non conta. Viceversa, la scelta di porre γ = 2 fa sì che i nodi di un certo livello abbiano rilevanza doppia rispetto ai loro figli. Con γ 3 il divario sarebbe ancora maggiore. In questa sede noi supporremo sempre che γ valga 2. L utente che volesse fare esperimenti con altri valori del parametro può modificare la riga private int GAMMA = 2 all inizio del file DTDSimilarity.java. 4.7 Casi particolari di input Prima di illustrare il caso generale dell algoritmo, adatto a computare la similarità di qualsiasi coppia di DTD, citiamo due situazioni limite. Il primo caso particolare su cui vale la pena spendere qualche parola è quello in cui i due alberi DTD ottenuti dal parser siano vuoti, ovvero contengano zero nodi. Questo può capitare se i due file di testo forniti in input sono proprio file vuoti di 0 byte, ma non solo: tenendo a mente che stiamo prendendo in considerazione le dichiarazioni di elemento, un albero vuoto può risultare anche da un file DTD che contiene sì zero dichiarazioni di elemento, ma magari ne contiene di altre: di esse viene controllata la 21

Semantica operazionale dei linguaggi di Programmazione

Semantica operazionale dei linguaggi di Programmazione Semantica operazionale dei linguaggi di Programmazione Oggetti sintattici e oggetti semantici Rosario Culmone, Luca Tesei Lucidi tratti dalla dispensa Elementi di Semantica Operazionale R. Barbuti, P.

Dettagli

Appunti di Logica Matematica

Appunti di Logica Matematica Appunti di Logica Matematica Francesco Bottacin 1 Logica Proposizionale Una proposizione è un affermazione che esprime un valore di verità, cioè una affermazione che è VERA oppure FALSA. Ad esempio: 5

Dettagli

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it UML: Class Diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania Class Diagram Forniscono una vista strutturale

Dettagli

Esercizi Capitolo 5 - Alberi

Esercizi Capitolo 5 - Alberi Esercizi Capitolo 5 - Alberi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle

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

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione.

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione. Grafi ed Alberi Pag. /26 Grafi ed Alberi In questo capitolo richiameremo i principali concetti di due ADT che ricorreranno puntualmente nel corso della nostra trattazione: i grafi e gli alberi. Naturale

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Introduzione ad Access

Introduzione ad Access Introduzione ad Access Luca Bortolussi Dipartimento di Matematica e Informatica Università degli studi di Trieste Access E un programma di gestione di database (DBMS) Access offre: un supporto transazionale

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Informatica Applicata

Informatica Applicata Ing. Irina Trubitsyna Concetti Introduttivi Programma del corso Obiettivi: Il corso di illustra i principi fondamentali della programmazione con riferimento al linguaggio C. In particolare privilegia gli

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile Problemi connessi all utilizzo di un numero di bit limitato Abbiamo visto quali sono i vantaggi dell utilizzo della rappresentazione in complemento alla base: corrispondenza biunivoca fra rappresentazione

Dettagli

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Lezione 1 Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Definizione di utente e di programmatore L utente è qualsiasi persona che usa il computer anche se non è in grado di programmarlo

Dettagli

Le formule possono essere scritte utilizzando un insieme di funzioni predefinite che Excel mette a disposizione, raggruppate per argomento.

Le formule possono essere scritte utilizzando un insieme di funzioni predefinite che Excel mette a disposizione, raggruppate per argomento. Excel: le funzioni Le formule possono essere scritte utilizzando un insieme di funzioni predefinite che Excel mette a disposizione, raggruppate per argomento. DEFINIZIONE: Le funzioni sono dei procedimenti

Dettagli

Flusso a costo minimo e simplesso su reti

Flusso a costo minimo e simplesso su reti Flusso a costo minimo e simplesso su reti La particolare struttura di alcuni problemi di PL può essere talvolta utilizzata per la progettazione di tecniche risolutive molto più efficienti dell algoritmo

Dettagli

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.

Dettagli

Algoritmo euclideo, massimo comun divisore ed equazioni diofantee

Algoritmo euclideo, massimo comun divisore ed equazioni diofantee Algoritmo euclideo, massimo comun divisore ed equazioni diofantee Se a e b sono numeri interi, si dice che a divide b, in simboli: a b, se e solo se esiste c Z tale che b = ac. Si può subito notare che:

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Parte 2. Determinante e matrice inversa

Parte 2. Determinante e matrice inversa Parte. Determinante e matrice inversa A. Savo Appunti del Corso di Geometria 013-14 Indice delle sezioni 1 Determinante di una matrice, 1 Teorema di Cramer (caso particolare), 3 3 Determinante di una matrice

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Ricerca Operativa Branch-and-Bound per problemi di Programmazione Lineare Intera

Ricerca Operativa Branch-and-Bound per problemi di Programmazione Lineare Intera Ricerca Operativa Branch-and-Bound per problemi di Programmazione Lineare Intera L. De Giovanni AVVERTENZA: le note presentate di seguito non hanno alcuna pretesa di completezza, né hanno lo scopo di sostituirsi

Dettagli

Esercizi per il corso di Algoritmi e Strutture Dati

Esercizi per il corso di Algoritmi e Strutture Dati 1 Esercizi per il corso di Algoritmi e Strutture Dati Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, né in C++, etc. ). Di tutti gli algoritmi

Dettagli

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Algoritmi Algoritmi Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Il procedimento (chiamato algoritmo) è composto da passi elementari

Dettagli

Analisi dei requisiti e casi d uso

Analisi dei requisiti e casi d uso Analisi dei requisiti e casi d uso Indice 1 Introduzione 2 1.1 Terminologia........................... 2 2 Modello della Web Application 5 3 Struttura della web Application 6 4 Casi di utilizzo della Web

Dettagli

Manipolazione di testi: espressioni regolari

Manipolazione di testi: espressioni regolari Manipolazione di testi: espressioni regolari Un meccanismo per specificare un pattern, che, di fatto, è la rappresentazione sintetica di un insieme (eventualmente infinito) di stringhe: il pattern viene

Dettagli

Rapida Introduzione all uso del Matlab Ottobre 2002

Rapida Introduzione all uso del Matlab Ottobre 2002 Rapida Introduzione all uso del Matlab Ottobre 2002 Tutti i tipi di dato utilizzati dal Matlab sono in forma di array. I vettori sono array monodimensionali, e così possono essere viste le serie temporali,

Dettagli

Percorsi di matematica per il ripasso e il recupero

Percorsi di matematica per il ripasso e il recupero Giacomo Pagina Giovanna Patri Percorsi di matematica per il ripasso e il recupero 1 per la Scuola secondaria di secondo grado UNITÀ CMPIONE Edizioni del Quadrifoglio à t i n U 1 Insiemi La teoria degli

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Elementi di semantica denotazionale ed operazionale

Elementi di semantica denotazionale ed operazionale Elementi di semantica denotazionale ed operazionale 1 Contenuti! sintassi astratta e domini sintattici " un frammento di linguaggio imperativo! semantica denotazionale " domini semantici: valori e stato

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

Ambienti di sviluppo integrato

Ambienti di sviluppo integrato Ambienti di sviluppo integrato Un ambiente di sviluppo integrato (IDE - Integrated Development Environment) è un ambiente software che assiste i programmatori nello sviluppo di programmi Esso è normalmente

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

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione Sede di Latina Corso di Laurea in Ingegneria dell Informazione Consorzio Nettuno La fase di realizzazione si occupa

Dettagli

Lezioni di Matematica 1 - I modulo

Lezioni di Matematica 1 - I modulo Lezioni di Matematica 1 - I modulo Luciano Battaia 16 ottobre 2008 Luciano Battaia - http://www.batmath.it Matematica 1 - I modulo. Lezione del 16/10/2008 1 / 13 L introduzione dei numeri reali si può

Dettagli

ALGEBRA I: CARDINALITÀ DI INSIEMI

ALGEBRA I: CARDINALITÀ DI INSIEMI ALGEBRA I: CARDINALITÀ DI INSIEMI 1. CONFRONTO DI CARDINALITÀ E chiaro a tutti che esistono insiemi finiti cioè con un numero finito di elementi) ed insiemi infiniti. E anche chiaro che ogni insieme infinito

Dettagli

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 1.1 Che cos è un algoritmo CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 Gli algoritmi sono metodi per la soluzione di problemi. Possiamo caratterizzare un problema mediante i dati di cui si dispone all inizio

Dettagli

Alberi binari. Ilaria Castelli castelli@dii.unisi.it A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Alberi binari. Ilaria Castelli castelli@dii.unisi.it A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione Alberi binari Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/2010 I. Castelli Alberi binari, A.A. 2009/2010 1/20 Alberi binari

Dettagli

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni Funzioni Le funzioni Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, consente di calcolare un risultato, come avviene anche per una funzione matematica

Dettagli

Analisi dei requisiti e casi d uso

Analisi dei requisiti e casi d uso Analisi dei requisiti e casi d uso Indice 1 Introduzione 2 1.1 Terminologia........................... 2 2 Modello del sistema 4 2.1 Requisiti hardware........................ 4 2.2 Requisiti software.........................

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica L uso delle funzioni in C++ Claudio De Stefano - Corso di Fondamenti di Informatica 1 Funzioni Nel C++ è possibile scomporre problemi complessi in moduli più semplici

Dettagli

Algebra Relazionale. algebra relazionale

Algebra Relazionale. algebra relazionale Algebra Relazionale algebra relazionale Linguaggi di Interrogazione linguaggi formali Algebra relazionale Calcolo relazionale Programmazione logica linguaggi programmativi SQL: Structured Query Language

Dettagli

How to Develop Accessible Linux Applications

How to Develop Accessible Linux Applications How to Develop Accessible Linux Applications Sharon Snider Copyright 2002 IBM Corporation v1.1, 2002-05-03 Diario delle Revisioni Revisione v1.1 2002-05-03 Revisionato da: sds Convertito in DocBook XML

Dettagli

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi TIPI DI DATO Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe di caratteri e quasi sempre anche collezioni di oggetti,

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

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate.

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate. Comandi filtro: sed Il nome del comando sed sta per Stream EDitor e la sua funzione è quella di permettere di editare il testo passato da un comando ad un altro in una pipeline. Ciò è molto utile perché

Dettagli

ALGEBRA: LEZIONI DAL 13 OTTOBRE AL 3 NOVEMBRE

ALGEBRA: LEZIONI DAL 13 OTTOBRE AL 3 NOVEMBRE ALGEBRA: LEZIONI DAL 13 OTTOBRE AL 3 NOVEMBRE 1 DIPENDENZA E INDIPENDENZA LINEARE Se ho alcuni vettori v 1, v 2,, v n in uno spazio vettoriale V, il sottospazio 1 W = v 1,, v n di V da loro generato è

Dettagli

razionali Figura 1. Rappresentazione degli insiemi numerici Numeri reali algebrici trascendenti frazionari decimali finiti

razionali Figura 1. Rappresentazione degli insiemi numerici Numeri reali algebrici trascendenti frazionari decimali finiti 4. Insiemi numerici 4.1 Insiemi numerici Insieme dei numeri naturali = {0,1,,3,,} Insieme dei numeri interi relativi = {..., 3,, 1,0, + 1, +, + 3, } Insieme dei numeri razionali n 1 1 1 1 = : n, m \{0}

Dettagli

Ricapitoliamo. Ricapitoliamo

Ricapitoliamo. Ricapitoliamo Ricapitoliamo Finora ci siamo concentrati sui processi computazionali e sul ruolo che giocano le procedure nella progettazione dei programmi In particolare, abbiamo visto: Come usare dati primitivi (numeri)

Dettagli

if t>=0 x=1; else x=0; end fornisce, nella variabile x, il valore della funzione gradino a tempi continui, calcolata in t.

if t>=0 x=1; else x=0; end fornisce, nella variabile x, il valore della funzione gradino a tempi continui, calcolata in t. Il programma MATLAB In queste pagine si introduce in maniera molto breve il programma di simulazione MAT- LAB (una abbreviazione di MATrix LABoratory). Introduzione MATLAB è un programma interattivo di

Dettagli

Indicizzazione terza parte e modello booleano

Indicizzazione terza parte e modello booleano Reperimento dell informazione (IR) - aa 2014-2015 Indicizzazione terza parte e modello booleano Gruppo di ricerca su Sistemi di Gestione delle Informazioni (IMS) Dipartimento di Ingegneria dell Informazione

Dettagli

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo g.cirillo@unina.it

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo g.cirillo@unina.it INTRODUZIONE, LINGUAGGIO, HANDS ON Giuseppe Cirillo g.cirillo@unina.it Il linguaggio C 1972-Dennis Ritchie 1978-Definizione 1990-ANSI C 1966 Martin Richars (MIT) Semplificando CPL usato per sviluppare

Dettagli

Sistemi avanzati di gestione dei Sistemi Informativi

Sistemi avanzati di gestione dei Sistemi Informativi Esperti nella gestione dei sistemi informativi e tecnologie informatiche Sistemi avanzati di gestione dei Sistemi Informativi Docente: Email: Sito: Eduard Roccatello eduard@roccatello.it http://www.roccatello.it/teaching/gsi/

Dettagli

FUNZIONI AVANZATE DI EXCEL

FUNZIONI AVANZATE DI EXCEL FUNZIONI AVANZATE DI EXCEL Inserire una funzione dalla barra dei menu Clicca sulla scheda "Formule" e clicca su "Fx" (Inserisci Funzione). Dalla finestra di dialogo "Inserisci Funzione" clicca sulla categoria

Dettagli

Come realizzare una buona presentazione (traduzione libera a cura della redazione di EpiCentro)

Come realizzare una buona presentazione (traduzione libera a cura della redazione di EpiCentro) Come realizzare una buona presentazione (traduzione libera a cura della redazione di EpiCentro) Quando si realizzano dei documenti visivi per illustrare dati e informazioni chiave, bisogna sforzarsi di

Dettagli

Parte 3. Rango e teorema di Rouché-Capelli

Parte 3. Rango e teorema di Rouché-Capelli Parte 3. Rango e teorema di Rouché-Capelli A. Savo Appunti del Corso di Geometria 203-4 Indice delle sezioni Rango di una matrice, 2 Teorema degli orlati, 3 3 Calcolo con l algoritmo di Gauss, 6 4 Matrici

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

ALGORITMI 1 a Parte. di Ippolito Perlasca. Algoritmo:

ALGORITMI 1 a Parte. di Ippolito Perlasca. Algoritmo: ALGORITMI 1 a Parte di Ippolito Perlasca Algoritmo: Insieme di regole che forniscono una sequenza di operazioni atte a risolvere un particolare problema (De Mauro) Procedimento che consente di ottenere

Dettagli

Programmazione Funzionale

Programmazione Funzionale Programmazione Funzionale LP imperativi: apparenza simile modello di progettazione = macchina fisica Famiglia dei LP imperativi = progressivo miglioramento del FORTRAN Obiezione: pesante aderenza dei LP

Dettagli

GUIDA RAPIDA emagister-agora Edizione BASIC

GUIDA RAPIDA emagister-agora Edizione BASIC GUIDA RAPIDA emagister-agora Edizione BASIC Introduzione a emagister-agora Interfaccia di emagister-agora Configurazione dell offerta didattica Richieste d informazioni Gestione delle richieste d informazioni

Dettagli

Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN)

Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN) Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN) System Overview di Mattia Bargellini 1 CAPITOLO 1 1.1 Introduzione Il seguente progetto intende estendere

Dettagli

Le funzionalità di un DBMS

Le funzionalità di un DBMS Le funzionalità di un DBMS Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: DBMS.pdf Sistemi Informativi L-A DBMS: principali funzionalità Le

Dettagli

Dall italiano alla logica proposizionale

Dall italiano alla logica proposizionale Rappresentare l italiano in LP Dall italiano alla logica proposizionale Sandro Zucchi 2009-10 In questa lezione, vediamo come fare uso del linguaggio LP per rappresentare frasi dell italiano. Questo ci

Dettagli

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table Universita' di Ferrara Dipartimento di Matematica e Informatica Algoritmi e Strutture Dati Rappresentazione concreta di insiemi e Hash table Copyright 2006-2015 by Claudio Salati. Lez. 9a 1 Rappresentazione

Dettagli

Università degli Studi di Parma. Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica

Università degli Studi di Parma. Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica A.A. 2007-08 CORSO DI INGEGNERIA DEL SOFTWARE Prof. Giulio Destri http://www.areasp.com (C) 2007 AreaSP for

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

EQUAZIONI E DISEQUAZIONI POLINOMIALI E COLLEGAMENTI CON LA GEOMETRIA ELEMENTARE

EQUAZIONI E DISEQUAZIONI POLINOMIALI E COLLEGAMENTI CON LA GEOMETRIA ELEMENTARE EQUAZIONI E DISEQUAZIONI POLINOMIALI E COLLEGAMENTI CON LA GEOMETRIA ELEMENTARE 1. EQUAZIONI Definizione: un equazione è un uguaglianza tra due espressioni letterali (cioè in cui compaiono numeri, lettere

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Funzioni di base. Manualino OE6. Outlook Express 6

Funzioni di base. Manualino OE6. Outlook Express 6 Manualino OE6 Microsoft Outlook Express 6 Outlook Express 6 è un programma, incluso nel browser di Microsoft Internet Explorer, che ci permette di inviare e ricevere messaggi di posta elettronica. È gratuito,

Dettagli

ALGEBRA I: NUMERI INTERI, DIVISIBILITÀ E IL TEOREMA FONDAMENTALE DELL ARITMETICA

ALGEBRA I: NUMERI INTERI, DIVISIBILITÀ E IL TEOREMA FONDAMENTALE DELL ARITMETICA ALGEBRA I: NUMERI INTERI, DIVISIBILITÀ E IL TEOREMA FONDAMENTALE DELL ARITMETICA 1. RICHIAMI SULLE PROPRIETÀ DEI NUMERI NATURALI Ho mostrato in un altra dispensa come ricavare a partire dagli assiomi di

Dettagli

APPUNTI DI MATEMATICA LE DISEQUAZIONI NON LINEARI

APPUNTI DI MATEMATICA LE DISEQUAZIONI NON LINEARI APPUNTI DI MATEMATICA LE DISEQUAZIONI NON LINEARI Le disequazioni fratte Le disequazioni di secondo grado I sistemi di disequazioni Alessandro Bocconi Indice 1 Le disequazioni non lineari 2 1.1 Introduzione.........................................

Dettagli

Classi ed Oggetti in JAVA

Classi ed Oggetti in JAVA Classi ed Oggetti in JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA Uff. 0577233606 rigutini@dii.unisi.it www.dii.unisi.it/~rigutini/

Dettagli

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2) Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2) Definiamo innanzitutto una relazione d ordine tra le funzioni. Siano φ e ψ funzioni

Dettagli

2. GESTIONE DOCUMENTI NON SBN

2. GESTIONE DOCUMENTI NON SBN Istituto centrale per il catalogo unico delle biblioteche italiane e per le informazioni bibliografiche APPLICATIVO SBN-UNIX IN ARCHITETTURA CLIENT/SERVER 2. GESTIONE DOCUMENTI NON SBN Manuale d uso (Versione

Dettagli

10. Insiemi non misurabili secondo Lebesgue.

10. Insiemi non misurabili secondo Lebesgue. 10. Insiemi non misurabili secondo Lebesgue. Lo scopo principale di questo capitolo è quello di far vedere che esistono sottoinsiemi di R h che non sono misurabili secondo Lebesgue. La costruzione di insiemi

Dettagli

SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO

SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO CLSMS SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO Sommario e introduzione CLSMS SOMMARIO INSTALLAZIONE E CONFIGURAZIONE... 3 Parametri di configurazione... 4 Attivazione Software...

Dettagli

Lezione su Informatica di Base

Lezione su Informatica di Base Lezione su Informatica di Base Esplora Risorse, Gestione Cartelle, Alcuni tasti di scelta Rapida Domenico Capano D.C. Viterbo: Lunedì 21 Novembre 2005 Indice Una nota su questa lezione...4 Introduzione:

Dettagli

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme G Pareschi Principio di induzione Il Principio di Induzione (che dovreste anche avere incontrato nel Corso di Analisi I) consente di dimostrare Proposizioni il cui enunciato è in funzione di un numero

Dettagli

Esempi di algoritmi. Lezione III

Esempi di algoritmi. Lezione III Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni

Dettagli

1. Intorni di un punto. Punti di accumulazione.

1. Intorni di un punto. Punti di accumulazione. 1. Intorni di un punto. Punti di accumulazione. 1.1. Intorni circolari. Assumiamo come distanza di due numeri reali x e y il numero non negativo x y (che, come sappiamo, esprime la distanza tra i punti

Dettagli

Introduzione alla Teoria degli Errori

Introduzione alla Teoria degli Errori Introduzione alla Teoria degli Errori 1 Gli errori di misura sono inevitabili Una misura non ha significato se non viene accompagnata da una ragionevole stima dell errore ( Una scienza si dice esatta non

Dettagli

Verifica che una grammatica sia Context Free nel GrammaReader

Verifica che una grammatica sia Context Free nel GrammaReader Verifica che una grammatica sia Context Free nel GrammaReader Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar Pasquale Lops In questa dispensa si descrivono alcune soluzioni per verificare

Dettagli

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java Riassunto Rassegna API - 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 17 3 maggio 2015! Programmazione

Dettagli

Import Dati Release 4.0

Import Dati Release 4.0 Piattaforma Applicativa Gestionale Import Dati Release 4.0 COPYRIGHT 2000-2005 by ZUCCHETTI S.p.A. Tutti i diritti sono riservati.questa pubblicazione contiene informazioni protette da copyright. Nessuna

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Albero semantico. Albero che mette in corrispondenza ogni formula con tutte le sue possibili interpretazioni.

Albero semantico. Albero che mette in corrispondenza ogni formula con tutte le sue possibili interpretazioni. Albero semantico Albero che mette in corrispondenza ogni formula con tutte le sue possibili interpretazioni. A differenza dell albero sintattico (che analizza la formula da un punto di vista puramente

Dettagli

Introduzione al linguaggio C Gli array

Introduzione al linguaggio C Gli array Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome

Dettagli

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java]

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java] Desideriamo realizzare una applicazione web che ci consenta di calcolare il fattoriale di un numero. L'esercizio in sé non particolarmente difficile, tuttavia esso ci consentirà di affrontare il problema

Dettagli

Elementi di Statistica

Elementi di Statistica Elementi di Statistica Contenuti Contenuti di Statistica nel corso di Data Base Elementi di statistica descrittiva: media, moda, mediana, indici di dispersione Introduzione alle variabili casuali e alle

Dettagli

RAPPRESENTAZIONE BINARIA DEI NUMERI. Andrea Bobbio Anno Accademico 1996-1997

RAPPRESENTAZIONE BINARIA DEI NUMERI. Andrea Bobbio Anno Accademico 1996-1997 1 RAPPRESENTAZIONE BINARIA DEI NUMERI Andrea Bobbio Anno Accademico 1996-1997 Numeri Binari 2 Sistemi di Numerazione Il valore di un numero può essere espresso con diverse rappresentazioni. non posizionali:

Dettagli

Dati importati/esportati

Dati importati/esportati Dati importati/esportati Dati importati Al workspace MATLAB script Dati esportati file 1 File di testo (.txt) Spreadsheet Database Altro Elaborazione dati Grafici File di testo Relazioni Codice Database

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

Informatica. Scopo della lezione

Informatica. Scopo della lezione 1 Informatica per laurea diarea non informatica LEZIONE 1 - Cos è l informatica 2 Scopo della lezione Introdurre le nozioni base della materia Definire le differenze tra hardware e software Individuare

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Introduzione alla programmazione ad oggetti a.a. 2008/2009 Claudio De Stefano 1 La programmazione modulare Un programma può essere visto come un insieme di moduli che

Dettagli

Semplici Algoritmi di Ordinamento

Semplici Algoritmi di Ordinamento Fondamenti di Informatica Semplici Algoritmi di Ordinamento Fondamenti di Informatica - D. Talia - UNICAL 1 Ordinamento di una sequenza di elementi Esistono molti algoritmi di ordinamento. Tutti ricevono

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

Dettagli

Logica del primo ordine

Logica del primo ordine Università di Bergamo Facoltà di Ingegneria Intelligenza Artificiale Paolo Salvaneschi A7_4 V1.3 Logica del primo ordine Il contenuto del documento è liberamente utilizzabile dagli studenti, per studio

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Linguaggi. Claudio Sacerdoti Coen 11/04/2011. 18: Semantica della logica del prim ordine. Universitá di Bologna

Linguaggi. Claudio Sacerdoti Coen 11/04/2011. 18: Semantica della logica del prim ordine. <sacerdot@cs.unibo.it> Universitá di Bologna Linguaggi 18: Semantica della logica del prim ordine Universitá di Bologna 11/04/2011 Outline Semantica della logica del prim ordine 1 Semantica della logica del prim ordine Semantica

Dettagli