Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Programmazione Web
Ricorsione (capitolo 12)
È una tecnica di programmazione che permette di risolvere problemi.
funzione ricorsiva = nella sua definizione la funzione richiama sé stessa. All’interno dei manuali dirà la frase seguente: Scrive nelle grammatiche!! Non confonderla con la ricorsività, si fa all'interno dell'algoritmo.
Necessaria per PROGRAMMARE ALBERI!
FATTORIALE! n! => moltiplica i numeri tra loro fino a n (fattoriale di n) Cresce molto rapidamente!!
SOMMATIORIA ∑ni=0 x = Somma i numeri
n! = 1*2*3...
n!: esempio n=4 1! = 1 2! = 1*2 3! = 1*2*3 4! = 1*2*3*4
Come si calcola il fattoriale?
MANIERA ITERATIVA
function fattorialeI(n) { // n > = 0 var r = 1; // punto di partenza for (var i =1; i <= n; i++){ r = r * i; } return r; }Se vale 0, la guardia viene saltata e restituisce sempre 1. Restituisce 1 anche per n=0.
n! = 6!*n => n! = (n-1)!*n
MANIERA RICORSIVA
function fattorialeR (n) { if (n == 0){ return 1;} else { return fattorialeR (n-1) * n;} }-> Ragionamento induttivo C'è un punto di partenza.
- CASO SEMPLICE: 0 (che vale 1)
- CASO INDUTTIVO: calcola il valore precedente da o chiamata quando risolto!
Successione di Fibonacci
0 1 1 2 3 5 8 13 21
SOMMANDO DEI NUMERI PRECEDENTI
F(4) é il numero della successione di Fibonacci. La nostra funzione secondo la formula:
Una (con questa frequenza). In natura delle conchiglie cirche es. SEZIONE AUREA → F(n+1) - n = 1 F(n)
Fib(0) = 0 (adesso si usa 1) Fib(2) = 1 Fib(n) = Fib(n-2) + Fib(n-3)
LA FUNZIONE RICORSIVA
function fibonacci(n) { if (n==0) || (n==1) { return 1; } else { return fibonacci(n-2) + fibonacci(n-1); } }
Qualunque funzione ricorsiva può essere scritta in maniera iterativa!
MANIERA ITERATIVA
function fibonacci_I(n) { var n1 = 1; var n2 = 1; for (var i=1; i espressione
visualizza(1) -> Stampa
2 x 3 + 4 = 6 + 4 = 10
9
Rappresentare graficamente l'espressione mediante l'albero binario.
ESEMPIO:
2 + 4
2 + 4 x 4
VISITA SIMMETRICA
Altezzadx:
var ad; if (this.destro != null) { ad = this.destro.altezza(); } else { ad = 0; } if (ad > as) { return as + 1; } else { return ad + 1; }Alberi di ricerca
È un albero binario. La cui visita simmetrica genera una sequenza ordinata di valori. Può essere con ripetizioni (paganyanga) o senza (No pagayanga)
Ricerca di un valore
- Si esclude metà dell'albero!
Costruttore AlberoDiRicerca -> 3 parametri
this.aggiungi = function(k) { if (k < this.valore) { if (this.sinistro == null) { this.sinistro = new AlberoDiRicerca(k); else { this.sinistro.aggiungi(k); } } if (k > this.valore) { if (this.destro == null) { this.destro = new AlberoDiRicerca(k); } else { this.destro.aggiungi(k); } } }Un’altra visita grande
while (x.firstChild != null) {
x = x.firstChild;
}
while (x.parentNode != null) {
x = x.parentNode;
}
Non si usano molto spesso. La piu’ frequente e’ la causione ricorsiva.
Tecniche di ricerca
Molto piu’ potenti, con risultati molto piu’ efficaci.
2 METODI
che cercano più di questo voglio, ma l’indice non avrà errori.
1. getElementsByTagName
Dammi gli element utilizzando il nome di un marker
Se io giro sulla radice di un albero (n) ed invoco il metodo
n.getElementsByTagName ("div");
Ricerca in ordine anticipato dell’albero e cerca ("all") questi nodi. La memoria e’ uguale a (n).
Esiste un array con tutti i nodi. Sono nodi che spesso non hanno una relazione tra di loro. A passo io faccio un ciclo per guardarli uno dopo l’altro.
2. getElementById
Metodo che mi consente utilizzando come argomento una stringa di beccare esattamente un nodo su un albero.
n.getElementById ("v");
modo che fa in precedenza identificatato
e’ efficare perche’ non si confonde.
<div id=”alpha”>
Convertitore di valuta
Supponiamo avere 3 metodi:
- this.imposta
- this.converti
Si usa un FORM in HTML:
- input type = “text”
- input type = “button”
- input type = “text” readonly = “readonly”
Quando si clicca sui metodi, essi devono essere invocati:
<input type = "button" id = "imposta"/> <input type = "button" id = "converti"/>
In HTML:
function main220() { var nodo = document.getElementById("imposta"); nodo.onclick = gestoreImposta; var nodo2 = document.getElementById("converti"); nodo2.onclick = gestoreConverti; c = new Convertitore(); } function gestoreImposta() { c.imposta ( ---- , ---- ); var nodo = document.getElementById ("valuta"); var valuta = nodo.value; nodo = document.getElementById("fattore"); var fattore = eval(nodo.value); c.imposta (valuta, fattore); } function gestoreConverti() { var nodo = document.getElementById("importo"); var importo = eval(nodo.value); var x = c.converti (importo); var nodo = document.getElementById ("risultato"); nodo.value = x; }Creazione di oggetti tramite XML
Devo memorizzare i dati per poter lavorare sopra.
Seppiamo già prelevare i valori in input.
Prendo le informazioni dal file XML e creo degli oggetti.
Prendo anche le ricette.
Contenitore RICETTARIO
Contenuti RICETTA
function Ricettario () { this.anno; this.ricetta = []; }
function Ricetta (c, n, d, p) { this.categoria = c; this.nome = n; this.difficolta = d; this.preparazione = p; }
Dopo aver caricato il file XML mi troverò di fronte ad un albero DOM. Per costruire gli oggetti dovrò cercare nell'albero.
var ilRicettario; (variabile globale che deve esistere per tutta la durata del file) function iniziaTutto() { var radice = caricaXML("Ricettario.xml"); // costruisco l'albero a partire dal PARSER var titolo = document.getElementById("titolo"); // mi dicono dove vado visualizzare e usare quando ho finito di creare la mappa (pag143) var lista = document.getElementById("lista"); // mi dicono dove vado visualizzare e usare quando ho finito di creare la mappa (pag143) ilRicettario = new Ricettario(); // creo l'oggetto ricettario vuoto per inizzializzarlo ilRicettario.iniziaDa(radice); // gli faccio anche dove prendere e iniza titolo.innerHTML = ilRicettario.creaTitoloHTML(); // invocazione del metodo lista.innerHTML = ilRicettario.creaListaHTML(); // invocazione del metodo }