Orar semigroup #2

Orar semigroup #2

Temă curs PC (6 noiembrie)

Se citeste într-un şir de caractere un număr hexazecimal, iar mai apoi un număr roman. Care e valoarea în zecimal?

#include <stdio.h>  //  Problema tema Ignat 6.11.13
#include <stdlib.h>  //  Se citeste intr-un sir de caractere un număr hexazecimal, iar mai apoi un număr roman. Care e valoarea în zecimal?
void roman_arab(char a[100])        //  M D C L X V I
{
int n=0,i,j;

for(i=0;i<strlen(a);i++)
{
    if(a[i]=='C' && a[i+1]=='M')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+900;
    }
    if(a[i]=='C' && a[i+1]=='D')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+400;
    }
    if(a[i]=='X' && a[i+1]=='C')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+90;
    }
    if(a[i]=='X' && a[i+1]=='L')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+40;
    }
    if(a[i]=='I' && a[i+1]=='X')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+9;
    }
    if(a[i]=='I' && a[i+1]=='V')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+4;
    }
}

for(i=0;i<strlen(a);i++)
{
    switch(a[i])
    {
        case 'M':n=n+1000;break;
        case 'D':n=n+500;break;
        case 'C':n=n+100;break;
        case 'L':n=n+50;break;
        case 'X':n=n+10;break;
        case 'V':n=n+5;break;
        case 'I':n=n+1;break;
    }
}

printf("%d",n);
}

int pow(int n,int p)
{
    if(p==0)
        return 1;
    int i,k=1;
    for(i=1;i<=p;i++)
        k=k*n;
    return k;
}

void hexazecimal_zecimal(char a[100])
{
int n=0,nr,i,j,val;
nr=strlen(a);
for(i=0;i<nr;i++)
{
    switch(a[i])
    {
        case 'A':val=10;break;
        case 'B':val=11;break;
        case 'C':val=12;break;
        case 'D':val=13;break;
        case 'E':val=14;break;
        case 'F':val=15;break;
        default :val=(int)a[i];break;
    }
    n=n+val*pow(16,nr-i-1);
}
printf("%d",n);
}

int main()
{
    char a[100];
    printf("Cititi un numar hexazecimal sau un numar roman\n");
    gets(a);
    int ok;
    printf("Ati citit un numar hexazecimal (1) sau un numar roman (0)?\n");
    scanf("%d",&ok);
    printf("Numarul in zecimal este\n");
    if (ok==1)
    {
        hexazecimal_zecimal(a);
    }
    else
    {
        roman_arab(a);
    }
    getch();
}

marți, 5 noiembrie 2013 by DlMuresan
Categories: , , , , , , , , | Leave a comment

Leave a Reply