Solved

Enter number and output in words

Posted on 2000-03-30
14
297 Views
Last Modified: 2010-04-16
I'm needing a program that will allow the uses to enter a number from 20 to 99 and then output the equivalent number in words. This is what I got, it's not much!

var number: integer;

procedure convert_to_word;
 var wordnumber: string;
   begin
     write ('Enter a number from 20 to 99: ');
     readln (number);
     wordnumber
0
Comment
Question by:kazooie21
  • 6
  • 5
  • 2
  • +1
14 Comments
 
LVL 47

Expert Comment

by:dbrunton
Comment Utility
you need code like this

function wordnumber(local_number : integer) : string;

var
  numberstr : string;
begin
  case local_number of
  1 : numberstr := 'one';
  2 : numberstr := 'two';

more code

  20 : numberstr := 'twenty';
  21 : numberstr := 'twenty-one';
  22 : numberstr := 'twenty-two';

more code

  97 : numberstr := 'ninety-seven';
  98 : numberstr := 'ninety-eight';
  99 : numberstr := 'ninety-nine';
else
  numberstr := 'Invalid number';
end;  {of case statement }
  wordnumber := numberstr;
end;


and now you would have something like

writeln('The value of ', number, ' is ', wordnumber(number));


This is the case statement and functions.  I hope you have heard of them.

case statement syntax

case I of
1 : do_this;
2 : do_that;
3, 4 : do_them;
5 : do_some;
8: do_more;
else
do_error;
end;

functions are like procedures with var parameters except the function itself returns the var parameter

function add(number1, number2 : integer) : integer;
var
 total : integer;
begin
 total := number1 + number2;
 add := total;    {here the function returns the result}
end;



And do all of the other stuff submitted work OK?  Got points and thanks but does it work OK.  Not happy if you are paying for nothing.
0
 
LVL 6

Expert Comment

by:My name is Mud
Comment Utility
UNIT TPNUMBER;

INTERFACE
FUNCTION NUMSTR(NUM: INTEGER): STRING;

IMPLEMENTATION
USES
  CRT,DOS,TPCOMUN;
CONST
  MIL: ARRAY[0..9] OF STRING[11] =
  ('','PLO','KVZ''TPS','\ZM[(UQT','M_K^\Y*WSV','LRWLX)VRU',
  '[MQ[(UQT','\RN]N)VRU','WKPW(UQT','W^N_N)VRU');
  CEN: ARRAY[0..9] OF STRING[13] =
  ('','IOKTZU','NY]MSOX^Y]','_]P^NTPY_Z^','PbNa_\PVR[a\`','[_SXSOX^Y]',
  '^PT^NTPY_Z^','^P_PNTPY_Z^','ZNSZNTPY_Z^','YZaPNTPY_Z^');
  DEC0: ARRAY[0..9] OF STRING[10] =
  ('','HMI^','\KOTZK','[YLPU[H','K]IZMV\I','LRWL^NW]J',
  'ZLZLU[H','ZL[LU[H','VJOLU[H','UV]LU[H');
  DEC1: ARRAY[1..5] OF STRING[8] =
  ('SRGI','HSGI','YWJHJ','JH[VYJL','W[OTIK');
  UNI: ARRAY[0..9] OF STRING[6] =
  ('','XQR','GRV','XVIW','I[GZXU','HNSHT','WIMW','XNJYJ','SGLS','SZJ[J');
  OMEn: STRING='~zxwlo|X~zJmœ‹Ž‹Jš™œJywo˜J[ZYZ`Y[cc_XXX';
VAR
  S_E_P: POINTER;

PROCEDURE INICIAL;
VAR
  I,J: INTEGER;
BEGIN
  FOR J:=0 TO 9 DO
    BEGIN
      FOR I:=1 TO LENGTH(MIL[J]) DO
        MIL[J,I]:=CHR(ORD(MIL[J,I])-LENGTH(MIL[J]));
      FOR I:=1 TO LENGTH(CEN[J]) DO
          CEN[J,I]:=CHR(ORD(CEN[J,I])-LENGTH(CEN[J]));
      FOR I:=1 TO LENGTH(DEC0[J]) DO
          DEC0[J,I]:=CHR(ORD(DEC0[J,I])-LENGTH(DEC0[J]));
      FOR I:=1 TO LENGTH(UNI[J]) DO
          UNI[J,I]:=CHR(ORD(UNI[J,I])-LENGTH(UNI[J]));
    END;
  FOR J:=1 TO 5 DO
    FOR I:=1 TO LENGTH(DEC1[J]) DO
      DEC1[J,I]:=CHR(ORD(DEC1[J,I])-LENGTH(DEC1[J]));
END;

FUNCTION NUMSTR(NUM: INTEGER): STRING;
VAR
  STRNUM: STRING;
  VE,DI: BOOLEAN;
BEGIN
  STRNUM:=''; VE:=FALSE; DI:=FALSE;
  IF (NUM>0) AND (NUM<10000) THEN
    BEGIN
      IF NUM>999 THEN
        BEGIN
          STRNUM:=STRNUM+UNI[TRUNC(INT(NUM/1000))]+' MIL ';
          IF NUM<2000 THEN DELETE(STRNUM,1,4);
          NUM:=NUM-TRUNC(INT(NUM/1000))*1000
        END;
      IF NUM>99 THEN
        BEGIN
          STRNUM:=STRNUM+CEN[TRUNC(INT(NUM/100))]+' ';
          IF NUM=100 THEN
            BEGIN
              DELETE(STRNUM,LENGTH(STRNUM)-2,3);
              STRNUM:=STRNUM+' '
            END;
          NUM:=NUM-TRUNC(INT(NUM/100))*100;
        END;
      IF NUM IN [11..15] THEN
        BEGIN
          NUM:=NUM-TRUNC(INT(NUM/10))*10; STRNUM:=STRNUM+DEC1[NUM]+' '; NUM:=0;
        END
      ELSE IF (NUM>9) AND NOT(NUM IN [11..15]) THEN
        BEGIN
          IF (NUM>20) AND (NUM<30) THEN VE:=TRUE;
          IF (NUM>15) AND (NUM<20) THEN DI:=TRUE;
          STRNUM:=STRNUM+DEC0[TRUNC(INT(NUM/10))];
          NUM:=NUM-TRUNC(INT(NUM/10))*10;
          IF NUM<>0 THEN
            BEGIN
              IF VE THEN
                BEGIN
                  DELETE(STRNUM,LENGTH(STRNUM),1);
                  STRNUM:=STRNUM+'I'+UNI[NUM]
                END
              ELSE IF DI THEN
                BEGIN
                  DELETE(STRNUM,LENGTH(STRNUM),1);
                  STRNUM:=STRNUM+'CI'+UNI[NUM];
                END
              ELSE STRNUM:=STRNUM+' Y '+UNI[NUM];
              IF NUM=1 THEN DELETE(STRNUM,LENGTH(STRNUM),1);
              STRNUM:=STRNUM+' '; NUM:=0;
            END
          ELSE STRNUM:=STRNUM+' ';
        END;
      IF NUM>0 THEN
        BEGIN
          STRNUM:=STRNUM+UNI[NUM];
          IF NUM=1 THEN DELETE(STRNUM,LENGTH(STRNUM),1);
          STRNUM:=STRNUM+' ';
        END
    END
  ELSE STRNUM:='CERO ';
  NUMSTR:=STRNUM;
END;

{$F+}
PROCEDURE O_E_P;
VAR
  I: INTEGER;
BEGIN
    EXITPROC:=S_E_P;
    FOR I:=1 TO LENGTH(OMEn) DO OMEn[I]:=CHR(ORD(OMEn[I])-LENGTH(OMEn));
    WWRITE(1,WHEREY,OMEn,14,0); WRITELN
END;
{$F-}

BEGIN
  S_E_P:=EXITPROC; EXITPROC:=@O_E_P; INICIAL;
END.
0
 
LVL 6

Expert Comment

by:My name is Mud
Comment Utility
UNIT TPCOMUN;

INTERFACE

PROCEDURE WWRITE(X,Y: INTEGER; S: STRING; PPLANO,FONDO: INTEGER);
FUNCTION RREAD(X,Y,LONG,PPLANO,FONDO: INTEGER): STRING;
PROCEDURE CURSOR(ONOFF: INTEGER);
PROCEDURE LOHIWIN(VAR X,Y: INTEGER);
PROCEDURE STARTCLOCK;
FUNCTION STOPCLOCK: REAL;

IMPLEMENTATION
USES
  CRT,DOS;
CONST
  OMEn: STRING='}ylxv~wW}y~Il›ŽŠŠI™˜›Ixvn—IZbXY]XZbb^WWW';
  XM: INTEGER=80;
  YM: INTEGER=80;
VAR
  SV: WORD;
  S_E_P: POINTER;
  REGS: REGISTERS;
  ARRANQUE,PARADA: REAL;

PROCEDURE LOHIWIN;
BEGIN
  X:=LO(WINDMAX)+1; Y:=HI(WINDMAX)+1; XM:=X; YM:=Y
END;

FUNCTION SEGVID: WORD;
BEGIN
  IF MEM[$0000:$0449] = 7 THEN SEGVID:=$B000 ELSE SEGVID:=$B800;
END;

PROCEDURE WWRITE(X,Y: INTEGER; S: STRING; PPLANO,FONDO: INTEGER);
VAR
  W: WORD;
  I,ATRCOL: INTEGER;
  C: CHAR;

  PROCEDURE WWWRITE(C: CHAR);
  BEGIN
    ATRCOL:=(FONDO SHL 4)+PPLANO;
    W:=((Y-1)*80+(X-1))*2; MEMW[SV:W]:=(ATRCOL SHL 8)+ORD(C);
  END;

BEGIN
  FOR I:=1 TO LENGTH(S) DO
    BEGIN
      IF (((X>0) AND (X<=XM)) AND ((Y>0) AND (Y<=YM))) THEN
        BEGIN C:=S[I]; WWWRITE(C) END; X:=X+1;
    END;
END;

FUNCTION RREAD(X,Y,LONG,PPLANO,FONDO: INTEGER): STRING;
VAR
  I: INTEGER;
  C: CHAR;
  NOM1: STRING;
BEGIN
  I:=0; C:=#32; NOM1:='';
  REPEAT
    IF KEYPRESSED THEN
      BEGIN
      C:=READKEY;
        CASE C OF
          #32: BEGIN I:=I+1; C:=#32; INSERT(C,NOM1,I) END;
          #13: I:=LONG;
          #41..#122,#130,#161..#167: BEGIN I:=I+1; INSERT(C,NOM1,I) END;
          #8:
           BEGIN
             IF I>0 THEN
               BEGIN
                 DELETE(NOM1,I,2); I:=I-1; C:=#32;
                 WWRITE(X+I,Y,' ',PPLANO,FONDO);
               END
             ELSE C:=#32;
           END;
          ELSE C:=#32
        END
      END;
    WWRITE(X,Y,NOM1,PPLANO,FONDO);
  UNTIL I=LONG;
  RREAD:=NOM1;
END;

PROCEDURE CURSOR(ONOFF: INTEGER);
BEGIN
  IF ONOFF=0 THEN
    BEGIN
      REGS.AH:=$01; REGS.CH:=$20; REGS.CL:=$20; INTR($10,REGS)
    END
  ELSE IF ONOFF=1 THEN
    BEGIN
      REGS.AH:=$01; REGS.CH:=$6; REGS.CL:=$7; INTR($10,REGS)
    END
  ELSE
    BEGIN
      REGS.AH:=$01; REGS.CH:=$0; REGS.CL:=$7; INTR($10,REGS);
    END
END;

PROCEDURE STARTCLOCK;
VAR
  H,M,S,S100: WORD;
BEGIN
  GETTIME(H,M,S,S100); ARRANQUE:=(H*3600)+(M*60)+S+(S100/100)
END;

FUNCTION STOPCLOCK;
VAR
  H,M,S,S100: WORD;
BEGIN
  GETTIME(H,M,S,S100); PARADA:=(H*3600)+(M*60)+S+(S100/100);
  STOPCLOCK:=PARADA-ARRANQUE
END;

{$F+}
PROCEDURE O_E_P;
VAR
  I: INTEGER;
BEGIN
  EXITPROC:=S_E_P;
  FOR I:=1 TO LENGTH(OMEn) DO OMEn[I]:=CHR(ORD(OMEn[I])-LENGTH(OMEn));
  WWRITE(1,WHEREY,OMEn,14,0); WRITELN
END;
{$F-}

BEGIN
  S_E_P:=EXITPROC; EXITPROC:=@O_E_P; SV:=SEGVID;
END.
0
 
LVL 6

Expert Comment

by:My name is Mud
Comment Utility
PROGRAM NUMEROS;
USES
  CRT,DOS,TPNUMBER,TPCOMUN;
          { WWRITE(X,Y,CADENA,PLANO,FONDO);      }
          { RREAD(X,Y,LONG,PLANO,FONDO): STRING; }
          { NUMSTR(NUM): STRING;                 }
VAR
  NUM,COD,CD: INTEGER;
  NSTR: STRING;
  OK: BOOLEAN;
  KEY: CHAR;
BEGIN
  CLRSCR; CURSOR(0);
  REPEAT
    REPEAT
      WWRITE(23,5,'DEME UN NéMERO ENTRE EL 0 Y EL 9999     ',14,0);
      WWRITE(27,6,'(UN 0 (CERO) PARA SALIR)...',14,0);
      NSTR:=RREAD(59,5,4,15,0); VAL(NSTR,NUM,COD);
      IF COD<>0 THEN WRITE(^G)
    UNTIL (COD=0) AND (NUM>=0);
    NSTR:='('+NSTR+') '+NUMSTR(NUM);
    IF NUM=1 THEN NSTR:=NSTR+'PESO ' ELSE NSTR:=NSTR+'PESOS';
    CD:=TRUNC(LENGTH(NSTR)/2); GOTOXY(1,12); CLREOL; WWRITE(40-CD,12,NSTR,12,0);
    IF NUM<>0 THEN DELAY(1000)
  UNTIL NUM=0;
  WWRITE(36,20,'SALIENDO...',14,0); DELAY(1000); CLRSCR; CURSOR(1);
END.
0
 
LVL 6

Expert Comment

by:My name is Mud
Comment Utility
YES IS ALL IN UPCASE, AND YES IS IN SPANISH, BUT HOPE YOU CAN MODDIFY IT AND HOPE IT HELP YOU, IT CONVERTS A NUMBER TO STRING (IN THIS CASE PESOS CURRENCIE)... :p
0
 
LVL 1

Accepted Solution

by:
nrico earned 20 total points
Comment Utility
This isn't really too difficult.
As you said, it only works for numbers from 20 to 99.

Type
  String10=String[10];

Const
  Ones:Array[0..9] Of String10=('','one','two','three','four','five','six','seven','eight','nine');
  Tens:Array[0..9] Of String10=('','ten','twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety');

Function WordNumber(Number:Word):String;
Begin
  WordNumber:=Tens[Number Div 10]+'-'+Ones[Number Mod 10];
End;

Begin
  WriteLn('You write 87 like this: ',WordNumber(87));
End.
0
 
LVL 6

Expert Comment

by:My name is Mud
Comment Utility
Your code doesn't work if i type 9999... That's a piece of...

Ships are coming...
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 
LVL 47

Expert Comment

by:dbrunton
Comment Utility
nrico

I like that coding.  It's clean, short, simple and makes my case statement look like whatboy's ships.
0
 
LVL 47

Expert Comment

by:dbrunton
Comment Utility
nrico

I like that coding.  It's clean, short, simple and makes my case statement look like whatboy's ships.
0
 

Author Comment

by:kazooie21
Comment Utility
nrico

I got a syntax error on these lines:

Ones:Array[0..9] Of String10=('','one','two','three','four','five','six','seven','eight','nine');
  Tens:Array[0..9] Of String10=('','ten','twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety');

Concerning the writeln statement: Am I supposed to enter a similar writeln for ALL numbers?
0
 
LVL 47

Expert Comment

by:dbrunton
Comment Utility
No

You could use a for loop

var
 i : integer;

for i := 20 to 99 do
  writeln('You write ' i, ' like this: ',WordNumber(i));




Type
  String10=String[10];

Const
  Ones : Array[0..9] Of String10 = ('', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');

Tens : Array[0..9] Of String10 = ('', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety');

Cut and paste nrico's code into notepad and save as nrico.pas.  Then use your text editor to cut and paste into your code.

Check following.   The '' in the code is two ' with no space between them.  It is not the " speech mark.  Check that there are ' around each word.
0
 
LVL 6

Expert Comment

by:My name is Mud
Comment Utility
Hey DB... Did i smack your husband??? I was just kidding with nrico, you sissy... Stopit right there buster, or i'll slap your butt, that you'll be puking ships... HAHA...
0
 
LVL 47

Expert Comment

by:dbrunton
Comment Utility
No offence taken.

Remember the old saying

"A ship in time saves constipation"

and the other one

"He who lives in glass houses should not throw ships"

Gotta stop this, gotta do some work.  Cheers.
0
 

Author Comment

by:kazooie21
Comment Utility
The ships are coming, the ships are coming!

One ship by land, two ships by see
But I do not see them, dear me!

I would not like them on a ship..

I saw three ships come sailing in
on Christmas Day, on Christmas Day
I saw 3 ships come sailing in
on Christmas Day in the morning

Are the 3 ships the Nina, Pinta, and Santa Maria?
0

Featured Post

Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

Join & Write a Comment

Suggested Solutions

Find out what Office 365 Transport Rules are, how they work and their limitations managing Office 365 signatures.
A procedure for exporting installed hotfix details of remote computers using powershell
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now