da
WALTERmwp » 20 lug 2014, 2:15
Una ulteriore spiegazione la potrebbe facilmente aggiungere anche un'altra persona, non vi è nulla di sofisticato in quanto proposto.
Con questo non intendo banalizzare, sia chiaro, ed il livello di difficoltà è e rimane comunque una valutazione relativa.
Facciamo così, io ti aggiungo un ulteriore approfondimento, sempre facendo riferimento al Post [9] dove, in sintesi, è riportato lo "sviluppo" del programma, poi valuterai se proseguire per implementare la logica o scegliere definitivamente di non seguire questa idea per cercarne un'altra.
- prima esecuzione
I) vengono inizializzate tutte le variabili (una variabile, un byte) generali e generiche che ti troverai ad utilizzare come il conteggio dei tentativi (count), il valore per i numeri indovinati nella giusta posizione (posok) ed il valore per i numeri indovinati ma in posizione sbagliata (nopos), ai quali viene assegnato valore zero.
Ai quattro byte destinati a rappresentare il "codice" da scoprire vengono assegnati dei valori; questi, si può decidere, compresi nel range da 1 a 6 (sei colori).
L'assegnazione può essere fatta anche manualmente, non è necessario tenerli nascosti alla "controparte" (come avviene nel gioco), che poi sei sempre tu, infatti l'importante è dimostrare d'avere "scritto" il programma e che questo risponde alle regole del gioco.
Supponiamo di assegnare i seguenti valori al "codice":
cod1=3, cod2=1, cod3=5, cod4=4 (sequenza codice: 3 1 5 4).
II) Assegni poi altrettanti valori ai quattro byte destinati a contenere la "chiave", ad esempio:
key1=2, key2=1, key3=4, key4=6 (sequenza chiave: 2 1 4 6).
III) Ora i programma deve eseguire la comparazione; in base alla regola del gioco dovrebbe assegnare alla variabile posok il valore 1(uno) e a nopos il valore 1(uno).
Infatti, nella "chiave", è stato proposto un numero che è presente nel "codice" ed è stato riportato anche nella stessa posizione (si tratta del numero 1), inoltre, sempre nella "chiave", è stato proposto un altro numero, che è sempre presente nel "codice", ma in una posizione differente (si tratta del numero 4).
IV) assegna i valori determinati tramite l'applicazione del criterio: posok=1 e nopos=1.
V) torna allo step (I) se posok vale 4; così non è quindi torna allo step (II).
- seconda esecuzione
II) Nel gioco, ovviamente, saresti all'oscuro del contenuto del "codice" e, in base alle informazioni in tuo possesso (valore di posok e nopos) e a tutte le "chiavi" proposte (sino ad ora in pratica una sola perché è stato compiuto un solo tentativo), dovresti proporre una nuova "chiave"; nel nostro "contesto", la chiave, a te ovviamente è nota ma proponi un'altra sequenza (facendo "vedere", per esempio, cosa accade cambiando un solo numero alla "chiave") dimostrando l'evoluzione del programma:
key1=5, key2=1, key3=4, key4=6 (sequenza chiave: 5 1 4 6).
III) il programma esegue la comparazione e assegna alla variabile posok il valore 1(uno) e a nopos il valore 2(due); infatti hai cambiato un solo numero mettendo il 5 al posto del 2 e, di fatto, hai migliorato la situazione.
Si ripete quindi lo step (IV) e (V) per tornare allo step (II).
Ora è chiaro che tu, inizializzando sia campi (variabili cioè registri) del "codice" che della "chiave" reciti il ruolo del Codificatore e del Decodificatore (cioè dei due giocatori) per cui puoi inserire i valori in modo tale da giungere prima del limite (nove esecuzioni) ad "indovinare" il "codice".
La parte "significativa" del programma, se vogliamo esprimerci in tal modo, è quella da implementare per lo step (III).
Il passaggio da un o step al successivo lo puoi gestire, per esempio, incrementando un'altra variabile; insomma, se hai capito cosa deve fare il programma trovi poi il modo per svilupparlo utilizzando le risorse che hai a disposizione.
Con questa spiegazione non so se ho fatto confusione alimentando i tuoi dubbi o, viceversa, ti ho fornito un chiarimento che incoraggia la scelta, vedi tu.
Ora vado a nanna.
Saluti
W - U.H.F.