Zapis słowny liczb, ale ...

0

Witam ! Wiem że już był post o nazwie zapis słowny liczb, i mam taki kod, ale to tego potrzebuje zapisu z przecinkami np. 102,56 sto dwa i piędziesiąt sześć setnych.

Mój kod wygląda tak:


program liczby;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function LiczbaSlownie(Liczba: int64): string;                                  

function Slow(t: string): string;
const

J: array ['1'..'9'] of string[20] =                                           

(' jeden', ' dwa', ' trzy', ' cztery', ' piec', ' szesc',
 ' siedem', ' osiem', ' dziewiec');

N: array [10..19] of string[20] =                                               

(' dziesiec', ' jedenascie', ' dwanascie', ' trzynascie', ' czternascie',
 ' pietnascie', ' szesnascie', ' siedemnascie', ' osiemnascie', ' dziewietnascie');

D: array ['0'..'9'] of string[20] =                                             

('', '', ' dwadziescia', ' trzydziesci', ' czterdziesci',
 ' piecdziesiat', ' szescdziesiat', ' siedemdziesiat',
 ' osiemdziesiat', ' dziewiecdziesiat');

S: array ['0'..'9'] of string[20] =                                          
('', ' sto', ' dwiescie', ' trzysta', ' czterysta',
 ' piecset', ' szescset', ' siedemset', ' osiemset', ' dziewiecset');

  begin
    Result := '';
    case t[2] of
    '1': Result := S[t[1]]+N[StrToInt(t[2]+t[3])];
    '0', '2'..'9': Result := S[t[1]]+D[t[2]]+J[t[3]];
    end;
  end;

const

G: array [0..7, 1..3] of string[20] =     
  (('', '', ''),
  (' tysiac', ' tysiace', ' tysiecy'),
  (' milion', ' miliony', ' milionow'),
  (' miliard', ' miliardy', ' miliardow'),
  (' bilion', ' biliony', ' bilionow'),
  (' biliard', ' biliardy', ' biliardow'),
  (' trylion', ' tryliony', ' trylionow'),
  (' tryliard', ' tryliardy', ' tryliardow')); 

var                                                                            
  sl, t1, t: string;
  i, k, dl: Byte;

begin
  t := IntToStr(Liczba);
  dl := Length(t);
  for i := 0 to (dl-1) div 3 do
    begin
      t1 := Copy(t, Length(t)-2, 3);
      Delete(t, Length(t)-2, 3);

      for k := 1 to 3-Length(t1) do                                            
        t1 := '0'+t1;

      if t1='000' then                                                        
        Continue;

      if (t1='001') then                                                       
        sl := Slow(t1) + G[i,1] + sl
      else

        if (t1[3] in ['2'..'4']) and (t1[2]<>'1') then                         
          sl := Slow(t1) + G[i,2] + sl
        else
          sl := Slow(t1) + G[i,3] + sl;
    end;
  Result := Trim(sl);
  writeln(result);
end;                                                                            

 var number : integer;

begin                                                                         

   Writeln(Witaj uzytkowniku :));                             
   Readln;
   number :=1;
   while(number <> 0) do
    begin
      Writeln('Wprowadz liczbe, ktora ma zostac zapisana slownie (0 aby zakonczyc): ');
      readln(number);
      LiczbaSlownie(number);
    end;
      writeln;

end.

Wszystko działa, ale nie wiem jak dolepić do tego przecinki.
Prosze o pomoc :/

0

Writeln(Witaj uzytkowniku :));

(...)

Wszystko działa,

8-0 8-0 8-0 :P

0

Writeln(Witaj uzytkowniku :));

(...)

Wszystko działa,

8-0 8-0 8-0 :P

Twoj post niczego nie wnosi...

Do rzeczy: ja podzielilbym liczbe na 2 czesci: do przecinka i po przecinku - pierwsza zamienilbym normalnie tak jak to robisz - druga podzielil podobnie tyle ze 2 bedzie oznaczalo nie "dwa" lecz "dwie dziesiąte". Potem sklejasz 2 utworzone wyrazy dodajac miedzy nimi "i" :)
Powodzenia

0

a byś mógł mi kod napisać bo nie bardzo rozumiem jak mam to zrobić

0

przekonwertuj sobie liczbą na stringa, to co do przecinka daj jako jednego stringa i przekonwertuj na liczbę, to co po przecinku analogicznie zamień na liczbę i dwa razy wykonaj funckję zapisującą słownie, pomiędzy wykonaniami dając jeszcze jakieś "i" i powinno być ok.

0

Mam coś w tym rodzaju dać ??

if (t = IntToStr(Liczba)) and (p='.') then
      t + 'i' + t;

ojj pomocy !!! Bo nie mam naprawde pojęcia

0

Tak jak pisalem z Ktosiem:
Rozdziel liczbe na 2 czesci do przecinka i poprzecinku. Obie przekonwertuj a nastepnie to co przekonwertujesz podziel wstawiajac "i" miedzy nimi.
Przyklad:
125,89
Do jednego stringa wrzuc 125 i zamien go na "sto dwadziescia piec", do drugiego wrzuc to co masz po przecinku i zamien na "osiemdziesiat dziewiec setnych" a nastepnie polacz te dwa stringi wstawiajac "i" : "sto dwadziescia piec i osiemdziesiat dziewiec setnych".
Jasniej nie potrafie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0