infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Rotar Mihaela din Mai 11, 2012, 01:03:46



Titlul: PROBLEMA PASCAL!!!
Scris de: Rotar Mihaela din Mai 11, 2012, 01:03:46
Buna.Am de rezolvat pentru facultate o problema Pascal,nu am facut prea multa programare,iar in domeniul meu nici nu am nevoie,dar altfel nu intru in examen,am rugat multi prieteni si profesoare din liceu sa o rezolve si nu au reusit,incerc si aici,poate cineva chiar stie si ma poate ajuta cat mai curand.

Conversia numerelor intre notatie araba si romana.

Date de intrare:un nr intreg pozitiv scris in notatie romana sau araba.Cifrele romane sunt:M,D,C,L,X,V,I valorile lor fiind 1000,500,100,50,5,1.

Sa se determine reprezentarea numarului in notatie alternativa.

Date de iesire:1.Numarul dat cu specificarea notatiei.
2.Numarul determinat

Va multumesc mult,chiar am nevoie de ajutor.


Titlul: Răspuns: PROBLEMA PASCAL!!!
Scris de: Ababab din Mai 11, 2012, 10:30:10
În primul rând trebuie să îți dai seama dacă numărul tău e în notație arabă sau romană. Citești input-ul ca un șir de caractere și vezi ce e primul caracter, dacă e cifră e arabă, dacă e literă e romană.

1. Din notație arabă în notație romană
Indicat ar fi să îți ții un vector auxiliar cu literele corespunzătoare notațiilor romane.

Spre exemplu:
arab = {1000, 500, 100, 50, 10, 5, 1};
roman = "MDCLXVI"

Unde arab[4] = 10 și roman[4] = X.

Idee este una simplă: ții o variabilă de tip întreg care reprezintă ce ai până acum în notația romană, pornești de la primul număr (1000/M) și cât timp variabila ta este mai mică decât numărul pe care trebuie să-l convertești, adaugi 1000 la variabila care îți zice ce ai convertit până acum și adaugi un M la notația romană. După ce (sau dacă, de la început) variabila care ține ce ai convertit + 1000 este mai mare decât numărul pe care vrei să-l convertești, treci la următorul număr, și anume 500 și repeți același procedeu.

Partea interesantă e că poți avea secvențe de genul "IX", aici poți adăuga excepții de genul "dacă variabila în care ții ce ai convertit + 10 este cu 1 mai mare decât numărul pe care vrei să-l convertești, poți pune X, dar să pui un I înainte, mai exact scazi 1. Asta din câte știu eu se întâmplă la sfârșit doar, corectați-mă dacă greșesc.

2. Din notație romană în notație arabă
Poți observa de mai sus că notația romană e în ordine descrescătoare, în mare parte. Asta e mai simplu, parcurgi numărul în notație romană de la dreapta la stânga și adaugi numărul corespunzător la rezultat, doar dacă numărul din dreapta lui este mai mic decât el. Dacă nu este (de exemplu, ai "IX", I este mai mic decât X), în loc să aduni, scazi.

Cam asta e, sper să te descurci.
Dacă nu, revino cu întrebări. :)