Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define MAXSIZE 4
- int read_matrix(char *file_name, float matrix[][MAXSIZE]);
- void print_matrix(int size, float matrix[][MAXSIZE]);
- void great_diagonal(int size, float matrix[][MAXSIZE]);
- void swap_rows(int master, int slave, int size, float matrix[][MAXSIZE]);
- void triangle_matrix(int size, float matrix[][MAXSIZE]);
- void upward(int size, float matrix[][MAXSIZE]);
- int main(int argc, char *argv[])
- {
- char *file_name = "input";
- float matrix[MAXSIZE][MAXSIZE];
- int size = 0;
- size = read_matrix(file_name, matrix);
- printf("\nOriginal matrix:\n");
- print_matrix(size, matrix);
- great_diagonal(size, matrix);
- printf("Matrix with selection of main value in columns\n");
- print_matrix(size, matrix);
- triangle_matrix(size, matrix);
- printf("Triangle matrix:\n");
- print_matrix(size, matrix);
- upward(size, matrix);
- return 0;
- }
- void triangle_matrix(int size, float matrix[][MAXSIZE])
- {
- int i, j, k;
- float factor_master, factor_slave;
- for (k = 0; k < size; k++) {
- if (abs(matrix[k][k]) == 0) {
- swap_rows(k+1, k, size, matrix);
- printf("after 0-swap:\n");
- print_matrix(size, matrix);
- }
- factor_master = matrix[k][k];
- for (j = k; j < size+1; j++) {
- matrix[k][j] = matrix[k][j] / factor_master;
- }
- for (i = k+1; i < size; i++) {
- factor_slave = matrix[i][k];
- for (j = 0; j < size+1; j++) {
- matrix[i][j] = matrix[i][j] - matrix[k][j] * factor_slave;
- }
- }
- printf("step #%d\n", k+1);
- print_matrix(size, matrix);
- }
- }
- void upward(int size, float matrix[][MAXSIZE])
- {
- int i, j;
- float x[size-1], tmp;
- x[0] = matrix[size-1][size];
- for (i = 1; i >= 0; i--) {
- tmp = 0.0;
- for (j = 0; j < size-i-1; j++)
- tmp -= matrix[i][size-j-1] * x[j];
- tmp += matrix[i][size];
- x[size-i-1] = tmp;
- }
- putchar('\n');
- for (i = 0; i < size; i++)
- printf("x%d = %11f\n", i+1, x[size-i-1]);
- }
- void great_diagonal(int size, float matrix[][MAXSIZE])
- {
- int i, j, max_indx;
- float max;
- for (j = 0; j < size; j++) {
- max = 0;
- max_indx = 0;
- for (i = j; i < size; i++) {
- if (abs(matrix[i][j]) > abs(max)) {
- max = matrix[i][j];
- max_indx = i;
- }
- }
- if (abs(matrix[max_indx][j]) > abs(matrix[j][j])) {
- swap_rows(max_indx, j, size, matrix);
- }
- }
- }
- void swap_rows(int master, int slave, int size, float matrix[][MAXSIZE])
- {
- int j;
- float temp = 0;
- for (j = 0; j < size+1; j++) {
- temp = matrix[slave][j];
- matrix[slave][j] = matrix[master][j];
- matrix[master][j] = temp;
- }
- }
- int read_matrix(char *file_name, float matrix[][MAXSIZE])
- {
- FILE *ifp;
- int i, j, size = 0;
- ifp = fopen(file_name, "r");
- fscanf(ifp, "%d", &size);
- for (i = 0; i < size; i++) {
- for (j = 0; j < size+1; j++) {
- fscanf(ifp, "%f", &matrix[i][j]);
- }
- }
- fclose(ifp);
- return size;
- }
- void print_matrix(int size, float matrix[][MAXSIZE])
- {
- int i, j;
- putchar('\n');
- for (i = 0; i < size; i++) {
- for (j = 0; j < size+1; j++) {
- printf("%16f", matrix[i][j]);
- }
- putchar('\n');
- }
- putchar('\n');
- }
Advertisement
Add Comment
Please, Sign In to add comment