Вы находитесь на странице: 1из 4

№1

/*Дана матрица 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;
}

Вам также может понравиться