Advertisement
Savelyev_Vyacheslav

Kontr_3

Sep 27th, 2021
1,369
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.18 KB | None | 0 0
  1.  
  2. %1.3
  3. % Написать скрипт, в котором генерируется случайная квадратная матрица размера 6,
  4. % и её строки переставляются таким образом, чтобы элементы главной диагонали были расположены по возрастанию
  5. clear
  6. clc
  7. close all % закрывает все графические окна перед запуском нового окна
  8.  
  9. r=6; % размер матрицы
  10.  
  11. Arr = rand(r,r);
  12. r=length(Arr); % вычислим размер таблицы
  13. A=Arr;
  14. d=10;
  15. NewArr =[]; % имя отсортированной таблицы
  16. stop=654321;
  17. for tt = 123456:1:stop
  18.     count = tt;
  19.     disp(count);
  20.     trig=1;
  21.     b1 = mod(count, d);  count = fix(count/d); if (b1>r || b1==0) continue; end
  22.     b2 = mod(count, d);  count = fix(count/d); if (b2>r || b2==0) continue; end
  23.     b3 = mod( count, d); count = fix(count/d); if (b3>r || b3==0) continue; end
  24.     b4 = mod( count, d); count = fix(count/d); if (b4>r || b4==0) continue; end
  25.     b5 = mod( count, d); count = fix(count/d); if (b5>r || b5==0) continue; end
  26.     b6 = mod( count, d); count = fix(count/d); if (b6>r || b6==0) continue; end
  27.  
  28.     order = [b1,b2,b3
  29.         ,b4,b5,b6
  30.         ]
  31.     k = unique(order);
  32.     if ((length(order)==length(k)) && (trig==1))
  33.             NewArr = cat(1,NewArr,Arr(b6,:));
  34.             NewArr = cat(1,NewArr,Arr(b5,:));
  35.             NewArr = cat(1,NewArr,Arr(b4,:));
  36.             NewArr = cat(1,NewArr,Arr(b3,:));
  37.             NewArr = cat(1,NewArr,Arr(b2,:));
  38.             NewArr = cat(1,NewArr,Arr(b1,:));
  39.             Diag=diag(NewArr);
  40.             DiagDiff = diff(Diag); % вычитание порядковых чисел массива
  41.             MinArr = min(DiagDiff);
  42.             if (MinArr>=0)
  43.                  disp('решение есть');  
  44.                 break;
  45.             end
  46.     end
  47.             if (tt==stop)
  48.                 disp('решения нет');  
  49.             end
  50.             NewArr=[];
  51. end
  52. DiagDiff
  53. NewArr
  54.  
  55.  
  56. % function[val] = Main(Arr,r)
  57. % NewArr =[]; % имя отсортированной таблицы
  58. % Store=[]; % не вошло
  59. % AAA=Arr;
  60. % MAXX=MAX(AAA,r);
  61. % endArr=AAA(MAXX,:);  % Вырезаем аксимальную строку с конца
  62. % AAA(MAXX,:)=[];  
  63. % r=r-1;
  64. % for ii=1:r
  65. % if (length(AAA)>0)
  66. % %  [NewArr,AAA] = Main(AAA,NewArr,ii,4);
  67. % end
  68. %     minId=MIN(AAA,ii);  % выявление минимального знаения строки с начала
  69. %     [v1] = sortDowntoUp(AAA,ii);
  70. %     NewArr = cat(1,NewArr,v1);
  71. %     AAA(minId,:)=[];
  72. %     if (ii<r) %проверка подходящих строк
  73. %        
  74. %         Next=sortDowntoUp(AAA,MIN(AAA,ii+1))
  75. %         if (NewArr(end,ii)>Next(ii+1))
  76. %             eeee=ii+1; % индекс неподходящей строки
  77. %              [v2] = sortDowntoUp(AAA,eeee);
  78. %             Store = cat(1,Store,v2); % переносим неподходящее в хранилище
  79. % %             NewArr(end,:)=[];
  80. %         end
  81. %     end
  82. %     disp('------------');
  83. % end
  84. % NewArr = cat(1,NewArr,endArr) %добовляем строку обратно в конец
  85. % %NewArr = cat(1,NewArr,Store)
  86. % Store % не подошла строка
  87. % end
  88. %
  89. % function[v1] = sortDowntoUp(CopyArr,kk)
  90. %  for ii = 1:length(CopyArr(:,1))
  91. %      if (0==length(CopyArr(:,1)))
  92. %             break;
  93. %      end
  94. %         jj = MIN(CopyArr,kk);
  95. %         CopyArr(jj,1)% столб ii строка jj
  96. %         NewArr(ii,:) = CopyArr(jj,:);
  97. %         CopyArr(jj,:)=[];
  98. %         v1=NewArr(1,:);
  99. %
  100. %             if (0==length(CopyArr(:,1)))
  101. %             break;
  102. %             end
  103. %  end
  104. % end
  105. %
  106. %
  107. %
  108. % function[val] = MIN(Arr,ii)
  109. % Arr = Arr(:,ii);
  110. % n = length(Arr(:,1));
  111. % Min = min(Arr);
  112. %     for ij= 1:n
  113. %         if (Arr(ij,1)== Min)
  114. %         val = ij; break;
  115. %         end
  116. %     end
  117. % end
  118. %
  119. % function[val] = MAX(Arr,ii)
  120. % Arr = Arr(:,ii);
  121. % n = length(Arr(:,1));
  122. % Max = max(Arr);
  123. %     for ij= 1:n
  124. %         if (Arr(ij,1)== Max)
  125. %         val = ij; break;
  126. %         end
  127. %     end
  128. % end
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement