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

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

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

Рекурсия.Найти xn, для которого |Xn - Xn-1|<10^n - C++

24.05.2009, 16:54. Просмотров 643. Ответов 6
Метки нет (Все метки)

Пусть X0=1 , Xi=(2-xp*xp*xp)/5 где i=1,2,... Найти xn, для которого |Xn - Xn-1|<10^n
----------------------------
Код программы (С++):

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
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h> 
#include "locale.h"
double recyrc (double n);
 
 
void main()
{
setlocale(LC_ALL,"Russian"); 
double p=0;
double n=0;
char ch;
printf("Пусть X0=1 , Xi=(2-xp*xp*xp)/5 где i=1,2,.. Найти xn, для которого |Xn - Xn-1|<10^n");
do{     
    printf("\nрекурсия:");
    p=recyrc(n);
    printf("\nПри введенных данных Xn=%lg",p);
printf("\nПродолжить вычисления?(Y/N)\n");
    do
    {
    ch=toupper(_getch());
 
    if( (ch=='Y')||(ch=='N') )
    printf("%c\n",ch);
    }
    while (ch!='Y' && ch!='N');
}
    while (ch!='N');
printf("для продолжения нажмите любую кнопку");
_getch();
}
 
double recyrc (double n)
{        static int i=0;
        static double xp=0; 
        static double xn=0;
        static double x=0;
        double OTV=0;
        if(i==0)
         {
            x=1;
         i++;
         }
 
         xp=x;
            xn=(2-xp*xp*xp)/5;
            x=xn;
 
        OTV=fabs(x-xp);
     if (OTV>10^n) 
        {     ++i;;
             recyrc(n); 
     }
     else
     {
         i=0;
         }
return (x);
    }
----------------------------
проблемы с вводимой переменной n и 10^n. В коде где то тут ругается: if (OTV>10^n) .
Подскажите пожалуйста где ошибки?
Заранее большое спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2009, 16:54     Рекурсия.Найти xn, для которого |Xn - Xn-1|<10^n
Посмотрите здесь:
Рекурсия: добавить перед каждым элементом массива, старшая цифра которого равна 5, число X C++
C++ Найти первый член последовательности, для которого выполняется условие
C++ Найти поддерево, для всех вершин которого выполняется правило
C++ Дано действительное E>0. Найти первый член y[n], для которого выполнено y[n]-y[n-1]<E
C++ Найти первый член последовательности, для которого выполняется условие
Найти первый член последовательности, для которого выполняется заданное условие C++
Найти наименьший номер элемента последовательности, для которого выполняется условие М C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
24.05.2009, 17:06     Рекурсия.Найти xn, для которого |Xn - Xn-1|<10^n #2
А по твоему,что это - "^" - за значок?Он не обозначает возведение в степень.Для этого есть функция pow из math.h(C),cmath(C++).
anta
1 / 1 / 0
Регистрация: 16.12.2008
Сообщений: 15
24.05.2009, 17:24  [ТС]     Рекурсия.Найти xn, для которого |Xn - Xn-1|<10^n #3
Да точно спасибо.Тогда так if (OTV>pow(10,n))
Evg
Эксперт CАвтор FAQ
17530 / 5768 / 368
Регистрация: 30.03.2009
Сообщений: 15,865
Записей в блоге: 26
24.05.2009, 17:56     Рекурсия.Найти xn, для которого |Xn - Xn-1|<10^n #4
Да ты хоть напиши нормально как ругается и на какую строку
anta
1 / 1 / 0
Регистрация: 16.12.2008
Сообщений: 15
24.05.2009, 18:12  [ТС]     Рекурсия.Найти xn, для которого |Xn - Xn-1|<10^n #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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>  
#include "locale.h"
double recyrc (double a);
                
void main()
{
setlocale(LC_ALL,"Russian"); 
double p=0;
double a=0;
char ch;
printf("!!// Пусть  X0=1 , Xi=(2-xp*xp*xp)/5 где i=1,2,.. Найти xn, для которого |Xn - Xn-1|<10^a!!");
do{     
    
    printf("Введите действительное число a:");
    scanf_s("%lg",&a);
    p=recyrc(a);
    printf("\nПри введенном значении a=%lg Xn=%lg",a,p);
        printf("\nХотите произвести  еще одно вычисление?(Y/N)\n");
    do
    {
    ch=toupper(_getch());
 
    if( (ch=='Y')||(ch=='N') )
    printf("%c\n",ch);
    }
    while (ch!='Y' && ch!='N');
}
    while (ch!='N');
printf("для продолжения нажмите любую клавишу...");
_getch();
}
 
double recyrc (double a)
{       static int i=0;
        static double xp=0;
        static double xn=0;
        static double x=0;
        double OTV=0;
        if(i==0)
           {
            x=1;
            i++;
            }
           
            xp=x;
            xn=(2-xp*xp*xp)/5;
            x=xn;
 
        OTV=fabs(x-xp);
      if (OTV>pow(10,a))
        {   ++i;
            recyrc(a);
      }
        else
          {
         i=0;
           }
return (x);
    }
Больше не ругается.
Программа запускается,теперь не могу понять почему при разных "a" выводит одно и тоже Xn.
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
24.05.2009, 18:31     Рекурсия.Найти xn, для которого |Xn - Xn-1|<10^n #6
В работе кода не разбирался,но может,просто не выполняется инструкция
C++
1
2
3
4
5
6
7
8
9
10
11
                if(i==0)
                   {
                        x=1;
                    i++;
                    }
                   
                    xp=x;
                        xn=(2-xp*xp*xp)/5;
                        x=xn;
 
                OTV=fabs(x-xp);
,когда i>0,но условие (OTV>pow(10,a)) неверно.То есть нет возможности возврата к началу первого if.Поэтому задавай цикл,или подумай ещё и добавь условия.

И ещё одно: я рекурсию не очень знаю пока,но у тебя каждый раз при вызове recyrc в начале все данные обнуляются-это нормально?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2009, 19:48     Рекурсия.Найти xn, для которого |Xn - Xn-1|<10^n
Еще ссылки по теме:
Найти наибольшее положительное целое число n, для которого выполняется условие: C++
C++ Найти наименьший номер элемента последовательно-сти, для которого выполняется условие
Найти наименьший номер элемента последовательности, для которого выполняется заданное условие C++
C++ Найти наименьший номер члена последовательности, для которого выполняется условие |an-an-1|< ε
C++ Найти индексы элемента матрицы, для которого модуль разности достигает максимума

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

Или воспользуйтесь поиском по форуму:
anta
1 / 1 / 0
Регистрация: 16.12.2008
Сообщений: 15
24.05.2009, 19:48  [ТС]     Рекурсия.Найти xn, для которого |Xn - Xn-1|<10^n #7
На счёт обнуления ,по моему, так и дожно быть.
Yandex
Объявления
24.05.2009, 19:48     Рекурсия.Найти xn, для которого |Xn - Xn-1|<10^n
Ответ Создать тему
Опции темы

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