Add dist
This commit is contained in:
parent
7393b9b49a
commit
896c925c11
19 changed files with 1102 additions and 0 deletions
18
2025.05.09/dist/Krivoruchenko_SK/Makefile
vendored
Normal file
18
2025.05.09/dist/Krivoruchenko_SK/Makefile
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
FLAGS = -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 -O3
|
||||
|
||||
OBJ_COMMON = solve.o
|
||||
|
||||
NUMS = 1 2 3 4 5 6 7
|
||||
|
||||
OUTS = $(foreach n,$(NUMS),$(shell printf "a%02d.out\n" "$(n)"))
|
||||
|
||||
all: $(OUTS)
|
||||
|
||||
%.o: %.c
|
||||
gcc -c $(FLAGS) $<
|
||||
|
||||
a%.out: a%.o $(OBJ_COMMON)
|
||||
gcc $(FLAGS) $^ -o $@ -lm
|
||||
|
||||
clean:
|
||||
rm -f *.o *.out
|
45
2025.05.09/dist/Krivoruchenko_SK/a01.c
vendored
Normal file
45
2025.05.09/dist/Krivoruchenko_SK/a01.c
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
#include "init_f.h"
|
||||
#include "solve.h"
|
||||
|
||||
/* ./a01.out x h k */
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
double t, x, h, d;
|
||||
int k, cls, task = 1;
|
||||
|
||||
double (*f_lst[]) (double) = {f0, f1, f2, f3, f4, f5, f6};
|
||||
int len_f = sizeof(f_lst) / sizeof(f_lst[0]);
|
||||
|
||||
if (
|
||||
!((argc == 4) &&
|
||||
sscanf(argv[1], "%lf", &x) == 1 &&
|
||||
((sscanf(argv[2], "%lf", &h) == 1) && (h > 0)) &&
|
||||
((sscanf(argv[3], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
|
||||
) {
|
||||
fprintf(stderr, "Usage: %s x h k\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
t = clock();
|
||||
d = t1_solve(f_lst[k], x, h);
|
||||
t = (clock() - t) / CLOCKS_PER_SEC;
|
||||
|
||||
cls = get_call_count();
|
||||
|
||||
if (fabs(d - DBL_MAX) < DBL_EPSILON)
|
||||
{
|
||||
fprintf (stdout, "%s : Task = %d Method is not applicable Count = %d T = %.2f\n", argv[0], task, cls, t);
|
||||
return -2;
|
||||
} else
|
||||
{
|
||||
fprintf (stdout, "%s : Task = %d Res = %e Count = %d T = %.2f\n", argv[0], task, d, cls, t);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
45
2025.05.09/dist/Krivoruchenko_SK/a02.c
vendored
Normal file
45
2025.05.09/dist/Krivoruchenko_SK/a02.c
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
#include "init_f.h"
|
||||
#include "solve.h"
|
||||
|
||||
/* ./a02.out x h k */
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
double t, x, h, d;
|
||||
int k, cl, task = 2;
|
||||
|
||||
double (*f_lst[]) (double) = {f0, f1, f2, f3, f4, f5, f6};
|
||||
int len_f = sizeof(f_lst) / sizeof(f_lst[0]);
|
||||
|
||||
if (
|
||||
!((argc == 4) &&
|
||||
sscanf(argv[1], "%lf", &x) == 1 &&
|
||||
((sscanf(argv[2], "%lf", &h) == 1) && (h > 0)) &&
|
||||
((sscanf(argv[3], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
|
||||
) {
|
||||
fprintf(stderr, "Usage: %s x h k\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
t = clock();
|
||||
d = t2_solve(f_lst[k], x, h);
|
||||
t = (clock() - t) / CLOCKS_PER_SEC;
|
||||
|
||||
cl = get_call_count();
|
||||
|
||||
if (fabs(d - DBL_MAX) < DBL_EPSILON)
|
||||
{
|
||||
fprintf (stdout, "%s : Task = %d Method is not applicable Count = %d T = %.2f\n", argv[0], task, cl, t);
|
||||
return -2;
|
||||
} else
|
||||
{
|
||||
fprintf (stdout, "%s : Task = %d Res = %e Count = %d T = %.2f\n", argv[0], task, d, cl, t);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
45
2025.05.09/dist/Krivoruchenko_SK/a03.c
vendored
Normal file
45
2025.05.09/dist/Krivoruchenko_SK/a03.c
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
#include "init_f.h"
|
||||
#include "solve.h"
|
||||
|
||||
/* ./a03.out x h k */
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
double t, x, h, d;
|
||||
int k, cl, task = 3;
|
||||
|
||||
double (*f_lst[]) (double) = {f0, f1, f2, f3, f4, f5, f6};
|
||||
int len_f = sizeof(f_lst) / sizeof(f_lst[0]);
|
||||
|
||||
if (
|
||||
!((argc == 4) &&
|
||||
sscanf(argv[1], "%lf", &x) == 1 &&
|
||||
((sscanf(argv[2], "%lf", &h) == 1) && (h > 0)) &&
|
||||
((sscanf(argv[3], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
|
||||
) {
|
||||
fprintf(stderr, "Usage: %s x h k\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
t = clock();
|
||||
d = t3_solve(f_lst[k], x, h);
|
||||
t = (clock() - t) / CLOCKS_PER_SEC;
|
||||
|
||||
cl = get_call_count();
|
||||
|
||||
if (fabs(d - DBL_MAX) < DBL_EPSILON)
|
||||
{
|
||||
fprintf (stdout, "%s : Task = %d Method is not applicable Count = %d T = %.2f\n", argv[0], task, cl, t);
|
||||
return -2;
|
||||
} else
|
||||
{
|
||||
fprintf (stdout, "%s : Task = %d Res = %e Count = %d T = %.2f\n", argv[0], task, d, cl, t);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
44
2025.05.09/dist/Krivoruchenko_SK/a04.c
vendored
Normal file
44
2025.05.09/dist/Krivoruchenko_SK/a04.c
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
#include "init_f.h"
|
||||
#include "solve.h"
|
||||
|
||||
/* ./a04.out a b n k */
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
double t, integral, a, b;
|
||||
int k, n, calls, task = 4;
|
||||
|
||||
double (*f_lst[]) (double) = {f0, f1, f2, f3, f4, f5, f6};
|
||||
int len_f = sizeof(f_lst) / sizeof(f_lst[0]);
|
||||
|
||||
if (
|
||||
!((argc == 5) &&
|
||||
sscanf(argv[1], "%lf", &a) == 1 &&
|
||||
sscanf(argv[2], "%lf", &b) == 1 &&
|
||||
((sscanf(argv[3], "%d", &n) == 1) && (n > 0)) &&
|
||||
((sscanf(argv[4], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
|
||||
) {
|
||||
fprintf(stderr, "Usage: %s a b n k\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
t = clock();
|
||||
integral = t4_solve(f_lst[k], a, b, n);
|
||||
t = (clock() - t) / CLOCKS_PER_SEC;
|
||||
|
||||
calls = get_call_count();
|
||||
|
||||
if (fabs(integral - DBL_MAX) < DBL_EPSILON) {
|
||||
fprintf (stdout, "%s : Task = %d Method is not applicable Count = %d T = %.2f\n", argv[0], task, calls, t);
|
||||
return -2;
|
||||
} else {
|
||||
fprintf (stdout, "%s : Task = %d Res = %e Count = %d T = %.2f\n", argv[0], task, integral, calls, t);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
44
2025.05.09/dist/Krivoruchenko_SK/a05.c
vendored
Normal file
44
2025.05.09/dist/Krivoruchenko_SK/a05.c
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
#include "init_f.h"
|
||||
#include "solve.h"
|
||||
|
||||
/* ./a05.out a b n k */
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
double t, integral, a, b;
|
||||
int k, n, calls, task = 5;
|
||||
|
||||
double (*f_lst[]) (double) = {f0, f1, f2, f3, f4, f5, f6};
|
||||
int len_f = sizeof(f_lst) / sizeof(f_lst[0]);
|
||||
|
||||
if (
|
||||
!((argc == 5) &&
|
||||
sscanf(argv[1], "%lf", &a) == 1 &&
|
||||
sscanf(argv[2], "%lf", &b) == 1 &&
|
||||
((sscanf(argv[3], "%d", &n) == 1) && (n > 0)) &&
|
||||
((sscanf(argv[4], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
|
||||
) {
|
||||
fprintf(stderr, "Usage: %s a b n k\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
t = clock();
|
||||
integral = t5_solve(f_lst[k], a, b, n);
|
||||
t = (clock() - t) / CLOCKS_PER_SEC;
|
||||
|
||||
calls = get_call_count();
|
||||
|
||||
if (fabs(integral - DBL_MAX) < DBL_EPSILON) {
|
||||
fprintf (stdout, "%s : Task = %d Method is not applicable Count = %d T = %.2f\n", argv[0], task, calls, t);
|
||||
return -2;
|
||||
} else {
|
||||
fprintf (stdout, "%s : Task = %d Res = %e Count = %d T = %.2f\n", argv[0], task, integral, calls, t);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
44
2025.05.09/dist/Krivoruchenko_SK/a06.c
vendored
Normal file
44
2025.05.09/dist/Krivoruchenko_SK/a06.c
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
#include "init_f.h"
|
||||
#include "solve.h"
|
||||
|
||||
/* ./a06.out a b n k */
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
double t, integral, a, b;
|
||||
int k, n, calls, task = 6;
|
||||
|
||||
double (*f_lst[]) (double) = {f0, f1, f2, f3, f4, f5, f6};
|
||||
int len_f = sizeof(f_lst) / sizeof(f_lst[0]);
|
||||
|
||||
if (
|
||||
!((argc == 5) &&
|
||||
sscanf(argv[1], "%lf", &a) == 1 &&
|
||||
sscanf(argv[2], "%lf", &b) == 1 &&
|
||||
((sscanf(argv[3], "%d", &n) == 1) && (n > 0)) &&
|
||||
((sscanf(argv[4], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
|
||||
) {
|
||||
fprintf(stderr, "Usage: %s a b n k\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
t = clock();
|
||||
integral = t6_solve(f_lst[k], a, b, n);
|
||||
t = (clock() - t) / CLOCKS_PER_SEC;
|
||||
|
||||
calls = get_call_count();
|
||||
|
||||
if (fabs(integral - DBL_MAX) < DBL_EPSILON) {
|
||||
fprintf (stdout, "%s : Task = %d Method is not applicable Count = %d T = %.2f\n", argv[0], task, calls, t);
|
||||
return -2;
|
||||
} else {
|
||||
fprintf (stdout, "%s : Task = %d Res = %e Count = %d T = %.2f\n", argv[0], task, integral, calls, t);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
44
2025.05.09/dist/Krivoruchenko_SK/a07.c
vendored
Normal file
44
2025.05.09/dist/Krivoruchenko_SK/a07.c
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
#include "init_f.h"
|
||||
#include "solve.h"
|
||||
|
||||
/* ./a07.out a b n k */
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
double t, integral, a, b;
|
||||
int k, n, calls, task = 7;
|
||||
|
||||
double (*f_lst[]) (double) = {f0, f1, f2, f3, f4, f5, f6};
|
||||
int len_f = sizeof(f_lst) / sizeof(f_lst[0]);
|
||||
|
||||
if (
|
||||
!((argc == 5) &&
|
||||
sscanf(argv[1], "%lf", &a) == 1 &&
|
||||
sscanf(argv[2], "%lf", &b) == 1 &&
|
||||
((sscanf(argv[3], "%d", &n) == 1) && (n > 0)) &&
|
||||
((sscanf(argv[4], "%d", &k) == 1) && ((0 <= k) && (k < len_f))))
|
||||
) {
|
||||
fprintf(stderr, "Usage: %s a b n k\n", argv[0]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
t = clock();
|
||||
integral = t7_solve(f_lst[k], a, b, n);
|
||||
t = (clock() - t) / CLOCKS_PER_SEC;
|
||||
|
||||
calls = get_call_count();
|
||||
|
||||
if (fabs(integral - DBL_MAX) < DBL_EPSILON) {
|
||||
fprintf (stdout, "%s : Task = %d Method is not applicable Count = %d T = %.2f\n", argv[0], task, calls, t);
|
||||
return -2;
|
||||
} else {
|
||||
fprintf (stdout, "%s : Task = %d Res = %e Count = %d T = %.2f\n", argv[0], task, integral, calls, t);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
50
2025.05.09/dist/Krivoruchenko_SK/comp.h
vendored
Normal file
50
2025.05.09/dist/Krivoruchenko_SK/comp.h
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
#ifndef COMP_H
|
||||
#define COMP_H
|
||||
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
|
||||
static inline double * fpmax (double *pa, double *pb, double fa, double fb, double *max_f_p)
|
||||
{
|
||||
if ((fa - fb) > DBL_EPSILON)
|
||||
{
|
||||
*max_f_p = fa;
|
||||
return pa;
|
||||
} else
|
||||
{
|
||||
*max_f_p = fb;
|
||||
return pb;
|
||||
}
|
||||
}
|
||||
|
||||
static inline double * fp_abs_max (double *pa, double *pb, double *fa, double *fb, double **max_f_p)
|
||||
{
|
||||
if ((fabs(*fa) - fabs(*fb)) > DBL_EPSILON)
|
||||
{
|
||||
*max_f_p = fa;
|
||||
return pa;
|
||||
} else
|
||||
{
|
||||
*max_f_p = fb;
|
||||
return pb;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int is_equal (const double a, const double b)
|
||||
{
|
||||
double diff = a - b;
|
||||
double max_val = (a > b) ? a : b;
|
||||
return ((diff < 0) ? -diff : diff) < (DBL_EPSILON * max_val);
|
||||
}
|
||||
|
||||
static inline int is_null (const double a)
|
||||
{
|
||||
return ((a < 0) ? -a : a) < DBL_EPSILON;
|
||||
}
|
||||
|
||||
static inline int is_eps (const double a, const double eps)
|
||||
{
|
||||
return ((a < 0) ? -a : a) < eps;
|
||||
}
|
||||
|
||||
#endif
|
75
2025.05.09/dist/Krivoruchenko_SK/init_f.h
vendored
Normal file
75
2025.05.09/dist/Krivoruchenko_SK/init_f.h
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
#ifndef INIT_F_H
|
||||
#define INIT_F_H
|
||||
|
||||
#include <math.h>
|
||||
|
||||
static inline double weight (double x)
|
||||
{
|
||||
return 1. / sqrt(fabs(x));
|
||||
}
|
||||
|
||||
// ------------------------------------
|
||||
|
||||
static int cl = 0;
|
||||
|
||||
static inline int get_call_count (void)
|
||||
{
|
||||
return cl;
|
||||
}
|
||||
|
||||
static inline double f0 (double x)
|
||||
{
|
||||
cl++;
|
||||
(void)x;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline double f1 (double x)
|
||||
{
|
||||
cl++;
|
||||
return x + 1;
|
||||
}
|
||||
|
||||
static inline double f2 (double x)
|
||||
{
|
||||
double x_2 = x * x;
|
||||
cl++;
|
||||
return x_2 + x + 1;
|
||||
}
|
||||
|
||||
static inline double f3 (double x)
|
||||
{
|
||||
double x_2 = x * x;
|
||||
double x_3 = x_2 * x;
|
||||
cl++;
|
||||
|
||||
return x_3 + x_2 + x + 1;
|
||||
}
|
||||
|
||||
static inline double f4 (double x)
|
||||
{
|
||||
double x_2 = x * x;
|
||||
double x_3 = x_2 * x;
|
||||
double x_4 = x_3 * x;
|
||||
cl++;
|
||||
|
||||
return x_4 + x_3 + x_2 + x + 1;
|
||||
}
|
||||
|
||||
static inline double f5 (double x)
|
||||
{
|
||||
cl++;
|
||||
return exp(-x);
|
||||
}
|
||||
|
||||
static inline double f6 (double x)
|
||||
{
|
||||
double x_2 = x * x;
|
||||
cl++;
|
||||
return 1 / (25 * x_2 + 1);
|
||||
}
|
||||
|
||||
// ------------------------------------
|
||||
|
||||
#endif
|
148
2025.05.09/dist/Krivoruchenko_SK/solve.c
vendored
Normal file
148
2025.05.09/dist/Krivoruchenko_SK/solve.c
vendored
Normal file
|
@ -0,0 +1,148 @@
|
|||
#include "solve.h"
|
||||
#include "comp.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
double t1_solve (
|
||||
double (*f) (double),
|
||||
double x, double h
|
||||
) {
|
||||
if (h < NUM_FPE)
|
||||
return DBL_MAX;
|
||||
return (f(x + h) - f(x)) / h;
|
||||
}
|
||||
|
||||
// -------
|
||||
|
||||
double t2_solve (
|
||||
double (*f) (double),
|
||||
double x, double h
|
||||
) {
|
||||
if (h < NUM_FPE)
|
||||
return DBL_MAX;
|
||||
return (f(x + h) - f(x - h)) / (2 * h);
|
||||
}
|
||||
|
||||
// -------
|
||||
|
||||
double t3_solve (
|
||||
double (*f) (double),
|
||||
double x, double h
|
||||
) {
|
||||
double h_2 = h * h;
|
||||
if (h_2 < NUM_FPE)
|
||||
return DBL_MAX;
|
||||
return (f(x + h) - 2 * f(x) + f(x - h)) / h_2;
|
||||
}
|
||||
|
||||
// -------
|
||||
|
||||
double t4_solve (
|
||||
double (*f) (double),
|
||||
double a, double b,
|
||||
int n
|
||||
) {
|
||||
const double h = (b - a) / n;
|
||||
double x = a;
|
||||
double sum = (f(a) + f(b)) * 0.5;
|
||||
|
||||
if (h < NUM_FPE)
|
||||
return DBL_MAX;
|
||||
|
||||
for (int i = 1; i < (n - 1); ++i)
|
||||
{
|
||||
x += h;
|
||||
sum += f(x);
|
||||
}
|
||||
|
||||
return h * sum;
|
||||
}
|
||||
|
||||
// -------
|
||||
|
||||
double t5_solve (
|
||||
double (*f) (double),
|
||||
double a, double b,
|
||||
int n
|
||||
) {
|
||||
const double h = (b - a) / (2 * n);
|
||||
double x = a;
|
||||
double sum = (f(a) + f(b)) * 0.5;
|
||||
|
||||
if (h < NUM_FPE)
|
||||
return DBL_MAX;
|
||||
|
||||
for (int i = 1; i < (2 * n - 1); ++i)
|
||||
{
|
||||
x += h;
|
||||
sum += ((i & 1) + 1) * f(x);
|
||||
}
|
||||
|
||||
return (b - a) * sum / (3 * n);
|
||||
}
|
||||
|
||||
// -------
|
||||
|
||||
double t6_solve (
|
||||
double (*f) (double),
|
||||
double a, double b,
|
||||
int n
|
||||
) {
|
||||
const double h = (b - a) / n;
|
||||
double x = a;
|
||||
double sum;
|
||||
|
||||
if (is_null(a) || is_null(b))
|
||||
return DBL_MAX;
|
||||
|
||||
f_global = f;
|
||||
sum = (wf(a) + wf(b)) * 0.5;
|
||||
|
||||
if (h < NUM_FPE)
|
||||
return DBL_MAX;
|
||||
|
||||
for (int i = 1; i < (n - 1); ++i)
|
||||
{
|
||||
x += h;
|
||||
if (is_null(x))
|
||||
return DBL_MAX;
|
||||
sum += wf(x);
|
||||
}
|
||||
|
||||
return h * sum;
|
||||
}
|
||||
|
||||
// -------
|
||||
|
||||
double t7_solve (
|
||||
double (*f) (double),
|
||||
double a, double b,
|
||||
int n
|
||||
) {
|
||||
const double h = (b - a) / (2 * n);
|
||||
double x = a;
|
||||
double sum;
|
||||
|
||||
if (is_null(a) || is_null(b))
|
||||
return DBL_MAX;
|
||||
|
||||
f_global = f;
|
||||
sum = (wf(a) + wf(b)) * 0.5;
|
||||
|
||||
if (h < NUM_FPE)
|
||||
return DBL_MAX;
|
||||
|
||||
for (int i = 1; i < (2 * n - 1); ++i)
|
||||
{
|
||||
x += h;
|
||||
if (is_null(x))
|
||||
return DBL_MAX;
|
||||
sum += ((i & 1) + 1) * wf(x);
|
||||
}
|
||||
|
||||
return (b - a) * sum / (3 * n);
|
||||
}
|
||||
|
||||
// -------
|
||||
|
70
2025.05.09/dist/Krivoruchenko_SK/solve.h
vendored
Normal file
70
2025.05.09/dist/Krivoruchenko_SK/solve.h
vendored
Normal file
|
@ -0,0 +1,70 @@
|
|||
#ifndef SOLVE_H
|
||||
#define SOLVE_H
|
||||
|
||||
#define NUM_FPE 1e-300
|
||||
|
||||
#include "init_f.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
double t1_solve (
|
||||
double (*f) (double),
|
||||
double x, double h
|
||||
);
|
||||
|
||||
// -------
|
||||
|
||||
double t2_solve (
|
||||
double (*f) (double),
|
||||
double x, double h
|
||||
);
|
||||
|
||||
// -------
|
||||
|
||||
double t3_solve (
|
||||
double (*f) (double),
|
||||
double x, double h
|
||||
);
|
||||
|
||||
// -------
|
||||
|
||||
double t4_solve (
|
||||
double (*f) (double),
|
||||
double a, double b,
|
||||
int n
|
||||
);
|
||||
|
||||
// -------
|
||||
|
||||
double t5_solve (
|
||||
double (*f) (double),
|
||||
double a, double b,
|
||||
int n
|
||||
);
|
||||
|
||||
// -------
|
||||
|
||||
static double (*f_global)(double) = NULL;
|
||||
|
||||
static inline double wf (double x)
|
||||
{
|
||||
return f_global(x) * weight(x);
|
||||
}
|
||||
|
||||
double t6_solve (
|
||||
double (*f) (double),
|
||||
double a, double b,
|
||||
int n
|
||||
);
|
||||
|
||||
// -------
|
||||
|
||||
double t7_solve (
|
||||
double (*f) (double),
|
||||
double a, double b,
|
||||
int n
|
||||
);
|
||||
|
||||
// -------
|
||||
|
||||
#endif
|
137
2025.05.09/tests/s2.sh
Executable file
137
2025.05.09/tests/s2.sh
Executable file
|
@ -0,0 +1,137 @@
|
|||
for stud in *_??
|
||||
do
|
||||
cd $stud
|
||||
#echo > a01.txt
|
||||
#echo > a02.txt
|
||||
#echo > $studa03.txt
|
||||
for tsk in a01 a02 a03
|
||||
do
|
||||
echo > ../$stud$tsk.txt
|
||||
for x in -1 0 5 7
|
||||
do
|
||||
for ((k=0; k < 7; k = k + 1))
|
||||
do
|
||||
echo -n "$x 1e-5 $k " >> ../$stud$tsk.txt
|
||||
./$tsk.out $x 1e-5 $k >> ../$stud$tsk.txt
|
||||
echo -n "$x 1e-9 $k " >> ../$stud$tsk.txt
|
||||
./$tsk.out $x 1e-9 $k >> ../$stud$tsk.txt
|
||||
echo -n "$x 1e-12 $k " >> ../$stud$tsk.txt
|
||||
./$tsk.out $x 1e-12 $k >> ../$stud$tsk.txt
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
for tsk in a04 a05 a06 a07
|
||||
do
|
||||
echo > ../$stud$tsk.txt
|
||||
for AA in -5 -1 0 5 8
|
||||
do
|
||||
for BB in -5 -1 0 5 8
|
||||
do
|
||||
for NN in 0 3 5 7 10 100
|
||||
do
|
||||
for ((k=0; k < 7; k = k+1))
|
||||
do
|
||||
echo -n "$AA $BB $NN $k " >> ../$stud$tsk.txt
|
||||
./$tsk.out $AA $BB $NN $k >> ../$stud$tsk.txt
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
echo "$stud 1-7"
|
||||
|
||||
for tsk in a08 a09
|
||||
do
|
||||
echo "$stud $tsk"
|
||||
echo > ../$stud$tsk.txt
|
||||
for AA in -5 -1 0 5 8
|
||||
do
|
||||
for BB in -5 -1 0 5 8
|
||||
do
|
||||
echo "A = $AA B = $BB"
|
||||
for EP in 1e-2 1e-9 1e-17
|
||||
do
|
||||
for ((k=0; k < 7; k = k+1))
|
||||
do
|
||||
echo -n "$AA $BB $EP $k " >> ../$stud$tsk.txt
|
||||
./$tsk.out $AA $BB $EP $k >> ../$stud$tsk.txt
|
||||
echo $tsk: $AA $BB $EP $k
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
for tsk in a10 a11
|
||||
do
|
||||
echo "$stud $tsk"
|
||||
echo > ../$stud$tsk.txt
|
||||
for AA in -1 0 5 7
|
||||
do
|
||||
for EP in 1e-3 1e-7 1e-17
|
||||
do
|
||||
echo "$stud $tsk $AA $EP"
|
||||
for ((k=0; k < 7; k = k + 1))
|
||||
do
|
||||
echo -n "$AA $EP $k " >> ../$stud$tsk.txt
|
||||
./$tsk.out $AA $EP $k >> ../$stud$tsk.txt
|
||||
echo $tsk: $AA $EP $k
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
tsk=a12
|
||||
echo > ../$stud$tsk.txt
|
||||
for AA in -5 0 8
|
||||
do
|
||||
for BB in -5 0 8
|
||||
do
|
||||
for EP in 1e-2 1e-7
|
||||
do
|
||||
echo "$stud $tsk $EP"
|
||||
for ((kx=0;kx < 7; kx = kx+1))
|
||||
do
|
||||
for ((ky=0; ky < 7; ky = ky+1))
|
||||
do
|
||||
echo $tsk: $AA $BB $EP $kx $ky
|
||||
echo -n " $AA $BB $EP $kx $ky " >> ../$stud$tsk.txt
|
||||
./a12.out $AA $BB $EP $kx $ky >> ../$stud$tsk.txt
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
cd ..
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
for stud1 in *_??
|
||||
do
|
||||
for stud2 in *_??
|
||||
do
|
||||
echo > $stud1$stud2.txt
|
||||
for tsk in a01 a02 a03 a04 a05 a06 a07 a08 a09 a10 a11 a12
|
||||
do
|
||||
echo "###################################################" >> $stud1$stud2.txt
|
||||
echo "DIFF TSK = $tsk" >> $stud1$stud2.txt
|
||||
diff $stud1$tsk.txt $stud2$tsk.txt >> $stud1$stud2.txt
|
||||
echo "###################################################" >> $stud1$stud2.txt
|
||||
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
159
2025.05.09/tests/test.sh
Executable file
159
2025.05.09/tests/test.sh
Executable file
|
@ -0,0 +1,159 @@
|
|||
#!/bin/bash
|
||||
|
||||
chmod +x *.out
|
||||
|
||||
# Очищаем файл результатов
|
||||
> res.txt
|
||||
|
||||
# Функция для вывода разделителя
|
||||
print_separator() {
|
||||
echo "=================" >> res.txt
|
||||
}
|
||||
|
||||
# Функция для форматированного вывода входных данных
|
||||
format_input() {
|
||||
local task_num=$1
|
||||
local line=($2)
|
||||
|
||||
case $task_num in
|
||||
1|2|3)
|
||||
echo "x=${line[0]} h=${line[1]} k=${line[2]}" >> res.txt
|
||||
;;
|
||||
4|5|6|7)
|
||||
echo "a=${line[0]} b=${line[1]} n=${line[2]} k=${line[3]}" >> res.txt
|
||||
;;
|
||||
8|9)
|
||||
echo "a=${line[0]} b=${line[1]} e=${line[2]} k=${line[3]}" >> res.txt
|
||||
;;
|
||||
10|11)
|
||||
echo "a=${line[0]} e=${line[1]} k=${line[2]}" >> res.txt
|
||||
;;
|
||||
12)
|
||||
echo "a=${line[0]} b=${line[1]} e=${line[2]} k1=${line[3]} k2=${line[4]}" >> res.txt
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Функция для запуска теста с обработкой ошибок
|
||||
run_test() {
|
||||
local task_num=$1
|
||||
local line=$2
|
||||
local binary="./a$(printf "%02d" $task_num).out"
|
||||
|
||||
# Проверяем существование исполняемого файла
|
||||
if [ ! -f "$binary" ]; then
|
||||
echo "Исполняемый файл $binary не найден!" >> res.txt
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Запускаем программу и перехватываем ошибки
|
||||
output=$(timeout 100s $binary $line 2>&1)
|
||||
status=$?
|
||||
|
||||
case $status in
|
||||
0)
|
||||
# Успешное выполнение
|
||||
echo "$output" >> res.txt
|
||||
;;
|
||||
136)
|
||||
# Ошибка SEGFAULT (SIGSEGV)
|
||||
format_input $task_num "$line"
|
||||
echo "ОШИБКА: SEGFAULT (нарушение сегментации)" >> res.txt
|
||||
;;
|
||||
136|139)
|
||||
# Ошибка SEGFAULT (SIGSEGV)
|
||||
format_input $task_num "$line"
|
||||
echo "ОШИБКА: SEGFAULT (нарушение сегментации)" >> res.txt
|
||||
;;
|
||||
8|136|137|139)
|
||||
# FPE (SIGFPE) или другие сигналы
|
||||
format_input $task_num "$line"
|
||||
echo "ОШИБКА: FPE (ошибка вычисления с плавающей точкой)" >> res.txt
|
||||
;;
|
||||
124)
|
||||
# Таймаут
|
||||
format_input $task_num "$line"
|
||||
echo "ОШИБКА: Таймаут выполнения (программа зависла)" >> res.txt
|
||||
;;
|
||||
*)
|
||||
# Другие ошибки
|
||||
format_input $task_num "$line"
|
||||
echo "ОШИБКА: Программа завершилась с кодом $status" >> res.txt
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Запуск тестов для задач 1-3
|
||||
for i in {1..3}; do
|
||||
print_separator
|
||||
echo "=== TASK $i ===" >> res.txt
|
||||
print_separator
|
||||
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
[ -z "$line" ] && continue # Пропускаем пустые строки
|
||||
format_input $i "$line"
|
||||
run_test $i "$line"
|
||||
echo "" >> res.txt # Добавляем пустую строку между тестами
|
||||
done < tests1-3.txt
|
||||
|
||||
echo "" >> res.txt # Добавляем пустую строку между задачами
|
||||
done
|
||||
|
||||
# Запуск тестов для задач 4-7
|
||||
for i in {4..7}; do
|
||||
print_separator
|
||||
echo "=== TASK $i ===" >> res.txt
|
||||
print_separator
|
||||
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
[ -z "$line" ] && continue
|
||||
format_input $i "$line"
|
||||
run_test $i "$line"
|
||||
echo "" >> res.txt
|
||||
done < tests4-7.txt
|
||||
|
||||
echo "" >> res.txt
|
||||
done
|
||||
|
||||
# Запуск тестов для задач 8-9
|
||||
for i in {8..9}; do
|
||||
print_separator
|
||||
echo "=== TASK $i ===" >> res.txt
|
||||
print_separator
|
||||
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
[ -z "$line" ] && continue
|
||||
format_input $i "$line"
|
||||
run_test $i "$line"
|
||||
echo "" >> res.txt
|
||||
done < tests8-9.txt
|
||||
|
||||
echo "" >> res.txt
|
||||
done
|
||||
|
||||
# Запуск тестов для задач 10-11
|
||||
for i in {10..11}; do
|
||||
print_separator
|
||||
echo "=== TASK $i ===" >> res.txt
|
||||
print_separator
|
||||
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
[ -z "$line" ] && continue
|
||||
format_input $i "$line"
|
||||
run_test $i "$line"
|
||||
echo "" >> res.txt
|
||||
done < tests10-11.txt
|
||||
|
||||
echo "" >> res.txt
|
||||
done
|
||||
|
||||
# Запуск тестов для задачи 12
|
||||
print_separator
|
||||
echo "=== TASK 12 ===" >> res.txt
|
||||
print_separator
|
||||
while read -r line || [[ -n "$line" ]]; do
|
||||
[ -z "$line" ] && continue
|
||||
format_input 12 "$line"
|
||||
run_test 12 "$line"
|
||||
echo "" >> res.txt
|
||||
done < tests12.txt
|
21
2025.05.09/tests/tests1-3.txt
Normal file
21
2025.05.09/tests/tests1-3.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
0 1e-8 0
|
||||
0 1e-8 1
|
||||
0 1e-8 2
|
||||
0 1e-8 3
|
||||
0 1e-8 4
|
||||
0 1e-8 5
|
||||
0 1e-8 6
|
||||
-1 1e-8 0
|
||||
-1 1e-8 1
|
||||
-1 1e-8 2
|
||||
-1 1e-8 3
|
||||
-1 1e-8 4
|
||||
-1 1e-8 5
|
||||
-1 1e-8 6
|
||||
1000 1e-8 0
|
||||
1000 1e-8 1
|
||||
1000 1e-8 2
|
||||
1000 1e-8 3
|
||||
1000 1e-8 4
|
||||
1000 1e-8 5
|
||||
1000 1e-8 6
|
21
2025.05.09/tests/tests10-11.txt
Normal file
21
2025.05.09/tests/tests10-11.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
-1 1e-7 0
|
||||
-1 1e-7 1
|
||||
-5 1e-7 2
|
||||
0 1e-7 2
|
||||
10 1e-7 2
|
||||
-10 1e-7 2
|
||||
-6 1e-7 3
|
||||
0 1e-7 3
|
||||
-3 1e-7 4
|
||||
0 1e-7 4
|
||||
10 1e-7 4
|
||||
-10 1e-7 4
|
||||
-4 1e-7 5
|
||||
2 1e-7 5
|
||||
10 1e-7 5
|
||||
-9 1e-7 5
|
||||
-10 1e-7 6
|
||||
6 1e-7 6
|
||||
-1 1e-7 6
|
||||
-10 1e-7 6
|
||||
|
49
2025.05.09/tests/tests12.txt
Normal file
49
2025.05.09/tests/tests12.txt
Normal file
|
@ -0,0 +1,49 @@
|
|||
-1 1 1e-6 0 0
|
||||
-1 1 1e-6 0 1
|
||||
-1 1 1e-6 0 2
|
||||
-1 1 1e-6 0 3
|
||||
-1 1 1e-6 0 4
|
||||
-1 1 1e-6 0 5
|
||||
-1 1 1e-6 0 6
|
||||
-1 1 1e-6 1 0
|
||||
-1 1 1e-6 1 1
|
||||
-1 1 1e-6 1 2
|
||||
-1 1 1e-6 1 3
|
||||
-1 1 1e-6 1 4
|
||||
-1 1 1e-6 1 5
|
||||
-1 1 1e-6 1 6
|
||||
-1 1 1e-6 2 0
|
||||
-1 1 1e-6 2 1
|
||||
-1 1 1e-6 2 2
|
||||
-1 1 1e-6 2 3
|
||||
-1 1 1e-6 2 4
|
||||
-1 1 1e-6 2 5
|
||||
-1 1 1e-6 2 6
|
||||
-1 1 1e-6 3 0
|
||||
-1 1 1e-6 3 1
|
||||
-1 1 1e-6 3 2
|
||||
-1 1 1e-6 3 3
|
||||
-1 1 1e-6 3 4
|
||||
-1 1 1e-6 3 5
|
||||
-1 1 1e-6 3 6
|
||||
-1 1 1e-6 4 0
|
||||
-1 1 1e-6 4 1
|
||||
-1 1 1e-6 4 2
|
||||
-1 1 1e-6 4 3
|
||||
-1 1 1e-6 4 4
|
||||
-1 1 1e-6 4 5
|
||||
-1 1 1e-6 4 6
|
||||
-1 1 1e-6 5 0
|
||||
-1 1 1e-6 5 1
|
||||
-1 1 1e-6 5 2
|
||||
-1 1 1e-6 5 3
|
||||
-1 1 1e-6 5 4
|
||||
-1 1 1e-6 5 5
|
||||
-1 1 1e-6 5 6
|
||||
-1 1 1e-6 6 0
|
||||
-1 1 1e-6 6 1
|
||||
-1 1 1e-6 6 2
|
||||
-1 1 1e-6 6 3
|
||||
-1 1 1e-6 6 4
|
||||
-1 1 1e-6 6 5
|
||||
-1 1 1e-6 6 6
|
22
2025.05.09/tests/tests4-7.txt
Normal file
22
2025.05.09/tests/tests4-7.txt
Normal file
|
@ -0,0 +1,22 @@
|
|||
-1 1 1000 0
|
||||
1e99 1e101 1000 1
|
||||
-1 1 1000 1
|
||||
-5 0 1000 2
|
||||
0 7 1000 2
|
||||
10 100 1000 2
|
||||
-10 100 1000 2
|
||||
-6 -3 1000 3
|
||||
0 10 1000 3
|
||||
-3 0 1000 4
|
||||
0 5 1000 4
|
||||
10 100 1000 4
|
||||
-10 9 1000 4
|
||||
-4 -1 1000 5
|
||||
2 5 1000 5
|
||||
10 100 1000 5
|
||||
-9 10 1000 5
|
||||
-10 -7 1000 6
|
||||
6 9 1000 6
|
||||
-1 2 1000 6
|
||||
-10 100 1000 6
|
||||
0 100 100000 5
|
21
2025.05.09/tests/tests8-9.txt
Normal file
21
2025.05.09/tests/tests8-9.txt
Normal file
|
@ -0,0 +1,21 @@
|
|||
-1 1 1e-7 0
|
||||
-1 1 1e-7 1
|
||||
-5 0 1e-7 2
|
||||
0 7 1e-7 2
|
||||
10 100 1e-7 2
|
||||
-10 100 1e-7 2
|
||||
-6 -3 1e-7 3
|
||||
0 10 1e-7 3
|
||||
-3 0 1e-7 4
|
||||
0 5 1e-7 4
|
||||
10 100 1e-7 4
|
||||
-10 9 1e-7 4
|
||||
-4 -1 1e-7 5
|
||||
2 5 1e-7 5
|
||||
10 100 1e-7 5
|
||||
-9 10 1e-7 5
|
||||
-10 -7 1e-7 6
|
||||
6 9 1e-7 6
|
||||
-1 2 1e-7 6
|
||||
-10 100 1e-7 6
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue