Write a complete C program that reads several integer numbers from a file called
ID: 3868866 • Letter: W
Question
Write a complete C program that reads several integer numbers from a file called Numbers.txt, store them in an array, then the program converts each number into its roman equivalent. Your program should define and call a function called roman_equivalent that takes a number as input and prints the roman equivalent of that number on screen.
Hint 1: The file Numbers.txt can contain at most 250 numbers.
Hint 2: The function prototype is void roman_equivalent (int); The following table shows the roman equivalents of decimal numbers:
Examples: Roman equivalent of 13 is XIII, 1*10 + 3*1 = 13 = XIII Roman equivalent of 1988 is MDCCCCLXXXVIII, since 1988 contains 1*1000 M 1988 contains 1*500 D 1988 contains 4*100 CCCC 1988 contains 1*50 L 1988 contains 3*10 XXX 1988 contains 1*5 V 1988 contains 3*1 III Roman equivalent of 1515 is MDXV.
Decimal Roman 5 10 50 100 500 1000Explanation / Answer
The desired c program is given below:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char romNum[10000];
int i=0;
void romanPrefix(char c1,char c2){
romNum[i++] = c1;
romNum[i++] = c2;
}
void romanSuffix(char c,int n){
int j;
for(j=0;j<n;j++)
romNum[i++] = c;
}
//function to get the roman value
void roman_equivalent (int number)
{
int j;
printf("%d ", number);
if(number <= 0){
printf("Invalid number");
getch();
return 0;
}
while(number != 0){
if(number >= 1000){
romanSuffix('M',number/1000);
number = number - (number/1000) * 1000;
}
else if(number >=500){
if(number < (500 + 4 * 100)){
romanSuffix('D',number/500);
number = number - (number/500) * 500;
}
else{
romanPrefix('C','M');
number = number - (1000-100);
}
}
else if(number >=100){
if(number < (100 + 3 * 100)){
romanSuffix('C',number/100);
number = number - (number/100) * 100;
}
else{
romanPrefix('L','D');
number = number - (500-100);
}
}
else if(number >=50){
if(number < (50 + 4 * 10)){
romanSuffix('L',number/50);
number = number - (number/50) * 50;
}
else{
romanPrefix('X','C');
number = number - (100-10);
}
}
else if(number >=10){
if(number < (10 + 3 * 10)){
romanSuffix('X',number/10);
number = number - (number/10) * 10;
}
else{
romanPrefix('X','L');
number = number - (50-10);
}
}
else if(number >=5){
if(number < (5 + 4 * 1)){
romanSuffix('V',number/5);
number = number - (number/5) * 5;
}
else{
romanPrefix('I','X');
number = number - (10-1);
}
}
else if(number >=1){
if(number < 4){
romanSuffix('I',number/1);
number = number - (number/1) * 1;
}
else{
romanPrefix('I','V');
number = number - (5-1);
}
}
}
printf("Equivalent Roman Numeral is : ");
for(j=0;j<i;j++)
printf("%c",romNum[j]);
printf(" ");
}
int main()
{
// get the data from the file and store it in the array
FILE *myFile;
int* numbers = (int*)calloc(250, sizeof(int));
int i = 0;
int num;
do
{
myFile = fopen("Numbers.txt", "r");
if(myFile == NULL)
{
printf("Error in file");
return 0;
}
}
while(myFile == NULL);
while(fgetc(myFile) != EOF)
{
fscanf(myFile, "%d,", &numbers[i]);
roman_equivalent(numbers[i]);
i++;
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.