La ricorsione

Joan Mirò

La ricorsione è uno dei nuclei portanti della programmazione.

Essa serve per ordinare liste, numeri, comporre funzioni e successioni.

Per capire come usarla utilizzo la successione di Fibonacci.

La successione di Fibonacci è fondamentale per calcolare la sezione aurea.

I numeri che la compongono sono:

0 1 1 2 3 5 8 13 21 34 55 …

il numero successivo è dato dalla somma dei due numeri precedenti.

La differenza tra il numero in considerazione e quello precedente mi fornisce la sezione aurea.

L’implementazione informatica sta in queste semplici righe di codice evidenziate in rosso:

i=0
x=1
x1=0
x2=1

while i<n:
fibo= fibo1 + fibo2
                 i=i+1
                 fibo2=fibo1
                 fibo1=fibo
if fibo>1:
sezau=1.0*fibo/fibo2
print ‘sezione aurea: ‘,sezau

la ricorsione sta in fibo= fibo1+fibo2  e nel sostituire in maniera opportuna le variabile all’interno del ciclo.

Per capire i valori assunti dalle singole variabili poste all’interno del ciclo si può usare questa semplice tabella:

n Fibo Fibo1 Fibo2 sezau
i=0
i=1

 

Pubblicato in Senza categoria | Lascia un commento

Soluzione gruppo C: passaggi di base

Renè Magritte

GRUPPO C

1) 243:2 R=1 121:2 R=1 60:2 R=0 30:2 R=0 15:2 R=1 7:2 R=1 3:2 R=1  1

Adesso prendo i numeri in rosso:

243_{10}=11110011_{2}

effettuando la prova si ha:

11110011_{2}=1\cdot 2^{7}+1\cdot 2^{6}+1\cdot 2^{5}+1\cdot 2^{4}+0\cdot 2^{3}+0\cdot 2^{2}+1\cdot 2^{1}+1\cdot 2^{0}=128+64+32+16+2+1=243_{10}

2) 1001_{2}=1\cdot 2^{3}+0\cdot 1^{2}+0\cdot 2^{1}+1\cdot 2^{0}=9_{10}

3) 13:3 R=1 4:3 R=1  1

Prendendo i numeri in rosso leggendoli da destra verso sinistra si ha:

13_{10}=111_{3}

Effettuando la prova si ha:

111_{3}=1\cdot 3^{2}+1\cdot 3^{1}+1\cdot 3^{0}=9+3+1=13_{10}

4) 21_{3}=2\cdot 3^{1}+1\cdot 3^{0}=6+1=7_{10}

Effettuando al prova si ha:

7:3  R=1 2

leggendo da destra verso sinistra si ha:

7_{10}=21_{3}

5) Ricordandosi il valore delle lettere in base 16 (A=10; B=11; C=12;D=13;E=14;F=15) si ha:

AAB_{16}=10\cdot 16^{2}+10\cdot 16^{1}+11\cdot 16^{0}=2560+160+11=2731_{10}

Effettuando la pr0va:

2731:16 R=11(B) 170:16 R=10(A) 10(A)

leggendo da destra verso sinistra ho:

2731_{10}=AAB_{16}

6) 43_{6}=4\cdot 6^{1}+3\cdot 6^{0}=24+3=27_{10}

effettuando la prova si ha:

27:6 R=3 4

leggendo da destra verso sinistra ho:

27_{10}=43_{6}

7) Si deve prima passare per la base 10 e poi andare alla base 5.

7.a) 1002_{3}=1\cdot 3^{3}+0\cdot 3^{2}+0\cdot 3^{1}+2\cdot 3^{0}=29_{10}

adesso si passa alla base 5:

7.b) 29:5 R=4 5:5 R=0 1

Leggendo da destra verso sinistra:

29_{10}=104_{5}

8) Per eseguire la somma di due numeri binari è sufficiente applicare la tabellina riportata nel link del testo dell’esercizio oppure portare i due numeri in  base dieci, poi effettuare la somma e quindi riportarla in base 2 ma è molto lungo e macchinoso.

Riporto la tabellina:

Si è in base 2!

1 + 0 = 1

0 + 1 = 0

0 + 0 = 0

1 + 1 = 0 con riporto di 1

101_{2}+101_{2}=1010_{2}

considerando l’ultima cifra si ha infatti che 1 +1 = 0 resto 1 che va a sommarsi alla penultima cifra e quindi ho 1. La somma delle prime due cifre fornisce ancora 0 con resto 1 per cui scriverò 1 e 0.

Pubblicato in Senza categoria | Lascia un commento

Soluzione gruppo B: passaggi di base

Denis Nunez Rodriquez

GRUPPO B

1) 324:2 R=0 162:2 R=0 81:2 R=1 40:2 R=0 20:2 R=0 10:2 R=0 5:2 R=1 2:2 R=0 1

Adesso prendo i numeri in rosso:

324_{10}=101000100_{2}

effettuando la prova si ha:

101000100_{2}=1\cdot 2^{8}+0\cdot 2^{7}+1\cdot 2^{6}+0\cdot 2^{5}+0\cdot 2^{4}+0\cdot 2^{3}+1\cdot 2^{2}+0\cdot 2^{1}+0\cdot 2^{0}=256+64+4=324_{10}

2) 1011_{2}=1\cdot 2^{3}+0\cdot 1^{2}+1\cdot 2^{1}+1\cdot 2^{0}=11_{10}

3) 43:3 R=1 14:3 R=2 4:3 R=1 1

Prendendo i numeri in rosso leggendoli da destra verso sinistra si ha:

43_{10}=1121_{3}

Effettuando la prova si ha:

1121_{3}=1\cdot 3^{3}+1\cdot 3^{2}+2\cdot 3^{1}+1\cdot 3^{0}=27+9+6+1=43_{10}

4) 221_{3}=2\cdot 3^{2}+2\cdot 3^{1}+1\cdot 3^{0}=18+6+1=25_{10}

Effettuando al prova si ha:

25:3  R=1 8:3 R=2 2

leggendo da destra verso sinistra si ha:

25_{10}=221_{3}

5) Ricordandosi il valore delle lettere in base 16 (A=10; B=11; C=12;D=13;E=14;F=15) si ha:

AFB_{16}=10\cdot 16^{2}+15\cdot 16^{1}+11\cdot 16^{0}=2560+240+11=2811_{10}

Effettuando la pr0va:

2811:16 R=11(B) 175:16 R=15(F) 10(A)

leggendo da destra verso sinistra ho:

2811_{10}=AFB_{16}

6) 45_{6}=4\cdot 6^{1}+5\cdot 6^{0}=29_{10}

effettuando la prova si ha:

29:6 R=5 4

leggendo da destra verso sinistra ho:

29_{10}=45_{6}

7) Si deve prima passare per la base 10 e poi andare alla base 5.

7.a) 102_{3}=1\cdot 3^{2}+0\cdot 3^{1}+2\cdot 3^{0}=11_{10}

adesso si passa alla base 5:

7.b) 11:5 R=1 2

Leggendo da destra verso sinistra:

11_{10}=21_{5}

8) Per eseguire la somma di due numeri binari è sufficiente applicare la tabellina riportata nel link del testo dell’esercizio oppure portare i due numeri in  base dieci, poi effettuare la somma e quindi riportarla in base 2 ma è molto lungo e macchinoso.

Riporto la tabellina:

Si è in base 2!

1 + 0 = 1

0 + 1 = 0

0 + 0 = 0

1 + 1 = 0 con riporto di 1

1011_{2}+1001_{2}=10100_{2}

considerando l’ultima cifra si ha infatti che 1 +1 = 0 resto 1 che va a sommarsi alla penultima cifra e quindi ho ancora 0 ma con resto 1 che vado a scrivere perchè 0 + 0 = 0 ma c’è il resto. La somma delle prime due cifre fornisce ancora 0 con resto 1 per cui scriverò 1 e 0.

Pubblicato in Senza categoria | Lascia un commento

Soluzione gruppo A: passaggio di base

Pablo Picasso – 1930

GRUPPO A

1) 234:2 R=0 117:2 R=1 58:2 R=0 29:2 R=1 14:2 R=0 7:2 R=1 3:2 R=1

Adesso prendo i numeri in rosso:

234_{10}=11101010_{2}

effettuando la prova si ha:

11101010_{2}=1\cdot 2^{7}+1\cdot 2^{6}+1\cdot 2^{5}+0\cdot 2^{4}+1\cdot 2^{3}+0\cdot 2^{2}+1\cdot 2^{1}+0\cdot 2^{0}

2) 1111_{2}=1\cdot 2^{3}+1\cdot 1^{2}+1\cdot 2^{1}+1\cdot 2^{0}=15_{10}

3) 34:3 R=1 11:3 R=2 3:3 R=0 1

Prendendo i numeri in rosso leggendoli da destra verso sinistra si ha:

34_{10}=1021_{3}

Effettuando la prova si ha:

1021_{3}=1\cdot 3^{3}+0\cdot 3^{2}+2\cdot 3^{1}+1\cdot 3^{0}=27+6+1=34_{10}

4) 211_{3}=2\cdot 3^{2}+1\cdot 3^{1}+1\cdot 3^{0}=18+3+1=22_{10}

Effettuando al prova si ha:

22:3  R=1 7:3 R=1 2

leggendo da destra verso sinistra si ha:

22_{10}=211_{3}

5) Ricordandosi il valore delle lettere in base 16 (A=10; B=11; C=12;D=13;E=14;F=15) si ha:

AFA_{16}=10\cdot 16^{2}+15\cdot 16^{1}+10\cdot 16^{0}=2560+240+10=2810_{10}

Effettuando la prova:

2810:16 R=10(A) 175:16 R=15(F) 10(A)

leggendo da destra verso sinistra ho:

2810_{10}=AFA_{16}

6) 54_{6}=5\cdot 6^{1}+4\cdot 6^{0}=34_{10}

effettuando la prova si ha:

34:6 R=4 5

leggendo da destra verso sinistra ho:

34_{10}=54_{6}

7) Si deve prima passare per la base 10 e poi andare alla base 5.

7.a) 12_{3}=1\cdot 3^{1}+2\cdot 3^{0}=5_{10}

adesso si passa alla base 5:

7.b) 5:5 R=0 1

Leggendo da destra verso sinistra:

5_{10}=10_{5}

8) Per eseguire la somma di due numeri binari è sufficiente applicare la tabellina riportata nel link del testo dell’esercizio oppure portare i due numeri in  base dieci, poi effettuare la somma e quindi riportarla in base 2 ma è molto lungo e macchinoso.

Riporto la tabellina:

Si è in base 2!

1 + 0 = 1

0 + 1 = 0

0 + 0 = 0

1 + 1 = 0 con riporto di 1

1011_{2}+1001_{2}=10100_{2}

considerando l’ultima cifra si ha infatti che 1 +1 = 0 resto 1 che va a sommarsi alla penultima cifra e quindi ho ancora 0 ma con resto 1 che vado a scrivere perchè 0 + 0 = 0 ma c’è il resto. La somma delle prime due cifre fornisce ancora 0 con resto 1 per cui scriverò 1 e 0.

Pubblicato in Senza categoria | Lascia un commento

Soluzioni sull’esercitazione sui Cicli

Renè Magritte – Valori Personali – 1952

Esercizio 1.

La difficoltà è:

  • creare due cicli nidificati
  • annullare la variabile che si incrementa nel ciclo più interno, nel ciclo esterno

ESP027V0

Esercizio 2

La difficoltà è:

  • non andare a capo–> approfondimento istruzione print
  • un ciclo nidificato con la gestione dell’andare a capo

ESP028V0

Esercizio 3.

La difficoltà è:

  • presenza del ciclo for
  • non andare a capo
  • ordinare il comando print

ESP029V0

Esercizio 4

Le difficoltà sono:

  • ciclo for all’interno di un ciclo while
  • gestione della stringa ed accesso ai suoi elementi
  • gestione dell’OR all’interno dell’IF

ESP031V0

Esercizio 5

La difficoltà è:

  • creazione e gestione del ciclo while
  • asincronia tra il contatore ed il valore della successione
  • sostituzione delle variabili per avere il numero corretto della successione di Fibonacci
  • gestione fa intero a numero reale

ESP030V0

Pubblicato in Senza categoria | Lascia un commento

Passaggi di base

Pablo Picasso – Olga Khokhllova – 1923

Eseguire i seguenti passaggi di base

Gruppo A

-1) da 234_{10} alla base 2

– 2) da 1111_{2} alla base 10

– 3) da 34_{10} alla base 3

– 4) da 211_{3} alla base 10

– 5) da AFA_{16} alla base 10

– 6) da 54_{6} a base 10

– 7) da 12_{3} a base 5.

– 8) provare ad eseguire la somma di 1011_{2}+1001_{2}

Soluzione

Gruppo B

-1) da 324_{10} alla base 2

– 2) da 1011_{2} alla base 10

– 3) da 43_{10} alla base 3

– 4) da 221_{3} alla base 10

– 5) da AFB_{16} alla base 10

– 6) da 45_{6} a base 10

– 7) da 102_{3} a base 5.

– 8) provare ad eseguire la somma di 1011_{2}+1001_{2}

Soluzione

Gruppo C

-1) da 243_{10} alla base 2

– 2) da 1001_{2} alla base 10

– 3) da 13_{10} alla base 3

– 4) da 21_{3} alla base 10

– 5) da AAB_{16} alla base 10

– 6) da 43_{6} a base 10

– 7) da 1002_{3} a base 5.

– 8) provare ad eseguire la somma di 101_{2}+101_{2}

Soluzione

Pubblicato in Senza categoria | Lascia un commento

Esercitazione sui cicli

Pablo Picasso – Chitarra – 1913

Prima di cominciare l’esercitazione, creare una directory nella cartella scambio con il proprio nome e cognome, all’interno della quale si inserisca l’elaborato.

Sviluppare almeno due dei seguenti cinque problemi:

1 – Scrivere un programma che chiede all’utente di inserire due numeri a e b e stampa un rettangolo di asterischi di altezza a e base b. Ad esempio, se l’utente inserisce a=3 e b=5, il programma deve stampare:

*****

*****

*****

2- Scrivere un programma che chiede all’utente di inserire un numero intero positivo n, e quindi stampa la tabellina moltiplicativa fra tutti i numeri compresi tra 1 e n (inclusi). Ad esempio, per n=3 il risultato deve essere:

1 2 3

2 4 6

3 6 9

3- Scrivere un programma che chiede all’utente di inserire 5 valori numerici compresi tra 1 e 10. Successivamente il programma dovrà disegnare il relativo istogramma utilizzando i caratteri “*”

3 – ***

2- **

6-******

4-****

1- *

4- Scrivere un programma che chiede all’utente di inserire un numero n intero positivo, gli chieda di inserire n parole, e per ciascuna di esse stampi a video il numero totale di caratteri che la compongono, il numero di vocali ed il numero di consonanti. Al termine il programma deve stampare anche i valori totali (caratteri, vocali e consonanti).

5- Scrivere un programma che chieda all’utente di inserire un numero n intero positivo e quindi stampi a video i primi n numeri della successione di Fibonacci dimostrando che il rapporto tra il numero successivo e quello precedente mi fornisce proprio la sezione aurea. Si noti come  all’aumentare del numero dei numeri richiesti la sezione aurea aumenta di precisione.

Pubblicato in Senza categoria | Lascia un commento

Modello reticolare

Renè Magritte

Il modello reticolare su basa sulle strutture dati  a grafo, dove cioè, mediante puntatori è possibile accedere ai dati più facilmente senza i vincoli rigidi della struttura gerarchica. Possiamo quindi vedere il modello reticolare come un’estensione del modello gerarchico, dove non esiste alcuna radice ma ogni nodo può essere il punto di partenza per raggiungere un determinato campo.

Ogni elemento è costituito da un record che può connettersi con altri N record: è quindi possibile stabilire delle relazioni multiple del tipo N a N (N:N), impossibili nel modello gerarchico.

Si immagini il modello dei docenti e delle relative classi. Ogni classe ha N docenti e le N classi hanno N docenti.

Ecco un semplice schema:

PRO e CONTRO

  • E’ molto complesso portare delle modifiche in quanto si rischia di dover riscrivere tutte le applicazioni che già lo utilizzano.
  • Per realizzare due reticoli indipendenti è necessario duplicare i dati introducendo un’inutile ridondanza.
  • Se i dati non sono tra loro direttamente connessi la loro ricerca è difficoltosa
  • E’ molto rigido in caso di modifiche siccessive alla sua creazione.
Pubblicato in Senza categoria | Lascia un commento

Modello gerarchico

Renè Magritte

Nel modello gerarchico i dati sono organizzati secondo strutture ad albero che rappresentano la gerarchia degli elementi presenti nell’archivio.

La radice è il record principale del database da cui partono uno o più sottoalberi ad esso simili: naturalmente il numero dei figli è variabile.

Si pensi ad un albero al contrario ossia la radice è posta in alto, i rami e le foglie in basso.

Ogni diramazione si chiama nodo e può avere un certo numero di rami secondari. Questo tipo di relazione viene chiamata 1:N o meglio uno a molti.

Ogni padre può avere molti figli, ma ogni figlio può avere un solo padre!

Un esempio di modello gerarchico che si utilizza ogni giorno è l’organizzazione dei file del nostro file system, organizzato in directory e sotttodirectory. Questo modello era usato dei DBMS per mainframe; in seguito i DBMS reticolari hanno sostituito quelli gerarchici per poi essere sostituiti da quelli relazionali (chiamati RDBMS).

PRO e CONTRO del modello gerarchico

  • E’ semplice recuperare l’informazione quando i dati sono proprio di natura gerarchica, esempio padre e figli.
  • E’ complesso estrarre i dati secondo altri criteri (per esempio estrarre tutte i figli maschi; è necessario visitare tutti i rami dell’albero!)
Pubblicato in Senza categoria | Lascia un commento

Concorsone per insegnanti 2012

Edvard Munch

Il testo del concorso indetto dal Ministero dell’Istruzione.

Si notino come non tutte le regioni sono rappresentate come nemmeno tutte le classi di concorso!

concorso250912

Pubblicato in Senza categoria | Lascia un commento