Форум программистов, компьютерный форум CyberForum.ru

Найти ошибку. - C++

Восстановить пароль Регистрация
 
CrazyHead
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 13
03.06.2011, 12:15     Найти ошибку. #1
задание:
Шаг1. Выбрать начальный шаг sh=(b-a)/4. Положить x0=a. Вычислить F(x0).
Шаг2. Положить x1=x0+sh. Вычислить F(x1).
Шаг3. Сравнить F(x0) и F(x1). Если F(x0)>F(x1), то перейти к шагу 4, иначе -- к шагу 5.
Шаг4. Положить x0=x1 и F(x0)=F(x1). Проверить условие принадлежности x0 интервалу [a,b]. Если a < x0 < b, то перейти к шагу 2, иначе -- к шагу 5.
Шаг5. Проверка на окончание поиска: если |sh| <= eps, то вычисления завершить, полагая xm=x0, Fm=F(x0), иначе -- перейти к шагу 6.
Шаг6. Изменить направление поиска: положить x0=x1, F(x0)=F(x1), sh=-sh/4. Перейти к шагу 2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
using namespace std;
 
const float epsilon=1e-10;
 
float f(float x)
{
    float y,k,j,l;
    return y=k*x*x+l*x+j;
}
 
int main()
{
        float k,j,l,a,b,f0,f1,dx,x0,x1,x2,f2;
   printf("Vvedi koefficienti k l j \n");
   scanf("%f" ,&k);
   scanf("%f" ,&l);
   scanf("%f" ,&j);
   printf("Vvedi interval a b \n");
   scanf("%f" ,&a);
   scanf("%f" ,&b);
       dx=(b-a)/4;
       x0=a;
       f0=x0;
          while (dx>=epsilon)
{
          while (a<=x0<=b)
{
   x1=x0+dx;
   f1=x1;
   if(f(f0)>f(f1))
                  x0=x1;
                  f(f0)=f(f1);
           else
}
                  x0=x1;
                  f(f0)=f(f1);
                  dx=-dx/4;
}
                  x2=x0;
                  F(f2)=F(f0);
                  printf("Tochka extremuma \n r=%6.6f" ,x2);
return 0;
}
ошибки с 37 строки
C:\My Documents\codeblocks\41321321\main.cpp|37|error: lvalue required as left operand of assignment|
C:\My Documents\codeblocks\41321321\main.cpp|38|error: 'else' without a previous 'if'|
C:\My Documents\codeblocks\41321321\main.cpp|39|error: expected primary-expression before '}' token|
C:\My Documents\codeblocks\41321321\main.cpp|39|error: expected ';' before '}' token|
C:\My Documents\codeblocks\41321321\main.cpp|41|error: lvalue required as left operand of assignment|
C:\My Documents\codeblocks\41321321\main.cpp|43|error: expected ';' before '}' token|
C:\My Documents\codeblocks\41321321\main.cpp|45|error: 'F' was not declared in this scope|
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
03.06.2011, 13:01     Найти ошибку. #2
Что ты этим хочешь сделать?
f(f0)=f(f1)
Как можно функции присвоить float?

Добавлено через 1 минуту
После if(f(f0)>f(f1)) требуется открывающаяся фигурная скобка, а перед else закрывающаяся.

Добавлено через 31 секунду
или else где то не там....
CrazyHead
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 13
03.06.2011, 14:20  [ТС]     Найти ошибку. #3
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Что ты этим хочешь сделать?
f(f0)=f(f1)
Как можно функции присвоить float?
я хотел значение функции при х0 присвоить значение x1.

Добавлено через 1 минуту
После if(f(f0)>f(f1)) требуется открывающаяся фигурная скобка, а перед else закрывающаяся.


Добавлено через 31 секунду
или else где то не там....
вроде так, написал по блок схеме условие находиться внутри цикла и если условие не выполняеться то цикл прекращаеться. Вот сылка на блок схему http://s45.***********/i108/1106/7d/6dbcf08bc6e0.jpg .
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
03.06.2011, 14:26     Найти ошибку. #4
Цитата Сообщение от CrazyHead Посмотреть сообщение
f(f0)=f(f1);
что это?
CrazyHead
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 13
03.06.2011, 14:30  [ТС]     Найти ошибку. #5
Цитата Сообщение от pito211 Посмотреть сообщение
что это?
Попытка сделать это действие "Шаг4. Положить x0=x1 и F(x0)=F(x1)."
CrazyHead
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 13
05.06.2011, 14:29  [ТС]     Найти ошибку. #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <cmath>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
using namespace std;
 
const float epsilon=1e-10;
 
float f(float x)
{
    float y,k,j,l;
    return y=k*x*x+l*x+j;
}
 
int main()
{
        float k,j,l,a,b,f0,f1,dx,x0,x1,x2,f2;
   printf("Vvedi koefficienti k l j \n");
   scanf("%f" ,&k);
   scanf("%f" ,&l);
   scanf("%f" ,&j);
   printf("Vvedi interval a b \n");
   scanf("%f" ,&a);
   scanf("%f" ,&b);
       dx=(b-a)/4;
       x0=a;
       f0=k*x0*x0+l*x0+j;
          while (dx>=epsilon)
{
          while (a<=x0<=b)
{
   x1=x0+dx;
   f1=k*x1*x1+l*x1+j;
   if(f(f0)>f(f1))
                  x0=x1;
                  f(x0)=f(x1);
          else
          break;
}
                  x0=x1;
                  f0=k*x1*x1+l*x1+j;
                  dx=-dx/4;
}
                  x2=x0;
                  f2=k*x2*x2+l*x2+j;
                  printf("Tochka extremuma \n r=%6.6f" ,x2);
return 0;
}
ошибка на 37 и 38 строчки не знаю как исправить. Вот сылка на блок схему http://s45.***********/i108/1106/7d/6dbcf08bc6e0.jpg .
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
05.06.2011, 14:38     Найти ошибку. #7
Цитата Сообщение от CrazyHead Посмотреть сообщение
Попытка сделать это действие "Шаг4. Положить x0=x1 и F(x0)=F(x1)."
В военное время значение синуса может достигать двух!
Не надо полагать F(x0)=F(x1). Если x0 равен x1, то это само собой выполняется.
CrazyHead
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 13
05.06.2011, 14:41  [ТС]     Найти ошибку. #8
В военное время значение синуса может достигать двух!
Не надо полагать F(x0)=F(x1). Если x0 равен x1, то это само собой выполняется.
Так давно разобрался в тексте програмы ниже всё исправленно.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
05.06.2011, 14:43     Найти ошибку. #9
А что тогда такое в строке 37 в посте 6?
CrazyHead
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 13
05.06.2011, 14:46  [ТС]     Найти ошибку. #10
C++
1
  f0=k*x1*x1+l*x1+j;
исправил. Всё равно 38 строка ошибка.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
05.06.2011, 14:48     Найти ошибку. #11
если между if и esle больше одной инструкции надо выполнить, то их надо заключить в фигурные скобки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2011, 14:58     Найти ошибку.
Еще ссылки по теме:

C++ Найти сумму первых n-четных натуральных чисел (найти ошибку)
Найти ошибку C++
C++ Задача из Златопольского: "Найти числа с известным количеством делителей". Не могу найти ошибку

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CrazyHead
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 13
05.06.2011, 14:58  [ТС]     Найти ошибку. #12
Прога запускается только кажется неправильно находит точку экстремума.
Yandex
Объявления
05.06.2011, 14:58     Найти ошибку.
Ответ Создать тему
Опции темы

Текущее время: 15:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru