Рекурсия

Тема в разделе "C/C++/C#", создана пользователем vladis222, 16 янв 2012.

  1. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Здравствуйте, еще проблема с лабораторной на рекурсию . У меня в методичке три колонки:
    Вычисляемая ф-я:ln x/(x-1) Формулы по которым производится вычисление: y=сумма от 1 до бесконечности выр-я 1/k *x в ст k
    Значения аргументов x=0,7 eps=0,01. Я написал код, но преподу не понравилось его запись, посмотрите пож-та



    #include <stdio.h>
    #include <conio.h>
    #include <locale.h>
    #include <math.h>
    float ynext(float n,int f)
    {float sum(float n, int f);
    float y;
    y=sum(n,f+1);
    printf("%f ",y);
    return y;}
    float ln (float n, int k,float eps)
    {float ynext(float n,int f);
    float y;
    float sum(float n, int f);
    y=sum(n,k);
    printf("%f\n",y);
    if ((ynext(n,k)-y)<eps)
    return y;
    else return ln(n,k+1,eps);
    }
    float sum(float n, int f)
    {float s=0;
    float z;
    float g=0;
    while (g!=f)
    {z=(f);
    s+=1/(z*pow(n,f));
    g++;}
    return s;
    }
    int main(void)
    {float x;
    float lg;
    float eps;
    setlocale(LC_ALL,"");
    printf("Введите Х\n");
    scanf_s("%f", &x);
    printf("Введите точность измерений\n");
    scanf_s("%f", &eps);
    lg=ln(x,1,eps);
    printf("ln(x/(x-1)) = %f",lg);
    _getch();
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    посмотрел. мне тоже не понравился
     
  3. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    А что собственно, нужно сделать в этой лабе? Подскажи, пожалуйста
     
  4. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    #include<stdio.h>
    #include<math.h>
    #include<locale>
    #include<conio.h>
    float y(float x);
    float next_y(float x,float yn);
    {return (1/ (k*pow(x,k)));}
    float ln (float x,float yn,float ynplus1,float eps)
    {if(fabs(ynplus1-yn)<eps)
    return (ynplus1);
    else
    return ( ln (x,ynplus1,next_y(x,ynplus1), eps));

    float main_ln(float x,float eps)
    {return (ln (x/(x-1),y0(x),next_y(x/(x-1),y0(x)),eps ));
    }
    main()
    {float x,eps,y;
    printf("Введите x : ");
    scanf("%f",&x);
    printf("И значение eps : ");
    scanf("%f",&eps);
    y=main_ln(x,eps);
    }

    В методичке нашей разобран пример определение функции корня квадратного из икса, и там похожий код, я написал такой для своей проги
     
  5. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Мне не понравилось что код программы не заключен в тэг С++ и отсутствуют отступы в блоках, из-за чего он становится нечитабельным.

    Понятия не имею. Написано так что черт голову сломит. Перепиши толком, без сокращений, в формулах пробелы убери чтобы было понятно, заключи код в тэг С++, расставь отступы в блоках, а потом посмотрим что можно сделать.
     
  6. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Таблица состоит из трех колонок. Первая колонка-название вычисляемой функции. У меня это- ln ( x/(x-1)).
    Вторая колонка содержит формулы для вычисления вычисляемой функции. У меня это в моем случае сумма от k=1 до бесконечности от 1/(kx^k),[x^2>1]. В третьей значения аргументов x и eps.
     
  7. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    может быть оно и верно считает, но оформлено отвратно.
    методичку выбрось
    это не может работать:
    Код (Text):
    #include<conio.h>
    float y(float x);
    float next_y(float x,float yn);
    {return (1/ (k*pow(x,k)));}
    и не стоит объявлять функции внутри других функций, это весьма запутывает, особенно если расставить фигурные скобочки как у вас )
     
  8. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Ну а подскажите,как правильно решить эту задачу?
     
  9. Araneus

    Araneus Гость

    У меня это в моем случае сумма от k=1 до бесконечности от 1/(kx^k),[x^2>1].

    Эту фразу как понимать? У тебя что, там 2 интервала?

    А вообще очень похоже на вычисление значения логарифма с помощью преобразования его функции в ряд Маклорена (или ряд Тейлора)

    А Можешь засканировать/зафоткать условие и скинуть сюда?
     
  10. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Вот фотка. Мой вариант-19)) 261220112306_1_.jpg
     
  11. Araneus

    Araneus Гость

    Вот рабочий вариант, но рекурсией тут и не пахнет....
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
    Код (C++):
    #include <iostream.h>
    #include <conio.h>
    #include <math.h>

    float elem (int num, float arg)
    {
    return pow(arg,-num)/num;
    }

    void main ()
    {
    clrscr();
    float x=0, acc, s=0;
    cout << "Enter the value of argument in interval X<-1 or X>1:\n\t";
    cin>> x;
    cout << "\nEnter the accurancy of calculating:\n\t";
    cin >> acc;

    for (int i=1; elem(i,x) > acc; i++)
    {
    s+=elem(i,x);
    }

    cout << "Function ln(x/(x-1)) in point\t"<< x<< "\tis\t"<<s;
    getch();

    }
    Над рекурсией еще думаю
     
Загрузка...
Похожие Темы - Рекурсия
  1. vera2014
    Ответов:
    0
    Просмотров:
    1.071
  2. 95процентов
    Ответов:
    7
    Просмотров:
    1.911
  3. 95процентов
    Ответов:
    0
    Просмотров:
    945
  4. 95процентов
    Ответов:
    0
    Просмотров:
    1.015
  5. vladis222
    Ответов:
    1
    Просмотров:
    1.243

Поделиться этой страницей