Advertisement
Val_Kir

lab 2

Jun 20th, 2016
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.88 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4.  
  5. typedef unsigned int word;
  6.  
  7. void outbool(word v, int n)
  8. {
  9.     word mask=1;
  10.     for(int i=0; i<n;++i,mask<<=1){
  11.         if(v&mask) printf("1");
  12.         else printf("0");
  13.     }
  14.     printf("\n");
  15. }
  16.  
  17. word inbool(int n)
  18. {
  19.     word res=0,mask=1;
  20.     char s[33];
  21.     gets(s);
  22.     for(int i=0;i<n;++i,mask<<=1){
  23.         if(s[i]=='1') res|=mask;
  24.     }
  25.     return res;
  26. }
  27.  
  28. int weight(word v)
  29. {
  30.     int res=0;
  31.     while(v){
  32.         if(v&1)++res;
  33.         v>>=1;
  34.     }
  35.     return res;
  36. }
  37.  
  38. void all_null(word m[],int n, int i){
  39.     int mask=~(1<<i);
  40.     for(int i=0;i<n;++i)
  41.         m[i]&=mask;
  42. }
  43.  
  44. void all_one(word m[], int n, int i){
  45.     int mask=1<<i;
  46.     for(int i=0;i<n;++i)
  47.         m[i]|=mask;
  48. }
  49.  
  50. void main(void)
  51. {
  52.     const int n=5;
  53.     int i=0,w=0,w_min=0,i_min=0;
  54.     word m[n],d[n],mask=1<<(n-1),v;
  55.     srand(time(0));
  56.  
  57.     for(int i=0;i<n;++i) //создание матрицы
  58.     {
  59.         m[i]=rand()%(1<<(n+1)-1);
  60.         outbool(m[i],n);
  61.     }
  62.     putchar('\n');
  63.    
  64.     w_min=weight(m[0]);
  65.  
  66.     for(i=0;i<n;++i) //поиск минимального веса
  67.     {
  68.         w=weight(m[i]);
  69.         printf("%d ",w);
  70.         if (w<w_min)
  71.         {
  72.             w_min=w;
  73.             i_min=i+1; //+1, потому что идем от о до 4, а матрица от 1 до 5
  74.         }
  75.     }
  76.     printf("w_min= %d , i_min= %d ",w_min,i_min);
  77.     putchar('\n');
  78.  
  79.     for(int i=0;i<n;++i,mask>>=1) //выделение побочной диагонали
  80.     {
  81.         d[i]=m[i]&mask;
  82.         outbool(d[i],n);
  83.     }
  84.     putchar('\n');
  85.  
  86.     for(int i=0;i<n;i++) //создание вектора из элементов побочной диагонали
  87.     {
  88.         d[0]=d[0]|d[i];
  89.     }
  90.     outbool(d[0],n);
  91.     putchar('\n');
  92.    
  93.     i_min--; // уменьшение минимального i, для поиска строки матрицы
  94.     m[i_min]=d[0];
  95.  
  96.     for(int i=0;i<n;i++)outbool(m[i],n);
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement