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

рекурсивный алгоритм и использование точности "Эпсилон" - C++

Восстановить пароль Регистрация
 
nikitosina
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 17
06.08.2013, 13:27     рекурсивный алгоритм и использование точности "Эпсилон" #1
Нихао всем) Тут такое дело. Нужно построить рекурсивный алгоритм, который бы возводил число "е" (экспоненту) в степень. Степень должна вводиться к клавиатуры. Но это не самое сложное: нужна еще точность "Эпсилон", которая тоже задается с клавиатуры. Допустим нужно вычислить "е^4", так мы "4" вводим с клавы, да еще и вводим точность, с которой будет выполняться возведение в степень (допустим с точностью семь знаков после запятой, или три знака после запятой). Поможете? Прям клятвенно прошу! Прям совсем-совсем прошу!
...
Да, еще вот что. Если кому не трудно, можете блок-схему накалякать? Хоть и от руки.... Буду очень признателен!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2013, 13:27     рекурсивный алгоритм и использование точности "Эпсилон"
Посмотрите здесь:

C++ предлагаю людям класс "рекурсивный обход матрицы" для решения задач на такую тематику
Вопрос "хорошего тона", "стиля" в программировании - правильное использование #include C++
C++ Необработанное исключение в "0x00412b4a" в "kursovik.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000004".
Не могу понять суть эпсилон (точности) для разложения в ряд Тейлора, как её описать? C++
Необработанное исключение в "0x778e15de" в "dir-3.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
06.08.2013, 13:47     рекурсивный алгоритм и использование точности "Эпсилон" #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
#define _USE_MATH_DEFINES
#include <iostream>
#include <iomanip>
#include <clocale>
#include <cmath>
 
double recursive_power(unsigned x)
{
    if (x == 0)
        return 1;
    else
        return recursive_power(x-1)*M_E;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    std::cout << "Введите показатель степени, затем точность: ";
    int power, precision;
    std::cin >> power >> precision;
    std::cout << std::fixed << std::setprecision(precision) << recursive_power(power) << std::endl;
    return 0;
}
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
06.08.2013, 13:51     рекурсивный алгоритм и использование точности "Эпсилон" #3
Цитата Сообщение от Dani Посмотреть сообщение
std::setprecision(precision)
я думаю имелась в виду точность вычислений
например e = 0.001
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
06.08.2013, 14:00     рекурсивный алгоритм и использование точности "Эпсилон" #4
Уже ответили((
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
06.08.2013, 14:10     рекурсивный алгоритм и использование точности "Эпсилон" #5
Olivеr, что-то не совсем понимаю. Нужно "обрезать" число e и возводить его в степень только с Эпсилион знаками после запятой?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
06.08.2013, 14:21     рекурсивный алгоритм и использование точности "Эпсилон" #6
Dani, думаю нужно написать алгоритм для приближенного возведения экспоненты в произвольную степень с точностью эпсилон.

Добавлено через 1 минуту
Цитата Сообщение от nikitosina Посмотреть сообщение
вводим точность, с которой будет выполняться возведение в степень (допустим с точностью семь знаков после запятой, или три знака после запятой)
хотя кто его знает. ТС однозначно не цитировал задание
nikitosina
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 17
08.08.2013, 16:32  [ТС]     рекурсивный алгоритм и использование точности "Эпсилон" #7
Olivеr, Dani, тут весь прикол в том, что само число "е" определяется самой Visual Studio C++ . Я при попытках написания кода использовал
C++
1
double expn(double x, double old_x, double eps, int n)
. То есть экспонента берется самой программой, мы ее не урезаем. Мы лишь задаем Эпсилоном то количество чисел, которые нам надо вывести после запятой

Добавлено через 9 минут
Dani, насчет твоего кода:
вот отчет об ошибках, которые у меня вылезают...
"1>c:\users\nik-nik\documents\visual studio 2010\projects\ывфпфва\ывфпфва\ывфпфва.cpp(1): warning C4603: _USE_MATH_DEFINES: макрос не определен или определение изменилось после использования предкомпилированного заголовка
1> Добавление макроопределения в предкомпилированный заголовок вместо определения его здесь
1> c:\users\nik-nik\documents\visual studio 2010\projects\ывфпфва\ывфпфва\ывфпфва.cpp(2): использование предкомпилированного заголовка
1>c:\users\nik-nik\documents\visual studio 2010\projects\ывфпфва\ывфпфва\ывфпфва.cpp(13): error C2065: M_E: необъявленный идентификатор"
...
...
...
Dani, Olivеr, а вот мой код, который был давеча написан (не без посторонней помощи) и перерабатывался уже мною, но до совершенства не доведен. В нем нет учета точности эпсилон, да и Экспонента в степень возводится только до 4-ой степени.
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
#include "StdAfx.h"
#include <cmath>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
#include <cmath>
 
using namespace std;
 
 
 
int factorial(int n) {
    if(n==1 || !n) return 1;
    return n* factorial (n-1); }
 
double expn(double x,double old_x, double eps, int n)
{
    if (!x) return 1.;
    double summ;
    if (n==1) summ = 1.;
    else summ = old_x;
    summ += pow(x,n)/(double)factorial(n);
    if (fabs(summ-old_x)>=eps)
        return expn(x, summ, eps, n+1);
    else return summ;
    system ("pause");
    return 0;
}
 
int main()
{
    double n;
    cout << "Vvedite stepen" << endl;
    cin >> n; 
    cout << expn( n, n-1, 0.01, 1) << endl;
    getch();
    return 0;
    system ("pause");
}
nikitosina
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 17
09.08.2013, 16:48  [ТС]     рекурсивный алгоритм и использование точности "Эпсилон" #8
Olivеr, Жду ответа
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 687
09.08.2013, 17:09     рекурсивный алгоритм и использование точности "Эпсилон" #9
Подскажу по поводу точности. Допустим вы ввели точность e = 0.001.
Тогда ваши вычисления должны примерно так.
double virajenie = //ваше выражение;
do
{
вычисление с переменной virajenie.
} while(virajenie >= e);
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
09.08.2013, 17:22     рекурсивный алгоритм и использование точности "Эпсилон" #10
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
#include <iostream>
 
double rpower(double base, int exponent)
{
    if (exponent == 0) return 1.0;
    else if (exponent < 0) return 1.0 / rpower(base, -exponent);
    else return base * rpower(base, exponent - 1);
}
 
double calculate_exp(double eps)
{
    double e = 2.0;
    double t = 1.0;
    double n = 1.0;
    while (t > eps) e += t /= ++n;
    return e;
}
 
int main()
{
    double eps = 0.000000001;
    std::cout << rpower( calculate_exp(eps), -2 );
    return 0;
}
nikitosina
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 17
11.08.2013, 12:45  [ТС]     рекурсивный алгоритм и использование точности "Эпсилон" #11
Olivеr, я так понимаю, это конечный вариант кода? мне кажется, в нем что-то не то... Если его запустить, то как результат получится ответ "0,135335". Нет ни ввода степени, ни ввода точности эпсилон. Или это часть кода?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
11.08.2013, 13:40     рекурсивный алгоритм и использование точности "Эпсилон" #12
Ввод сделаете сами
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2013, 14:20     рекурсивный алгоритм и использование точности "Эпсилон"
Еще ссылки по теме:

C++ Необработанное исключение в "0x013f2b22" в "123.exe": 0xC0000005: Нарушение прав доступа при записи "0xfdfdfdfd"
C++ В массиве структур студент с полями "ИМЯ" "ВОЗРАСТ" "УСПЕВАЕМОСТЬ" выполнить сортировку по успеваемости по возрастанию
C++ Рекурсивный спуск - Функция не останавливается на "else return"

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

Или воспользуйтесь поиском по форуму:
nikitosina
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 17
11.08.2013, 14:20  [ТС]     рекурсивный алгоритм и использование точности "Эпсилон" #13
все, понял, спасибо большое)
Yandex
Объявления
11.08.2013, 14:20     рекурсивный алгоритм и использование точности "Эпсилон"
Ответ Создать тему
Опции темы

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