Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/27: Рейтинг темы: голосов - 27, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 40

Небольшая ошибка в программе

26.09.2011, 20:32. Показов 6345. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет друзья!Для выч.мата нужно написать программу..программа вроде бы верна(у других работает,изменена только формула.У меня выдает такую ошибку:
1)Error 2 error C2365: 'exp' : redefinition; previous definition was 'function'
2)Error 3 error C2665: 'pow' : none of the 6 overloads could convert all the argument types(4 ошибки)
Как видно из текста программы,ругается он на функции exp и pow.Но библиотеки подключены,и видимо есть конфликт в типах значений.Не могли уважаемые форумчане подсказать в чем ошибка?Заранее огромное спасибо!

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
50
51
#include <iostream>
#include <conio.h>
#include <math.h>
#include <iomanip>
#include <stdio.h>
using namespace std;
double exp;
 
double f(double x) 
{
     //исходное ур-е
    return pow(exp,x)-pow(exp,(-x))-2;
    
}
double fi(double x) 
{
     //итерирующая ф-ция
    return pow(exp,(-x))+pow(exp,x);
}
 
void rass4et (double x, double E)
{
    double t=x;
    double f1,f2;
    int n=0;   //кол-во итераций
    do
    {
        x=t;
        t=fi(x);   //получение очередного приблежения к корню
        f1=f(x);
        f2=f(t);
        n=n+1;
 
        cout<<"\nитерация: "<<n<<" корень: "<<x<<" f(x):"<<f(x);
    } while(!((abs(x-t)<E)&&(abs(f1-f2)<E)));
    cout<<"\nРезультаты:";
cout<<"\nитерация:"<<n<<" корень:"<<x<<" f(x):"<<f(x);
}
void main ()
{
setlocale( LC_ALL,"Russian" ); //подключение возможности вывода русских букв
do{
cout<<"Программа рассчёта корня нелинейного ур-я методом итераций\n\n";
    double x,E;
    cout<<"Введите х: ";
    cin>>x;                 // начальное приближение
    cout<<"Введите точность Е: "; 
    cin>>E;                 //точность вычислений
    rass4et(x,E);
}while(getch()=='y');
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.09.2011, 20:32
Ответы с готовыми решениями:

Небольшая ошибка в программе
Все работает, но не могу понять почему вместо 5 попыток получается 6. Подскажите пожалуйста что делаю не так. import random Slad =...

Небольшая ошибка в программе
Вот решаю задачу с одного сайта, всё вроде должно работать, но не получается присвоить s значение a - 1. Паскаля нет, вставил как язык...

Небольшая ошибка в программе
Я полный новичок в c++, написал программу, которая проверяет, какое число больше, первое, или второе. #include &lt;iostream&gt; ...

35
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
29.09.2011, 17:41
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Deviaphan Посмотреть сообщение
x и t - double. Их разница тоже double. С какой стати будет вызываться перегрузка не для double? Откуда в даблах взялся INT_MAX?
-

Цитата Сообщение от Deviaphan Посмотреть сообщение
long double abs(
* * *long double n
* ); * // C++ only
- о такое перегрузке я не слышал, наверное это уже на новых компиляторах так, отродясь для целых был abs для чисел с плавающей точкой fabs
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.09.2011, 17:43
А с появлением С++ в мир пришла перегрузка.)
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
29.09.2011, 17:54
Цитата Сообщение от Deviaphan Посмотреть сообщение
А с появлением С++ в мир пришла перегрузка.)
- для Си это не покатит, если уж писать так чтоб жевалось и на чём нибудь вроде Си, не факт что ТС в след раз в Си не напечатает abs
Portability
These overloads of abs are only available in C++.
In C, only the cstdlib version of exists (see cstdlib abs) - fabs can be used instead
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.09.2011, 17:56
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
для Си это не покатит
Как бы у ТС С++ и не факт, что он вернётся к Си. Сперва преподают Си, потом С++ и к Си не возвращаются.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
30.09.2011, 13:47
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
using namespace std;
double e = exp(1);
double f(double x) 
{
    return pow(e,x)-pow(e,(-x))-2;
}
double fi(double x) 
{
    return pow(e,(-x))+pow(e,x);
}
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C++
1
pow(exp(x),x)
или же если нужно е^х, тогда
C++
1
pow(exp(1),x
)

Добавлено через 3 минуты
Цитата Сообщение от pormonik Посмотреть сообщение
double exp;
- а на єто и подавно ругань будет - вы объявили константу одноимённую с именем функции, если хотите в -цию передавать e тогда так делайте
double e = exp(1); и в функции е вписывайте вместо exp(1)
Для начала e - это константа, а следовательно ее можно достать из cmath c именем M_E.
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <cmath>
 
int main() 
{
    std::cout<<M_E;
    return 0;
}
Во-вторых - что это за способ получения экспоненты? Есть метод exp, который вы используете.
C++
1
2
3
4
5
6
7
8
double f(double x) 
{
    return exp(x) - exp(-x) - 2;
}
double fi(double x) 
{
    return exp(-x) + exp(x);
}
0
30.09.2011, 14:09

Не по теме:

Цитата Сообщение от M128K145 Посмотреть сообщение
Во-вторых - что это за способ получения экспоненты? Есть метод exp, который вы используете.
- мне не совсем понятно замечание, моей задачей было заставить алгоритм компилироваться, а в смысл матзадачи не вникал, если ТС интересует итерационный процесс то предлагаю ему сюда посмотреть
Метод простой итерации

0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
30.09.2011, 14:26
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
моей задачей было заставить алгоритм компилироваться, а в смысл матзадачи не вникал,
Речь идет не о смысле задачи и не об алгоритме решения, речь идет о реализации, которую вы предложили
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
или же если нужно е^х, тогда
C++
1
pow(exp(1),x
)
...
double e = exp(1); и в функции е вписывайте вместо exp(1)
0
30.09.2011, 14:35

Не по теме:

Цитата Сообщение от M128K145 Посмотреть сообщение
double e = exp(1);
- M128K145, что не так???
В конечном итоге и я и ТС остановились на варианте #define см 9-й 10-й пост

0
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 40
30.09.2011, 14:42  [ТС]
Все верно,использовав #define,компилятор больше не ругался.Но программа считает почему то неправильно,бесконечный цикл,формула точно записано верно,у других с другими формулами работает.Уважаемый -=ЮрА=-, fabs ничего не изменил.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
30.09.2011, 15:12
Цитата Сообщение от pormonik Посмотреть сообщение
Все верно,использовав #define,компилятор больше не ругался.Но программа считает почему то неправильно,бесконечный цикл,формула точно записано верно,у других с другими формулами работает.Уважаемый -=ЮрА=-, fabs ничего не изменил.
- ну тут я уже всмотрелся в математическую сторону алгоритма она не верна, на сколько я понял интересует нахождение значения некой f(x) которую заменяем на приближённую и с некоторой точностью Е нужно найти значение f(x) в произвольной точке

pormonik, какова f(x)???

f(x) = e^x - e^(-x) приведите полное описание задания именно математическую постановку задачи и я вам всё в деталях распишу и точно решать будет!
PS:не даром говорил сюда посмотреть
Метод простой итерации
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
30.09.2011, 15:13
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
В конечном итоге и я и ТС остановились на варианте #define см 9-й 10-й пост
Я не против, но можно и pi дефайнить, можно и степень считать вручную. Я говорю о том, что все уже сделано до вас и дефайнить константу, описанную в библиотеке - нет смысла.
Так же некорректно с точки зрения cmath возводить e в степень через функцию pow, ведь есть специальный метод exp. Тем более ввиду присутствия параметра E наличие переменной e является признаком плохого стиля.
Использования define - С-стайл, в C++ для этого есть ключевое слово const.
Теперь по-поводу того, что именно у нас дефайнится - вы считаете разумным дефайнить вызов функции, которая будет дергаться N раз в программе?

А теперь, pormonik, посмотрим на ваш алгоритм вместе.
C++
1
2
3
4
5
6
7
8
do
{
   x = t;
   t = fi(x);
   f1 = f(x);
   f2 = f(t);
   n = n + 1;
} while(!((fabs(x - t) < E) && (fabs(f1 - f2) < E)));
Подадим на вход x = 2. Получаем х = 2, https://www.cyberforum.ru/cgi-bin/latex.cgi?t={e}^{2}+{e}^{-2}\approx 7.52439, на следующем шаге мы получаем значительно большую степень экспоненты, при x = 7.52439 t будет равен около 1852.69. На следующем шаге можно предположить о значении t, принимая во внимание очень большое значение x. В итоге t вываливается в плюс бесконечность и ваш цикл просто вешается

Ищите ошибки в вашем алгоритме
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
30.09.2011, 15:17

Не по теме:

pormonik, вы написали

Цитата Сообщение от pormonik Посмотреть сообщение
Как видно из текста программы,ругается он на функции exp и pow.Но библиотеки подключены,и видимо есть конфликт в типах значений.Не могли уважаемые форумчане подсказать в чем ошибка?Заранее огромное спасибо!
- исправил стала компилироваться, но ошибка может в крыться в самой матчасти алгоритма на которую не смотрел т.к. вы сами написалиquote=pormonik;2016336]Для выч.мата нужно написать программу..программа вроде бы верна[/quote], вот и не смотрел на матчасть:pardon:



Добавлено через 1 минуту
M128K145, я не смотрел матчасть самого алгоритма т.к. сам ТС уверил математика верна...
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
01.10.2011, 10:19
-=ЮрА=-, к вам вопросы только предложенной вами реализации некоторых моментов, о которых я писал
Цитата Сообщение от M128K145 Посмотреть сообщение
Я не против, но можно и pi дефайнить, можно и степень считать вручную. Я говорю о том, что все уже сделано до вас и дефайнить константу, описанную в библиотеке - нет смысла.
Так же некорректно с точки зрения cmath возводить e в степень через функцию pow, ведь есть специальный метод exp. Тем более ввиду присутствия параметра E наличие переменной e является признаком плохого стиля.
Использования define - С-стайл, в C++ для этого есть ключевое слово const.
Теперь по-поводу того, что именно у нас дефайнится - вы считаете разумным дефайнить вызов функции, которая будет дергаться N раз в программе?
0
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 40
05.10.2011, 19:25  [ТС]
6. Провести исследование нелинейного уравнения для «решения на ПК»:
• проверить выполнение условий сходимости вычислительного процесса, в случае расходящегося процесса – выполнить последовательность шагов для обеспечения сходимости;
• выбрать начальное приближение;
• сформулировать условия окончания процесса уточнения корня.
Вот сама задача.Сначала надо было решить нелинейное уравнение с помощью маткада по методу Ньютона.В с++ сказали сделать по методу итераций и потом сравнить результаты сходимости.
У моего одногруппника точно такая же программа но с другой функцией и у него все верно считает итерации.В моем случае Х должен быть на отрезке от 0.5 до 1.5
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
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
double f(double x) 
{
    return 4*(x*x+1)*log(x)-1; //исходное ур-е
}
double fi(double x) 
{
    return x-0.05*f(x); //итерирующая ф-ция
}
 
void rass4et (double x, double E)
{
    double t=x;
    double f1,f2;
    int n=0;   //кол-во итераций
    do
    {
        x=t;
        t=fi(x);   //получение очередного приблежения к корню
        f1=f(x);
        f2=f(t);
        n=n+1;
 
        cout<<"\nитерация: "<<n<<" корень: "<<x<<" f(x):"<<f(x);
    } while(!((abs(x-t)<E)&&(abs(f1-f2)<E)));
    cout<<"\nРезультаты:";
cout<<"\nитерация:"<<n<<" корень:"<<x<<" f(x):"<<f(x);
}
void main ()
{
setlocale( LC_ALL,"Russian" );//подключение возможности вывода русских букв
do{
cout<<"Программа рассчёта корня нелинейного ур-я методом итераций\n\n";
    double x,E;
    cout<<"Введите х: ";
    cin>>x;                 // начальное приближение
    cout<<"Введите точность Е: "; 
    cin>>E;                 //точность вычислений
    rass4et(x,E);
}while(getch()=='y');
}
0
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 40
10.10.2011, 19:03  [ТС]
Уважаемый -=ЮрА=-, смысл всей задачи в том,чтобы решить уравнение методом итераций.В маткаде я эту задачу выполнил,смотрите на картинку:

Теперь по этой же самой формуле,я должен сделать и программу в с++.Мы выбираем х такой же как и в маткаде,тоесть 0.5(он же х0).Точность 0.001.И цикл считает бесконечно(
Вот как должна выглядеть программа,но что то в ней неверно,какая то деталь .
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <iomanip>
#include <stdio.h>
#define e exp(1.0)
using namespace std;
double fi (double x)
{
    return pow(e,x)-pow(e,(-x))-2;
}
double f (double x)
{
    return pow(e,(-x))+pow(e,x);
}
void main (void)
{
    setlocale (LC_ALL, "rus");
    double x, E, f1, f2;
    cout<<"Введите x и E"<<endl;
    cin>>x>>E;
    int n=0;
    double t=x;
    do
    {
        x=t;
        t=fi(x);
        f1=f(x);
        f2=f(t);
        n++;
        cout<<endl<<endl<<"n="<<n<<"  x="<<x<<"  f(x)="<<f1;
    }
    while (!(fabs(x-t)<E && fabs(f1-f2)<E));
    cout<<endl<<endl<<"Конечный результат:"<<endl<<"  n="<<n<<"  x="<<x<<"  f(x)="<<f1;
    getch();
}
В нашей программе,функция f это само уравнение,а fi его производная.
0
0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 40
10.10.2011, 19:29  [ТС]
Простите друзья,я был виноват,ошибка в формуле,теперь все хорошо)Спасибо за участие!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2011, 19:29

Небольшая недоработка в программе
Задача была написать программу, которая читает введенную матрицу, делает проверку значений на четность и положительность. Если условия...

Небольшая корректировка вывода в программе
Помогите немного переделать программу : под что она сделана: - ------------------------------------------------------------------ |...

Небольшая утечка памяти в программе
Ув. форумчане подскажите где в данном проекте может быть утечка памяти. Происходит медленно, но происходит. За но процесс стал кушать на...

Нужна небольшая правка в программе
Здравствуйте! Задание: меняя местами строки матрицы, отсортировать по возрастанию ее первый столбец. (Динамический двумерный массив) Есть...

Небольшая недоработка в программе изменения раскладки
Я сделал программу, переводящую неправильную раскладку на правильную, но не работает большая буква Э, ибо эквивалентный ей символ в...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru