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:
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: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;
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:
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?codice:procedure TfmSecond.bbOKClick(Sender: TObject); begin fmMain.lbNumero1.Caption:=DecToEg(edNumero1.Text); fmMain.lbNumero2.Caption:=DecToEg(edNumero2.Text); end;
Vorrei trovare un algoritmo di sviluppo migliore.Spero di essermi spiegato.ciao


Rispondi quotando

