View difference between Paste ID: FR84v3Bg and F8NkHfpc
SHOW: | | - or go back to the newest paste.
1
/* 
2-
gcc std=c11 -Wall -Werror -pedantic matrix.c -o matrix
2+
cc std=c11 -Wall -Werror -pedantic matrix.c -o matrix
3
*/
4
5
6
#include <stdio.h>
7
#include <string.h>
8
#include <inttypes.h>
9
10
const int minN = 2;
11
const int maxN = 25;
12
13
#define FORMAT_PRId32FIXED "%-11"PRId32
14
15
int matrix_read(int n, int32_t matrix[n][n]) {
16
	for (int row = 0; row < n; ++row) {
17
		for (int col = 0; col < n; ++col) { 
18
			int32_t val = 0;
19
			int ret = scanf("%"SCNd32, &val);
20
			if (ret != 1) 
21
				return -1;
22
			else
23
				matrix[row][col] = val;
24
25
		}
26
	}
27
	return 0;
28
}
29
30
void matrix_print(int n, int32_t matrix[n][n]) {
31
	for (int row = 0; row < n; ++row) {
32
		for (int col = 0; col < n-1; ++col) {
33
			printf(FORMAT_PRId32FIXED" ", matrix[row][col]); 
34
		}
35
		printf(FORMAT_PRId32FIXED, matrix[row][n-1]);
36
		printf("\n");
37
	}
38
}
39
40
41
int matrix_positive_below_main_diagonal(int n, int32_t matrix[n][n], int32_t array[(n*(n-1))/2]) {
42
	int num_elems = 0;
43
	for (int row = 1; row < n; ++row) {
44
		for (int col = 0; col < row; ++col) {
45
			int32_t val = matrix[row][col];
46
			if (val > 0) {
47
				array[num_elems] = val;
48
				++num_elems;
49
			}
50
		} 
51
	}
52
	return num_elems;
53
}
54
55
void matrix_zero_negative(int n, int32_t matrix[n][n]) {
56
	for (int row = 0; row < n; ++row) {
57
		for (int col = 0; col < n; ++col) {
58
			int32_t *val = &matrix[row][col];
59
			if (*val < 0) {
60
				*val = 0;
61
			}
62
		}
63
	}
64
}
65
66
void array_print(int n, int32_t array[n]) {
67
	if (n <= 0) {
68
		return;
69
	}
70
	for (int i = 0; i < n - 1; ++i) {
71
		printf("%"PRId32", ", array[i]);
72
	}
73
	printf("%"PRId32, array[n-1]);
74
	printf("\n");
75
}
76
77
int main(int argc, char *argv[]) {
78
	(void)(argc);
79
	(void)(argv);
80
	int N = 0;
81
	int ret;
82
	ret = scanf("%d", &N);
83
	if (ret != 1 || (minN > N || N > maxN)) {
84
		return -1;
85
	}
86
	int32_t A[N][N];
87
	ret = matrix_read(N, A);
88
	if (ret != 0) {
89
		return -1;
90
	}
91
92
	int32_t array[(N*(N-1))/2];
93
	int num_positive_below_main_diagonal = 
94
			matrix_positive_below_main_diagonal(N, A, array);
95
	
96
	int B[num_positive_below_main_diagonal];
97
	memcpy(B, array, num_positive_below_main_diagonal * sizeof(B[0]));
98
	//printf("B:\n");
99
	//array_print(num_positive_below_main_diagonal, B); 
100
	matrix_zero_negative(N, A);
101
	//printf("A:\n");	
102
	matrix_print(N, A);
103
	return 0;
104
}
105