Files
LAB16/src/LAB3.c
2026-02-25 18:09:22 +03:00

100 lines
1.9 KiB
C

#include <stdio.h>
#include <math.h>
#include "../include/LAB3.h"
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 r = 0.0;
for (uint32_t i = min; i <= max; ++i)
{
r += iter_fn(ctx->x, i);
}
return r;
}
double while_fn(Context* ctx, uint32_t min, uint32_t max, IterFn *iter_fn)
{
double r = 0.0;
uint32_t i = min;
while (i <= max)
{
r += iter_fn(ctx->x, i);
++i;
}
return r;
}
double do_while_fn(Context* ctx, uint32_t min, uint32_t max, IterFn *iter_fn)
{
double r = 0.0;
uint32_t i = min;
do
{
r += iter_fn(ctx->x, i);
++i;
}
while (i <= max);
return r;
}
void lab_3()
{
Context ctx = { .x = 0 };
uint32_t n = 0;
printf("Enter [x]: ");
READ_EXACT("%lf", ctx.x);
printf("Enter [N]: ");
READ_EXACT("%u", n);
LoopFn* loop_fn;
while (1)
{
printf("Select option:\n\t(f|F|1): for\n\t(w|W|2): while\n\t(d|D|3): do-while\n\t(e|E|4): exit\nOption: ");
uint8_t opt;
READ_EXACT(" %c", opt);
switch (opt)
{
case 'f':
case 'F':
case '1':
loop_fn = for_fn;
break;
case 'w':
case 'W':
case '2':
loop_fn = while_fn;
break;
case 'd':
case 'D':
case '3':
loop_fn = do_while_fn;
break;
case 'e':
case 'E':
case '4':
return;
default:
continue;
}
printf("y(x=%lf,N=%u) = %lf\n", ctx.x, n, tan(fabs(ctx.x)) * loop_fn(&ctx, 1, n, iter_fn));
}
}