Алгоритм Вычисления Уравнения |a+5x|/(b-x)=2c

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

  1. RayPeace

    RayPeace Гость

    Прошу помощи в создании алгоритма решения уравнения |a+5x|/(b-x)=2c . а, b и c дано.
    Заранее очень благодарен.
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    на множестве рациональных чисел

    Код (C++):
    x=(2cb-a)/(5+2c);
    if((x<b)&&(c>0))
    cout<<x;
    else
    {
    if((x>b)&&(c<0)&&(c!=-2.5))
    cout<<x;
    else
    сout<<"Нет решений";
    }
    и вообще учи математику
    элементарное уравнение для 8 класса!
     
  3. RayPeace

    RayPeace Гость

    Whatka
    Большое спасибо, не могли бы вы помочь мне и для составления алгоритма этого 2|c-2x|=ax+b, уравнения
    буду очень благодарен.
     
  4. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Следует отметить что мы рассматриваем данное уравнение на множестве рациональных чисел.
    Разделим обе части уравнения на не нулевую константу левой части
    и почленно разделим дробь,полученную в правой части.
    Так как модуль есть величина неотрицательная(см.определение)
    рассмотрим два случая.В первом случае модуль и правая часть
    уравнения одновременно равны нулю,я думаю вам не составит
    труда выразить иксы в обоих случаях и посмотреть отношение коэффицентов,вводимых
    с клавиатуры.То есть после ввода с клавиатуры коэффицентов нужно рассмотреть
    условие выполнения полученного соотношения,при истинности данного условия
    значения иксов есть множество рациональных чисел.В противном слчае рассматриваем
    второй случай.Во втором случае просто расскрываем модуль сами!преобразовываем
    уравнение и выражаем икс.В программе составляем подсчёт значения икса,при условии
    что правая часть исходного уравнения строго больше нуля.


    напомню вам своё высказывание по поводу ваших познаний в математике.
     
  5. rrrFer

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

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Whatka , слишком добрый, я бы не помог, особенно второй раз )
     
  6. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    думаю для человека начавшего изучать С++(минимум 10 класс)
    и затрудняющегося решить такие уравнения это является
    свидетельсвом или лени,захватившей контроль над разумом,
    или крепкой дружбы с математикой,а судя по процессу построения аналогий,
    и с другими техническими предметами в общем.


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

    :)
     
  7. Triplecool

    Triplecool Гость

    сначала извлечём x

    2*c-2*x=a*x+b;
    2*x+a*x=2*c-b;
    x*(2+a)=2*c-b;
    x=(2*c-b )/(2+a);//Вот эту формулу мы будем и испоьзовать

    Надеюсь всё понятно что я делаю :)

    Код (C++):
    #include <iostream>
    #include <conio.h>

    using namespace std;

    int main(){
    float a,b,c,x;

    cout << "Enter a \n";
    cin >> a; //Вводим значение a

    cout << "Enter b \n";
    cin >> b; //Вводим значение b

    cout << "Enter c \n";
    cin >> c;  //Вводим значение c

    if (a!=-2) //Ставим условие чтобы a не было равно -2, т.к делить на ноль нельзя
    {
    x=(2*c-b)/(2+a);
    cout << x;
    }
    else {cout << "Helza delit na 0!!!\n";} //Если a равно -2 то выводим сообщение Нельзя делить на ноль
    _getch();
    return 0;
    }



    Обижаешь меня:( Я начал программировать в 8 классе, а на C++ в 9 классе (уже как два месяца)
     
  8. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    Triplecool я за тебя рад
    но решение не верное
     
  9. rrrFer

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

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    там был модуль...
    |{c-2x >= 0
    |{2c-4x=ax+b
    и
    |{c-2x<0
    |{4x-2c=ax+b
    =>
    |{x<=c/2
    |{x=(b-2c)/(a+4)
    и
    |{x>c/2
    |{x=(b+2c)/(4-a)

    Тогда:
    1. вычисляешь x=(b-2c)/(a+4)
    2. если x<=c/2 - выводишь х, иначе на п.3
    3. вычисляешь x=(b+2c)/(4-a)
    4. если x>c/2 - выводишь х, иначе выводишь "нет решения"

    Хотя, допускаю, что что-то забыл, но вятка, у тебя верное решение первой задачи? - меня терзают сомнения по поводу условия:
    Код (Text):
    if((x<b)&&(c>0))
    а также:
    Код (Text):
    if((x>b)&&(c<0)&&(c!=-2.5))
    cout<<x;
    первое условие я бы заменил на x>=a/5
    в ветке else вычислил бы x=(a+2bc)/(2c-5) и проверил бы условие x<a/5
     
  10. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    да верное.

    |a+5x|=2c(b-x) //b!=x

    так как модуль не отрицательная велечина то
    существует два случая
    1)|a+5x|=0 и 2c(b-x)=0<=>(b-x)=0 ,но так как b не равно x то этот случай не рассматриваем
    2) 2c(b-x)>0
    c>0и(b-x)>0 ИЛИ с<0и(b-x)<0
    с>0иx<b ИЛИ c<0иx>b

    расскрываем модуль
    a+5x=2cb-2cx
    x(5+2c)=2cb-a


    x=(2cb-a)/5+2c;
    вычисляем x и проверяем
    Код (C++):
    if((x<b)&&(c>0))
    с не проверяем на -2.5 так как по условию с>0 и никак отрицательным не может быть
    или если первое не выполняется проверяем
    Код (C++):
    if((x>b)&&(c<0)&&(c!=-2.5))
     
  11. RayPeace

    RayPeace Гость

    Whatka
    а почему вы сначала вычисляете х, а после этого проверяете c>0, эта проверка должна выполнятся после ввода a, b, c.
    и почему не рассматривается случай когда х любое число

    r04
    а как будет проверятся х, если х вычисляется после проверки условия, может в условии взять с!=2,5 ?
     
  12. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    проверку неважно когда вводить

    Я иммел ввиду случаи не нулевых констант(a,b,c)


    при c=0 x=-a/5 (нет cлучаев когда x принимает любое решение)
     
  13. rrrFer

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

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Whatka
    в оригинале b!=x не было.
    Если вы полагаете что модуль не может быть равен нулю - то ошибаетесь.
    Код (Text):
    расскрываем модуль
    a+5x=2cb-2cx
    x(5+2c)=2cb-a
    как-то вы таинственно это делаете. Вы же сами написали что модуль - величина не отрицательная, а значит раскрыть его можно в двух вариантах - если выражение под модулем больше нуля - то ничего не меняем, а если меньше - меняем знаки внутри(этим и обеспечивается неотрицательность)
    еще раз прочитай что написал, я выделил жирным чтобы помочь тебе )

    Добавлено: RayPeace
    поясни свой вопрос, я вроде бы написал понятный алгоритм из 4 пунктов.
    И откуда вы накопали то что я выделил жирным? - если что, я пишу про вторую задачу, а именно:
     
  14. rrrFer

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

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    вятка
    проверь на a=-11,b=1,c=6;
    не уверен, но вроде бы х должно быть равно 1/7
    у вас же нет решения, ну потому что случай когда x < (-a/5) вы вообще не рассмотрели, при этом модуль должен менять знак
     
Загрузка...

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