/*Дана матрица Z[0:N-1,0:N-1] вещественного типа. Написать
программу, которая переставляет местами первую и последнюю строку матрицы, если произведение положительных элементов главной диагонали больше заданного числа Y. Вычисления оформить в виде функции с параметрами.*/ #include <stdio.h> #include <math.h> #include <locale.h> #define lmax 20 #define smax 60 int check(float z[][20], int n, float y) { float pr = 1; int flag = 0; for (int i = 0; i < n; i++) { int j = i; if (z[i][j] > 0) { pr *= z[i][j]; } } if (pr > y) { flag = 1; } return(flag); } void swap(float z[][20], int n) { for (int i = 0; i < n; i++) { int b = z[0][i]; z[0][i] = z[n-1][i]; z[n - 1][i] = b; } } int main() { setlocale(LC_ALL, "Rus"); float z[lmax][lmax]; int n; float y; printf("Введите размер матрицы от 1 до %d и число сравнения от 1 до %d:\n", lmax, smax); do { scanf_s("%d%f", &n, &y); while (getchar() != '\n'); } while (n <= 0 or n >= lmax); printf("Введите квадратную матрицу:\n"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf_s("%f", &z[i][j]); } } int f = check(z, n, y); if (f == 0) { printf("Перестановки не произошло:\n"); } else { printf("Строки после перестановки:\n"); swap(z, n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%f ", z[i][j]); } printf("\n"); } } return 0; } №2 /*Даны целочисленная матрица A[0:N - 1, 0 : M - 1] и целочисленный массив B[0:K - 1].Написать программу, которая удаляет путем сдвига элементы тех столбцов A, номера которых присутствуют в массиве B, и вычисляет сумму элементов оставшихся столбцов. Вычисления оформить в виде функции с параметрами.*/ #include <stdio.h> #include <locale.h> #include <math.h> #define lmax 20 int obnulation(int a[][20], int b[20], int n, int m, int k) { int q; int t = 0; for (int i = 0; i < n; i++) { q = 0; int f = 0; for (int j = 0; j < m; j++) { int p; for (p = 0; p < k && (b[p] != j); p++); if (p == k) { a[i][q] = a[i][j]; q += 1; f = 1; } } if (f == 1) { t = q; } } return (t); } void summirovanieostavshihsiastolbsovmatrizi(int a[][20], int c[20], int n, int m) { int q = 0; for (int j = 0; j < m; j++) { c[q] = 0; for (int i = 0; i < n; i++) { c[q] += a[i][j]; } q += 1; } } int main() { setlocale(LC_ALL, "Rus"); int a[lmax][lmax], b[lmax], c[lmax]; int n, m, k, ind; printf("Введите число строк, столбцов и длину массива от 1 до %d\n", lmax); do { scanf_s("%d%d%d", &n, &m, &k); while (getchar() != '\n'); } while (n >= lmax or n <= 0); printf("Введите матрицу:\n"); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { scanf_s("%d", &a[i][j]); } } printf("Введите массив:\n"); for (int i = 0; i < k; i++) { scanf_s("%d", &b[i]); } int p = obnulation(a, b, n, m, k); summirovanieostavshihsiastolbsovmatrizi(a, c, n, p); if (p == 0) { printf("Сдвига не произошло!"); } else { printf("Матрица после сдвига:\n"); for (int i = 0; i < n; i++) { for (int j = 0; j < p; j++) { printf_s("%d ", a[i][j]); } printf("\n"); } printf("Суммы соответствующих столбцов:\n"); for (int i = 0; i < p; i++) { printf("%d ", c[i]); } } return 0; }