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

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

Войти
Регистрация
Восстановить пароль
 
nikitosina
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 17
#1

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

06.08.2013, 13:27. Просмотров 879. Ответов 12
Метки нет (Все метки)

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

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно". Я так...

Вопрос "хорошего тона", "стиля" в программировании - правильное использование #include - C++
Привет. Вступление. Имею небольшой опыт в программировании. Сейчас мне дали разобрать один проект, как пример работы HGE и Box2D. ...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Рекурсивный спуск - Функция не останавливается на "else return" - C++
не могу понять, почему функция не останавливается на "else return *(a+mid);" делал отладку, после этого return'a происходит еще два...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс "вентилятор" содержащий в себе классы:...

12
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 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;
}
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
06.08.2013, 13:51 #3
Цитата Сообщение от Dani Посмотреть сообщение
std::setprecision(precision)
я думаю имелась в виду точность вычислений
например e = 0.001
0
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,127
06.08.2013, 14:00 #4
Уже ответили((
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
06.08.2013, 14:10 #5
Olivеr, что-то не совсем понимаю. Нужно "обрезать" число e и возводить его в степень только с Эпсилион знаками после запятой?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
06.08.2013, 14:21 #6
Dani, думаю нужно написать алгоритм для приближенного возведения экспоненты в произвольную степень с точностью эпсилон.

Добавлено через 1 минуту
Цитата Сообщение от nikitosina Посмотреть сообщение
вводим точность, с которой будет выполняться возведение в степень (допустим с точностью семь знаков после запятой, или три знака после запятой)
хотя кто его знает. ТС однозначно не цитировал задание
0
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");
}
0
nikitosina
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 17
09.08.2013, 16:48  [ТС] #8
Olivеr, Жду ответа
0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
09.08.2013, 17:09 #9
Подскажу по поводу точности. Допустим вы ввели точность e = 0.001.
Тогда ваши вычисления должны примерно так.
double virajenie = //ваше выражение;
do
{
вычисление с переменной virajenie.
} while(virajenie >= e);
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
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;
}
0
nikitosina
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 17
11.08.2013, 12:45  [ТС] #11
Olivеr, я так понимаю, это конечный вариант кода? мне кажется, в нем что-то не то... Если его запустить, то как результат получится ответ "0,135335". Нет ни ввода степени, ни ввода точности эпсилон. Или это часть кода?
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
11.08.2013, 13:40 #12
Ввод сделаете сами
1
nikitosina
0 / 0 / 0
Регистрация: 06.08.2013
Сообщений: 17
11.08.2013, 14:20  [ТС] #13
все, понял, спасибо большое)
0
11.08.2013, 14:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2013, 14:20
Привет! Вот еще темы с ответами:

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

предлагаю людям класс "рекурсивный обход матрицы" для решения задач на такую тематику - C++
Друзья! Ввиду возникшей необходимости мной был написан класс &quot;рекурсивный обход матрицы&quot;; Теперь задачи на такую тематику будут решаться...

Определить тип данных "Запись", имеющий поля "Фамилия", "Пол", "Зарплата" - C++
определить тип данных запись имеющий поля фамилия пол зарплата. определить массив из 10 записей. в программе ввести в массив данные и...

Рекурсивный "распил" отрезка - C++
Задание ниже. Нужно написать чистой рекурсией. Проблема заключается в следующем: я перебирала каждую комбинацию точек распила и находила...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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