1. Необходимо написать подпрограмму-функцию на языке C для выполнения следующих задач: - Создать матрицу размером

  • 36
1. Необходимо написать подпрограмму-функцию на языке C для выполнения следующих задач:
- Создать матрицу размером а(nхn);
- Вывести значения матрицы на экран, разместив каждую строку матрицы на отдельной строке экрана;
- Найти количество нулей, расположенных на побочной диагонали матрицы;
- Вычислить среднее арифметическое положительных и отрицательных значений матрицы с помощью одной функции. Напишите функцию (main), которая вызывает все разработанные вами функции.
Золотой_Ключ
21
Конечно, я могу помочь вам с этой задачей на языке C.

Перед тем, как я приступлю к написанию подпрограммы-функции, давайте разберем каждое требование задачи и поясним его.

1. Создание матрицы размером а(nхn):
Для начала, создадим функцию `createMatrix`, которая будет принимать размер матрицы `n` в качестве аргумента и возвращать созданную матрицу. Матрица будет быть двумерным массивом, который мы создадим динамически с помощью функции `malloc`. Вот как будет выглядеть код для создания матрицы:

c
int createMatrix(int n) {
int
matrix = (int)malloc(n * sizeof(int*));
for (int i = 0; i < n; i++) {
matrix[i] = (int*)malloc(n * sizeof(int));
}
return matrix;
}


2. Вывод значений матрицы на экран:
Для этого, создадим функцию `printMatrix`, которая будет выводить значения матрицы на экран. Мы просто пройдемся по каждому элементу матрицы и выведем его значение. Вот код для этой функции:

c
void printMatrix(int
matrix, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}


3. Поиск количества нулей на побочной диагонали матрицы:
Для этого, создадим функцию `countZerosOnDiagonal`, которая будет принимать матрицу и ее размер в качестве аргументов и возвращать количество нулей на побочной диагонали. Мы пройдемся по элементам побочной диагонали и будем считать количество нулей. Вот как будет выглядеть код:

c
int countZerosOnDiagonal(int matrix, int n) {
int count = 0;
for (int i = 0; i < n; i++) {
if (matrix[i][n - i - 1] == 0) {
count++;
}
}
return count;
}


4. Вычисление среднего арифметического положительных и отрицательных значений матрицы с помощью одной функции:
Для этого, создадим функцию `calculateAverage`, которая будет принимать матрицу и ее размер в качестве аргументов и возвращать среднее арифметическое положительных и отрицательных значений. Мы пройдемся по каждому элементу матрицы, проверим его знак и соответствующим образом обновим сумму и количество элементов. Затем, мы поделим сумму на количество элементов, чтобы получить среднее арифметическое. Вот как будет выглядеть код:

c
void calculateAverage(int
matrix, int n) {
int sumPositive = 0, sumNegative = 0;
int countPositive = 0, countNegative = 0;

for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] > 0) {
sumPositive += matrix[i][j];
countPositive++;
} else if (matrix[i][j] < 0) {
sumNegative += matrix[i][j];
countNegative++;
}
}
}

if (countPositive > 0) {
float averagePositive = (float)sumPositive / countPositive;
printf("Среднее арифметическое положительных значений: %.2f\n", averagePositive);
} else {
printf("Отсутствуют положительные значения\n");
}

if (countNegative > 0) {
float averageNegative = (float)sumNegative / countNegative;
printf("Среднее арифметическое отрицательных значений: %.2f\n", averageNegative);
} else {
printf("Отсутствуют отрицательные значения\n");
}
}


Теперь, создадим функцию `main`, которая будет вызывать все разработанные функции и объединять их в единую подпрограмму:

c
int main() {
int n;
printf("Введите размер матрицы: ");
scanf("%d", &n);

int matrix = createMatrix(n);

printf("Матрица:\n");
printMatrix(matrix, n);

int zeroCount = countZerosOnDiagonal(matrix, n);
printf("Количество нулей на побочной диагонали: %d\n", zeroCount);

calculateAverage(matrix, n);

// Освобождаем память, выделенную для матрицы
for (int i = 0; i < n; i++) {
free(matrix[i]);
}
free(matrix);

return 0;
}


Весь код вместе будет выглядеть следующим образом:

c
#include
#include

int
createMatrix(int n) {
int matrix = (int)malloc(n * sizeof(int*));
for (int i = 0; i < n; i++) {
matrix[i] = (int*)malloc(n * sizeof(int));
}
return matrix;
}

void printMatrix(int matrix, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}

int countZerosOnDiagonal(int
matrix, int n) {
int count = 0;
for (int i = 0; i < n; i++) {
if (matrix[i][n - i - 1] == 0) {
count++;
}
}
return count;
}

void calculateAverage(int matrix, int n) {
int sumPositive = 0, sumNegative = 0;
int countPositive = 0, countNegative = 0;

for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] > 0) {
sumPositive += matrix[i][j];
countPositive++;
} else if (matrix[i][j] < 0) {
sumNegative += matrix[i][j];
countNegative++;
}
}
}

if (countPositive > 0) {
float averagePositive = (float)sumPositive / countPositive;
printf("Среднее арифметическое положительных значений: %.2f\n", averagePositive);
} else {
printf("Отсутствуют положительные значения\n");
}

if (countNegative > 0) {
float averageNegative = (float)sumNegative / countNegative;
printf("Среднее арифметическое отрицательных значений: %.2f\n", averageNegative);
} else {
printf("Отсутствуют отрицательные значения\n");
}
}

int main() {
int n;
printf("Введите размер матрицы: ");
scanf("%d", &n);

int
matrix = createMatrix(n);

printf("Матрица:\n");
printMatrix(matrix, n);

int zeroCount = countZerosOnDiagonal(matrix, n);
printf("Количество нулей на побочной диагонали: %d\n", zeroCount);

calculateAverage(matrix, n);

// Освобождаем память, выделенную для матрицы
for (int i = 0; i < n; i++) {
free(matrix[i]);
}
free(matrix);

return 0;
}

Это полная подпрограмма на языке C, которая выполняет задачи, описанные в условии. Поэтапно выполняя эти задачи, программа создает матрицу с заданными размерами, выводит ее на экран, находит количество нулей на побочной диагонали и вычисляет среднее арифметическое положительных и отрицательных значений матрицы. После этого, она освобождает память, выделенную для матрицы.