Для каждого пункта задания написать подпрограмму-функцию
- сформировать матрицу А (NхN).
-вывести на экран значения матрицы, расположив каждую строку
матрицы на строку экрана;
- найти в матрице количество нулевых элементов;
- найти максимальные элементы на главной и побочной диагоналях
одной функцией.
Написать функцию (main), вызывающую разработанные вами
функции.
C/C++
Помогите, пожалуйста, написать программу на языке Си.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct {
int* first;
int* second;
} Pair;
int** create_matrix(int** matrix, size_t n, size_t m) {
matrix = (int**)malloc(n * sizeof(int*));
if (matrix != NULL) {
size_t i;
for (i = 0; i < n; ++i) {
matrix[i] = (int*)malloc(m * sizeof(int));
if (matrix[i] == NULL) {
size_t j;
for (j = 0; j < n; ++j) {
if (matrix[i] != NULL) {
free(matrix[i]);
}
}
if (matrix != NULL) {
free(matrix);
}
matrix = NULL;
break;
}
}
}
return matrix;
}
void fill(int** matrix, size_t n, size_t m, int x) {
srand((unsigned)time(NULL));
size_t i, j;
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
matrix[i][j] = rand() % x;
}
}
}
void show(int** matrix, size_t n, size_t m, unsigned w) {
size_t i, j;
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
printf("%*i", w, matrix[i][j]);
}
puts("\n");
}
}
unsigned count(int** matrix, size_t n, size_t m, int x) {
size_t i, j;
unsigned count = 0;
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
if (x == matrix[i][j]) {
++count;
}
}
}
return count;
}
Pair max_main_side_diagonal(int** matrix, size_t n) {
size_t j = n - 1;
Pair pair;
pair.first = &matrix[0][0];
pair.second = &matrix[0][j];
--j;
size_t i;
for (i = 1; i < n; ++i, --j) {
if (matrix[i][i] > *pair.first) {
pair.first = &matrix[i][i];
}
if (matrix[i][j] > *pair.second) {
pair.second = &matrix[i][j];
}
}
return pair;
}
int** destroy(int** matrix, size_t n) {
if (matrix != NULL) {
size_t i;
for (i = 0; i < n; ++i) {
if (matrix[i] != NULL) {
free(matrix[i]);
}
}
free(matrix);
matrix = NULL;
}
return matrix;
}
size_t matrix_size(const char* msg) {
size_t size = 0;
while (!size) {
printf(msg);
scanf_s("%u", &size);
while (getchar() != '\n');
}
return size;
}
int main(void) {
int** a = NULL;
system("chcp 1251 > nul");
size_t n = matrix_size(" Введите размер матрицы: ");
a = create_matrix(a, n, n);
if (a != NULL) {
int x, c;
unsigned q, w;
Pair mm;
x = n << 2;
fill(a, n, n, x);
w = 5;
show(a, n, n, w);
c = 0;
q = count(a, n, n, c);
printf(" Количество нулевых элементов: %u\n", q);
mm = max_main_side_diagonal(a, n);
printf(" Максимум на главной диагонали: %i\n", *mm.first);
printf(" Максимум на побочной диагонали: %i\n", *mm.second);
a = destroy(a, n);
} else {
puts("Недостаточно памяти!");
}
system("pause > nul");
return 0;
}
#include <stdlib.h>
#include <time.h>
typedef struct {
int* first;
int* second;
} Pair;
int** create_matrix(int** matrix, size_t n, size_t m) {
matrix = (int**)malloc(n * sizeof(int*));
if (matrix != NULL) {
size_t i;
for (i = 0; i < n; ++i) {
matrix[i] = (int*)malloc(m * sizeof(int));
if (matrix[i] == NULL) {
size_t j;
for (j = 0; j < n; ++j) {
if (matrix[i] != NULL) {
free(matrix[i]);
}
}
if (matrix != NULL) {
free(matrix);
}
matrix = NULL;
break;
}
}
}
return matrix;
}
void fill(int** matrix, size_t n, size_t m, int x) {
srand((unsigned)time(NULL));
size_t i, j;
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
matrix[i][j] = rand() % x;
}
}
}
void show(int** matrix, size_t n, size_t m, unsigned w) {
size_t i, j;
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
printf("%*i", w, matrix[i][j]);
}
puts("\n");
}
}
unsigned count(int** matrix, size_t n, size_t m, int x) {
size_t i, j;
unsigned count = 0;
for (i = 0; i < n; ++i) {
for (j = 0; j < m; ++j) {
if (x == matrix[i][j]) {
++count;
}
}
}
return count;
}
Pair max_main_side_diagonal(int** matrix, size_t n) {
size_t j = n - 1;
Pair pair;
pair.first = &matrix[0][0];
pair.second = &matrix[0][j];
--j;
size_t i;
for (i = 1; i < n; ++i, --j) {
if (matrix[i][i] > *pair.first) {
pair.first = &matrix[i][i];
}
if (matrix[i][j] > *pair.second) {
pair.second = &matrix[i][j];
}
}
return pair;
}
int** destroy(int** matrix, size_t n) {
if (matrix != NULL) {
size_t i;
for (i = 0; i < n; ++i) {
if (matrix[i] != NULL) {
free(matrix[i]);
}
}
free(matrix);
matrix = NULL;
}
return matrix;
}
size_t matrix_size(const char* msg) {
size_t size = 0;
while (!size) {
printf(msg);
scanf_s("%u", &size);
while (getchar() != '\n');
}
return size;
}
int main(void) {
int** a = NULL;
system("chcp 1251 > nul");
size_t n = matrix_size(" Введите размер матрицы: ");
a = create_matrix(a, n, n);
if (a != NULL) {
int x, c;
unsigned q, w;
Pair mm;
x = n << 2;
fill(a, n, n, x);
w = 5;
show(a, n, n, w);
c = 0;
q = count(a, n, n, c);
printf(" Количество нулевых элементов: %u\n", q);
mm = max_main_side_diagonal(a, n);
printf(" Максимум на главной диагонали: %i\n", *mm.first);
printf(" Максимум на побочной диагонали: %i\n", *mm.second);
a = destroy(a, n);
} else {
puts("Недостаточно памяти!");
}
system("pause > nul");
return 0;
}
https://pastebin.com/Vnniyh09
Двоечник, списывай
Двоечник, списывай
Игорь Сорокин
Спасибо, пап))
Игорь Сорокин
Благодарю <3
Похожие вопросы
- Помогите пожалуйста решить программу на языке СИ!!!
- Здравствуйте, помогите пожалуйста написать программы на языке C++.
- Написать программу на языке Си
- Помогите пожалуйста написать программу на Си
- Написать программу на языке Си, которая решит эту задачу:
- Помогите пожалуйста написать программу, реализующую десять генераторов псевдослучайных чисел.СИ!!!!
- Помогите написать программу на языке Си
- Написать программу в языке Си, которая с помощью указателей на функцию выполняет задание
- Помогите пожалуйста написать программу!
- Помоги пожалуйста написать программу на C++