Informatică, întrebare adresată de miranelabdm, 8 ani în urmă

Cum poți face un program pentru transfoarmarea cifrelor romane în cifre arabe?​


ValiV12: ma gandesc ca trebuie tu sa definesti corespondentele si, cum in cifrele romane cam totul se repeta dar nu prea, trebuie sa faci corespondente speciale pentru cazurile speciale. De exemplu, pentru 50 nu este XV ci L
ValiV12: SAU ma gandesc ca poti face altfel, mai usor: in loc sa faci corespondente prin citire, poti sa calculezi direct, insa tot trebuie sa faci mici corespondente. Mai exact: fiecare litera reprezinta o cifra sau cred ca si un ordin (de la mii incolo zic), insa tu poti descompune printr-o lupa numarul roman prin prelucrare de caractere si sa traduci, sa faci corespondenta lor, in cifre arabe, numai ca tu nu le pui cum sunt asezate in format roman, ci le aduni.
ValiV12: De exemplu: LX = 50 + 10. LXIX = 50 + 10 +9, insa aici trebuie sa fii constiincios pe ce citesti si trebuie sa verifici daca inaintea vreunui X este un I, caci altfel aduci 1+10. Asta se aplica si la prima, si la a doua metoda, trebuie sa faci corespondente ca sa nu ajungi la rezultate gresite

Răspunsuri la întrebare

Răspuns de ValiV12
1

Salut, am contemplat destul de mult pe exercitiul asta pana sa ma imbunez sa-l fac chiar eu.

El merge, conform principiilor numerelor romane.

Singura problema la el este ca nu vei obtine rezultate daca vei introduce numere cu minuscula, deci toate vor fi cu minuscula. Daca insisti sa mergi si pe minuscule, poti folosi strupr(). De altfel, programul functioneaza numai pana la MMMCMXCIX, adica pana la 3999, caci nu pot implementa restul numerelor, adica cele cu liniuta, care reprezinta ele*1000, in rest, pare functional.

Alta chestie este ca, daca ai introdus un numar roman gresit, programul nu va da raspunsul corect si nici nu are mecansime de detectie a greselilor, deci, cand testezi, asigura-te ca folosesti numere corecte.

Acesta este algoritmul in C++:

#include <iostream>

#include <cstring>

using namespace std;

int main(){

char s[10];

int n=0, i;

cout<<"Numar roman: "; cin>>s;

i=strlen(s);

cout<<i<<endl;

do{

    if(s[i-1]=='I'){ n=n+1; i--;}

    if(s[i-1]=='V'&&s[i-2]=='I'){ n=n+4; i=i-2;}

       else if(s[i-1]=='V'){ n=n+5; i--;}

    if(s[i-1]=='X'&&s[i-2]=='I'){ n=n+9; i=i-2;}

       else if(s[i-1]=='X'){ n=n+10; i--;}

    if(s[i-1]=='L'&&s[i-2]=='X'){ n=n+4; i=i-2;}

       else if(s[i-1]=='L'){ n=n+50; i--;}

    if(s[i-1]=='C'&&s[i-2]=='X'){ n=n+90; i=i-2;}

       else if(s[i-1]=='C'){ n=n+100; i--;}

    if(s[i-1]=='D'&&s[i-2]=='C'){ n=n+400; i=i-2;}

       else if(s[i-1]=='D'){ n=n+500; i--;}

    if(s[i-1]=='M'&&s[i-2]=='C'){ n=n+900; i=i-2;}

       else if(s[i-1]=='M'){ n=n+1000; i--;}

}while(i>0);

cout<<"Nr arab: "<< n;

}


ValiV12: Imi cer scuze, unde este if(s[i-1]=='L'&&s[i-2]=='X'){ n=n+4; i=i-2;}, n este n+40.
Alte întrebări interesante