ARITMETICA E RICORSIONE
|
|
- Michelina Simonetti
- 5 anni fa
- Visualizzazioni
Transcript
1 ARITMETICA E RICORSIONE Non esiste, in logica, alcun meccanismo per la valutazione di funzioni, operazione fondamentale in un linguaggio di programmazione I numeri interi possono essere rappresentati come termini Prolog. Il numero intero N è rappresentato dal termine: s(s(s(...s(0)...))) N volte prodotto(x, Y, Z) "Z è il prodotto di X e Y" prodotto(x, 0, 0). prodotto(x,s(y), Z):- prodotto(x, Y, W), somma(x, W, Z). Non utilizzabile in pratica: predicati predefiniti per la valutazione di espressioni 1 PREDICATI PREDEFINITI PER LA VALUTAZIONE DI ESPRESSIONI L insieme degli atomi Prolog contiene tanto i numeri interi quanto i numeri floating point. I principali operatori aritmetici sono simboli funzionali (operatori) predefiniti del linguaggio. In questo modo ogni espressione può essere rappresentata come un termine Prolog. Per gli operatori aritmetici binari il Prolog consente tanto una notazione prefissa (funzionale), quanto la più tradizionale notazione infissa TABELLA OPERATORI ARITMETICI Operatori Unari -, exp, log, ln, sin, cos, tg Operatori Binari +, -, *, \, div, mod +(2,3) e 2+3 sono due rappresentazioni equivalenti. Inoltre, 2+3*5 viene interpretata correttamente come 2+(3*5) 2
2 PREDICATI PREDEFINITI PER LA VALUTAZIONE DI ESPRESSIONI Data un espressione, è necessario un meccanismo per la valutazione Speciale predicato predefinito is. T is Expr ( is(t,expr)) T può essere un atomo numerico o una variabile Expr deve essere un espressione. L espressione Expr viene valutata e il risultato della valutazione viene unificato con T Le variabili in Expr DEVONO ESSERE ISTANZIATE al momento della valutazione 3 ESEMPI :- X is 2+3. yes X=5 :- X1 is 2+3, X2 is exp(x1), X is X1*X2. yes X1=5 X2= X= :- 0 is 3-3. yes : - X is Y-1. Y non è istanziata al momento della valutazione No (NOTA: Alcuni sistemi Prolog danno come errore Instantion Fault) :- X is 2+3, X is 4+5. no 4
3 ESEMPI :- X is 2+3, X is 4+1. yes X=5 In questo caso il secondo goal della congiunzione risulta essere: :- 5 is 4+1. che ha successo. X infatti è stata istanziata dalla valutazione del primo is al valore 5. :- X is 2+3, X is X+1. no NOTA: non corrisponde a un assegnamento dei linguaggi imperativi. Le variabili sono write-once 5 ESEMPI Nel caso dell'operatore is l'ordine dei goal cioè rilevante. (a) :- X is 2+3, Y is X+1. (b) :- Y is X+1, X is 2+3. Mentre il goal (a) ha successo e produce la coppia di istanziazioni X=5, Y=6, il goal (b)fallisce. Il predicato predefinito "is" è un tipico esempio di un predicato predefinito non reversibile; come conseguenza le procedure che fanno uso di tale predicato non sono (in generale) reversibili. 6
4 TERMINI ED ESPRESSIONI Un termine che rappresenta un'espressione viene valutato solo se è il secondo argomento del predicato is p(a,2+3*5). q(x,y) :- p(a,y), X is Y. :- q(x,y). yes X=17 Y=2+3*5 (Y=+(2,*(3,5))) Valutazione di Y NOTA: Y non viene valutato, ma unifica con una struttura che ha + come operatore principale, e come argomenti 2 e una struttura che ha * come operatore principale e argomenti 3 e 5 7 OPERATORI RELAZIONALI Il Prolog fornisce operatori relazionali per confrontare i valori di espressioni. Tali operatori sono utilizzabili come goal all'interno di una clausola Prolog ed hanno notazione infissa OPERATORI RELAZIONALI >, <, >=, =<, ==, =/= disuguaglianza uguaglianza 8
5 CONFRONTO TRA ESPRESSIONI Passi effettuati nella valutazione di: Expr1 REL Expr2 dove REL e un operatore relazionale e Expr1 e Expr2 sono espressioni vengono valutate Expr1 ed Expr2 NOTA: le espressioni devono essere completamente istanziate I risultati della valutazione delle due espressioni vengono confrontati tramite l operatore REL 9 OPERATORI PIU IN DETTAGLIO Le espressioni possono essere rappresentate sia utilizzando la notazione a termini del Prolog, sia in modo più convenzionale In Prolog è possibile definire operatori ed assegnare agli operatori regole di associatività e precedenza Quando ci troviamo ad analizzare un'espressione del tipo 2+3*5 siamo in grado di interpretare univocamente tale stringa come la somma tra 2 ed il prodotto tra 3 e 5 grazie alla convenzione sulla priorità degli operatori che impone che * e piu prioritario del +. 10
6 PRIORITA DEGLI OPERATORI 2+3* * 5 Il concetto di precedenza (priorità) non è sufficiente per rendere non ambigua la lettura di un'espressione ASSOCIATIVITA DEGLI OPERATORI Serve il concetto di associatività: infatti per l espressione ho due possibili interpretazioni (5-2)-2 5-(2-2) Nel caso degli operatori aritmetici +, *, - e / si assume per convenzione che siano associativi a sinistra, ossia si privilegia la prima lettura dell'espressione 12
7 OPERATORI Un operatore e caratterizzato da: nome numero di argomenti (operatori binari e unari) priorità (o precedenza rispetto ad altri operatori) associatività un operatore può essere non associativo: operatore relazionale = associativo a destra associativo a sinistra Date queste proprietà, è sempre possibile trasformare in modo non ambiguo un'espressione con operatori in un albero 13 ESEMPIO Sia data l'espressione aritmetica 2*3+5+4*8*2 (con + con priorità minore di * ed entrambi associativi a sinistra). + Albero di 2*3+5 Albero di 4*8*2 14
8 ESEMPIO Sia data l espressione aritmetica 2*3+5+4*8*2 (con + con priorità minore di * ed entrambi associativi a sinistra). + * + 5 * * ESEMPIO Una volta costruito l'albero corrispondente a una espressione con operatori, il passaggio da tale albero al termine (in notazione funzionale) che rappresenta tale espressione è immediato Il termine corrispondente all'albero dell'esempio precedente è: +(+(*(2,3),5),*(*(4,8),2)) 16
9 PREDICATO OP In Prolog esiste un predicato predefinito per la definizione di operatori. op(priorita, TIPO, NOME) definisce un operatore con nome NOME, priorità PRIORITA e tipo TIPO NOME: atomo alfanumerico con primo carattere alfabetico oppure una lista di tali atomiche vengono definiti con lo stesso tipo e priorità; PRIORITA è un numero (generalmente tra 0 e 1200) e specifica la priorità dell'operatore; TIPO specifica il numero degli argomenti e la regola di associatività dell'operatore 17 PREDICATO OP op(priorita, TIPO, NOME) TIPO specifica il numero degli argomenti e la regola di associatività dell'operatore e puo assumere uno dei seguenti valori fx, fy (per operatori unari prefissi) xf, yf (per operatori unari postfissi) xfx, yfx, xfy (per operatori binari) dove f indica la posizione dell'operatore, x indica un argomento che è o un atomo o un'espressione tra parentesi o un'espressione il cui operatore principale ha priorità strettamente minore di quella dell'operatore che si sta definendo, y indica un argomento che è o un atomo o una espressione tra parentesi o una espressione il cui operatore principale ha priorità minore o uguale di quella dell'operatore che si sta definendo. 18
10 OPERATORI BINARI Nel caso di operatori binari si può stabilire un interessante legame tra il tipo dell'operatore e le regole di associatività; in particolare TIPO=xfx operatore non associativo TIPO=yfx operatore associativo a sinistra per cui, se op ha tipo yfx, l espressione E 1 op E 2 op...op E n viene interpretata come (..( E 1 op E 2 ) op E 3 )...) op E n ) ossia come il termine op(op(...op( E 1,E 2 ), E 3,...), E n ) TIPO=xfy operatore associativo a destra per cui, se op ha tipo xfy, l espressione E 1 op E 2 op...op E n viene interpretata come E 1 op (E 2 op op(e n-1 op E n ) ) ossia come il termine op(e 1,op(E 2,op(..op(E n-1, E n )) 19 ALTRI OPERATORI Anche i connettivi logici, congiunzione ; disgiunzione :- implicazione sono definiti come operatori Prolog. In Prolog non esiste, infatti, alcuna distinzione tra dati e programmi per cui anche le congiunzioni e le clausole sono dei termini. 20
11 OPERATORI PREDEFINITI IN PROLOG :- op(1200, xfx, [ :-, ->]). :- op(1200, fx, [ :-,?-]). :- op(1100, xfy, [ ;]). :- op(1050, xfy, [->]). :- op(1000, xfy, [, ]). :- op( 900, fy, [not, spy, nospy]). :- op( 700, xfx, [=, is, =.., =:=, =\=, <, >, =<, >=]). :- op( 500, yfx, [+, -]). :- op( 500, fx, [+, -]). :- op( 400, yfx, [*, /, //]). :- op( 300, xfx, [mod]). :- op( 200, xfx, [^]). 21 ESEMPIO Consideriamo alcuni esempi di espressioni: 2+3+4*5 +(+(2,3),*(4,5)) 3=4=5 tale espressione non è legale in quanto il tipo dell'operatore = è xfx per cui entrambi gli argomenti devono essere espressioni con priorità strettamente minore di quella di =. In altri termini, l'espressione non è legale in quanto = non è associativo. 3=4+5 =(3, +(4,5)) a,b;c,d,e ;(, (a,b),, (c,, (d,e))) 22
12 ESEMPIO: while..do Introdurre un costrutto di iterazione di tipo while: while C do S con il seguente significato informale "fintanto che la condizione C è vera, invoca la procedura S" Supponiamo che S possa essere una qualunque condizione, anche un ulteriore costrutto di iterazione; si considera quindi come legale una espressione del tipo while C1 do while C2 do S imponendo l'interpretazione while C1 do (while C2 do S) 23 ESEMPIO: while..do Gli operatori while e do possono essere definiti come operatori Prolog. while deve essere definito come un operatore unario prefisso a priorità minore della priorità di do che a sua volta deve essere definito come un operatore binario associativo a destra. Si ha cioè: :- op(200, fx, while). :- op(300, xfy, do). 24
13 ESEMPIO: while..do Si ha allora che una espressione del tipo (while C1) do (while C2) do S viene interpretata secondo la seguente struttura di parentesi (while C1) do ((while C2) do S) ossia come il termine do((while C1), do((while C2),S)) 25 ESEMPIO: while..do Insieme di regole Prolog per tali operatori: while C do S :- C,!, S, while C do S. while C do S. 26
14 ESEMPI Calcolare la funzione abs(x) = x abs(x,y) "Y è il valore assoluto di X" abs(x,x) :- X >= 0. abs(x,y) :- X < 0, Y is -X. Si consideri la definizione delle seguenti relazioni: pari(x) = true se X è un numero pari false se X è un numero dispari dispari(x) = true se X è un numero dispari false se X è un numero pari pari(0). pari(x) :- X > 0, X1 is X-1, dispari(x1). dispari(x) :- X > 0, X1 is X-1, pari(x1). 27 CALCOLO DI FUNZIONI Una funzione può essere realizzata attraverso relazioni Prolog. Data una funzione f ad n argomenti, essa può essere realizzata mediante un predicato ad n+1 argomenti nel modo seguente f:x 1, x 2,..., x n y diventa f(x1,x2,...,xn,y) :- <calcolo di Y> Esempio: calcolare la funzione fattoriale così definita: fatt: n n! (n intero positivo) fatt(0) = 1 fatt(n) = n * fatt(n-1) (per n>0) fatt(0,1). fatt(n,y):- N>0, N1 is N-1, fatt(n1,y1), Y is N*Y1. 28
15 CALCOLO DI FUNZIONI Esempio: calcolare il massimo comun divisore tra due interi positivi mcd: x,y MCD(x,y) (x,y interi positivi) MCD(x,0) = x MCD(x,y) = MCD(y, x mod y) (per y>0) mcd(x,y,z) "Z è il massimo comun divisore di X e Y" mcd(x,0,x). mcd(x,y,z) :- Y>0, X1 is X mod Y, mcd(y,x1,z). 29 TERMINI E LA LORO MANIPOLAZIONE Esistono operatori predefiniti per manipolare i termini Operatori relazionali per il confronto di espressioni aritmetiche tutti gli operatori sono binari e non associativi; gli argomenti di tali operatori sono espressioni che vengono valutate prima del confronto: E 1 =:= E 2 i valori delle due espressioni E 1 ed E 2 sono uguali; Si noti che il goal :- E 1 = E 2 provocherebbe un tentativo di unificare i due termini senza la loro valutazione. 30
16 TERMINI E LA LORO MANIPOLAZIONE Esistono operatori predefiniti per manipolare i termini Operatori relazionali per il confronto di espressioni aritmetiche tutti gli operatori sono binari e non associativi; gli argomenti di tali operatori sono espressioni che vengono valutate prima del confronto: E 1 =/= E 2 i valori delle due espressioni E 1 ed E 2 sono diversi; E 1 > E 2 E 1 >= E 2 E 1 < E 2 E 1 =< E 2 i valori delle due espressioni E 1 ed E 2 sono nella relazione specificata ; 31 UNIFICAZIONE E UGUAGLIANZA TRA TERMINI Due diversi operatori per effettuare la verifica se due termini sono unificabili o uguali. T 1 = T 2 verifica se T 1 e T 2 sono unificabili. Viene generata la sostituzione che unifica i due termini (e vengono pertanto legate le variabili nei due termini). T 1 == T 2 verifica se T 1 e T 2 sono uguali (sintatticamente identici). Se i due termini contengono due variabili in posizioni equivalenti, perché i termini siano uguali, le due variabili devono essere la stessa variabile. Non viene generata alcuna sostituzione. T 1 \== T 2 verifica se T 1 e T 2 non sono uguali (sintatticamente identici). 32
17 UNIFICAZIONE E UGUAGLIANZA TRA TERMINI :- f(x,g(a)) = f(h(c),g(y)). yes X=h(c) Y=a :- 2+3 = 5. no :- f(a,b) == f(a,b). yes :- f(a,x) == f(a,b) no :- f(a,x) == f(a,x). yes :- f(a,x) == f(a,y). no 33 VERIFICA DEL TIPO DI UN TERMINE Esistono operatori per effettuare la verifica del tipo di un termine. Dato un termine T, determinano se T è un atomo, una variabile o una struttura composta. atom(t) "T è un atomo non numerico" number(t) "T è un numero (intero o reale) integer(t) "T è un numero intero" atomic(t) "T è un atomo o un numero (ossia T non è una struttura composta) var(t) "T è una variabile non istanziata" nonvar(t) "T non è una variabile " 34
18 VERIFICA DEL TIPO DI UN TERMINE :- atom(pippo). yes :- atomic(pippo). yes :- number(1). yes :- atomic(1). yes :- atom(1). no :- var(x). yes :- nonvar(p(a,x)). yes :- X=f(Y),nonvar(X). yes 35 ACCESSO ALLE COMPONENTI DI UN TERMINE In Prolog e possibile accedere alle componenti di un termine tramite il predicato functor functor(term, FUNCTOR, ARITY) il termine TERM ha come funtore principale FUNCTOR con numero di argomenti ARITY Esempio: functor(f(3,x), f, 2) 36
19 ACCESSO ALLE COMPONENTI DI UN TERMINE Esistono 4 usi fondamentali di functor(term,functor,arity) se tutti gli argomenti sono istanziati, viene effettuata la verifica che il funtore principale di TERM sia FUNCTOR con ARITY argomenti (ARITY deve essere un numero intero); se solo TERM è istanziato, allora FUNCTOR e ARITY vengono istanziati; vengono cioè estratte le caratteristiche del termine (il suo nome ed il numero dei suoi argomenti). se TERM è una variabile e FUNCTOR e ARITY sono istanziati rispettivamente a un atomo e un numero intero (altrimenti viene segnalato errore a tempo di esecuzione), allora TERM viene istanziata al termine che ha FUNCTOR come funtore principale e ARITY argomenti. se TERM e almeno uno tra ARITY e FUNCTOR sono istanziati, l'argomento variabile viene a sua volta istanziato. 37 ACCESSO ALLE COMPONENTI DI UN TERMINE :- functor(f(a,b,c),f,3). yes :- functor(f(a,b),f,a). yes F=f A=2 :- functor(f(g(x),y,2),f,a). yes F=f A=3 :- functor(t,f,2). yes T = f(_1,_2) :- functor(a,f,a). yes F=a A=0 Si noti che un atomo è definito per uniformità come un termine con zero argomenti. 38
20 ACCESSO ALLE COMPONENTI DI UN TERMINE In Prolog e possibile accedere agli argomenti di un termine tramite il predicato arg arg(pos, TERM, ARG) ARG e l argomento in posizione POS nel termine TERM Il primo argomento di tale predicato deve sempre essere istanziato a una espressione aritmetica al momento della valutazione. 39 ACCESSO ALLE COMPONENTI DI UN TERMINE Esistono 3 usi fondamentali di arg(pos,term,arg) se sia TERM sia ARG sono istanziati al momento della valutazione, viene effettuata la verifica che l'argomento in posizione POS di termine sia unificabile con ARG; se TERM è istanziato a un termine T e ARG è una variabile, allora ARG viene istanziata al termine che è l'argomento in posizione POS in T; se ARG è istanziata, allora l'argomento in posizione POS di TERM viene unificato con ARG; in questo modo è possibile 'inserire' un termine come argomento in una data posizione di TERM. Si noti che se TERM ha un numero di argomenti minore di POS, si ha un fallimento. 40
21 ACCESSO ALLE COMPONENTI DI UN TERMINE :- arg(1,f(a,b),a). yes A=a :- arg(1+2*3,p(a,b,c,d,e,f,g,h,i,j),a). yes A=g :- arg(1,f(g(x),b),a). yes A=g(_1) :- arg(2,p(a,y),b). yes Y=b :- arg(1+1,p(a,g(x)),g(b)). yes X=b :- arg(x,p(a,b),a). Error in arithmetic expression 41 ACCESSO ALLE COMPONENTI DI UN TERMINE In Prolog e possibile trasformare un termine nella lista delle sue componenti tramite il predicato =.. TERMINE =.. [FUNCTOR, ARG1, ARG2,..., ARGn] "Il termine TERMINE ha FUNCTOR come funtore principale e ARG1, ARG2,..., ARGn come argomenti" 42
22 ACCESSO ALLE COMPONENTI DI UN TERMINE Esistono 2 usi fondamentali di TERMINE =.. [FUNCTOR, ARG1, ARG2,..., ARGn] TERMINE è istanziato e il secondo argomento è una variabile; tale variabile viene unificata con la lista che ha il funtore principale di TERMINE come testa e la lista degli argomenti di TERMINE come coda; TERMINE è una variabile e il secondo argomento è una lista (che ha un atomo non numerico come testa, altrimenti la valutazione fallisce) nel qual caso viene costruito il termine che ha come funtore principale la testa della lista e come argomenti gli elementi del resto della lista. 43 ACCESSO ALLE COMPONENTI DI UN TERMINE :- f(a,b) =.. [f,a,b]. yes :- a =.. L yes L=[a] :- f(h(a),b) =.. [FUNCTOR ARGLIST]. yes FUNCTOR=f ARGLIST=[h(a),b] :- T =.. [g,1,x,h(a)]. yes T=g(1,_1,h(a)) :- T =.. [f [1,2,3]]. yes T=f(1,2,3). 44
23 ESEMPIO Dati due termini T 1 e T 2, determinare la loro generalizzazione più specifica (MSG), ossia il termine più specifico di cui sia T 1 sia T 2 sono istanze. T 1 T 2 MSG X X X X Y Z a a a a b X f(x) g(z) Y f(x,a) f(b,y) f(x,y) 45 ESEMPIO msg(t1,t2,t1):- var(t1), var(t2), T1==T2,!. msg(t1,t2,_) :- var(t1),var(t2),!. msg(t1,t2,t1):- var(t1),nonvar(t2),!. msg(t1,t2,t2):- nonvar(t1),var(t2),!. msg(t1,t2,_) :- nonvar(t1), nonvar(t2), functor(t1,f1,n1), functor(t2,f2,n2), (F1 \== F2; N1 =/=N2),!. msg(t1,t2,t3):- nonvar(t1), nonvar(t2), functor(t1,f,n), functor(t2,f,n), T1 =.. [F ARGS1], T2 =.. [F ARGS2], msg_list(args1,args2,args), T3 =.. [F ARGS]. 46
24 ESEMPIO msglist(l1,l2,l) " L è la lista delle generalizzazioni più specifiche delle coppie di elementi delle liste L1 e L2 in ugual posizione" msg_list([],[],[]). msg_list([t1 REST1], [T2 REST2], [T REST]) :- msg((t1,t2,t), msg_list(rest1,rest2,rest). 47 RICORSIONE E ITERAZIONE Il Prolog non fornisce alcun costrutto sintattico per l'iterazione (quali, ad esempio, i costrutti while e repeat) e l'unico meccanismo per ottenere iterazione è la definizione ricorsiva. Una funzione f è definita per ricorsione tail se f è la funzione "più esterna" nella definizione ricorsiva o, in altri termini, se sul risultato della chiamata ricorsiva di f non vengono effettuate ulteriori operazioni La definizione di funzioni (predicati) per ricorsione tail può essere considerata come una definizione per iterazione Potrebbe essere valutata in spazio costante mediante un processo di valutazione iterativo. 48
25 RICORSIONE E ITERAZIONE Si dice ottimizzazione della ricorsione tail valutare una funzione tail ricorsiva f mediante un processo iterativo ossia caricando un solo record di attivazione per f sullo stack di valutazione (esecuzione). In Prolog l'ottimizzazione della ricorsione tail è un po' più complicata che non nel caso dei linguaggi imperativi a causa del: non determinismo della presenza di punti di scelta nella definizione delle clausole. 49 RICORSIONE E ITERAZIONE (a) (b) p(x) :- c1(x), g(x). p(x) :- c2(x), h1(x,y), p(y). p(x) :- c3(x), h2(x,y), p(y). Due possibilità di valutazione ricorsiva del goal :-p(z). se viene scelta la clausola (a), si deve ricordare che (b) è un punto di scelta ancora aperto. Bisogna mantenere alcune informazioni contenute nel record di attivazione di p(z)(i punti di scelta ancora aperti) se viene scelta la clausola (b) (più in generale, l'ultima clausola della procedura), non è più necessario mantenere alcuna informazione contenuta nel record di attivazione di p(z) e la rimozione di tale record di attivazione può essere effettuata 50
26 QUINDI... In Prolog l'ottimizzazione della ricorsione tail è possibile solo se la scelta nella valutazione di un predicato "p" è deterministica o, meglio, se al momento del richiamo ricorsivo (n+1)-esimo di "p" non vi sono alternative aperte per il richiamo al passo n-esimo (ossia alternative che potrebbero essere considerate in fase di backtracking Quasi tutti gli interpreti Prolog effettuano l'ottimizzazione della ricorsione tail ed è pertanto conveniente usare il più possibile ricorsione di tipo tail. 51 RICORSIONE NON TAIL Il predicato fatt è definito con una forma di ricorsione semplice (non tail). Casi in cui una relazione ricorsiva può essere trasformata in una relazione tail ricorsiva fatt1(n,y):- fatt1(n,1,1,y). fatt1(n,m,acc,acc) :- M > N. fatt1(n,m,accin,accout) :- ACCtemp is ACCin*M, M1 is M+1, Accumulatore fatt1(n,m1,acctemp,accout). Accumulatore in ingresso in uscita 52
27 RICORSIONE NON TAIL Il fattoriale viene calcolato utilizzando un argomento di accumulazione, inizializzato a 1, incrementato ad ogni passo e unificato in uscita nel caso base della ricorsione. ACC 0 =1 ACC 1 = 1 * ACC 0 = 1 * 1 ACC 2 = 2 * ACC 1 = 2 * (1*1)... ACC N-1 = (N-1) *ACC N-2 = N-1*(N-2*(...*(2*(1* 1))...)) ACC N = N * ACC N-1 = N*(N-1*(N-2*(...*(2*(1* 1))...))) 53 RICORSIONE NON TAIL Altra struttura iterativa per la realizzazione del fattoriale fatt2(n,y) "Y è il fattoriale di N fatt2(n,y) :- fatt2(n,1,y). fatt2(0,acc,acc). fatt2(m,acc,y) :- ACC1 is M*ACC, M1 is M-1, fatt2(m1,acc1,y). 54
28 RICORSIONE NON TAIL Calcolo del numero di Fibonacci: definizione fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fibonacci(n-1) + fibonacci(n-2) per N >1 Programma Prolog fib(0,0). fib(1,1). fib(n,y) :- N>1, N1 is N-1, fib(n1,y1), N2 is N-2, fib(n2,y2), Y is Y1+Y2. 55
PRIORITA DEGLI OPERATORI OPERATORI PIU IN DETTAGLIO ASSOCIATIVITA DEGLI OPERATORI OPERATORI + * 2+3*5
OPERATORI PIU IN DETTAGLIO PRIORITA DEGLI OPERATORI Le espressioni possono essere rappresentate sia utilizzando la notazione a termini del Prolog, sia in modo più convenzionale 2+3*5 2 + * In Prolog è
Dettagli(X (, Y, Y Z ) Z " Z Z
ARITMETICA E RICORSIONE Non esiste, in logica, alcun meccanismo per la valutazione di funzioni, operazione fondamentale in un linguaggio di programmazione I numeri interi possono essere rappresentati come
DettagliTABELLA OPERATORI ARITMETICI
ARITMETICA E RICORSIONE Non esiste, in logica, alcun meccanismo per la valutazione di funzioni, operazione fondamentale in un linguaggio di programmazione I numeri interi possono essere rappresentati come
DettagliTERMINI, OPERATORI e METALIVELLO
TERMINI, OPERATORI e METALIVELLO In Prolog tutto è un termine: variabile, costante (numerica o atomica), struttura (lista come caso particolare con funtore. ) Ciascun termine struttura ha un funtore e
DettagliProlog: aritmetica e ricorsione
Capitolo 13 Prolog: aritmetica e ricorsione Slide: Aritmetica e ricorsione 13.1 Operatori aritmetici In logica non vi è alcun meccanismo per la valutazione di funzioni, che è fondamentale in un linguaggio
DettagliTERMINI, OPERATORI e METALIVELLO
TERMINI, OPERATORI e METALIVELLO In Prolog tutto è un termine: variabile, costante (numerica o atomica), struttura (lista come caso particolare con funtore. ) Ciascun termine struttura ha un funtore e
DettagliOPERATORI In Prolog è possibile definire "operatori" ed assegnare agli operatori regole di associatività e precedenza. Quando ci troviamo ad analizzar
TERMINI, OPERATORI e METALIVELLO In Prolog tutto è un termine: variabile, costante (numerica o atomica), struttura (lista come caso particolare con funtore. ) Ciascun termine struttura ha un funtore e
DettagliUnità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso
Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile
DettagliPaolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova
Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova Pseudo codice, Paolo Bison, FI06, 2007-01-10 p.1 Pseudo codice linguaggio testuale mix di linguaggio naturale ed elementi
DettagliLezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione
Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C Fabio Scotti (2004-2009) Laboratorio di programmazione
DettagliInformatica 3. LEZIONE 9: Introduzione ai linguaggi funzionali. Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP
Informatica 3 LEZIONE 9: Introduzione ai linguaggi funzionali Modulo 1: Introduzione ai linguaggi funzionali Modulo 2: LISP Informatica 3 Lezione 9 - Modulo 1 Introduzione ai linguaggi funzionali Linguaggi
DettagliEspressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica!
Espressioni Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica! Valutazione automatica di expr aritmetiche = obiettivo primario dei primi LP
DettagliEspressioni ed operatori in C
Espressioni ed operatori in C Espressioni Il C è un linguaggio basato su espressioni Una espressione è una notazione che denota un valore mediante un processo di valutazione Una espressione può essere
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliPaolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09
Linguaggi procedurali Paolo Bison Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09 Linguaggi procedurali, Paolo Bison, FI08, 2008-09-29 p.1 Linguaggi procedurali classe
DettagliIn Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile
IL PREDICATO CALL In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile Un primo predicato predefinito che può essere utilizzato
DettagliTipi di dato primitivi
Tipi di dato primitivi (oltre int) Tipi di dato primitivi int (già trattati) Valori logici (ricordati) Valori reali Valori carattere Informatica - A.A. 2009/2010 - Tipi di dato 2 1 Valori logici (il caso
DettagliEspressioni ed operatori in C
Espressioni ed operatori in C Espressioni Il C è un linguaggio basato su espressioni Una espressione è una notazione che denota un valore mediante un processo di valutazione Una espressione può essere
DettagliIn Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile
IL PREDICATO CALL In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile Un primo predicato predefinito che può essere utilizzato
DettagliCast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double
Il cast Cast implicito Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto Per esempio: byte short int long float double int x = 10; float f; f = x; Il valore di
DettagliIn Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile
IL PREDICATO CALL In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile Un primo predicato predefinito che può essere utilizzato
DettagliLinguaggio C. Tipi predefiniti e operatori. Università degli Studi di Brescia. Docente: Massimiliano Giacomin
Linguaggio C Tipi predefiniti e operatori Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 RICHIAMI char 8 bit Valori interi
DettagliRisoluzione di un problema
Algoritmi Risoluzione di un problema Descrizione di un problema! Individuazione di un ALGORITMO! Metodo risolutivo (progetto) Introduzione 2 Algoritmo Sequenza finita di mosse che risolve in un tempo finito
DettagliClassificazione dei termini
Classificazione dei termini Il Prolog è un linguaggio a tipizzazione dinamica Predicati predefiniti per riconoscere il tipo di un termine?- var(x). var, nonvar?- var(padre(x)). false.?- X=Y, Y=23, var(x).
DettagliLA RICORSIONE LA RICORSIONE LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO LA RICORSIONE: ESEMPIO
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
DettagliCorso di Informatica
Corso di Informatica Modulo T3 3 Ricorsione Prerequisiti Programmazione elementare Tecnica top-down Struttura e funzionamento dei sottoprogrammi Pila di attivazione Metodo di Euclide per il calcolo del
DettagliInformatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane
Operatori in Java Operatori in Java Corso di laurea in Informatica Operatori aritmetici Operatori di uguaglianza e relazionali Operatori logici in espressioni booleane La precedenza degli operatori L associatività
DettagliProgrammazione Dichiarativa. Programmazione Logica. SICStus PROLOG PROLOG. http://www.sics.se/sicstus/ Bob Kowalski: "Algoritmo = Logica + Controllo"
Programmazione Logica Bob Kowalski: "Algoritmo = Logica + Controllo" nella programmazione tradizionale: il programmatore deve occuparsi di entrambi gli aspetti nella programmazione dichiarativa: il programmatore
DettagliIl potere espressivo di un linguaggio è caratterizzato da: PROGRAMMA = DATI + CONTROLLO
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
DettagliLINGUAGGI 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
DettagliUniversità degli Studi di Milano
Università degli Studi di Milano Corso di Laurea in Sicurezza dei Sistemi e delle Reti Informatiche Lezione 3 Input/Output elementare. Operatori, espressioni e istruzioni FABIO SCOTTI Laboratorio di programmazione
DettagliValutazione di espressioni
Valutazione di espressioni Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Blocco Blocco è un insieme di istruzioni consecutive, con un
DettagliPROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO
PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli
DettagliEspressioni in Linguaggio C
Concetti chiave Espressioni in Linguaggio C Espressioni Conversioni Implicite Operatori aritmetici Operatore di assegnamento Operatori relazionali Operatori logici Gerarchia e associatività degli operatori
DettagliInformatica teorica Lez. n 12 Introduzione al Lisp. Introduzione al Lisp. Prof. Giorgio Ausiello Università di Roma La Sapienza
Introduzione al Lisp Argomenti della lezione Aspetti generali del Lisp S-espressioni Funzioni predefinite Definizione di funzioni e costrutti programmativi Lisp Ispirato da funzioni ricorsive e lambda
DettagliCENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3
CENNI MINIMI DI PROGRAMMAZIONE FUNZIONALE IN PYTHON - V. 0.3 MATTEO PRADELLA 1. Introduzione e concetti base La programmazione funzionale è uno stile di programmzione che enfatizza la valutazione di espressioni,
DettagliEspressioni con effetti collaterali
Espressioni con effetti collaterali Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Operatore di assegnamento In C l assegnamento (=)
DettagliTipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:
Tipi di dato Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: esprimere in modo sintetico la loro rappresentazione in memoria, e un insieme di operazioni ammissibili permettere
DettagliPROBLEMI E ALGORITMI VESPIA CATERINA LICEO CLASSICO AGLI ANGELI
PROBLEMI E ALGORITMI prof.ssa VESPIA CATERINA LICEO CLASSICO AGLI ANGELI C O N T E N U T I Problemi. Concetto di algoritmo. Caratteristiche di un algoritmo. Descrizione di algoritmi - Diagrammi di flusso.
DettagliFoglio Elettronico Lezione 1
- Introduzione - Celle e riferimenti - Formule - Approfondimenti - Funzioni logiche Sommario Introduzione - Foglio elettronico o foglio di calcolo - Cos'è? Strumento per raccogliere dati organizzati in
DettagliLA RICORSIONE. Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa
LA RICORSIONE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa La ricorsione consiste nella possibilità di definire una funzione in termini
DettagliL assegnamento. Andrea Marin. a.a. 2011/2012. Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Abbiamo visto È conveniente definire una macchina astratta C Lo stato della macchina ci
DettagliIL LINGUAGGIO C TIPI DI DATO
IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace di trattare vari domini di dati, detti tipi primitivi dominio dei
DettagliCorso di JavaScript. Prerequisiti. B1 Tipi di dato e operatori. Concetto di variabile, espressione e tipo di dato
Corso di JavaScript B1 Tipi di dato e operatori 1 Prerequisiti Concetto di variabile, espressione e tipo di dato 2 1 Introduzione In questa Unità illustriamo alcuni strumenti operativi per la scrittura
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Inserimento in ordine
DettagliConsiderazioni su Tipi di Dati
Considerazioni su Tipi di Dati April 19, 2017 Definire Tipi di Dato Molti linguaggi permettono di definire sinonimi per tipi di dato esistenti... Non introducono nuovi valori La definizione di un nuovo
DettagliSintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen
Linguaggi 4: Universitá di Bologna 24/02/2011 Outline 1 Wikipedia: La sintassi è la branca della linguistica che studia i diversi modi in cui le parole si uniscono tra loro per formare
DettagliCorso di PHP. Prerequisiti. 2.2 Operatori. Conoscenza HTML Tecnica della programmazione Principi di programmazione web. M. Malatesta 2.
Corso di PHP 2.2 Operatori 29//25 Prerequisiti Conoscenza HTML Tecnica della programmazione Principi di programmazione web 2 29//25 Introduzione In questa Unità illustriamo più in particolare come le variabili
DettagliIl vettore e la lista concatenate (o catena) sono due esempi di strutture interne.
Strutture dati PILA e CODA Le strutture dati si dividono in interne e astratte. Quelle astratte sono rappresentazioni dei dati di un problema che rispecchiano le proprietà dei dati e le relazioni usate
DettagliTecniche di prova per induzione
Aniello Murano Tecniche di prova per induzione 3 Lezione n. Parole chiave: Induzione Corso di Laurea: Informatica Codice: Email Docente: murano@ na.infn.it A.A. 2008-2009 Riassunto delle lezioni precedenti
DettagliRappresentazione degli algoritmi
Rappresentazione degli algoritmi Universitá di Ferrara Ultima Modifica: 21 ottobre 2014 1 1 Diagramma di flusso Utilizzare il diagramma di flusso per rappresentare gli algoritmi che risolvono i seguenti
DettagliLaboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale
Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale Algebra di Boole Stefano Cagnoni Algebra di Boole L algebra
DettagliLOGICA DEL PRIMO ORDINE: MOTIVAZIONI, SINTASSI E INTERPRETAZIONI. Corso di Logica per la Programmazione A.A Andrea Corradini
LOGICA DEL PRIMO ORDINE: MOTIVAZIONI, SINTASSI E INTERPRETAZIONI Corso di Logica per la Programmazione A.A. 2013 Andrea Corradini LIMITI DEL CALCOLO PROPOSIZIONALE Nella formalizzazione di enunciati dichiarativi,
DettagliLaboratorio di Informatica
Laboratorio di Informatica Facoltà di Ingegneria Clinica BCLR Dispense di Paolo Caressa e Raffaele Nicolussi. Lezione 5. Versione per Python 3. Docenti: Alberto Marchetti Spaccamela Raffaele Nicolussi
DettagliCodifica binaria: - valori logici e algebra di Boole -
Codifica binaria: - valori logici e algebra di Boole - Ingegneria Meccanica e dei Materiali Università degli Studi di Brescia Prof. Massimiliano Giacomin Tipologie di codici Per la rappresentazione di:
DettagliUn elaboratore è un manipolatore di simboli (segni) intrinsecamente capace di trattare vari. caratteri char caratteri ASCII unsigned char
IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura tt fisica i di ogni elaboratore è intrinsecamente capace di trattare vari domini i di dati, detti tipi i primitivi iti
DettagliPROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t
PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli
DettagliStrutture di Controllo Condizionali e Operatori Logici e Relazionali
Linguaggio C Strutture di Controllo Condizionali e Operatori Logici e Relazionali 1 Strutture di Controllo n Controllano il flusso di esecuzione di un programma Istruzioni di selezione: permettono di selezionare
DettagliIL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace
IL LINGUAGGIO C Un elaboratore è un manipolatore di simboli (segni) L'architettura fisica di ogni elaboratore è intrinsecamente capace di trattare vari domini di dati, detti tipi primitivi dominio dei
DettagliJavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132
JavaScript Core Language Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132 Condizioni L utilizzo di operatori relazionali e logici consente di formulare delle condizioni
DettagliDescrizione delle operazioni di calcolo. Espressioni costanti semplici
Descrizione delle operazioni di calcolo Come abbiamo detto l interprete è in grado di generare nuovi valori a partire da valori precedentemente acquisiti o generati. Il linguaggio di programmazione permette
Dettagli1) Somma dei primi n numeri naturali: 3) Ricerca di un elemento el in una sequenza di interi: FONDAMENTI DI INFORMATICA II Ricorsione 2
FUNZIONI RICORSIVE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento (chiamata) a se stessa. Esempio: Esempi di problemi ricorsivi: 1) Somma dei primi
DettagliEspressioni e Comandi
Espressioni e Comandi March 24, 2017 Elementi di Base dei Programmi Ricordate? Macchina Astratta: Insieme di algoritmi e strutture dati che permettono di memorizzare ed eseguire programmi Abbiamo parlato
DettagliIn Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile
META-PREDICATI In Prolog predicati (programmi) e termini (dati) hanno la stessa struttura e possono essere utilizzati in modo interscambiabile sum(0,x,x). sum(s(x),y,s(z)):- sum(x,y,z). Operatore (non
DettagliStrutture di Controllo Condizionali e Operatori Logici e Relazionali
Linguaggio C Strutture di Controllo Condizionali e Operatori Logici e Relazionali 1 Strutture di Controllo! Controllano il flusso di esecuzione di un programma Istruzioni di selezione: permettono di selezionare
DettagliOperatori di relazione
Condizioni Negli algoritmi compaiono passi decisionali che contengono una proposizione (o predicato) dal cui valore di verità dipende la sequenza dinamica Chiamiamo condizioni tali proposizioni Nei casi
DettagliPensiero Algoritmico. Lezione 3 23 Novembre Ripasso. Anatomia di un programma. Anatomia di un programma. Ozalp Babaoglu Università di Bologna
Pensiero Algoritmico Lezione 3 23 Novembre 2016 Ozalp Babaoglu Università di Bologna Ripasso Definizione del problema Astrarre i dettagli, costruire un modello Costruire l algoritmo che risolve il problema
DettagliOperativamente, risolvere un problema con un approccio ricorsivo comporta
! Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento a se stessa!! La ricorsione consiste nella possibilità di definire una funzione in termini di se
DettagliLo sviluppo di un semplice programma e la dimostrazione della sua correttezza
Il principio di induzione Consideriamo inizialmente solo il principio di induzione per i numeri non-negativi, detti anche numeri naturali. Sia P una proprietà (espressa da una frase o una formula che contiene
DettagliFUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi:
FUNZIONI RICORSIVE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento (chiamata) a se stessa. Esempio: Esempi di problemi ricorsivi: 1) Somma dei primi
DettagliCostanti e Variabili
Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 19 Ricorsione A. Miola Marzo 2010 http://www.dia.uniroma3.it/~java/fondinf/ Ricorsione 1 Contenuti Funzioni e domini definiti induttivamente
DettagliLe liste sono una delle strutture dati primitive più diffuse nei linguaggi di programmazione per l'elaborazione simbolica (es(
LISTE Le liste so una delle strutture dati primitive più diffuse nei linguaggi di programmazione per l'elaborazione simbolica (es( es: Lisp) In Prolog le liste so dei termini costruiti a partire da u speciale
DettagliFlow-chart. Introduzione agli algoritmi e ai diagrammi a blocchi.
Flow-chart Introduzione agli algoritmi e ai diagrammi a blocchi ugo.rinaldi@gmail.com 1 Sommario Fasi dello sviluppo di un programma Algoritmo Dati: Variabili e Costanti Le operazioni tipiche Diagramma
DettagliFogli Elettronici. Idoneità Informatica Prof. Mauro Gaspari
Fogli Elettronici Idoneità Informatica Prof. Mauro Gaspari Cosa è un foglio elettronico. Strumento per raccogliere dati organizzati in tabelle e farci delle operazioni: Le celle contengono numeri o altri
DettagliCosa si intende con stato
Il concetto di stato Cosa si intende con stato I una particolare configurazione delle informazioni di una macchina, che in qualche modo memorizza le condizioni in cui si trova, e che cambia nel tempo passando
DettagliScheme: struttura del programma e campo di azione
«a2» 2013.11.11 --- Copyright Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net Scheme: struttura del programma e campo di azione Definizione e campo di azione...........................
DettagliInformatica (A-K) 5. Algoritmi e pseudocodifica
Vettori e matrici #1 Informatica (A-K) 5. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile & Ambientale A.A. 2011-2012 2 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
DettagliLaboratorio di Programmazione M-Z
Laboratorio di Programmazione M-Z Docente: Dott. Francesco Strappaveccia france.strappavecci2@unibo.it Università di Bologna, Sede di Cesena Espressioni algebriche Uno dei compiti del compilatore è quello
DettagliLe variabili logiche possono essere combinate per mezzo di operatori detti connettivi logici. I principali sono:
Variabili logiche Una variabile logica (o booleana) è una variable che può assumere solo uno di due valori: Connettivi logici True (vero identificato con 1) False (falso identificato con 0) Le variabili
DettagliFondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
DettagliProgrammazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Elementi di Base Parte 3 Istruzioni di Assegnazione G. Mecca M. Samela Università della Basilicata Elementi di Base >> Sommario Sommario Introduzione Istruzioni
DettagliFondamenti di Informatica
Vettori e matrici #1 Le variabili definite come coppie sono dette variabili scalari Fondamenti di Informatica 5. Algoritmi e pseudocodifica Una coppia è una variabile
DettagliLINGUAGGI E TRADUTTORI - 20 giugno Prof. S. Crespi Reghizzi. Automi e espressioni regolari (40%)
LINGUAGGI E TRADUTTORI - 20 giugno 2001 - Prof. S. Crespi Reghizzi COGNOME e NOME... MATRICOLA... Tempo a disposizione: 90 minuti. Libri e appunti personali possono essere impiegati. Parte I Punti 30-esimi
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 3 Analisi dettagliata di un programma /* commento */ Possono estendersi su più linee apparire in qualsiasi parte del programma. Alternativamente
DettagliIntroduzione alla logica matematica
Introduzione alla logica matematica, Paolo Bison, A.A. 2004-05, 2004-10-26 p.1/29 Introduzione alla logica matematica Silvana Badaloni Paolo Bison Fondamenti di Informatica 1 A.A. 2004/05 Università di
DettagliLinguaggi, Traduttori e le Basi della Programmazione
Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Il Linguaggio I Linguaggi di Linguaggi
DettagliAlgebra di Boole. Andrea Passerini Informatica. Algebra di Boole
Andrea Passerini passerini@disi.unitn.it Informatica Variabili logiche Una variabile logica (o booleana) è una variable che può assumere solo uno di due valori: True (vero identificato con 1) False (falso
DettagliProgrammazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013
Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario La ricorsione Metodi ricorsivi Esercizi proposti 16/01/2013 2 La ricorsione In Java ogni metodo può chiamare anche se stesso,
DettagliL intero è o il valore zero o una stringa di cifre che inizia con una cifra diversa sa zero.
ANALISI SINTATTICA Data un linguaggio scrivere una grammatica che lo generi ESERCIZIO 1 Definire una grammatica per il linguaggio L = {ww w appartiene a (a, b)*} ESERCIZIO 2 Dato l alfabeto T=[0,1,2,3,4,5,6,7,8,9,/}
DettagliCorso di Matematica per la Chimica. Dott.ssa Maria Carmela De Bonis a.a
Dott.ssa Maria Carmela De Bonis a.a. 2013-14 Programmi Un elaboratore riceve dei dati in ingresso, li elabora secondo una sequenza predefinita di operazioni e infine restituisce il risultato sotto forma
DettagliCostrutti di iterazione
Costrutti di iterazione Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2017 2018 Iterazione Data un espressione logica e un blocco di attività
DettagliSistemi di dimostrazione
Sistemi di dimostrazione Un sistema di deduzione (o dimostrazione) consiste di un insieme di assiomi (a volte vuoto) un insieme di regole di inferenza Una deduzione (o derivazione) di una formula A da
Dettagli