Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int LongOfStr(char str[]){
- int k = 0;
- if(str == NULL) return -1;
- while(str[k] > 13) k++;
- return k;
- }
- unsigned long MakeVektor(char str[], int *length){
- if(str == NULL) {
- *length = -1;
- return 0;
- }
- int size = 0;
- while(str[size] > 13) size++;
- if(size > 32) return 0;
- unsigned long mask = 1;
- int k = 0;
- unsigned long res = 0;
- *length = size;
- for(int j = size-1; j >= 0; j--){
- if(str[j] != '0'){
- mask = mask << (size-j-1);
- res = res | mask;
- mask = 1;
- }
- }
- return res;
- }
- char *ConvertVektor(unsigned long vek, int size){
- char *res = NULL;
- res = (char*) malloc(sizeof(char)*(size+1));
- if(res == NULL) return 0;
- res[size] = 13;
- for(int k = 0; k < size; k++) res[k] = 48;
- unsigned long mask = 1;
- for(int k = size - 1; k >= 0; k--){
- if((vek & (mask << (size-k-1))) > 0){
- res[k] = 49;
- }
- }
- return res;
- }
- unsigned long CircleSdvig(unsigned long vek, int size, int n){
- return (vek << n) | (vek >> (size - n));
- }
- unsigned long RotateVektor(unsigned long vek, int size){
- unsigned long mask = 1;
- unsigned long m = 1;
- unsigned long n = 1;
- for(int k = 0; k <= size/2-1; k++){
- n = (mask << k) & vek;
- m = (mask << (size-k-1)) & vek;
- if(n > 0) vek = vek | (mask << (size-1-k));
- else vek = vek & ~(mask << (size-1-k));
- if(m > 0) vek = vek | (mask << k);
- else vek = vek & ~(mask << k);
- }
- return vek;
- }
- int main(){
- char Str[] = "1001100";
- printf("Str = ");
- for(int k = 0; k < LongOfStr(Str); k++) printf("%c", Str[k]);
- printf("\n");
- if(LongOfStr(Str) > 32){
- printf("more then 32 chars\n");
- return 0;
- }
- int size = 0;
- printf("vektor = ");
- unsigned long V = MakeVektor(Str, &size);
- char *Vek1 = ConvertVektor(V, size);
- for(int k = 0; k < size; k++)
- printf("%c", Vek1[k]);
- printf("\n");
- int n = 2;
- V = CircleSdvig(V, size, n);
- char *Vek2 = ConvertVektor(V, size);
- printf("CircleSdvig na %d = ", n);
- for(int k = 0; k < size; k++)
- printf("%c", Vek2[k]);
- printf("\n");
- unsigned long RemovedVek = MakeVektor(Str, &size);
- RemovedVek = RotateVektor(RemovedVek, size);
- char *Vek3 = ConvertVektor(RemovedVek, size);
- printf("Rotate Vektor = ");
- for(int k = 0; k < size; k++)
- printf("%c", Vek3[k]);
- printf("\n");
- free(Vek1);
- free(Vek2);
- free(Vek3);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement