Advertisement
Guest User

zeusgay2.0

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