SHARE
TWEET

Arturo u malet

a guest Apr 21st, 2017 64 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define dim 100
  5.  
  6. typedef struct {
  7. int decimali;
  8. char romani[5];
  9. } romanTable;
  10.  
  11.  
  12. void acquisire_intero(int *decimale, int vincolo_inferiore, int vincolo_superiore);
  13. void convertire(char romano[], int decimale, romanTable tabella_simboli[13]);
  14.  
  15. int main(){
  16.  
  17.     romanTable tabella_simboli[] = {
  18.     { 1000, "M" }, { 900, "CM" }, { 500, "D" }, { 400, "CD" },
  19.     { 100 , "C" }, { 90 , "XC" }, { 50 , "L" }, { 40 , "XL" },
  20.     { 10 , "X" }, { 9 , "IX" }, { 5 , "V" }, { 4 , "IV" },
  21.     { 1 , "I" }
  22.     };
  23.  
  24.  
  25.     int decimale,i=0;
  26.     char *romano;
  27.     int scegli;
  28.     romano = (char *) malloc(sizeof(char));
  29.     printf("Utente, vuoi convertire un numero Romano o uno Arabo? Inserisci 1 per la prima opzione e 0 per la seconda: ");
  30.     while (scegli !=1 && scegli !=0){
  31.         if (i>0){
  32.             printf("\nUtente, stai sbagliando l'inserimento, devi inserire 1 o 0: ");
  33.         }
  34.         scanf("%d", &scegli);
  35.         i++;
  36.     }
  37.     if (scegli==0){
  38.         printf("Inserisci un numero intero positivo minore di 5000: ");
  39.         acquisire_intero(&decimale, 0, 5000);
  40.         convertire(romano, decimale, tabella_simboli);
  41.         printf("La rappresentazione corrispondente e': ");
  42.         puts(romano);
  43.     }else if (scegli==1){
  44.         int tabella_numeri[7]={1,5,10,50,100,500,1000};
  45.         char tabella_romano[7]={'I','V','X','L','C','D','M'};
  46.         char n_daconvertire[dim];
  47.         int n_convertito[dim];
  48.         int decimale=0;
  49.         int pad=0;
  50.         for(i=0;i<dim;i++){
  51.          n_daconvertire[i]='0';
  52.          n_convertito[i]=0;
  53.         }
  54.         printf("Inserisci numero romano da convertire\n");
  55.           scanf("%s",n_daconvertire);
  56.         int counter=-1;
  57.         for(i=0;i<dim && n_daconvertire[i]!='0';i++){
  58.             for(int j=0;j<7;j++){
  59.             if(n_daconvertire[i]==tabella_romano[j])
  60.                n_convertito[i]=tabella_numeri[j];
  61.         }
  62.         counter++;
  63.         }
  64.         if(counter%2!=0)
  65.         pad=1;
  66.         {
  67.         for(i=counter-1;i>=pad;i=i-2){
  68.          if(n_convertito[i]>n_convertito[i-1] && i!=0)
  69.            decimale=decimale+n_convertito[i]-n_convertito[i-1];
  70.         else decimale+=n_convertito[i]+n_convertito[i-1];
  71.         }
  72.         if(pad!=0)
  73.          decimale+=n_convertito[0];
  74.         }
  75.         printf("Il numero e' %d",decimale);
  76.     }
  77.  
  78.     system("pause");
  79.  
  80. return 0;
  81. }
  82.  
  83. void acquisire_intero(int *decimale, int vincolo_inferiore, int vincolo_superiore){
  84.     do{
  85.         scanf("%d", &(*decimale));
  86.     }while(*decimale>=vincolo_superiore || *decimale<=vincolo_inferiore);
  87.     return;
  88. }
  89.  
  90. void convertire(char romano[], int decimale, romanTable tabella_simboli[13]){
  91.     int i;
  92.     i=0;
  93.     romano[0]='\0';
  94.     while(i<13){
  95.         while(decimale>=tabella_simboli[i].decimali){
  96.             strcat(romano, tabella_simboli[i].romani);
  97.             decimale=decimale-tabella_simboli[i].decimali;
  98.         }
  99.         i=i+1;
  100.     }
  101.     return;
RAW Paste Data
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top