This commit is contained in:
2026-02-25 22:14:00 +03:00
parent a588d8f8d0
commit d31d7827a6
2 changed files with 19 additions and 17 deletions

View File

@@ -5,19 +5,21 @@
#include "shared.h" #include "shared.h"
typedef double (IterFn)(double, uint32_t);
typedef struct typedef struct
{ {
double x; double x;
uint32_t i;
uint32_t n;
IterFn* iter_fn;
} Context; } Context;
typedef double (LoopFn)(Context* ctx);
typedef double (IterFn)(double, uint32_t);
typedef double (LoopFn)(Context* ctx, uint32_t, uint32_t max, IterFn* iter_fn);
double iter_fn(double x, uint32_t i); double iter_fn(double x, uint32_t i);
double for_fn(Context* ctx, uint32_t min, uint32_t max, IterFn* iter_fn); double for_fn(Context* ctx);
double while_fn(Context* ctx, uint32_t min, uint32_t max, IterFn* fiter_fn); double while_fn(Context* ctx);
double do_while_fn(Context* ctx, uint32_t min, uint32_t max, IterFn* iter_fn); double do_while_fn(Context* ctx);
void lab_3(); void lab_3();

View File

@@ -8,11 +8,11 @@ double iter_fn(double x, uint32_t i)
return tan(fabs(x)) * sqrt(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; 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); 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; 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; double r = 0.0;
uint32_t i = min; uint32_t i = ctx->i;
while (i <= max) while (i <= ctx->n)
{ {
r += iter_fn(ctx->x, i); r += iter_fn(ctx->x, i);
++i; ++i;
@@ -34,31 +34,31 @@ double while_fn(Context* ctx, uint32_t min, uint32_t max, IterFn *iter_fn)
return r; 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; double r = 0.0;
uint32_t i = min; uint32_t i = ctx->i;
do do
{ {
r += iter_fn(ctx->x, i); r += iter_fn(ctx->x, i);
++i; ++i;
} }
while (i <= max); while (i <= ctx->i);
return r; return r;
} }
void lab_3() void lab_3()
{ {
Context ctx = { .x = 0 }; Context ctx = { .i = 1, .x = 0 };
uint32_t n = 0; uint32_t n = 0;
printf("Enter [x]: "); printf("Enter [x]: ");
READ_EXACT("%lf", ctx.x); READ_EXACT("%lf", ctx.x);
printf("Enter [N]: "); printf("Enter [N]: ");
READ_EXACT("%u", n); READ_EXACT("%u", ctx.n);
LoopFn* loop_fn; LoopFn* loop_fn;
@@ -94,6 +94,6 @@ void lab_3()
continue; 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));
} }
} }