Advertisement
semenrbt

laba2

Feb 26th, 2020
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.67 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int LongOfStr(char str[]){
  5.     int k = 0;
  6.     if(str == NULL) return -1;
  7.     while(str[k] > 13) k++;
  8.     return k;
  9. }
  10.  
  11.  
  12. unsigned long MakeVektor(char str[], int *length){
  13.     if(str == NULL) {
  14.         *length = -1;
  15.         return 0;
  16.     }
  17.     int size = 0;
  18.     while(str[size] > 13) size++;
  19.     if(size > 32) return 0;
  20.     unsigned long mask = 1;
  21.     int k = 0;
  22.     unsigned long res = 0;
  23.     *length = size;
  24.     for(int j = size-1; j >= 0; j--){
  25.         if(str[j] != '0'){
  26.             mask = mask << (size-j-1);
  27.             res = res | mask;
  28.             mask = 1;
  29.         }
  30.     }
  31.     return res;
  32. }
  33.  
  34. char *ConvertVektor(unsigned long vek, int size){
  35.     char *res = NULL;
  36.     res = (char*) malloc(sizeof(char)*(size+1));
  37.     if(res == NULL) return 0;
  38.     res[size] = 13;
  39.     for(int k = 0; k < size; k++) res[k] = 48;
  40.     unsigned long mask = 1;
  41.     for(int k = size - 1; k >= 0; k--){
  42.         if((vek & (mask << (size-k-1))) > 0){
  43.            res[k] = 49;
  44.         }
  45.     }
  46.     return res;
  47. }
  48.  
  49.  
  50. unsigned long CircleSdvig(unsigned long vek, int size, int n){
  51.     return (vek << n) | (vek >> (size - n));
  52. }
  53.  
  54. unsigned long RotateVektor(unsigned long vek, int size){
  55.     unsigned long mask = 1;
  56.     unsigned long m = 1;
  57.     unsigned long n = 1;
  58.     for(int k = 0; k <= size/2-1; k++){
  59.         n = (mask << k) & vek;
  60.         m = (mask << (size-k-1)) & vek;
  61.         if(n > 0) vek = vek | (mask << (size-1-k));
  62.         else vek = vek & ~(mask << (size-1-k));
  63.         if(m > 0) vek = vek | (mask << k);
  64.         else vek = vek & ~(mask << k);
  65.     }
  66.     return vek;
  67. }
  68.  
  69. int main(){
  70.     char Str[] = "1001100";
  71.     printf("Str = ");
  72.     for(int k = 0; k < LongOfStr(Str); k++) printf("%c", Str[k]);
  73.     printf("\n");
  74.     if(LongOfStr(Str) > 32){
  75.         printf("more then 32 chars\n");
  76.         return 0;
  77.     }
  78.     int size = 0;
  79.     printf("vektor = ");
  80.     unsigned long V = MakeVektor(Str, &size);
  81.     char *Vek1 = ConvertVektor(V, size);
  82.     for(int k = 0; k < size; k++)
  83.         printf("%c", Vek1[k]);
  84.     printf("\n");
  85.    
  86.  
  87.    
  88.     int n = 2;  
  89.     V = CircleSdvig(V, size, n);
  90.     char *Vek2 = ConvertVektor(V, size);
  91.     printf("CircleSdvig na %d = ", n);
  92.     for(int k = 0; k < size; k++)
  93.         printf("%c", Vek2[k]);
  94.     printf("\n");
  95.  
  96.     unsigned long RemovedVek = MakeVektor(Str, &size);
  97.     RemovedVek = RotateVektor(RemovedVek, size);
  98.     char *Vek3 = ConvertVektor(RemovedVek, size);
  99.     printf("Rotate Vektor = ");
  100.     for(int k = 0; k < size; k++)
  101.         printf("%c", Vek3[k]);
  102.     printf("\n");
  103.  
  104.  
  105.  
  106.     free(Vek1);
  107.     free(Vek2);
  108.     free(Vek3);
  109.  
  110.  
  111.     return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement