Найти ближайшее к какому-нибудь целому - C (СИ)
Формулировка задачи:
Даны натуральное число n и вещественное число x. Среди чисел (exp^(cos(x^(2*k))))*sin(x^(3*k)) (k = 1, 2, ..., n) найти ближайшее к какому-нибудь целому.
Решение задачи: «Найти ближайшее к какому-нибудь целому»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#define M_E 2.71828182845904523536
double res(int m, double y)
{ return pow(M_E,cos(pow(y,2*m)))*sin(pow(y,3*m));
}
int main()
{ int k,n,left,kmin;
double x, cur, dmin, min = 1.;
printf("x = ");
scanf("%lf",&x);
printf("n = ");
scanf("%d",&n);
printf(" n res left right dleft dright\n");
printf("<br>\n");
for(k=1;k<n+1;k++)
{ cur = res(k,x);
if(cur<0)
left = (int)cur -1;
else
left = (int)cur;
cur-left<left+1-cur ? dmin=cur-left : dmin=left+1-cur;
if(dmin<min)
{ min = dmin;
kmin = k;
}
printf("%3d %10.3f %7d %7d %10.3f %10.3f\n", k, cur, left, left+1, cur-left, left+1-cur);
}
printf("Minimum distance min = %1.3f for k = %d", min, kmin);
flushall();
getchar();
return 0;
}
Объяснение кода листинга программы
- В функции
resиспользуются математические функцииcosиsin, а также функцияpowдля возведения в степень. Результат вычисления функцииresвыводится на экран. - В функции
mainпрограмма запрашивает у пользователя значения переменныхxиnс помощью функцииscanf. - Затем программа выводит таблицу с расстояниями до корней функции
resдля различных значенийn. - В цикле
forпрограмма вычисляет значения функцииresдля каждого значенияnи сохраняет минимальное расстояние до корня в переменнойmin. - Программа выводит на экран минимальное расстояние и соответствующее значение
n. - В конце программы вызывается функция
flushallдля очистки буфера вывода и функцияgetcharдля получения символа конца файла. - Функция
mainвозвращает 0, что означает успешное завершение программы.