Advertisement
Guest User

Arturo u malet

a guest
Apr 21st, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  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;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement