|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.03.2012, 18:58 | #1 |
Пользователь
Регистрация: 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. |
01.03.2012, 19:25 | #2 |
Форумчанин
Регистрация: 11.07.2010
Сообщений: 914
|
scanf( "%lf",...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
поиск максимума и минимума на 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 |