Sono alle prese con una funzione di conversione da intero ad "egiziano".
"|" =1;
"n"=10;
"9"=100
"8"=1000
"r"=10000
Ad esempio il numero intero 4023=|||nn8888 oppure 24230=nnn998888rr
Devo costruire una funzione che prenda in ingresso una stringa (diciamo edit1.Text, che contiene il numero intero) e restitusca un'altra stringa (quella converitita in egiziano)
Ho abbozzato una cosa simile:
codice:
function TfmSecond.DecToEg(s:string): string;
var
unita,decine,centinaia,migliaia,decimigliaia:0..9;
begin
unita:=0;
decine:=0;
centinaia:=0;
migliaia:=0;
decimigliaia:=0;
unita:=StrToInt(Copy(s,Length(s),1));
decine:=StrToInt(Copy(s,Length(s)-1,1));
centinaia:=StrToInt(Copy(s,Length(s)-2,1));
migliaia:=StrToInt(Copy(s,Length(s)-3,1));
decimigliaia:=StrToInt(Copy(s,Length(s)-4,1));
while unita<>0 do
begin
Result:=Result+'|'; //Result è il valore di ritorno della funzione
Dec(unita);
end;
while decine<>0 do
begin
Result:=Result+'n'; //E' uguale a DecToEg:=DecToEg(s)+'n';
Dec(centinaia);
end;
while centinaia<>0 do
begin
Result:=Result+'9'; //Result è il valore di ritorno della funzione
Dec(centinaia);
end;
while migliaia<>0 do
begin
Result:=Result+'8'; //Result è il valore di ritorno della funzione
Dec(migliaia);
end;
while decimigliaia<>0 do
begin
Result:=Result+'r'; //Result è il valore di ritorno della funzione
Dec(decimigliaia);
end;
end;
L'attuale funzione non è adoperabile con molti parametri in ingresso, ma in sostanza dovrebbe andare. La mia idea è prendere dalla stringa ogni singolo numero e fare una sorta di abaco. Ad esempio se il mio numero intero è 345 pensavo di prendere a ritroso le:
unita=5
decine=4
centinaia=3
I cicli while non dovrebbero fare altro che stampare il simbolo corrispondente in "egiziano". Dovrei richiamare questa funzione con un pulsante e passare il tutto ad una label:
codice:
procedure TfmSecond.bbOKClick(Sender: TObject);
begin
fmMain.lbNumero1.Caption:=DecToEg(edNumero1.Text);
fmMain.lbNumero2.Caption:=DecToEg(edNumero2.Text);
end;
Ogni volta che eseguo il programma mi va in loop, quasi il blocca il pc. Il problema dovrebbe quindi essere nella sfilza di cicli while che uso, cosa sbaglio?
Vorrei trovare un algoritmo di sviluppo migliore.Spero di essermi spiegato.ciao