algorytm.org

Implementacja w Delphi/Pascal

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Zamiana liczby na słowa z polską gramatyką - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 17
SłabyŚwietny
Nadesłany przez Stefan Pruszkiewicz, 08 czerwca 2010 20:21
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Zamiana liczb na postac slowna z polska gramatyka - Delphi/liczby_z_gramatyka.dpr:
//zamiana liczb na postać słowną z polską gramatyką
//Stefan Pruszkiewicz
//www.algorytm.org

program liczby_z_gramatyka;
{$APPTYPE CONSOLE}
uses
  SysUtils;

function Slownie(Liczba : Int64) : string;
const Liczby : array [0..9,0..3] of string [17] =
        (('', '', '', ''),
        ('jeden ', 'jedenascie ', 'dziesiec ', 'sto '),
        ('dwa ', 'dwanascie ', 'dwadziescia ', 'dwiescie '),
        ('trzy ', 'trzynascie ', 'trzydziesci ', 'trzysta '),
        ('cztery ', 'czternascie ', 'czterdziesci ', 'czterysta '),
        ('piec ', 'pietnascie ', 'piecdziesiat ', 'piecset '),
        ('szesc ', 'szesnascie ', 'szescdziesiat ', 'szescset '),
        ('siedem ', 'siedemnascie ', 'siedemdziesiat ', 'siedemset '),
        ('osiem ', 'osiemnascie ', 'osiemdziesiat ', 'osiemset '),
        ('dziewiec ','dziewietnascie ','dziewiecdziesiat ','dziewiecset '));
Grupy : array [0..6,0..2] of string [11] =
        (('' ,'' ,''),
        ('tysiac ' ,'tysiace ' ,'tysiecy '),
        ('milion ' ,'miliony ' ,'milionow '),
        ('miliard ','miliardy ','miliardow '),
        ('bilion ' ,'biliony ' ,'bilionow '),
        ('biliard ','biliardy ','biliardow '),
        ('trylion ','tryliony ','trylionow '));
var J,N,D,S,G,K : Byte; {Jednostki,Nastki,Dziesiatki,Setki,Grupy,Koncowki}
Znak : string;
begin
        G:=0;
        if Liczba<0 then Znak:='minus ' else Znak:='';
        if Liczba=0 then Slownie:='zero' else
        repeat
                S:=Abs(Liczba) mod 1000 div 100;
                D:=Abs(Liczba) mod 100 div 10;
                J:=Abs(Liczba) mod 10;
                if (D=1) and (J>0) then {Warunek do obsługi nastek}
                begin
                        N:=J;
                        D:=0;
                        J:=0
                end else N:=0;
                case J of {Tu zawiera sie cała gramatyka, wybór końcówki}
                        1 : if S+D+N>0 then K:=2 else K:=0;
                        2..4 : K:=1
                        else K:=2 end;
                if S+D+N+J>0 then
                        Result:=Liczby[S,3]+Liczby[D,2]+Liczby[N,1]+Liczby[J,0]+Grupy[G,K]+Result;
                Liczba:=Liczba div 1000;
                Inc(G)
        until Liczba=0;
        Result:=Znak+Result
end;

Begin
Writeln(Slownie(9223372036854775807));
Readln {9'223'372'036'854'775'807}
End.

Dodaj komentarz