Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.14 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define DISP_SIZE 12
  4. #define SIZE 12 * 3
  5.  
  6. // буффер 36 бит на экране 12 символов
  7. char numstr[SIZE];
  8. // количество символов на экране 12
  9. char dispStr[DISP_SIZE];
  10.  
  11. void cleanStr() {
  12.     for(int i = 0; i < SIZE; i++) {
  13.         numstr[i] = '0';
  14.     }
  15. }
  16.  
  17. void cleanDispStr() {
  18.     for(int i = 0; i < DISP_SIZE; i++) {
  19.         dispStr[i] = '0';
  20.     }
  21. }
  22.  
  23. // только для отладки, ненужная функция
  24. void printStr() {
  25.     for(int i = 0; i < SIZE; i++) {
  26.         printf("%c", numstr[i]);
  27.     }
  28.     printf("\n");
  29. }
  30.  
  31. void plus() {
  32.     int i;
  33.     int finded;
  34.     for(i = SIZE - 1; i >= 0; i--) {
  35.         if (numstr[i] == '0') {
  36.             numstr[i] = '1';
  37.             finded = 1;
  38.             break;
  39.         }
  40.     }
  41.     if (finded) {
  42.         i++;
  43.         for (; i < SIZE; i++) {
  44.             numstr[i] = '0';
  45.         }
  46.     }
  47.  
  48. }
  49.  
  50. void minus() {
  51.     int i;
  52.     int finded;
  53.     for(i = SIZE - 1; i >= 0; i--) {
  54.         if (numstr[i] == '1') {
  55.             numstr[i] = '0';
  56.             finded = 1;
  57.             break;
  58.         }
  59.     }
  60.     if (finded) {
  61.         i++;
  62.         for (; i < SIZE; i++) {
  63.             numstr[i] = '1';
  64.         }
  65.     }
  66. }
  67.  
  68. void convert8() {
  69.     cleanDispStr();
  70.     int i, k;
  71.     for (i = 0; i < SIZE / 3; i++) {
  72.         dispStr[i] = ((numstr[i * 3+2] - '0') + \
  73.         ((numstr[i*3 + 1] - '0') << 1) + \
  74.         ((numstr[i*3] - '0') << 2)) + '0';
  75.     }
  76. }
  77.  
  78. void convert16() {
  79.     cleanDispStr();
  80.     int i, k;
  81.     int tmp = 0;
  82.     for (i = 0; i < SIZE / 4; i++) {
  83.         tmp = (numstr[i*4+3] - '0') + \
  84.         ((numstr[i*4 + 2] - '0') << 1) + \
  85.         ((numstr[i*4 + 1] - '0') << 2) + \
  86.         ((numstr[i*4]- '0') << 3);
  87.         dispStr[i + 3] = tmp + (tmp > 9 ? 'A' - 10 : '0');
  88.     }
  89.  
  90. }
  91.  
  92. int main() {
  93.     cleanStr();
  94.     numstr[32] = '1';
  95.     numstr[30] = '1';
  96.     numstr[26] = '1';
  97.     numstr[29] = '1';
  98.     plus();
  99.     plus();
  100.     plus();
  101.     printStr();
  102.     convert8();
  103.     printf("OCT:%s\n", dispStr);
  104.     convert16();
  105.     printf("HEX:%s\n", dispStr);
  106.  
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement