Commit f90bf5e6 by glkink

Add new file

parent e02a02c5
Showing with 76 additions and 0 deletions
/*Märgi kordamine tähendab liitmist (näiteks III = 1 + 1 + 1 = 3, XX = 10 + 10 = 20);
/*Märgi kordamine tähendab liitmist (näiteks III = 1 + 1 + 1 = 3, XX = 10 + 10 = 20);
väiksema numbri järgnemine suuremale tähendab liitmist, (näiteks VI = 5 + 1 = 6, CLV = 100 + 50 + 5 = 155); üksteisele võib järgneda kuni kolm ühesugust märki (näiteks mitte IIII, vaid IV);
väiksema numbri eelnemine suuremale tähendab, et ta tuleb suuremast lahutada (näiteks IV = 5 – 1 = 4, CM = 1000 – 100 = 900); eelneda võib ainult üks märk (näiteks 80 ei kirjutata mitte XXC, vaid LXXX);
märk I võib seista ainult märkide V ja X ees, märk X märkide L ja C ees ning märk C märkide D ja M ees (näiteks 99 kirjutatakse XCIX, mitte IC);
Rooma numbritel põhinevas arvusüsteemis puudub vajadus ja võimalus nulli märkimiseks.*/
#include<stdio.h>
#include<string.h>
int arvud(char);
int main(){
char rooma_number[1000];
int i=0;
long int number =0;
printf("Rooma numbrite sisestamiseks võite kasutada suuri ja vaikeseid tahti \n");
printf("Sisesta Rooma numbrid (Kehtivad numbrid on I, V, X, L, C, D, M): \n");//Võtke sisendiks rooma number ja salvestage see massiivi rooma_number
scanf("%s",rooma_number);
while(rooma_number[i]){ // Kasutades while loopi annab see juurdepääsu sisendarvu igale numbrile
if(arvud(rooma_number[i]) < 0){
printf("Kehtetu Rooma number : %c\n",rooma_number[i]);//Kõigepealt kontrollige, kas praeguse rooma numbri väärtus on väiksem kui null. Kui see on nii, printige väljund kui „Kehtetu rooma number”.
return 0;
}
if((strlen(rooma_number) -i) > 2){
if(arvud(rooma_number[i]) < arvud(rooma_number[i+2])){ //Kui ei, siis kontrollige, kas praeguse rooma numbri väärtus on suurem või võrdne selle järgmise numbri väärtusega. Kui see on nii, suurendage muutuja arvu praeguse rooma numbri väärtusega.
printf("Kehtetu Rooma number");
return 0;
}
}
if(arvud(rooma_number[i]) >= arvud(rooma_number[i+1]))
number = number + arvud(rooma_number[i]);
else{
number = number + (arvud(rooma_number[i+1]) - arvud(rooma_number[i]));//Lahutage praeguse rooma numbri väärtus selle järgmise rooma numbri väärtusest ja suurendage muutuvat numbrit saadud väärtusega.
i++;
}
i++;
}
printf("Selle kymnendväärtus on : %ld\n",number);
return 0;
}
int arvud(char c){ //Funktsioonis arvud() määratlen switch avalduses oleva rooma numbri iga numbri väärtus ja tagastan õige väärtuse
int value=0;
switch(c){
case 'I': value = 1; break;
case 'V': value = 5; break;
case 'X': value = 10; break;
case 'L': value = 50; break;
case 'C': value = 100; break;
case 'D': value = 500; break;
case 'M': value = 1000; break;
case 'i': value = 1; break;
case 'v': value = 5; break;
case 'x': value = 10; break;
case 'l': value = 50; break;
case 'c': value = 100; break;
case 'd': value = 500; break;
case 'm': value = 1000; break;
case '\0': value = 0; break;
default: value = -1;
}
return value;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment