Римские числа из строки - C (СИ)
Формулировка задачи:
Программа компилируется но не работает
/* Дан текст из заглавных латинских букв, за которым следует пробел.Определить является ли этот текст правильной записью римскими цифрами целого числа от 1 до 999, и если является напечатать число арабскими цифрами. */ #include<stdio.h> #include<string.h> int main(){ char* romcnst[7] = {"I","V","X","L","C","D","M"}; unsigned int arabcnst[7] = {1,5,10,50,100,500,1000}; int p=7; char* inputRoman[40]; int Arabian=0; int i; int b[40]; printf("Vvedite RIMSKOE 4islo:\t"); scanf("%s",&inputRoman); /*Рассматривает каждый символ и ставим ему в соответствие число*/ i=0; p=7; while(inputRoman!=NULL){ if (inputRoman[i]==romcnst[p]){ b[i]=arabcnst[p]; i++; } else p--; } /*Следущее правило для таких чисел как IV=4 IX=9 XL=40 XC=90 CD=400 CM=900*/ i=0; while(b[i]!=' '){ if(b[i]<b[i++]){ b[i++]-=b[i]; i++;/*Чтобы не учит. предыдущ.*/ } Arabian+=b[i]; i++; } printf("\nVashe 4islo:\t%d",Arabian); getch(); return 0; }
Решение задачи: «Римские числа из строки»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdlib.h> void main() { char rimc[]={'M','D','C','L','X','V','I','\0'}; int arab[]={1000,500,100,50,10,5,1}; int i, j, ch=0, l, p=0, k=0, b[20]; char *rim; rim=(char*)malloc(20*sizeof(char)); printf ("\nvvedite rimskoe chislo:\n"); gets(rim); strupr(rim); for (i=0; i<strlen(rim); i++) b[i]=0; for (i=0; (i<strlen(rim) && p!=1); i++) { for (j=0; (j<strlen(rimc) && k!=1); j++) { l=strcmp(rim[i],rimc[j]); if (l==0) { b[i]=arab[j]; k=1; } } if (b[i]==0) { printf ("ne verniy simvol\n"); p=1; break; } k=0; } for (i=1; (i<strlen(rim) && p!=1); i++) { if (b[i]<=b[i-1]) ch+=b[i-1]; else { ch+=b[i]-b[i-1]; ++i; } } if (p!=1) printf ("rezul'tat: %s=%d\n", rim, ch); getch(); }
Объяснение кода листинга программы
В этом коде происходит перевод из римских чисел в арабские. Вот список действий, которые происходят в коде:
- Объявление и инициализация массивов:
rimc
- массив символов, представляющих римские числа (M, D, C, L, X, V, I).arab
- массив целых чисел, представляющих арабские числа (1000, 500, 100, 50, 10, 5, 1).b
- массив, используемый для хранения промежуточных значений во время перевода.rim
- строка, в которую считывается римское число.rim
- указатель на строку, в которую будет записано арабское число.
- Получение римского числа от пользователя:
- Вывод приглашения для ввода римского числа.
- Считывание римского числа с помощью функции
gets
. - Преобразование римского числа в нижний регистр с помощью функции
strupr
.
- Проверка введенного значения и перевод в арабское число:
- Проверка каждого символа в введенном значении.
- Сравнение каждого символа с символами римского числа в массиве
rimc
. - Если символ равен, то присваивание соответствующего арабского числа в массив
b
. - Если символ не равен, то вывод сообщения об ошибке и завершение программы.
- Проверка и корректировка полученного арабского числа:
- Проверка каждого символа в полученном арабском числе.
- Если текущий символ больше предыдущего, то корректировка числа с помощью арабских цифр.
- Если текущий символ меньше предыдущего, то корректировка числа с помощью арабских цифр.
- Вывод результата:
- Если программа успешно выполнена, то вывод полученного арабского числа и закрытие программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д