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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
HueJack
13 / 11 / 1
Регистрация: 20.10.2008
Сообщений: 91
#1

Не понятно в чем ошибка... компилируется, начинает работать, и выдает ошибку - C++

20.10.2008, 20:44. Просмотров 798. Ответов 8
Метки нет (Все метки)

Вот код:
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
//---------------------------------------------------------------------------
#include <conio.h>
#include <iostream.h>
double MyFunk(double x);
double main()
{
int k=1;
double a[1000], b[1000], epsilon, sigma, alfa[1000], beta[1000];
cout<<"wwedite interval a and b"<<endl;
cin>>a[k]>>b[k];
cout<<"wwedite tochnost and const raslichimosti"<<endl;
cin>>epsilon;
cout<<"wwedite sigma"<<endl;
cin>>sigma;
while(b[k]-a[k]>=epsilon)
{ 
alfa[k]=(b[k]+a[k])/2-sigma;
beta[k]=(b[k]+a[k])/2+sigma;
if(MyFunk(alfa[k])>MyFunk(beta[k]))
{a[k+1]=alfa[k];
b[k+1]=b[k];}
else
if(MyFunk(alfa[k])<=MyFunk(beta[k]))
{a[k+1]=a[k];
b[k+1]=beta[k];}
k++;}
cout<<a[k]<<b[k];
return 0;
}
double MyFunk(double x)
{
double fk=x*x;
return fk;
}
это метод половинного деления, для проверки ввожу а=-6, b=6, дальше 0.001 и 0.01
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2008, 20:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не понятно в чем ошибка... компилируется, начинает работать, и выдает ошибку (C++):

Выдает ошибку когда задействую поток.Подскажите в чем ошибка? - C++
Задача: Задан двумерный массив A из N x N элементов, расположенный в локальной памяти каждой нити, то есть массив A разделен на m...

Должно работать, но выдает ошибку - C++
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class Knuckle{ public: int flag; int x; int y; ...

выдает ошибку : cannot find -lbgi...в чем проблема? - C++
#include &lt;stdio.h&gt; int main() { int i,j,n,flag=0,sum1=0,sum2=0,sum3,sum4; printf(&quot;vvedite razmer massiva&quot;); ...

Итератор. Не понятно почему не компилируется - C++
Задача на суммирование двух соседних элементов при помощи итератора. vector &lt;int&gt; n; int x; while (cin &gt;&gt; x) ...

помогите не пойму в чем проблема компилятор не выдает ошибку,но не вычисляет произведение - C++
задача:1) Дан массив A. Вычислить произведение между первым и последним положительными элементами. Программа: #include &lt;iostream.h&gt; ...

Выдает ошибку о том , что маленький буфер. Подскажите в чем причина - C++
#include &lt;fstream&gt; #include &lt;string&gt; #include &lt;iostream&gt; using namespace std; const int RAS =255; typedef char telem; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Lord_Voodoo
Супер-модератор
8584 / 2184 / 61
Регистрация: 07.03.2007
Сообщений: 10,883
Завершенные тесты: 1
20.10.2008, 21:39 #2
покажи ошибку
Lurker
6128 / 1886 / 13
Регистрация: 07.07.2008
Сообщений: 10,443
20.10.2008, 21:48 #3
double a[1000]
Я в с конечно почти ноль.. но это разве не объйвление массива? А зачем массив в методе половинного деления?
HueJack
13 / 11 / 1
Регистрация: 20.10.2008
Сообщений: 91
20.10.2008, 21:55  [ТС] #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
while(b[k]-a[k]>=epsilon)
{ 
alfa[k]=(b[k]+a[k])/2-sigma;
beta[k]=(b[k]+a[k])/2+sigma;
if(MyFunk(alfa[k])>MyFunk(beta[k]))
{a[k+1]=alfa[k];
b[k+1]=b[k];}
else
if(MyFunk(alfa[k])<=MyFunk(beta[k]))
{a[k+1]=a[k];
b[k+1]=beta[k];}//в этой строке выдает ошибку
k++;}
когда она начинает считать, получается так что массив забивается до 1001, хотя не положено, написал эту же программу на Паскале, работает... а тут хоть убейся, не понятно...

Добавлено через 2 минуты 43 секунды
double a[1000]
Я в с конечно почти ноль.. но это разве не объйвление массива? А зачем массив в методе половинного деления?
Требование было сделать массивами, я без них делал, но надо так...
Lurker
6128 / 1886 / 13
Регистрация: 07.07.2008
Сообщений: 10,443
20.10.2008, 22:06 #5
ну объяви массив до 1001
HueJack
13 / 11 / 1
Регистрация: 20.10.2008
Сообщений: 91
20.10.2008, 22:11  [ТС] #6
Цитата Сообщение от Lurker Посмотреть сообщение
ну объяви массив до 1001
как показала практика это бесполезно)))
Lord_Voodoo
Супер-модератор
8584 / 2184 / 61
Регистрация: 07.03.2007
Сообщений: 10,883
Завершенные тесты: 1
20.10.2008, 22:38 #7
у тебя вылазит прога за пределы массива? так надо трассировать на предмет корректности условия... напиши алгоритм, по которому должна прога работать, пока я смутно просматриваю логику...
HueJack
13 / 11 / 1
Регистрация: 20.10.2008
Сообщений: 91
20.10.2008, 22:49  [ТС] #8
Цитата Сообщение от WooDooMan Посмотреть сообщение
у тебя вылазит прога за пределы массива? так надо трассировать на предмет корректности условия... напиши алгоритм, по которому должна прога работать, пока я смутно просматриваю логику...
алгоритм простой:
выбираем: точность эпсилон>0 константу различимостей sigma, начальный интервал а и б.
если а-b<epsilon тогда конец, иначе выбираем другие две точки alfa=(b-a)/2-sigma and betta=(b-a)/2+sigma.
если f(alfa[k])>f(beta[k]) then
a[k+1]=alfa[k]
b[k+1]=b[k]
иначе присваиваем
a[k+1]=a[k]
b[k+1]=betta[k+1]
вот и весь алгоритм... все просто, но вот что с этим массивом.. почему он его переполняет, там одни и те же числа идут, хотя должны считаться по другому...
функция будет x*x
Lord_Voodoo
Супер-модератор
8584 / 2184 / 61
Регистрация: 07.03.2007
Сообщений: 10,883
Завершенные тесты: 1
21.10.2008, 10:42 #9
Hyjak, глянь такое решение, на счет правильности не знаю, алгоритм мне все равно не понятен, но по крайней мере не вылетает:
Код
#include <iostream>
#include <math.h>
using namespace std;
double MyFunk(double x);
int main()
{
int k=0;
double a[1000], b[1000], epsilon, sigma, alfa[1000], beta[1000];
cout<<"wwedite interval a and b"<<endl;
cin>>a[k]>>b[k];
cout<<"wwedite tochnost and const raslichimosti"<<endl;
cin>>epsilon;
cout<<"wwedite sigma"<<endl;
cin>>sigma;
do
{
  alfa[k]=(b[k]+a[k])/2 - sigma;
  beta[k]=(b[k]+a[k])/2 + sigma;
  if(MyFunk(alfa[k])>MyFunk(beta[k]))
  {
    a[k+1]=alfa[k];
    b[k+1]=b[k];
  }else{
    a[k+1]=a[k];
    b[k+1]=beta[k];
  }
  k++;
  if(k == 1000) k = 0;
}while((fabs(b[k])-fabs(a[k])>=epsilon));
cout<<a[k]<<" "<<b[k];
return 0;
}
double MyFunk(double x)
{
  return x*x;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2008, 10:42
Привет! Вот еще темы с ответами:

Структура Octal. Выдает ошибку E2040 Declaration terminated incorrectly. Не пойму в чем проблема? - C++
#include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; struct Octal {char*s;int len;} chislo ; {for(int...

Подскажите пожалуйста в чем может быть трабл при компиляции класса выдает ошибку - C++
Подскажите пожалуйста в чем может быть проблема: при компиляции класса выдает ошибку: (Ошибка LNK2001 неразрешенный внешний символ...

В чем ошибка, не считает...ответ выдает по нулям(((( - C++
#include &lt;stdio.h&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; char buf ; char*RUS(const char*text) { CharToOem(text,buf); ...

Программа не работает, но ошибок не выдает. В чем может быть ошибка? - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;cstdlib&gt; #define m 8 using namespace std; int main() { int...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.10.2008, 10:42
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru