0 / 0 / 0
Регистрация: 26.09.2011
Сообщений: 40

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

26.09.2011, 20:32. Показов 6473. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru