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

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

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

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

24.05.2009, 16:54. Просмотров 644. Ответов 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 (C++):

Рекурсия: добавить перед каждым элементом массива, старшая цифра которого равна 5, число X - C++
Здравствуйте. Не совсем понимаю, как программу написать через рекурсию. Помогите, пожалуйста или подскажите , как это можно сделать. ...

Найти поддерево, для всех вершин которого выполняется правило - C++
Здравствуйте. Есть задание: Найти поддерево, для всех вершин которого выполняется правило, если – (i) – k – ый сын (j), то (i) не имеет...

Найти первый член последовательности, для которого выполняется условие - C++
Задано действительные числа x,eps (eps&gt;0). Разработать программу, которая находит и печатает первый член an и его номер в заданной...

Дано действительное E>0. Найти первый член y[n], для которого выполнено y[n]-y[n-1]<E - C++
Здравствуйте! Нужно решить задачу на C++: Пусть, y=0 y=(y+1)/(y+2) k=1,2,... Дано действительное E&gt;0. Найти первый член y, для...

Найти первый член последовательности, для которого выполняется условие - C++
Задано действительны величины. Разработать программу, которая находит и печатает первый член и его номер в заданной последовательности, для...

Найти первый член последовательности, для которого выполняется заданное условие - C++
Привет всем :) Неравнодушные люди, будьте любезны, помогите решить кто, что сможет (1,2 задание не обязательно). Задания будут похожие,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
24.05.2009, 17:06 #2
А по твоему,что это - "^" - за значок?Он не обозначает возведение в степень.Для этого есть функция pow из math.h(C),cmath(C++).
anta
1 / 1 / 0
Регистрация: 16.12.2008
Сообщений: 15
24.05.2009, 17:24  [ТС] #3
Да точно спасибо.Тогда так if (OTV>pow(10,n))
Evg
Эксперт CАвтор FAQ
17634 / 5858 / 378
Регистрация: 30.03.2009
Сообщений: 16,160
Записей в блоге: 26
24.05.2009, 17:56 #4
Да ты хоть напиши нормально как ругается и на какую строку
anta
1 / 1 / 0
Регистрация: 16.12.2008
Сообщений: 15
24.05.2009, 18:12  [ТС] #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 #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 в начале все данные обнуляются-это нормально?
anta
1 / 1 / 0
Регистрация: 16.12.2008
Сообщений: 15
24.05.2009, 19:48  [ТС] #7
На счёт обнуления ,по моему, так и дожно быть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2009, 19:48
Привет! Вот еще темы с ответами:

Найти наименьший номер элемента последовательности, для которого выполняется условие М - C++
Помогите,пожалуйста,никак не могу составить программу. Найти наименьший номер элемента последовательности,для которого выполняется...

Найти наибольшее положительное целое число n, для которого выполняется условие: - C++
условие: Плиз очень надо=) Запрещено размещать тему в нескольких разделах одновременно (кросспостинг), а также дублировать...

Найти наименьший номер элемента последовательно-сти, для которого выполняется условие - C++
Дано начальное значение a&quot;нулевое&quot;=1, r = 1.8 и рекуррентная формула a&quot;1&quot;=(1+r)*a&quot;i-1&quot;-r*a^2&quot;i-1&quot; . Найти наименьший номер элемента...

Найти наименьший номер элемента последовательности, для которого выполняется заданное условие - C++
Дано начальное значение а0=x и рекуррентная формула ai=x/(2*a^2(i-1)) . Найти наименьший номер элемента последовательности, для которого...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.05.2009, 19:48
Ответ Создать тему
Опции темы

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