Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define dim 100
- typedef struct {
- int decimali;
- char romani[5];
- } romanTable;
- void acquisire_intero(int *decimale, int vincolo_inferiore, int vincolo_superiore);
- void convertire(char romano[], int decimale, romanTable tabella_simboli[13]);
- int main(){
- romanTable tabella_simboli[] = {
- { 1000, "M" }, { 900, "CM" }, { 500, "D" }, { 400, "CD" },
- { 100 , "C" }, { 90 , "XC" }, { 50 , "L" }, { 40 , "XL" },
- { 10 , "X" }, { 9 , "IX" }, { 5 , "V" }, { 4 , "IV" },
- { 1 , "I" }
- };
- int decimale,i=0;
- int flag=0;
- char *romano;
- int scegli;
- romano = (char *) malloc(sizeof(char));
- while (flag==0){
- printf("\nUtente, vuoi convertire un numero Romano o uno Arabo? Inserisci 1 per la prima opzione e 0 per la seconda: ");
- scegli=70;
- i=0;
- while (scegli !=1 && scegli !=0){
- if (i>0){
- printf("\nUtente, stai sbagliando l'inserimento, devi inserire 1 o 0: ");
- }
- scanf("%d", &scegli);
- i++;
- }
- if (scegli==0){
- printf("Inserisci un numero intero positivo minore di 5000: ");
- acquisire_intero(&decimale, 0, 5000);
- convertire(romano, decimale, tabella_simboli);
- printf("La rappresentazione corrispondente e': ");
- puts(romano);
- }else if (scegli==1){
- int tabella_numeri[7]={1,5,10,50,100,500,1000};
- char tabella_romano[7]={'I','V','X','L','C','D','M'};
- char n_daconvertire[dim];
- int n_convertito[dim];
- int decimale=0;
- int pad=0;
- for(i=0;i<dim;i++){
- n_daconvertire[i]='0';
- n_convertito[i]=0;
- }
- printf("Inserisci numero romano da convertire\n");
- scanf("%s",n_daconvertire);
- int counter=-1;
- for(i=0;i<dim && n_daconvertire[i]!='0';i++){
- for(int j=0;j<7;j++){
- if(n_daconvertire[i]==tabella_romano[j])
- n_convertito[i]=tabella_numeri[j];
- }
- counter++;
- }
- if(counter%2!=0)
- pad=1;
- {
- for(i=counter-1;i>=pad;i=i-2){
- if(n_convertito[i]>n_convertito[i-1] && i!=0)
- decimale=decimale+n_convertito[i]-n_convertito[i-1];
- else decimale+=n_convertito[i]+n_convertito[i-1];
- }
- if(pad!=0)
- decimale+=n_convertito[0];
- }
- printf("Il numero e' %d",decimale);
- }
- printf("\nUtente, vuoi terminare l'esecuzione del programma o continuare? Inserisci 1 per terminare e 0 per continuare: ");
- scanf("%d", &flag);
- }
- system("pause");
- return 0;
- }
- void acquisire_intero(int *decimale, int vincolo_inferiore, int vincolo_superiore){
- do{
- scanf("%d", &(*decimale));
- }while(*decimale>=vincolo_superiore || *decimale<=vincolo_inferiore);
- return;
- }
- void convertire(char romano[], int decimale, romanTable tabella_simboli[13]){
- int i;
- i=0;
- romano[0]='\0';
- while(i<13){
- while(decimale>=tabella_simboli[i].decimali){
- strcat(romano, tabella_simboli[i].romani);
- decimale=decimale-tabella_simboli[i].decimali;
- }
- i=i+1;
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement