Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2012, 18:58   #1
Alex-Kunfuman
Пользователь
 
Регистрация: 19.01.2012
Сообщений: 20
По умолчанию поиск интервала, содержащего точку минимума(максимума)

Здорова, ребята! Тут небольшая проблема в программке по Си. Я составил программу, которая находит границы интервала, содержащего точку минимума(максимума). В программе после компиляции, в диалоговом режиме должны вводиться начальная точка x0 и величина шага h. Нужно выбирать достаточно малую по величине точку x0 и небольшой шаг. Например, x0 = 0.5
h = 0.1.
Не могу понять, у меня после ввода этих значений, происходит бесконечный цикл, т.е. программа зациклируется до бесконечности, а результат не выводит. Подскажите пожалуйста в чем может быть проблема. Почему образуется бесконечный цикл? Заранее спасибо.

Вот код :
---------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#define sqr(q) (q)*(q)

double f(double);
double xk1(double, double, int);
int main()
{
double x0, x1, x2, f1, f2, h, t, a, b;
int k;
for( ;; )
{
printf("Ishodnie dannie :\n");
printf("Vvedite nachalnuiu tochku x0 = ");
scanf("%if", &x0);
printf("Vvedite velicinu shaga h = ");
scanf("%if", &h);
if (!((f(x0) >= f(x0 - h)) && (f(x0) >= f(x0 + h)))) break;
printf("Functia ne iavliaetsa UNIMODALNOI.\n");
printf("Recomenduetsea zadati druguiu nacialnuiu tochku x0 ");
}
if ((f(x0 - h) >= f(x0)) && (f(x0 + h) >= f(x0)))
{
printf("\n [a = %5.5if, b = 5.5if]", x0 - h, x0 + h);
return 0;
}
if ((f(x0 - h) >= f(x0)) && (f(x0) >= f(x0 + h)))
{
t = h;
a = x0;
x1 = x0 + h;
f1 = f(x1);
k = 1;
x2 = xk1(x1, h, k);
f2 = f(x2);
}
if ((f(x0 - h) <= f(x0)) && (f(x0) <= f(x0 + h)))
{
t = -h;
b = x0;
x1 = x0 - h;
f1 = f(x1);
k = 1;
x2 = xk1(x1, h, k);
f2 = f(x2);
}
while (f2 < f1)
{
if (h > 0) a = x1;
else
b = x1;
k++;
x1 = x2;
f1 = f2;
x2 = xk1(x1, h, k);
f2 = f(x2);
}
if (h > 0) b = x2;
else
a = x2;
printf("\n Resultat poiska nachalinogo \n");
printf(" intervala neopredelennosti \n");
printf("a = %5.5if", a);
printf("b = %5.5if", b);
fflush(stdin);
getchar();
return 0;
getch();
}
double f(double x)
{ float pi = 3.14;
int R = 40;
return -(1/3 * pi * (R*R - 3*x*x - 2*x*R));
}
double xk1(double xk, double t, int k)
{
return xk + pow(2, k) * t;
}

Последний раз редактировалось Alex-Kunfuman; 01.03.2012 в 19:01.
Alex-Kunfuman вне форума Ответить с цитированием
Старый 01.03.2012, 19:25   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

scanf( "%lf",...
EUGY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск максимума и минимума на sql volfmen15 БД в Delphi 4 07.02.2012 17:48
нахождение максимума и минимума ф-ции в delphi Tatusya Помощь студентам 8 24.06.2010 18:12
поиск минимума и максимума в двумерных массивах qbasic Bentli Помощь студентам 3 19.06.2010 20:00
Поиск минимума/максимума в массиве gwarthy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 28.01.2010 22:27
Нахождение минимума и максимума в трехмерном массиве 1234 Помощь студентам 11 26.05.2008 16:23