fork download
  1. #include <stdio.h>
  2.  
  3. unsigned long findSetBitPositions(unsigned long num) {
  4. int index = 0,i=1;
  5. while(i<32){
  6. if ((num >> i) & 1) {
  7. index = i;
  8. }
  9. i++;
  10. }
  11. return index;
  12. }
  13.  
  14. int main() {
  15. unsigned long dta = 0,errorTime =0,baseCode = 0x4043A880,alterDta[20];
  16. int tima = 1200, timb = 400,errPosStrt = 0,errPosEnd = 0,j = 0,errDtaCnt=0;
  17. //int bitarra[] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0};
  18. int bitarr[] = {1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0};
  19. int timearr[] = {400, 1200, 300, 100, 200, 100, 200, 100, 200, 400, 400, 1200, 400, 1200, 400, 1200, 400, 1200, 400, 1200, 400, 1200, 400, 1200, 1200, 400, 400, 1200, 400, 1200, 400, 1200, 400, 1200, 1200, 400, 1200, 400, 1200, 400, 400, 1200, 1200, 400, 400, 1200, 1200, 400, 400, 1200, 400, 1200, 400, 1200, 1200, 400, 400, 1200, 400, 1200, 400, 1200, 400, 1200, 400, 1200, 400, 1200, 400, 1200}; // Calculate the size of the array
  20. int bitsiz = sizeof(bitarr) / sizeof(bitarr[0]);
  21. int timsiz = sizeof(timearr) / sizeof(timearr[0]);
  22. int baseIndex = findSetBitPositions(baseCode);
  23. printf("Number of elements in the array: %d : %d\n", bitsiz, timsiz);
  24.  
  25. for (int i = 0; i < bitsiz; i++) {
  26. if ((timearr[i] != tima) && (timearr[i] != timb)) {
  27. errPosStrt = i;
  28. while (1) {
  29. if ((timearr[i] == tima) || (timearr[i] == timb)) {
  30. printf("\nOK i = %d \t b = %d \t t = %d ", i, bitarr[i], timearr[i]);
  31. break;
  32. }
  33. errorTime =errorTime+timearr[i];
  34. errPosEnd = i;
  35. printf("\nErrPos= %d \t b = %d \t t = %d ", i, bitarr[i], timearr[i]);
  36. i++;
  37. }
  38. printf("\n");
  39.  
  40. }
  41. else {
  42. j=i;
  43. if (bitarr[i] == 1) {
  44. if((timearr[j] == tima) && (timearr[j + 1] == timb)) {
  45. dta = (dta << 1) | 1;
  46. printf("1");
  47. }
  48. else if((timearr[j] == timb) && (timearr[j + 1] == tima)) {
  49. dta = (dta << 1) | 0;
  50. printf("0");
  51. }
  52. i++;
  53. }
  54. }
  55. }
  56. if(errorTime>0){
  57. alterDta[errDtaCnt] = (1 << 32-errPosStrt) | dta;
  58. errDtaCnt++;
  59. alterDta[errDtaCnt] = (0 << 32-errPosStrt) | dta;
  60. errDtaCnt++;
  61. }
  62.  
  63.  
  64.  
  65. printf("\ndta = %X\nerrPos = %d : %d\n",dta,errPosStrt,errPosEnd);
  66. printf("ErrT = %ld\n",errorTime);
  67. printf("ErrP = %d\n",32-errPosStrt);
  68. for (int i = 0; i < errDtaCnt; i++) {
  69. printf("alterDta[%d] = %X\n",i,alterDta[i]);
  70. }
  71. printf("Positions of set bits: %d \n", baseIndex);
  72. errorTime =0;
  73. dta =0;
  74.  
  75.  
  76. /* for (int i = 0; i < bitsiz; i++) {
  77.   printf("i = %d : %d : (J = %d ; %d,J = %d ; %d)\n", i, bitarr[i],j+1, timearr[j],j+2, timearr[j + 1]);
  78.   j=j+2;
  79.   }
  80.   for (int i = 0; i < bitsiz; i++) {
  81.   if ((bitarr[i] == 0)&&(timearr[j] == timb) && (timearr[j + 1] == tima)) {
  82.   printf("Correct: i = %d : %d : (J = %d ; %d,J = %d ; %d)\n", i, bitarr[i],j+1, timearr[j],j+2, timearr[j + 1]);
  83.   j=j+2;
  84.   }
  85.   else if ((bitarr[i] == 1)&&(timearr[j] == tima) && (timearr[j + 1] == timb)) {
  86.   printf("Correct: i = %d : %d : (J = %d ; %d,J = %d ; %d)\n", i, bitarr[i],j+1, timearr[j],j+2, timearr[j + 1]);
  87.   j=j+2;
  88.   }
  89.   else {
  90.   printf("Wrong: i = %d : %d : (J = %d ; %d, J = %d ; %d)\n", i, bitarr[i],j+1, timearr[j],j+2, timearr[j + 1]);
  91.   }
  92.   }*/
  93.  
  94.  
  95. return 0;
  96. }
Success #stdin #stdout 0s 5272KB
stdin
Standard input is empty
stdout
Number of elements in the array: 70 : 70
0
ErrPos= 2 	 b = 1 	 t = 300 
ErrPos= 3 	 b = 0 	 t = 100 
ErrPos= 4 	 b = 1 	 t = 200 
ErrPos= 5 	 b = 0 	 t = 100 
ErrPos= 6 	 b = 1 	 t = 200 
ErrPos= 7 	 b = 0 	 t = 100 
ErrPos= 8 	 b = 1 	 t = 200 
OK i = 9 	 b = 0 	 t = 400 
000000010000111010100010000000
dta = 43A880
errPos = 2 : 8
ErrT = 1200
ErrP = 30
alterDta[0] = 4043A880
alterDta[1] = 43A880
Positions of set bits:  30