Przykładowy algorytm realizujący proces konwersji liczby
na jej reprezentację słowną.
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ą.
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)
Ilustracja 1 Algorytm funkcji Słownie3 część 1.
Ilustracja 2 Algorytm funkcji Słownie3 część 2.
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