Advertisement
a53

coduri

a53
Feb 6th, 2017
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.48 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <cstring>
  4. using namespace std;
  5. FILE *fin=fopen("coduri.in","r");
  6. FILE *fout=fopen("coduri.out","w");
  7. unsigned int n,h,d;
  8. char s[41];
  9. int v[33];
  10. void binar_hexa(char b[]) // Functie conversie din binar in hexa
  11. {
  12. unsigned int i,j=0;
  13. int x[33];
  14. unsigned int n=strlen(b);
  15. for(i=3;i<=n;i+=4)
  16. {
  17. j++;
  18. x[j]=8*(b[i-3]-48)+4*(b[i-2]-48)+2*(b[i-1]-48)+(b[i]-48);
  19. }
  20. n=j;
  21. for(i=1;i<=n;i++)
  22. {
  23. if(x[i]<10)
  24. fprintf(fout,"%d",x[i]);
  25. else
  26. switch(x[i])
  27. {
  28. case 10:{fprintf(fout,"%c",'A');break;}
  29. case 11:{fprintf(fout,"%c",'B');break;}
  30. case 12:{fprintf(fout,"%c",'C');break;}
  31. case 13:{fprintf(fout,"%c",'D');break;}
  32. case 14:{fprintf(fout,"%c",'E');break;}
  33. case 15:{fprintf(fout,"%c",'F');break;}
  34. }
  35. }
  36. fprintf(fout,"\n");
  37. }
  38.  
  39. void hexa_binar(char s[],int v[]) // Functie conversie din hexa in binar
  40. {
  41. unsigned int L=strlen(s),j=0;
  42. for(unsigned int i=0;i<L;i++)
  43. {
  44. if(s[i]=='0')
  45. {v[j]=0;v[j+1]=0;v[j+2]=0;v[j+3]=0;}
  46. if(s[i]=='1')
  47. {v[j]=0;v[j+1]=0;v[j+2]=0;v[j+3]=1;}
  48. if(s[i]=='2')
  49. {v[j]=0;v[j+1]=0;v[j+2]=1;v[j+3]=0;}
  50. if(s[i]=='3')
  51. {v[j]=0;v[j+1]=0;v[j+2]=1;v[j+3]=1;}
  52. if(s[i]=='4')
  53. {v[j]=0;v[j+1]=1;v[j+2]=0;v[j+3]=0;}
  54. if(s[i]=='5')
  55. {v[j]=0;v[j+1]=1;v[j+2]=0;v[j+3]=1;}
  56. if(s[i]=='6')
  57. {v[j]=0;v[j+1]=1;v[j+2]=1;v[j+3]=0;}
  58. if(s[i]=='7')
  59. {v[j]=0;v[j+1]=1;v[j+2]=1;v[j+3]=1;}
  60. if(s[i]=='8')
  61. {v[j]=1;v[j+1]=0;v[j+2]=0;v[j+3]=0;}
  62. if(s[i]=='9')
  63. {v[j]=1;v[j+1]=0;v[j+2]=0;v[j+3]=1;}
  64. if(s[i]=='A')
  65. {v[j]=1;v[j+1]=0;v[j+2]=1;v[j+3]=0;}
  66. if(s[i]=='B')
  67. {v[j]=1;v[j+1]=0;v[j+2]=1;v[j+3]=1;}
  68. if(s[i]=='C')
  69. {v[j]=1;v[j+1]=1;v[j+2]=0;v[j+3]=0;}
  70. if(s[i]=='D')
  71. {v[j]=1;v[j+1]=1;v[j+2]=0;v[j+3]=1;}
  72. if(s[i]=='E')
  73. {v[j]=1;v[j+1]=1;v[j+2]=1;v[j+3]=0;}
  74. if(s[i]=='F')
  75. {v[j]=1;v[j+1]=1;v[j+2]=1;v[j+3]=1;}
  76. j+=4;
  77. }
  78. }
  79.  
  80. int main()
  81. {
  82. fscanf(fin,"%d%d%d",&n,&h,&d);
  83. int nr=0,ok;
  84. for(unsigned int i=1;i<=n;i++)
  85. {
  86. fscanf(fin,"%s",s);
  87. unsigned int L=strlen(s)-1;
  88. char sir[9];
  89. if(s[0]=='H') // Daca e cod produs
  90. {
  91. for(unsigned int j=0;j<=L;j++)
  92. sir[j]=s[j+1];
  93. sir[L]='\0';
  94. hexa_binar(sir,v);
  95. for(unsigned int j=0;j<4*L;j++)
  96. fprintf(fout,"%d",v[j]);
  97. fprintf(fout,"\n");
  98. }
  99. if(s[0]=='D') // Daca e cod de bare
  100. {
  101. for(unsigned int j=0;j<=L;j++)
  102. s[j]=s[j+1];
  103. s[L]='\0';
  104. binar_hexa(s);
  105. }
  106. char sh[9],sd[33];
  107. if(s[0]=='U') // Daca e un cod ce nu e total lizibil
  108. {
  109. for(unsigned int j=0;j<h;j++) // Completez vectorul hexa
  110. sh[j]=s[j+1];
  111. sh[h]='\0';
  112. unsigned int Ld=0;
  113. for(unsigned int j=h+1;j<=L;j++) // Completez vectorul binar
  114. {
  115. sd[Ld]=s[j];
  116. Ld++;
  117. }
  118. sd[Ld]='\0';
  119. unsigned int cifra;
  120. ok=1;
  121. for(unsigned int j=0;j<h;j++)
  122. {
  123. if(sh[j]=='X') // Daca un element in codul hexa nu e lizibil
  124. {
  125. if((j*4+3)>Ld) // Daca nu are cod binar corespunzator
  126. {
  127. ok=0;
  128. break;
  129. }
  130. else // Daca codul binar e corect
  131. if(sd[j*4]!='X'&&sd[j*4+1]!='X'&&sd[j*4+2]!='X'&&sd[j*4+3]!='X')
  132. {
  133. cifra=8*(sd[j*4]-48)+4*(sd[j*4+1]-48)+2*(sd[j*4+2]-48)+(sd[j*4+3]-48);
  134. if(cifra<10) // Depun cifra calculata in codul hexa
  135. sh[j]=cifra+48;
  136. else
  137. switch(cifra)
  138. {
  139. case 10:{sh[j]='A';break;}
  140. case 11:{sh[j]='B';break;}
  141. case 12:{sh[j]='C';break;}
  142. case 13:{sh[j]='D';break;}
  143. case 14:{sh[j]='E';break;}
  144. case 15:{sh[j]='F';break;}
  145. }
  146. }
  147. else // Nici codul binar nu poate fi recuperat
  148. for(int k=0;k<h-1;k++)
  149. if(k!=j&&sd[k*4]==sd[j*4]&&sd[k*4+1]==sd[j*4+1]&&sd[k*4+2]==sd[j*4+2]&&sd[k*4+3]==sd[j*4+3]&&sh[k]!='X')
  150. sh[j]=sh[j];
  151. else
  152. ok=0;
  153. }
  154. }
  155. if(ok) // Daca s-a putut recupera codul il afisez
  156. fprintf(fout,"%s\n",sh);
  157. else // Codul n-a putut fi recuperat
  158. {
  159. nr++;
  160. fprintf(fout,"%d\n",0);
  161. }
  162. }
  163. }
  164. fprintf(fout,"%d",nr);
  165. return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement