Use of Pointers

Started by
3 comments, last by AMoronThatWantsToProgram 23 years, 1 month ago
I have to write a program that converts Numbers to Roman Numerals. Now I have already done it but I want to know if there is an easier way to program it. I would like not to have to use pointers in my program could some please show me how this would be done. And yes this is for school #include #include #include void main () { int decimal; char romanDigits[8] = "mdclxvi"; char* currentDigit = romanDigits; int romanValues[8] = {1000, 500, 100, 50, 10, 5, 1}; int* currentValue = romanValues; /* longest Roman numeral < 5000 has 19 digits. */ char roman[20] = "-------------------"; /* hyphens are ddebugging */ char* currentRoman = roman; printf ("Please type a positive integer less than 5000: "); scanf ("%d", &decimal); if (decimal <= 0) { exit(1); } while (decimal > 0) { if (decimal >= *currentValue) { *(currentRoman++) = *currentDigit; decimal = decimal - *currentValue; } else { currentDigit++; currentValue++; } } *currentRoman = 0; printf("Roman numeral equivalent = %s\n", roman); }
Advertisement
These notations are equivalent:

  char *pSomeString = "This is just a string";int x = 3;char currentCharacter;// these are equivalentcurrentCharacter = *(pSomeString + x);currentCharacter = pSomeString[x];  


Instead of using pointer arithmetic (incrementing a pointer to go to the next character) you can use an index, like x in the above code, and increment that instead. You then access the string through pSomeString[x].

You still need char* pointers for the strings of course, but if you find code full of pointer arithmetic hard to read then the array subscript notation might be easier.

Harry.
Harry.
Two things:

First, rather than having CurrentValue being a pointer, i would use it as an index.
ie:

int CurrentValue = 0

if(decimal>=romanValues[CurrentValue])
{
*(currentRoman++)=currentDigit[CurrentValue];
decimal = decimal - romanValues[CurrentValue];
} else { currentValue++;
}

notice that you can use this as in index into both the currentvalue and the current digit ?

The other thing is that your implementation is wrong:
it would come up with xxviiii for 19, when it should be xix.
and iiii for 4, when it should be iv.
ie, you can only have 3 of one character in a row (except for m)
so you could add a check to see if it''s more than 3 times the current Romanvalue

hope that helps

Wyzfen
Not really related to the subject, but just nit-picking that may come up useful to you as time goes on on this board, typing (for example)

#include <iostream.h> /* If you typed just as shown in the message textbox...*/

...the "<" and ">" wouldn't show up, because they're interpreted as HTML tags, so type < and > instead of < and > =o)

(o= erydo =o)



Edited by - cliffhawkens on March 15, 2001 8:31:01 PM
[email=erydo@gdnmail.net" style="color: #ff0000; text-decoration:none; cursor:help;](o= erydo =o)[/email]
I think he means type &lt; and &gt; ( < and > )

Harry.

Edited by - HarryW on March 17, 2001 9:15:49 AM
Harry.

This topic is closed to new replies.

Advertisement