diff --git a/2025.03.28/Matvei/Makefile b/2025.03.28/Matvei/Makefile deleted file mode 100644 index a6677ef..0000000 --- a/2025.03.28/Matvei/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -FLAGS = -mfpmath=sse -fstack-protector-all -W -Wall -Wextra -Wunused -Wcast-align -Werror -pedantic -pedantic-errors -Wfloat-equal -Wpointer-arith -Wformat-security -Wmissing-format-attribute -Wformat=1 -Wwrite-strings -Wcast-align -Wno-long-long -std=gnu99 -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wold-style-definition -Wdeclaration-after-statement -Wbad-function-cast -Wnested-externs -Wmaybe-uninitialized -O3 -all: a01.out a02.out a03.out -a01.out: a01.o array.o matrix.o - gcc a01.o array.o matrix.o -lm -o a01.out -a02.out: a02.o array.o matrix.o - gcc a02.o array.o matrix.o -lm -o a02.out -a03.out: a03.o array.o matrix.o - gcc a03.o array.o matrix.o -lm -o a03.out -array.o: - gcc -c $(FLAGS) -o array.o array.c -matrix.o: - gcc -c $(FLAGS) -o matrix.o matrix.c -a01.o: - gcc -c $(FLAGS) -o a01.o task01.c -a02.o: - gcc -c $(FLAGS) -o a02.o task02.c -a03.o: - gcc -c $(FLAGS) -o a03.o task03.c -clean: - rm -f *.o *.out diff --git a/2025.03.28/Matvei/array.c b/2025.03.28/Matvei/array.c deleted file mode 100644 index e468ec3..0000000 --- a/2025.03.28/Matvei/array.c +++ /dev/null @@ -1,74 +0,0 @@ -#include -#include -#include -#include "io_status.h" -#include "array.h" -#include "matrix.h" - -io_status read_matrix(double* a, int n, int m, const char* name) - { - int i, j; - FILE* fp; - if (!(fp = fopen(name, "r"))) - return ERROR_OPEN; - for (i = 0; i < n; i++) - { - for (j = 0; j < m; j++) - { - if (fscanf(fp, "%lf", a + i * m + j) != 1) - { - fclose(fp); - return ERROR_READ; - } - } - } - fclose(fp); - return SUCCESS; - } - -void print_matrix(const double* a, int n, int m, int p) - { - int np = (n > p ? p : n); - int mp = (m > p ? p : m); - int i, j; - for (i = 0; i < np; i++) - { - for (j = 0; j < mp; j++) - printf(" %10.3e", a[i * m + j]); - printf("\n"); - } - } - -void init_matrix(double* a, int n, int m, int k) - { - int i, j; - for (i = 0; i < n; i++) - { - for (j = 0; j < m; j++) - a[i * m + j] = f(k, n, m, i+1, j+1); - } - } - -double f(int k, int n, int m, int i, int j) - { - switch (k) - { - case 1: return (n >= m ? n : m) - (i >= j ? i : j) + 1; - case 2: return (i >= j ? i : j); - case 3: return (i - j >= 0 ? i - j : j - i); - case 4: return 1./(i + j - 1); - } - return -1e308; - } - -void init_vector(double* b, double* a, int n) - { - int i, k; - double sum; - for (i = 0; i < n; i++) - { - sum = 0; - for (k = 1; k < n; k += 2) sum += a[i * n + k]; - b[i] = sum; - } - } diff --git a/2025.03.28/Matvei/array.h b/2025.03.28/Matvei/array.h deleted file mode 100644 index e626337..0000000 --- a/2025.03.28/Matvei/array.h +++ /dev/null @@ -1,5 +0,0 @@ -io_status read_matrix(double*, int, int, const char*); -void print_matrix(const double*, int, int, int); -void init_matrix(double*, int, int, int); -double f(int, int, int, int, int); -void init_vector(double*, double*, int); diff --git a/2025.03.28/Matvei/io_status.h b/2025.03.28/Matvei/io_status.h deleted file mode 100644 index 4234d9c..0000000 --- a/2025.03.28/Matvei/io_status.h +++ /dev/null @@ -1,6 +0,0 @@ -typedef enum io_status_ - { - SUCCESS, - ERROR_OPEN, - ERROR_READ, - } io_status; diff --git a/2025.03.28/Matvei/matrix.c b/2025.03.28/Matvei/matrix.c deleted file mode 100644 index 5e22a00..0000000 --- a/2025.03.28/Matvei/matrix.c +++ /dev/null @@ -1,99 +0,0 @@ -#include -#include -#include -#include "matrix.h" - -void multmatvec(double* a, double* x1, double* x2, int n) - { - int i, j; - double sum; - for (i = 0; i < n; i++) - { - sum = 0; - for (j = 0; j < n; j++) - sum += a[i * n+ j] * x1[j]; - x2[i] = sum; - } - } - -double scalp(double* a, double* b, int n) - { - int i; - double mult = 0; - for (i = 0; i < n; i++) mult += a[i] * b[i]; - return mult; - } - -double count_task1(double* a, double* x, double r1, int n) - { - int i, j; - double mltd_el_x, sum, modsum1 = 0, modsum2 = 0; - for (i = 0; i < n; i++) - { - sum = 0; - for (j = 0; j < n; j++) sum += a[i * n + j] * x[j]; - mltd_el_x = r1 * x[i]; - modsum1 += fabs(sum - mltd_el_x); - modsum2 += fabs(mltd_el_x); - } - return modsum1 / modsum2; - } - -double count_r1(double* a, double* b, double* x, int n) - { - int i, j; - double el_b, sum, modsum1 = 0, modsum2 = 0; - for (i = 0; i < n; i++) - { - sum = 0; - for (j = 0; j < n; j++) sum += a[i * n + j] * x[j]; - el_b = b[i]; - modsum1 = fabs(sum - el_b); - modsum2 = fabs(el_b); - } - return modsum1 / modsum2; - } - -double count_r2(double* x, int n) - { - int i; - double modsum = 0; - int ost, sum = 0; - for (i = 0; i < n; i++) - { - ost = (i + 1) % 2; - modsum += fabs(x[i] - ost); - sum += ost; - } - return modsum / sum; - } - -void vecdiff(double* a, double* b, int n) - { - int i; - for (i = 0; i < n; i++) a[i] -= b[i]; - } - -void vecmult(double* a, double lambda, int n) - { - int i; - for (i = 0; i < n; i++) a[i] = lambda * a[i]; - } - -void veccpy(double* a, double* b, int n) - { - int i; - for (i = 0; i < n; i++) a[i] = b[i]; - } - -void veccomb(double lambda, double* a, double myu, double* b, int n) - { - int i; - for (i = 0; i < n; i++) a[i] = lambda * a[i] + myu * b[i]; - } - -int equal(double a, double b) - { - if (fabs(a - b) <= EPS * fmax(fabs(a), fabs(b))) return 1; - return 0; - } diff --git a/2025.03.28/Matvei/matrix.h b/2025.03.28/Matvei/matrix.h deleted file mode 100644 index bc71ea1..0000000 --- a/2025.03.28/Matvei/matrix.h +++ /dev/null @@ -1,12 +0,0 @@ -#define EPS (1e-9) - -void multmatvec(double*, double*, double*, int); -double scalp(double*, double*, int); -void vecdiff(double*, double*, int); -void vecmult(double*, double, int); -void veccpy(double*, double*, int); -void veccomb(double, double*, double, double*, int); -double count_task1(double*, double*, double, int); -double count_r1(double*, double*, double*, int); -double count_r2(double*, int); -int equal(double, double); diff --git a/2025.03.28/Matvei/task01.c b/2025.03.28/Matvei/task01.c deleted file mode 100644 index 3aa68d8..0000000 --- a/2025.03.28/Matvei/task01.c +++ /dev/null @@ -1,152 +0,0 @@ -#include -#include -#include -#include -#include "io_status.h" -#include "array.h" -#include "matrix.h" - -double solve1(double*, double*, double*, int, int); - -int main(int argc, char* argv[]) - { - int task = 1; - double* a; - double* x0; - double* x; - int n, m, p, k1, k2; - char* name1 = 0; - char* name2 = 0; - double r1, r2; - double t; - if (!((argc == 6 || argc == 7 || argc == 8) && sscanf(argv[1], "%d", &m) == 1 && sscanf(argv[2], "%d", &n) == 1 && sscanf(argv[3], "%d", &p) == 1 && sscanf(argv[4], "%d", &k1) == 1 && k1 >= 0 && k1 <= 4)) - { - printf("Usage: %s n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - if (k1 == 0) - { - if (!(sscanf(argv[6], "%d", &k2) == 1) && k2 >= 0 && k2 <= 4) - { - printf("Usage: %s n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - name1 = argv[5]; - } - else - { - if (!(sscanf(argv[5], "%d", &k2) == 1) && k2 >= 0 && k2 <= 4) - { - printf("Usage: %s n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - } - if (k2 == 0) - { - if (k1 == 0) name2 = argv[7]; - else name2 = argv[6]; - } - a = (double*) malloc(n * n * sizeof(double)); - if (!a) - { - printf("Not enough memory\n"); - return 2; - } - if (name1) - { - io_status ret; - ret = read_matrix(a, n, n, name1); - do - { - switch(ret) - { - case SUCCESS: - continue; - case ERROR_OPEN: - printf("Can not open file %s\n", name1); - break; - case ERROR_READ: - printf("Can not read file %s\n", name1); - break; - } - free(a); - return 3; - } while (0); - } - else - init_matrix(a, n, n, k1); - x0 = (double*) malloc(n * sizeof(double)); - if (!x0) - { - printf("Not enough memory\n"); - free(a); - return 2; - } - x = (double*) malloc(n * sizeof(double)); - if (!x) - { - printf("Not enough memory\n"); - free(a); - free(x0); - return 2; - } - if (name2) - { - io_status ret; - ret = read_matrix(x0, n, 1, name2); - do - { - switch(ret) - { - case SUCCESS: - continue; - case ERROR_OPEN: - printf("Can not open file %s\n", name2); - break; - case ERROR_READ: - printf("Can not read file %s\n", name2); - break; - } - free(a); - free(x0); - free(x); - return 3; - } while (0); - } - else - init_matrix(x0, n, 1, k2); - printf("Matrix:\n"); - print_matrix(a, n, n, p); - printf("Vector:\n"); - print_matrix(x0, n, 1, p); - t = clock(); - r1 = solve1(a, x0, x, n, m); - t = (clock() - t) / CLOCKS_PER_SEC; - r2 = count_task1(a, x, r1, n); - - printf("Vector x:\n"); - if (m % 2) - print_matrix(x, 1, n, p); - else - print_matrix(x0, 1, n, p); - printf ("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t); - free(a); - free(x0); - free(x); - return 0; - } - -double solve1(double* a, double* x0, double* x, int n, int m) - { - int k; - double lambda; - if (m <= 0) return 0; - for (k = 0; k <= m; k++) - { - if (k % 2) multmatvec(a, x, x0, n); - else multmatvec(a, x0, x, n); - } - if (m % 2) lambda = scalp(x0, x, n) / scalp(x, x, n); - else lambda = scalp(x, x0, n) / scalp(x0, x0, n); - return lambda; - } diff --git a/2025.03.28/Matvei/task02.c b/2025.03.28/Matvei/task02.c deleted file mode 100644 index 00364cd..0000000 --- a/2025.03.28/Matvei/task02.c +++ /dev/null @@ -1,163 +0,0 @@ -#include -#include -#include -#include -#include "io_status.h" -#include "array.h" -#include "matrix.h" - -void solve2(double*, double*, double*, double*, int, int, double); - -int main(int argc, char* argv[]) - { - int task = 2; - double* a; - double* x0; - double* x; - double* b; - int n, m, p, k1, k2; - char* name1 = 0; - char* name2 = 0; - double tau; - double r1, r2; - double t; - if (!((argc == 7 || argc == 8 || argc == 9) && sscanf(argv[1], "%lf", &tau) == 1 && sscanf(argv[2], "%d", &m) == 1 && sscanf(argv[3], "%d", &n) == 1 && sscanf(argv[4], "%d", &p) == 1 && sscanf(argv[5], "%d", &k1) == 1 && k1 >= 0 && k1 <= 4)) - { - printf("Usage: %s tau n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - if (k1 == 0) - { - if (!(sscanf(argv[7], "%d", &k2) == 1) && k2 >= 0 && k2 <= 4) - { - printf("Usage: %s tau n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - name1 = argv[6]; - } - else - { - if (!(sscanf(argv[6], "%d", &k2) == 1) && k2 >= 0 && k2 <= 4) - { - printf("Usage: %s tau n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - } - if (k2 == 0) - { - if (k1 == 0) name2 = argv[8]; - else name2 = argv[7]; - } - a = (double*) malloc(n * n * sizeof(double)); - if (!a) - { - printf("Not enough memory\n"); - return 2; - } - if (name1) - { - io_status ret; - ret = read_matrix(a, n, n, name1); - do - { - switch(ret) - { - case SUCCESS: - continue; - case ERROR_OPEN: - printf("Can not open file %s\n", name1); - break; - case ERROR_READ: - printf("Can not read file %s\n", name1); - break; - } - free(a); - return 3; - } while (0); - } - else - init_matrix(a, n, n, k1); - x0 = (double*) malloc(n * sizeof(double)); - if (!x0) - { - printf("Not enough memory\n"); - free(a); - return 2; - } - x = (double*) malloc(n * sizeof(double)); - if (!x) - { - printf("Not enough memory\n"); - free(a); - free(x0); - return 2; - } - b = (double*) malloc(n * sizeof(double)); - if (!b) - { - printf("Not enough memory\n"); - free(a); - free(x0); - free(x); - return 2; - } - if (name2) - { - io_status ret; - ret = read_matrix(x0, n, 1, name2); - do - { - switch(ret) - { - case SUCCESS: - continue; - case ERROR_OPEN: - printf("Can not open file %s\n", name2); - break; - case ERROR_READ: - printf("Can not read file %s\n", name2); - break; - } - free(a); - free(x0); - free(x); - free(b); - return 3; - } while (0); - } - else - init_matrix(x0, n, 1, k2); - init_vector(b, a, n); - printf("Matrix:\n"); - print_matrix(a, n, n, p); - printf("Vector:\n"); - print_matrix(x0, 1, n, p); - printf("Vector b:\n"); - print_matrix(b, 1, n, p); - t = clock(); - solve2(a, x0, x, b, n, m, tau); - t = (clock() - t) / CLOCKS_PER_SEC; - r1 = count_r1(a, b, x, n); - r2 = count_r2(x, n); - printf("New vector:\n"); - print_matrix(x, n, 1, p); - printf ("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t); - free(a); - free(x0); - free(x); - free(b); - return 0; - } - -void solve2(double* a, double* x0, double* x, double* b, int n, int m, double tau) - { - int k; - veccpy(x, x0, n); - for (k = 1; k <= m; k++) - { - multmatvec(a, x, x0, n); - vecdiff(x0, b, n); - vecmult(x0, tau, n); - vecdiff(x, x0, n); - } - } diff --git a/2025.03.28/Matvei/task03.c b/2025.03.28/Matvei/task03.c deleted file mode 100644 index 75dd7ef..0000000 --- a/2025.03.28/Matvei/task03.c +++ /dev/null @@ -1,180 +0,0 @@ -#include -#include -#include -#include -#include "io_status.h" -#include "array.h" -#include "matrix.h" - -void solve3(double*, double*, double*, double*, double*, int, int); - -int main(int argc, char* argv[]) - { - int task = 3; - double* a; - double* x0; - double* x; - double* b; - double* r; - int n, m, p, k1, k2; - char* name1 = 0; - char* name2 = 0; - double r1, r2; - double t; - if (!((argc == 6 || argc == 7 || argc == 8) && sscanf(argv[1], "%d", &m) == 1 && sscanf(argv[2], "%d", &n) == 1 && sscanf(argv[3], "%d", &p) == 1 && sscanf(argv[4], "%d", &k1) == 1 && k1 >= 0 && k1 <= 4)) - { - printf("Usage: %s n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - if (k1 == 0) - { - if (!(sscanf(argv[6], "%d", &k2) == 1) && k2 >= 0 && k2 <= 4) - { - printf("Usage: %s n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - name1 = argv[5]; - } - else - { - if (!(sscanf(argv[5], "%d", &k2) == 1) && k2 >= 0 && k2 <= 4) - { - printf("Usage: %s n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - } - if (k2 == 0) - { - if (k1 == 0) name2 = argv[7]; - else name2 = argv[6]; - } - a = (double*) malloc(n * n * sizeof(double)); - if (!a) - { - printf("Not enough memory\n"); - return 2; - } - if (name1) - { - io_status ret; - ret = read_matrix(a, n, n, name1); - do - { - switch(ret) - { - case SUCCESS: - continue; - case ERROR_OPEN: - printf("Can not open file %s\n", name1); - break; - case ERROR_READ: - printf("Can not read file %s\n", name1); - break; - } - free(a); - return 3; - } while (0); - } - else - init_matrix(a, n, n, k1); - x0 = (double*) malloc(n * sizeof(double)); - if (!x0) - { - printf("Not enough memory\n"); - free(a); - return 2; - } - x = (double*) malloc(n * sizeof(double)); - if (!x) - { - printf("Not enough memory\n"); - free(a); - free(x0); - return 2; - } - b = (double*) malloc(n * sizeof(double)); - if (!b) - { - printf("Not enough memory\n"); - free(a); - free(x0); - free(x); - return 2; - } - r = (double*) malloc(n * sizeof(double)); - if (!r) - { - printf("Not enough memory\n"); - free(a); - free(x0); - free(x); - free(b); - return 2; - } - if (name2) - { - io_status ret; - ret = read_matrix(x0, n, 1, name2); - do - { - switch(ret) - { - case SUCCESS: - continue; - case ERROR_OPEN: - printf("Can not open file %s\n", name2); - break; - case ERROR_READ: - printf("Can not read file %s\n", name2); - break; - } - free(a); - free(x0); - free(x); - free(b); - free(r); - return 3; - } while (0); - } - else - init_matrix(x0, n, 1, k2); - init_vector(b, a, n); - printf("Matrix:\n"); - print_matrix(a, n, n, p); - printf("Vector:\n"); - print_matrix(x0, n, 1, p); - printf("Vector b:\n"); - print_matrix(b, n, 1, p); - t = clock(); - solve3(a, x0, x, b, r, n, m); - t = (clock() - t) / CLOCKS_PER_SEC; - r1 = count_r1(a, b, x, n); - r2 = count_r2(x, n); - printf("New vector:\n"); - print_matrix(x, n, 1, p); - printf("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t); - free(a); - free(x0); - free(x); - free(b); - free(r); - return 0; - } - -void solve3(double* a, double* x0, double* x, double* b, double* r, int n, int m) - { - int k; - double tau, scalp2; - veccpy(x, x0, n); - multmatvec(a, x, r, n); - vecdiff(r, b, n); - for (k = 1; k <= m; k++) - { - multmatvec(a, r, x0, n); - scalp2 = scalp(x0, r, n); - if (!equal(scalp2, 0)) tau = scalp(r, r, n) / scalp2; - else break; - veccomb(1, x, -tau, r, n); - veccomb(1, r, -tau, x0, n); - } - } diff --git a/2025.03.28/Matvei/task04.c b/2025.03.28/Matvei/task04.c deleted file mode 100644 index 7344dde..0000000 --- a/2025.03.28/Matvei/task04.c +++ /dev/null @@ -1,180 +0,0 @@ -#include -#include -#include -#include -#include "io_status.h" -#include "array.h" -#include "matrix.h" - -void solve4(double*, double*, double*, double*, double*, int, int); - -int main(int argc, char* argv[]) - { - int task = 4; - double* a; - double* x0; - double* x; - double* b; - double* r; - int n, m, p, k1, k2; - char* name1 = 0; - char* name2 = 0; - double r1, r2; - double t; - if (!((argc == 6 || argc == 7 || argc == 8) && sscanf(argv[1], "%d", &m) == 1 && sscanf(argv[2], "%d", &n) == 1 && sscanf(argv[3], "%d", &p) == 1 && sscanf(argv[4], "%d", &k1) == 1 && k1 >= 0 && k1 <= 4)) - { - printf("Usage: %s n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - if (k1 == 0) - { - if (!(sscanf(argv[6], "%d", &k2) == 1) && k2 >= 0 && k2 <= 4) - { - printf("Usage: %s n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - name1 = argv[5]; - } - else - { - if (!(sscanf(argv[5], "%d", &k2) == 1) && k2 >= 0 && k2 <= 4) - { - printf("Usage: %s n m p k1 [file1] k2 [file2]\n", argv[0]); - return 1; - } - } - if (k2 == 0) - { - if (k1 == 0) name2 = argv[7]; - else name2 = argv[6]; - } - a = (double*) malloc(n * n * sizeof(double)); - if (!a) - { - printf("Not enough memory\n"); - return 2; - } - if (name1) - { - io_status ret; - ret = read_matrix(a, n, n, name1); - do - { - switch(ret) - { - case SUCCESS: - continue; - case ERROR_OPEN: - printf("Can not open file %s\n", name1); - break; - case ERROR_READ: - printf("Can not read file %s\n", name1); - break; - } - free(a); - return 3; - } while (0); - } - else - init_matrix(a, n, n, k1); - x0 = (double*) malloc(n * sizeof(double)); - if (!x0) - { - printf("Not enough memory\n"); - free(a); - return 2; - } - x = (double*) malloc(n * sizeof(double)); - if (!x) - { - printf("Not enough memory\n"); - free(a); - free(x0); - return 2; - } - b = (double*) malloc(n * sizeof(double)); - if (!b) - { - printf("Not enough memory\n"); - free(a); - free(x0); - free(x); - return 2; - } - r = (double*) malloc(n * sizeof(double)); - if (!r) - { - printf("Not enough memory\n"); - free(a); - free(x0); - free(x); - free(b); - return 2; - } - if (name2) - { - io_status ret; - ret = read_matrix(x0, n, 1, name2); - do - { - switch(ret) - { - case SUCCESS: - continue; - case ERROR_OPEN: - printf("Can not open file %s\n", name2); - break; - case ERROR_READ: - printf("Can not read file %s\n", name2); - break; - } - free(a); - free(x0); - free(x); - free(b); - free(r); - return 3; - } while (0); - } - else - init_matrix(x0, n, 1, k2); - init_vector(b, a, n); - printf("Matrix:\n"); - print_matrix(a, n, n, p); - printf("Vector:\n"); - print_matrix(x0, n, 1, p); - printf("Vector b:\n"); - print_matrix(b, n, 1, p); - t = clock(); - solve4(a, x0, x, b, r, n, m); - t = (clock() - t) / CLOCKS_PER_SEC; - r1 = count_r1(a, b, x, n); - r2 = count_r2(x, n); - printf("New vector:\n"); - print_matrix(x, n, 1, p); - printf("%s : Task = %d Res1 = %e Res2 = %e Elapsed = %.2f\n", argv[0], task, r1, r2, t); - free(a); - free(x0); - free(x); - free(b); - free(r); - return 0; - } - -void solve4(double* a, double* x0, double* x, double* b, double* r, int n, int m) - { - int k; - double tau, scalp2; - veccpy(x, x0, n); - multmatvec(a, x, r, n); - vecdiff(r, b, n); - for (k = 1; k <= m; k++) - { - multmatvec(a, r, x0, n); - scalp2 = scalp(x0, r, n); - if (!equal(scalp2, 0)) tau = scalp(r, r, n) / scalp2; - else break; - veccomb(1, x, -tau, r, n); - veccomb(1, r, -tau, x0, n); - } - }