home *** CD-ROM | disk | FTP | other *** search
- Unit Num2Word;
- {* Program by: Richard Weber - 08/02/94 - 4 hours work *}
- {* 70614,2411 *}
- Interface
-
- {* BY: Richard Weber *}
- {* CrazyWare - 08/02/94 *}
- {* CompuServe ID: 70614,2411 *}
-
- {* This program was written in 4 hours. *}
-
- {* Program is self Explainatory. There is only one available function. *}
- {* Function Number2Name(L : LongInt) : String; *}
-
- {* If you call Number2Name(20) it will return the word equalivent *}
- {* as a string. It function will process up to 2 billion and will *}
- {* not process numbers less than zero or fractions of one. *}
-
- {* I hope the unit comes in handy and will prevent you from working *}
- {* one out form scratch. *}
-
- {* Feel free to modify and expand it as will. Please leave me a message *}
- {* for any questions or comments. *}
-
-
- Function Number2Name(L : LongInt) : String;
- { Function converts Long Integer supplied to a Word String }
-
- Implementation
-
- CONST
- N_Ones : Array[0..9] of String[5] =
- ('',
- 'One',
- 'Two' ,
- 'Three',
- 'Four',
- 'Five',
- 'Six',
- 'Seven',
- 'Eight',
- 'Nine');
- N_OnesX : Array[0..9] of String[9] =
- ('Ten',
- 'Eleven',
- 'Twelve',
- 'Thirteen',
- 'Fourteen',
- 'Fifteen',
- 'Sixteen',
- 'Seventeen',
- 'Eightteen',
- 'Nineteen');
- N_Tens : Array[2..10] of String[7] =
- ('Twenty',
- 'Thirty',
- 'Forty',
- 'Fifty',
- 'Sixty',
- 'Seventy',
- 'Eighty',
- 'Ninety',
- 'Hundred');
- N_Extra : Array[1..3] of String[8] =
- ('Thousand',
- 'Million',
- 'Billion');
-
- Hundred = 10; {* N_Tens[10] *}
-
- Function LongVal(S : String) : LongInt;
- Var
- TmpVal : LongInt;
- Count : Integer;
- Begin
- Val(S, TmpVal, Count);
- LongVal := TmpVal;
- End;
-
- Function Long2Str(L : LongInt) : String;
- Var
- S : String;
- Begin
- Str(L,S);
- Long2Str := S;
- End;
-
- Function Number2Name(L : LongInt) : String;
- Var
- NameString : String;
- NumberString : String;
- Finished : Boolean;
- Place : Integer;
- StopPlace : Integer;
- BeginPlace : Integer;
- CountPlace : Integer;
-
- Function Denom(I : Integer) : String;
- Var
- TestPlace : Integer;
-
- Begin
- TestPlace := I Div 3;
- If I Mod 3 <> 0 then Inc(TestPlace);
-
- If TestPlace > 1 then
- Denom := N_Extra[TestPlace-1]
- Else
- Denom := '';
- End;
-
- Function TensConvert(S : String) : String;
- Var TmpStr : String;
- Begin
- If Length(S) > 2 then S := Copy(S,2,2);
- TensConvert := '';
-
- If LongVal(S) <= 19 then
- Begin
- If LongVal(S) >=10 then
- TensConvert := N_OnesX[LongVal(S)-10]
- Else
- TensConvert := N_Ones[LongVal(S)];
- End
- Else
- Begin
- TmpStr := N_Tens[LongVal(S) Div 10];
- If LongVal(S) Mod 10 <> 0 then
- TmpStr := TmpStr + '-' + N_Ones[LongVal(S) Mod 10];
- TensConvert := TmpStr;
- End;
- End;
-
- Function HundredConvert(S : String; Place : BYTE) : String;
- Var
- TmpString : String;
-
- Begin
- TmpString := '';
- If LongVal(S) > 0 then
- Begin
-
- If (Length(S) = 3) and (LongVal(S[1]) > 0) then
- TmpString := TmpString + ' ' + N_Ones[LongVal(S[1])]+
- ' ' + N_Tens[Hundred];
-
- TmpString := TmpString + ' ' + TensConvert(S);
-
- TmpString := TmpString + ' ' + Denom(Place);
-
- End;
- HundredConvert := TmpString;
- End;
-
- Begin
- If L > 0 then
- Begin
- StopPlace := 0;
- Place := 3;
- NameString := '';
- NumberString := Long2Str(L);
-
- Finished := False;
- Repeat
- If Place > Length(NumberString) then
- Begin
- Place := Length(NumberString);
- Finished := True;
- End;
-
- IF Place <> StopPlace then
- Begin
- BeginPlace := Length(NumberString)-Place+1;
- CountPlace := Place-StopPlace;
- NameString := HundredConvert(Copy(NumberString,BeginPlace,CountPlace),Place ) + NameString;
- End;
-
- StopPlace := Place;
- Inc(Place,3);
- Until Finished;
-
- Number2Name := NameString;
- End
- Else
- Number2Name := ' Zero';
- End;
-
- Begin
- End.
-
- { --------------- demo ------------------------- }
-
- Program TestNum;
- Uses Num2Word;
-
- Var
- Lop : Integer;
- Tmp : LongInt;
-
- Begin
- Writeln;
- Randomize;
- For Lop := 1 to 10 do
- Begin
- Tmp := Random(65534);
- Writeln(Tmp, Number2Name(Tmp));
- End;
-
- Readln;
-
-
- For Lop := 0 to 20 do
- Begin
- Writeln(Lop, Number2Name(Lop));
- End;
-
- Readln;
-
-
- For Lop := 10 to 100 do
- Begin
- Writeln(Lop*10, Number2Name(Lop*10));
- End;
-
- End.