× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



On Wed, 4 Sep 2002, Booth Martin wrote:

> I have an old old routine I use for writing the prose on a check, as in:
>
> $13.95
>
> is written  "Thirteen Dollars and 95 cents"
>
> It dawns on me that today's version would be a lot simpler and clearer.  Any
> one have a nifty solution they'd as soon share in the archives here?

Well I have a C program to do this.  It was written in an introductory C
class, so it isn't too fancy.  But the concepts might help.  I know it
isn't RPG but it might be worth a look anyway.  Cut and pasted below.
Copy the three source files below into numbers2words.c, functions.c, and
functions.h respectively and compile with something similar to:

gcc -Wall -c numbers2words.c
gcc -Wall -c functions.c
gcc -o numbers2words numbers2words.o functions.o

(of course on iSeries the compile commands are different)

James Rich

<begin numbers2words.c>
/*This program prints out the English equivalent of a
  positive integer between 0 and 999999.  It reads from the
  keyboard and writes to the terminal.  For example, if you enter
  287581, it prints out:

  two hundred eighty-seven thousand five hundred eighty-one

  Created: James Rich  October 27, 1994
  */

#include "functions.h"
#include <stdio.h>

void
main ()
{

  int num, orignum, teennum;
  int quotient, teenquotient;
  int remainder, teenremainder = 1;

  printf ("Enter a number between 0 and 999999: ");
  scanf ("%d", &num);
  orignum = num;

  quotient = num / 100000;      /*This checks the 100000 place */
  if (quotient > 0)
    hundreds (quotient);

  remainder = num % 100000;
  num = remainder;
  quotient = num / 10000;       /*This checks the 10000 place */

  if (quotient > 0)
    {
      if (quotient == 1)
        {                       /*Checks if number is a teen */
          teennum = num;
          teenremainder = teennum % 10000;
          teenquotient = teenremainder / 1000;
          teens (teenquotient);
          teennum = 0;
        }
      else
        tens (quotient);
    }

  remainder = num % 10000;
  num = remainder;
  quotient = num / 1000;        /*This checks the 1000 place */

  if (quotient > 0 && teennum != 0)
    ones (quotient);

  if (orignum >= 1000)
    printf (" thousand ");

  remainder = num % 1000;
  num = remainder;
  quotient = num / 100;         /*This checks the 100 place */

  if (quotient > 0)
    hundreds (quotient);

  remainder = num % 100;
  num = remainder;
  quotient = num / 10;          /*This checks the 10 place */

  if (quotient > 0)
    {
      if (quotient == 1)
        {                       /*Checks if number is a teen */
          teennum = num;
          teenremainder = teennum % 10;
          teenquotient = teenremainder / 1;
          teens (teenquotient);
          teennum = 0;
        }
      else
        tens (quotient);
    }
  remainder = num % 10;
  num = remainder;
  quotient = num / 1;           /*This checks the 1 place */

  if (quotient > 0 && teennum != 0)
    {
      ones (quotient);
    }
  if (orignum == 0)             /*This checks if number is 0 */
    printf ("zero");
  printf ("\n");
}
<end numbers2words.c>


<begin functions.c>
/*This file contains the funtions for "numbers2words.c"

  Created: James Rich  October 27, 1994
  */

#include "functions.h"
#include <stdio.h>

void
hundreds (int quotient)
{                               /*This prints the hundreds */
  ones (quotient);
  printf (" hundred ");
}

void
tens (int quotient)
{                               /*This prints the tens */
  switch (quotient)
    {
    case 2:
      printf ("twenty-");
      break;
    case 3:
      printf ("thirty-");
      break;
    case 4:
      printf ("forty-");
      break;
    case 5:
      printf ("fifty-");
      break;
    case 6:
      printf ("sixty-");
      break;
    case 7:
      printf ("seventy-");
      break;
    case 8:
      printf ("eighty-");
      break;
    case 9:
      printf ("ninety-");
      break;
    }
}
void
teens (int qoutient)
{                               /*This prints the teens */
  switch (qoutient)
    {
    case 0:
      printf ("ten");
      break;
    case 1:
      printf ("eleven");
      break;
    case 2:
      printf ("twelve");
      break;
    case 3:
      printf ("thirteen");
      break;
    case 4:
      printf ("fourteen");
      break;
    case 5:
      printf ("fifteen");
      break;
    case 6:
      printf ("sixteen");
      break;
    case 7:
      printf ("seventeen");
      break;
    case 8:
      printf ("eighteen");
      break;
    case 9:
      printf ("nineteen");
      break;
    }
}
void
ones (int quotient)
{                               /*This prints the ones */
  switch (quotient)
    {
    case 1:
      printf ("one");
      break;
    case 2:
      printf ("two");
      break;
    case 3:
      printf ("three");
      break;
    case 4:
      printf ("four");
      break;
    case 5:
      printf ("five");
      break;
    case 6:
      printf ("six");
      break;
    case 7:
      printf ("seven");
      break;
    case 8:
      printf ("eight");
      break;
    case 9:
      printf ("nine");
      break;
    }
}
<end functions.c>


<begin functions.h>
/* Header file for "functions.c"

Created:  James Rich   October 27, 1994
*/


void ones(int one);  /*Prints 1-9*/
void tens(int ten);  /*Prints 20-90*/
void teens(int teen);  /*Prints 10-19*/
void hundreds(int hundred);  /*Prints 100-900*/
<end functions.h>



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.