From d31d7827a63f54d62eed5575acf422a860969e43 Mon Sep 17 00:00:00 2001 From: matyushev_mo Date: Wed, 25 Feb 2026 22:14:00 +0300 Subject: [PATCH] fix ctx --- include/LAB3.h | 14 ++++++++------ src/LAB3.c | 22 +++++++++++----------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/include/LAB3.h b/include/LAB3.h index cc4ef85..1e36d80 100644 --- a/include/LAB3.h +++ b/include/LAB3.h @@ -5,19 +5,21 @@ #include "shared.h" +typedef double (IterFn)(double, uint32_t); typedef struct { double x; + uint32_t i; + uint32_t n; + IterFn* iter_fn; } Context; - -typedef double (IterFn)(double, uint32_t); -typedef double (LoopFn)(Context* ctx, uint32_t, uint32_t max, IterFn* iter_fn); +typedef double (LoopFn)(Context* ctx); double iter_fn(double x, uint32_t i); -double for_fn(Context* ctx, uint32_t min, uint32_t max, IterFn* iter_fn); -double while_fn(Context* ctx, uint32_t min, uint32_t max, IterFn* fiter_fn); -double do_while_fn(Context* ctx, uint32_t min, uint32_t max, IterFn* iter_fn); +double for_fn(Context* ctx); +double while_fn(Context* ctx); +double do_while_fn(Context* ctx); void lab_3(); diff --git a/src/LAB3.c b/src/LAB3.c index 7d05bc7..df52d7d 100644 --- a/src/LAB3.c +++ b/src/LAB3.c @@ -8,11 +8,11 @@ double iter_fn(double x, uint32_t i) return tan(fabs(x)) * sqrt(i); } -double for_fn(Context* ctx, uint32_t min, uint32_t max, IterFn *iter_fn) +double for_fn(Context* ctx) { double r = 0.0; - for (uint32_t i = min; i <= max; ++i) + for (uint32_t i = ctx->i; i <= ctx->n; ++i) { r += iter_fn(ctx->x, i); } @@ -20,12 +20,12 @@ double for_fn(Context* ctx, uint32_t min, uint32_t max, IterFn *iter_fn) return r; } -double while_fn(Context* ctx, uint32_t min, uint32_t max, IterFn *iter_fn) +double while_fn(Context* ctx) { double r = 0.0; - uint32_t i = min; - while (i <= max) + uint32_t i = ctx->i; + while (i <= ctx->n) { r += iter_fn(ctx->x, i); ++i; @@ -34,31 +34,31 @@ double while_fn(Context* ctx, uint32_t min, uint32_t max, IterFn *iter_fn) return r; } -double do_while_fn(Context* ctx, uint32_t min, uint32_t max, IterFn *iter_fn) +double do_while_fn(Context* ctx) { double r = 0.0; - uint32_t i = min; + uint32_t i = ctx->i; do { r += iter_fn(ctx->x, i); ++i; } - while (i <= max); + while (i <= ctx->i); return r; } void lab_3() { - Context ctx = { .x = 0 }; + Context ctx = { .i = 1, .x = 0 }; uint32_t n = 0; printf("Enter [x]: "); READ_EXACT("%lf", ctx.x); printf("Enter [N]: "); - READ_EXACT("%u", n); + READ_EXACT("%u", ctx.n); LoopFn* loop_fn; @@ -94,6 +94,6 @@ void lab_3() continue; } - printf("y(x=%lf,N=%u) = %lf\n", ctx.x, n, tan(fabs(ctx.x)) * loop_fn(&ctx, 1, n, iter_fn)); + printf("y(x=%lf,N=%u) = %lf\n", ctx.x, n, tan(fabs(ctx.x)) * loop_fn(&ctx)); } }