Przykładowy algorytm realizujący proces konwersji liczby

na jej reprezentację słowną.

  1. Założenia projektowe.

Przy projektowaniu algorytmu wykorzystano własność powtarzalności procesu konwersji dla każdego rzędu wielkości czyli możliwość podziału konwertowanej liczby na trzycyfrowe “sekcje” odpowiadające poszczególnym rzędom wielkości danej liczby.

Przy takim podejściu można wyodrębnić funkcję (w tym przykładzie funkcję o nazwie Słownie) odpowiedzialną za zamianę na zapis słowny dowolnej liczby trzycyfrowej (również ujemnej) i uzupełnienie jej końcówką odpowiadającą rozpatrywanemu rzędowi wielkości (przy wywołaniu funkcji rząd wielkości jest sygnalizowany dodatkowym parametrem : 0 - konwersja bez końcówki , 1- końcówka “tysiące”, 2 - końcówka “miliony”; naturalnie w odpowiedniej formie)

Z przyjętych założeń wynika ograniczenie zakresu konwertowanych liczb do przedziału:
<-999999999.. 999999999>. Natrualnie w prosty sposób można algorytm rozbudować o kolejne rzędy wielkości “miliardy” , “biliony” itd.

Przyjmuje się ponadto, że liczba konwertowana musi być liczbą całkowitą.

  1. Algorytmy.

Algorytm ogólny - przedstawia strukturę procedury bez określenia sposobu działania funkcji Słownie, która jest przedstawiona w drugim algorytmie.

Ponadto ze względu na dużą złożoność algorytmu funkcji Słownie dla poprawienia jej czytelności przedstawiony jest listing funkcji realizującej ten algorytm (wykorzystanej w niniejszym dokumencie do prezentacji działania całej procedury - patrz koniec dokumentu) napisana w języku Visual Basic (zintegrowanym z aplikacją Word 97)

0x08 graphic

0x01 graphic

Ilustracja 1 Algorytm funkcji Słownie3 część 1.

0x01 graphic

Ilustracja 2 Algorytm funkcji Słownie3 część 2.

0x01 graphic

Ilustracja 3 Algorytm funkcji Słownie3 część 3.

Private Function Slownie3$(wartosc, rzad)

Dim tmp

Dim c3

Dim c2

Dim c1

Dim wynik1$

Dim wynik2$

Dim wynik3$

Dim w0$

' wartosc - wartość do konwersji na wyrażenie słowne,

' rzad - rząd wielkości (setki,tysiące,miliony)

tmp = wartosc

c3 = tmp Mod 10

c2 = WordBasic.Int((tmp Mod 100) / 10)

c1 = WordBasic.Int(tmp / 100)

Select Case c1

Case 0

wynik1$ = ""

Case 1

wynik1$ = "sto"

Case 2

wynik1$ = "dwieście"

Case 3

wynik1$ = "trzysta"

Case 4

wynik1$ = "czterysta"

Case 5

wynik1$ = "pięćset"

Case 6

wynik1$ = "sześćset"

Case 7

wynik1$ = "siedemset"

Case 8

wynik1$ = "osiemset"

Case 9

wynik1$ = "dziewięćset"

End Select

Select Case c2

Case 0

wynik2$ = ""

Case 1

Select Case c3

Case 0

wynik2$ = "dziesięć"

Case 1

wynik2$ = "jedenaście"

Case 2

wynik2$ = "dwanaście"

Case 3

wynik2$ = "trzynaście"

Case 4

wynik2$ = "czternaście"

Case 5

wynik2$ = "piętnaście"

Case 6

wynik2$ = "szesnaście"

Case 7

wynik2$ = "siedemnaście"

Case 8

wynik2$ = "osiemnaście"

Case 9

wynik2$ = "dziewiętnaście"

End Select

Case 2

wynik2$ = "dwadzieścia"

Case 3

wynik2$ = "trzydzieści"

Case 4

wynik2$ = "czterdzieści"

Case 5

wynik2$ = "pięćdziesiąt"

Case 6

wynik2$ = "sześćdziesiąt"

Case 7

wynik2$ = "siedemdziesiąt"

Case 8

wynik2$ = "osiemdziesiąt"

Case 9

wynik2$ = "dziewięćdziesiąt"

End Select

If c2 = 1 Then

wynik3$ = ""

If rzad = 2 Then w0$ = "tysięcy"

If rzad = 3 Then w0$ = "milionów"

Else

Select Case c3

Case 0

wynik3$ = ""

If rzad = 2 Then w0$ = "tysięcy"

If rzad = 3 Then w0$ = "milionów"

Case 1

wynik3$ = "jeden"

If c1 > 0 Or c2 > 0 Then

If rzad = 2 Then w0$ = "tysięcy"

If rzad = 3 Then w0$ = "milionów"

Else

If rzad = 2 Then w0$ = "tysiąc"

If rzad = 3 Then w0$ = "milion"

End If

Case 2

wynik3$ = "dwa"

If rzad = 2 Then w0$ = "tysiące"

If rzad = 3 Then w0$ = "miliony"

Case 3

wynik3$ = "trzy"

If rzad = 2 Then w0$ = "tysiące"

If rzad = 3 Then w0$ = "miliony"

Case 4

wynik3$ = "cztery"

If rzad = 2 Then w0$ = "tysiące"

If rzad = 3 Then w0$ = "miliony"

Case 5

wynik3$ = "pięć"

If rzad = 2 Then w0$ = "tysięcy"

If rzad = 3 Then w0$ = "milionów"

Case 6

wynik3$ = "sześć"

If rzad = 2 Then w0$ = "tysięcy"

If rzad = 3 Then w0$ = "milionów"

Case 7

wynik3$ = "siedem"

If rzad = 2 Then w0$ = "tysięcy"

If rzad = 3 Then w0$ = "milionów"

Case 8

wynik3$ = "osiem"

If rzad = 2 Then w0$ = "tysięcy"

If rzad = 3 Then w0$ = "milionów"

Case 9

wynik3$ = "dziewięć"

If rzad = 2 Then w0$ = "tysięcy"

If rzad = 3 Then w0$ = "milionów"

End Select

End If

If wartosc <> 0 Then

Slownie3$ = wynik1$ + wynik2$ + wynik3$ + w0$

Else

Slownie3$ = "zero"

End If

End Function

0x08 graphic

0x01 graphic

0x01 graphic