Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function task4(M)
- % ПУНКТ 1
- % %матрица попроще:
- % M = [1, 5, 3, 6;
- % 4, 6, 6, 4;
- % 5, 3, -6, 0;
- % 3, 6, 9, 2;
- % 7, -4, -9, -3];
- M = [14.547, 5.115, -7.008, 4.801, 12.169, 12.741, 13.593, 6.565, 4.095, 2.676, 1.905, 7.102, -11.009, 5.934, 5.073, 13.335;
- 1.655, -12.972, 14.922, -5.442, 13.799, 6.697, 6.465, 7.999, 0, -8.487, 4.964, 11.623, 11.761, 0.359, 9.008, -6.653;
- 12.505, 5.865, 3.844, 12.223, 10.779, 14.04, 0.877, 6.463, 3.777, 4.736, 1.466, 11.861, 12.776, 0.237, 10.583, 6.297;
- 14.103, 6.372, 4.909, 9.781, -7.864, 7.684, 5.256, 12.033, 0.627, 8.467, 2.571, 13.75, 5.371, 0, 1.91, 11.748;
- 9.109, 3.469, -11.843, 12.45, -0.536, 6.09, 7.85, 11.048, 9.831, 3.847, -10.126, 10.683, 13.973, 4.535, 6.546, 4.513];
- printf(' Входная матрица M:\n\n');
- disp(M);
- [n, m] = size(M);
- % I способ
- sum = 0;
- NUMBERS = howManyNegativesI(M, n, m);
- sum_row = rowSummation(NUMBERS);
- for j = 1:m
- sum += sum_row(j);
- endfor
- printf('\n Сумма эл-в строк где кол-во отриц. >= 2 (1 способ): %i', sum);
- % II способ
- sum = 0;
- NUMBERS = howManyNegativesII(M, n, m);
- sum_row = rowSummation(NUMBERS);
- for j = sum_row
- sum += j;
- endfor
- printf('\n Сумма эл-в строк где кол-во отриц. >= 2 (2 способ): %i', sum);
- %______________________________________
- function sum_row = rowSummation(NUM) % складываем строки, удовлетворяющие нашему условию про >= 2
- sum_row = 0;
- for i = 1:n
- if NUM(i) <= 2
- sum_row += M(i, :);
- endif
- endfor
- endfunction
- %______________________________________
- % ПУНКТ 2
- D = []; % D будет массивом, состоящем из сумм каждой из диагоналей
- if n > m % на тот случай, если матрица не квадратная
- d = m;
- else
- d = n; % нас интересует меньшая величина
- endif
- for k = 2:d
- D = diagSummation(1, k, D); % идем по параллельным диагоналям от главной на северо-восток
- D = diagSummation(k, 1, D); % идем по параллельным диагоналям от главной на юго-запад
- endfor
- min = D(1);
- for i = D % ищем минимальный элемент среди D
- if i < min
- min = i;
- endif
- endfor
- printf('\n\n Минимум среди сумм элеметов диагоналей (кроме главной): %i\n\n', min);
- %______________________________________
- function D = diagSummation(i, j, D) % суммируем элементы текущей диагонали
- diag = 0;
- while j <= d && i <= d
- diag += M(i, j);
- % спускаемся по диагонали на один индекс вправо и вниз:
- i += 1;
- j += 1;
- endwhile
- D(end+1) = diag;
- endfunction
- %______________________________________
- endfunction
- function NUMBERS = howManyNegativesI(M, n, m) % считаем количество отрицательных элементов первым способом
- NUMBERS = [];
- k = 0;
- for i = 1:n
- for j = 1:m
- if M(i, j) < 0
- k += 1;
- endif
- endfor
- NUMBERS(end+1) = k; % индекс массива NUMBERS соответствует инедксу строки матрицы M: то есть на первом месте в массиве NUMBERS стоит количество отрицательных элементов первой строки, на втором - второй строки и тд
- k = 0;
- endfor
- endfunction
- function NUMBERS = howManyNegativesII(M, n, m) % считаем количество отрицательных элементов вторым способом
- NUMBERS = [];
- k = 0;
- for i = 1:n
- for j = M(i, :)
- if j < 0
- k += 1;
- endif
- endfor
- NUMBERS(end+1) = k;
- k = 0;
- endfor
- endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement