Помогите Студенту ))

Тема в разделе "MS Visual C++", создана пользователем Programmist-Zadrot, 22 окт 2011.

  1. Programmist-Zadrot

    Programmist-Zadrot Гость

    здравствуйте уважаемые будущие коллеги)) нам в институте задали задание:
    Дано вещественное число s(s>0) и действительное х(х не равное нулю) . Найти сумму ряда, для которого k-й элемент определяется по формуле: a=((x^k)/k)^(1/4k) . Процесс вычисления закончить, когда будет справедливо условие: |a-(а предидущее)|<s . Выдать сумму ряда, количество членов последовательности, значение последнего члена.

    Собственно проблема вот в чём: это "чудо" компелируеться , ошибок не выдаёт , запускаеться ,я ввожу х , ввожу s , а дальше ничего не происходит :RTFM: такое ощущение , что оператор for даже не начинает работу ( ибо я пробовал вставлять в тело цикла cout<<k<<endl; и на экран ничего не выводилось.я уже не знаю , это я туплю или это висуал студио от мелкософта мне мозг насилует :crash: преподу показывал програмный код - он говорит всё вроде правильно , но почему оно не хочет работать - не знает.
    взываю вас о помощи о великие ))
    вот програмный код:


    #include <stdafx.h>
    #include <iostream>
    #include <math.h>
    using namespace std ;

    int main()
    {
    int k;
    double x,s,sum,last,m;
    a: cout<<"Vvedite x ( x ne doljen ravnyatsa nolyu)"<<'\n';
    cin>>x;
    if(x==0) goto a;
    b: cout<<"Vvedite s (s doljno bit bolshe nolya)"<<'\n';
    cin>>s;
    if(s<0) goto b ;
    m=0;
    sum=0;
    last=pow(x,(1/4));
    for(k=2;abs(last-m)<s ;k=k+1)
    {
    m=last;
    last=pow((pow(x,k)/k),(1/4*k));
    sum=last+sum;
    }
    cout<<"Summa ryada="<<sum;
    cout<<"Kollichestvo chlenov="<<k;
    cout<<"Znachenie poslednego chlena="<<last;





    return 0;
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Перед return 0; добавь system( "pause" );

    И еще, строку: last=pow(x,(1/4)); замени на: last=pow(x,(1.0/4));
     
  3. rrrFer

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

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    и строчку:
    Код (Text):
    last=pow((pow(x,k)/k),(1/4*k));
    на:
    Код (Text):
    last=pow((pow(x,k)/k),(1./4*k));
     
  4. Programmist-Zadrot

    Programmist-Zadrot Гость

    спасиба товарищи , программа заработала. с меня пиво))) :lol: :YES:
    P.S.
    Вся романтика работы программиста заключаеться в том ,что на столе стоит бутылочка пивка , под столом пушыстый котЭ трёться об твою ногу и согревает торчащий из дырявого носка большой палец ,хлебные крошки и шерсть того самого котЭ уже пол-года находяться между кнопками клавиатуры, на колонках играет Heavy Metal , в раковине уже неделю лежит посуда , которую использовали по третьему разу , так и не помыв; на лице щетина, совсем немного недотягивающяя до полноценной бороды - и именно поэтому девушка не может быть программистом ))))
     
  5. Programmist-Zadrot

    Programmist-Zadrot Гость

    и как на зло опять та же самая проблема . програмный код -метод решения уравнения методом дихотомии . только здесь нету функций возведения в степень. компилируеться , ошибок не выдаёт . где я мог допустить ошибку? и вообще , не посоветуете ли мне какую-нибуть литературу по этой теме? потому,что взывать форумчан о помощи каждый раз когда происходит таакое - неудобно как то
    #include "stdafx.h"
    #include <iostream>
    #include <math.h>
    double f(double x)
    {
    return cos(2.0/x)*sin(x)+1.0 ;
    }
    double minimum (double a,double b) // funktsiya nahodit naimenshee znachenie
    {
    double min;
    if(f(a)>f(b))
    min=f(b);
    else
    min=f(a);
    return min;
    }


    int main()
    {
    double a,b,c,epsilon,k; // k - minimalnoe znachenie funktsii "f"
    a: std::cout<<"Enter a,b,epsilon (epsilon>0)"<<'\n';
    std::cin>>a>>b>>epsilon;
    if(epsilon<=0) goto a;
    if(f(a)>f(b))
    k=f(b);
    else
    k=f(a);
    while((b-a)<epsilon)
    {
    c=(a+b)/2.0 ;
    if( (f(с))*(f(b))<0 )
    a=c;
    else
    b=c;
    if(k>minimum(a,b)) k=minimum(a,b);
    }
    std::cout<<"koren uravneniya ="<<c<<'\n';
    std::cout<<"minimalnoe znachenie funktsii ="<<k;


    return 0;
    }
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Я не вижу обещанного пива, вот где ошибка.

    * вставляй код в тэги
     
  7. Programmist-Zadrot

    Programmist-Zadrot Гость

    Код (C++):
    // 5laba.cpp: определяет точку входа для консольного приложения.
    //

    #include "stdafx.h"
    #include <iostream>
    #include <math.h>
    double f(double x)
    {
    return (cos(2.0/x))*(sin(x))+1.0;
    }


    double minimum (double a,double b) // funktsiya nahodit naimenshee znachenie
    {
    double min;
    if( (f(a))>(f(b)) )
    min=f(b);
    else
    min=f(a);
    return min;
    }


    int main()
    {
    double a,b,c,epsilon,k; // k - minimalnoe znachenie funktsii "f"
    a: std::cout<<"Enter a,b,epsilon (epsilon>0)"<<'\n';
    std::cin>>a>>b>>epsilon;
    if(epsilon<=0) goto a;
    k=minimum((f(a)),(f(b)));
    while((b-a)<epsilon)
    {
    c=(a+b)/2.0;
    if( (f(c))*(f(b))<0 )
    a=c;
    else
    b=c;
    if(k>(minimum(a,b)) ) k=minimum(a,b);
    }
    std::cout<<"koren uravneniya ="<<c<<'\n';
    std::cout<<"minimalnoe znachenie funktsii ="<<k;


    return 0;
    }
    P/S
    Приезжай в Харьков - попьём пивася ))
     
  8. rrrFer

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

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    double minimum (double a,double b) // funktsiya nahodit naimenshee znachenie
    {
    double min;
    if( (f(a))>(f(b)) )
    min=f(b);
    else
    min=f(a);
    return min;
    }
    вызов функции - это уже тяжелая операция, т.к. состояние вызывающей функции сохраняется в нерезиновом стеке...а еще и вызванная функция должна отработать, поэтому более гуманно написать так:
    Код (Text):
    double minimum (double a,double b) {
    double min, fa,fb;
    fa = f( a ), fb = f( b );
    if( fa > fb )
    return fb;
    return fa;
    }
    и тут тоже:
    Код (Text):
    if(k>(minimum(a,b)) ) k=minimum(a,b);
    но сам перепиши )


    ------------
    Код (Text):
    std::cout<<"minimalnoe znachenie funktsii ="<< k;
    если k - это значение функции - то что это:
    Код (Text):
     if(k>(minimum(a,b)) ) k=minimum(a,b);
    ? - тут "К" получает значение границы интервала.

    Ну и минимальное значение надо икать не так. Если ты не заметил - то метод дихитомии использует информацию о том, что функция на заданном участке монотонна - именно поэтому произведение значений функции на границах интервала сравнивают с нулем. Ну а если функция монотонна - то возьми сразу ее минимальное значение - это либо f(a), либо f:)lol: - где а и b - данные, введенные пользователем.
     
  9. woka

    woka Гость

    если ты на первом курсе под первые лабы по праграмухе пьёшь пиво, то до второго курса у тебя есть большой шанс не дожить. и с пивом ты подло поступил. пообещав не дал его. когда говорят с меня пиво то это подразумеваеться что если чел живёт от тебя далеко и не может к тебе приехать ты кидаешь ему капейку на какой нибудь веб мани кошелёк
     
  10. rrrFer

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

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    ну это не так )
    а это так (
     
  11. Programmist-Zadrot

    Programmist-Zadrot Гость

    ну , как говориться всё в меру хорошо , поэтому и пиво я потр*цензура*ю в меру))) а вот насчёт ОБЕЩАНОГО пива - прошу прощения , если кого обидел. жил бы человек в моём городе - яб само собой угостил , а вот насчёт копейки на вебмани - это не пиво ))) да и к тому же я этим вэбманям не доверяю
     
Загрузка...

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