Originariamente inviato da alka
Sinceramente, non ci ho capito nulla di come si convertono i numeri in "egiziano".

Solo un consiglio posso darti: il commento su Result basterebbe scriverlo una volta sola.
Solo per semplice curiosità, prova a leggerti il testo dell'esame di luglio (che non ho sostenuto) della materia che studio adesso. Prima di capire il testo ho dovuto fare parafrasi e analisi logica
Non ti preoccupare se non hai capito l'egiziano...può capitare...:bubu:
A parte lo scherzo ho risolto il problemino...



Prova pratica dell’esame di
Programmazione e Laboratorio
14 Luglio 2003

Sulla base degli argomenti trattati durante il corso e delle classi messe a disposizione da Delphi 5, si realizzi un’applicazione che implementi la moltiplicazione egiziana. Il progetto deve essere sviluppato nei seguenti punti:
Una form principale deve contenere due componenti TRichEdit, rispettivamente di nome colonna1 e colonna2. Deve contenere inoltre due componenti TLabel , di nome numero1 e numero2, in cui vengono visualizzati i due numeri da moltiplicare, scritti nella notazione specificata nel punto 2.
Una form modale generata run-time deve contenere due componenti TEdit in cui inserire i due interi maggiori di zero e minori di 100000; alla chiusura di tale form (al click di un bottone OK) tali valori devono comparire nelle due label della form principale (numero1 e numero2). Tali numeri interi inoltre devono essere visualizzati nelle label secondo il sistema numerico egiziano. Tale sistema non è posizionale come il nostro, ma usa caratteri separati per denotare 1, 10, 100, 1000, 10000. In particolare noi useremo i seguenti simboli:
‘|’ per 1; ‘n’ per 10; ‘9’ per 100; ‘8’ per 1000; ‘r’ per 10000;
per esempio, il numero 4023 è rappresentato mediante la stringa |||nn8888,
il numero 24230 è rappresentato mediante la stringa nnn998888rr.
(Suggerimento: potete creare due funzioni, la prima che converta un numero intero nella corrispondente stringa in notazione egiziana, la seconda che converta una stringa in notazione egiziana nel corrispondente numero intero).
Deve essere possibile caricare sulle label i numeri scritti in notazione egiziana da file di testo esterni e anche salvare tali numeri su file di testo.
Al click di un bottone START, viene copiato su colonna1 il simbolo ‘|’ e su colonna2 il numero1. Viene abilitato inoltre un timer che scandisce il tempo in intervalli della durata di due secondi. Ad ogni scansione del tempo, in ogni colonna viene aggiunta una nuova riga ottenuta raddoppiando il numero della riga precedente.
(Nota che il raddoppiamento può essere ottenuto o raddoppiando ciascun simbolo del numero in notazione egiziana, tenendo conto delle eventuali operazioni di riporto nel caso in cui ci siano più di nove simboli consecutivi uguali, oppure lavorando con i valori interi corrispondenti ai numeri in notazione egiziana).
Il timer si ferma se il numero ottenuto nella prima colonna è maggiore del valore di numero2.
I numeri nella colonna1, la cui somma è il valore di numero2, vengono marcati con un asterisco. I numeri nella colonna2, corrispondenti a tali asterischi, vengono sommati producendo così il risultato (VEDI ESEMPIO SUL RETRO). Tale risultato deve essere visualizzato in un componente a vostra scelta. Valori non codificabili in notazione egiziana sono da considerarsi OUT OF RANGE e implicano un risultato OUT OF RANGE.
Deve essere possibile aggiungere il risultato nel file di testo, se esiste, che contiene i due numeri in notazione egiziana da moltiplicare.

ESEMPIO: moltiplicare 384 per 19;

numero1 : ||||nnnnnnnn999
numero2: |||||||||n

Colonna1 Colonna2
|* ||||nnnnnnnn999
||* ||||||||nnnnnn9999999
|||| ||||||nnn999998
|||||||| ||nnnnnnn888
||||||n* ||||nnnn9888888

Il numero 19 si scrive come 16+2+1 in quanto in notazione binaria si rappresenta come: 10011.
Nota che gli asterischi sono in corrispondenza degli ‘1’ nella notazione binaria di numero2.

Il risultato si ottiene sommando le righe della colonna2 che corrispondono agli asterischi, ovvero:

||||nnnnnnnn999 +
||||||||nnnnnn9999999 +
||||nnnn9888888

Il risultato è: ||||||nnnnnnnnn998888888
che corrisponde al numero intero 7296.