SHARE
TWEET

zeusgay2.0

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