Solved

Enter number and output in words

Posted on 2000-03-30
14
300 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 48

Expert Comment

by:dbrunton
ID: 2671976
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
ID: 2672169
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
ID: 2672172
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
Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

 
LVL 6

Expert Comment

by:My name is Mud
ID: 2672174
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
ID: 2672179
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
ID: 2673117
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
ID: 2673140
Your code doesn't work if i type 9999... That's a piece of...

Ships are coming...
0
 
LVL 48

Expert Comment

by:dbrunton
ID: 2673949
nrico

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

Expert Comment

by:dbrunton
ID: 2673954
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
ID: 2674942
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 48

Expert Comment

by:dbrunton
ID: 2675462
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
ID: 2675465
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 48

Expert Comment

by:dbrunton
ID: 2675752
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
ID: 2678152
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

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

When you’re making plans to join the modern business race, you should analyze various details that may affect your results. Nowadays, millions of businesses are trying to grow into established and appreciated professional enterprises.
When we purchase storage, we typically are advertised storage of 500GB, 1TB, 2TB and so on. However, when you actually install it into your computer, your 500GB HDD will actually show up as 465GB. Why? It has to do with the way people and computers…
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.
Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…

774 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