«[Figlio dell'uomo] Porgi l'orecchio e ascolta le parole di KGB
e applica la tua mente alla SUA istruzione
» Pv. 22,17

Qui si straparla di vari argomenti:
1. Il genere dei pezzi è segnalato da varie immagini, vedi Legenda
2. Istruzioni per i nuovi lettori (occasionali e non) qui
3. L'ultimo corto è questo

sabato 19 marzo 2016

CdP: Soluzioni lezione 1

Gli esercizi assegnati, con l'eccezione del problema 7 facoltativo, erano piuttosto semplici e quindi insisterò su dettagli un po' secondari...

Problema 4: “Area rettangolo” - Calcolare l'area di un rettangolo con i lati di 10 e 12 cm.

Algoritmo:
1 – Assegna lato minore
2 – Assegna lato maggiore
3 – Calcola area

Pseudo codice:
1. Lato_Min := 10
2. Lato_Mag := 12
3. Area := Lato_Min * Lato_Mag

Osservazioni:
Algoritmo:
Come al solito gli algoritmi possibili erano più di uno: un'alternativa era quella di calcolare direttamente l'area evitando gli assegnamenti 1 e 2 (ovvero → Area := 10 * 12)
Pseudo Codice:
Notare che il nome delle due variabili Lato_Min e Lato_Mag include il carattere underscore, ovvero “_”: in genere lo si usa al posto dello spazio che è vietato (almeno in tutti i linguaggi che mi vengono in mente) perché confonderebbe il compilatore/interprete.

Problema 5: “Le biglie” - Tim, Tom e Tam hanno lo stesso numero di biglie che, in totale, sono 30: giocando fra loro Tim vince 5 biglie e Tom ne perde 1. Con quante biglie è rimasto Tam?

Algoritmo:
1. Assegna dati noti
2. Calcola biglie iniziali di Tam
3. Sottrai a Tam le biglie vinte da Tim e aggiungi quelle perse da Tom

Pseudo codice:
1. Vinte_da_Tim := 5
2. Perse_da_Tom := 1
3. Biglie_totali := 30
4. Biglie_Iniziali_Tam := Biglie_totali / 3
5. Biglie_Tam := Biglie_Iniziali_Tam – Vinte_da_Tim + Perse_da_Tom

Osservazioni:
Algoritmo:
Il passo 1 è generico: come spiegato, in genere, le istruzioni generiche dovrebbero essere sostituite da funzioni (che vedremo in seguito) ma in questo caso, data la semplicità delle operazioni richieste si è convertito con le operazioni 1, 2 e 3 dello pseudo-codice. Vale anche la pena di sottolineare che, via via che si prende confidenza con la stesura di algoritmi, aumenterà il numero dei passi generici: sappiamo già come risolvere uno specifico sottoproblema e, per questo, non perdiamo tempo descrivendo la soluzione nei suoi dettagli.
Il passo 5 può generare qualche perplessità ma è matematica elementare: essendoci solo tre giocatori, se il primo vince 5 biglie e il secondo ne perde 1, significa che il terzo ne perde 4 (5 -1) e quindi il numero delle sue biglie finali sarà pari al numero di quelle iniziali meno 4, ovvero 6.
Pseudo Codice:
-

Problema 6: “Scambio di più variabili” - Alle variabili A, B e C sono già stati precedentemente assegnati dei valori noti: adesso si vuole che A prenda il valore originale di B, B quello di C e C il valore originale di A.

Algoritmo:
1- salva il valore di A in una variabile temporanea
2- copia il valore di B in A
3- copia il valore di C in B
4- copia il valore della variabile temporanea in C

Pseudo codice:
1. tmp := A
2. A := B
3. B := C
4. C := tmp

Osservazioni:
Algoritmo:
L'algoritmo ricalca da vicino quello del problema 3: da notare che nonostante ci sia una variabile in più (la C) basta comunque una sola variabile temporanea (che, come da tradizione informatica, ho chiamato tmp). È pero importante l'ordine degli assegnamenti! Ad esempio, scambiando l'istruzione 2 con la 3, il programma non risolverebbe più il problema: il valore originario di B andrebbe perso e ad A verrebbe assegnato il valore originario di C.
Pseudo codice:
-

Problema 7 (bonus!): Le due variabili- Alle variabili A e B sono già stati precedentemente assegnati dei valori noti: si vuole che B prenda il valore di A e che A prenda il valore di B. Senza usare nessuna variabile temporanea: ovvero usando solo assegnamenti fra A e B...

Algoritmo:
1. Sfrutta le combinazioni lineari delle variabili A e B per scambiarne i valori...

Pseudo Codice:
1. A := A + B
2. B := B – A
3. A := A + B
4. B := -B

Osservazioni:
Algoritmo:
Il passo 1 suona come un imbroglio ma in effetti non saprei suddividere tale passaggio in parti più semplici: come detto si tratta di algebra lineare...
Pseudo Codice:
Di per sé le varie istruzioni sono semplici assegnamenti e non c'è niente da spiegare: un dubbio legittimo è però chiedersi se il programmino funziona!
Come premesso questo algoritmo è una curiosità senza nessuna applicazione pratica: è più semplice e rapido effettuare lo scambio in tre passaggi usando una variabile temporanea (v. problema 3) che le quattro operazioni non intuitive di questo pseudo codice...
Un utile sistema per verificare manualmente il codice è quello di tenere traccia, ad ogni passaggio, del contenuto delle variabili A e B. Proviamo a farlo insieme (*1):
Situazione iniziale → A = @ e B = Ж
Dopo istruzione 1 → A = @ + Ж e B = Ж
Dopo istruzione 2 → A = @ + Ж e B = Ж - @ - Ж = -@
Dopo istruzione 3 → A = @ + Ж - @ = Ж e B = -@
Dopo istruzione 4 → A = Ж e B = @

Conclusione: prossimamente la lezione due...

Nota (*1): invece di usare numeri (o incognite come le tradizionali X o Y) uso i simboli @ e Ж. Mi sembra più chiaro...

Nessun commento:

Posta un commento