Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- typedef unsigned int word;
- void outbool(word v, int n)
- {
- word mask=1;
- for(int i=0; i<n;++i,mask<<=1){
- if(v&mask) printf("1");
- else printf("0");
- }
- printf("\n");
- }
- word inbool(int n)
- {
- word res=0,mask=1;
- char s[33];
- gets(s);
- for(int i=0;i<n;++i,mask<<=1){
- if(s[i]=='1') res|=mask;
- }
- return res;
- }
- int weight(word v)
- {
- int res=0;
- while(v){
- if(v&1)++res;
- v>>=1;
- }
- return res;
- }
- void all_null(word m[],int n, int i){
- int mask=~(1<<i);
- for(int i=0;i<n;++i)
- m[i]&=mask;
- }
- void all_one(word m[], int n, int i){
- int mask=1<<i;
- for(int i=0;i<n;++i)
- m[i]|=mask;
- }
- void main(void)
- {
- const int n=5;
- int i=0,w=0,w_min=0,i_min=0;
- word m[n],d[n],mask=1<<(n-1),v;
- srand(time(0));
- for(int i=0;i<n;++i) //создание матрицы
- {
- m[i]=rand()%(1<<(n+1)-1);
- outbool(m[i],n);
- }
- putchar('\n');
- w_min=weight(m[0]);
- for(i=0;i<n;++i) //поиск минимального веса
- {
- w=weight(m[i]);
- printf("%d ",w);
- if (w<w_min)
- {
- w_min=w;
- i_min=i+1; //+1, потому что идем от о до 4, а матрица от 1 до 5
- }
- }
- printf("w_min= %d , i_min= %d ",w_min,i_min);
- putchar('\n');
- for(int i=0;i<n;++i,mask>>=1) //выделение побочной диагонали
- {
- d[i]=m[i]&mask;
- outbool(d[i],n);
- }
- putchar('\n');
- for(int i=0;i<n;i++) //создание вектора из элементов побочной диагонали
- {
- d[0]=d[0]|d[i];
- }
- outbool(d[0],n);
- putchar('\n');
- i_min--; // уменьшение минимального i, для поиска строки матрицы
- m[i_min]=d[0];
- for(int i=0;i<n;i++)outbool(m[i],n);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement