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

Вычислить значение выражения - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
akimbladina
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 4
25.09.2011, 20:08     Вычислить значение выражения #1
http://www.cyberforum.ru/attachment....1&d=1316966829

Example:
Input:
65
Output:
0.452665
Миниатюры
Вычислить значение выражения  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2011, 20:08     Вычислить значение выражения
Посмотрите здесь:

C++ Вычислить значение выражения
Вычислить значение выражения C++
Вычислить значение выражения C++
C++ Вычислить значение выражения
Вычислить значение выражения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olga_
25.09.2011, 21:52
  #2

Не по теме:

Придется на калькуляторе вам эту сумму считать). Поймите, легче самому обучиться, чем искать помощи все время

-=ЮрА=-
Заблокирован
Автор FAQ
25.09.2011, 22:00     Вычислить значение выражения #3
akimbladina, в
Цитата Сообщение от akimbladina Посмотреть сообщение
Example:
Input:
для ввода нужен не только предел последовательности 65, но и само х
Вот алгоритм на плюсах
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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main () 
{
    int i,n;
    double x,upsum,downsum;
    do
    {
        std::cout<<"Enter x : ";
        std::cin>>x;
        std::cout<<"Enter max power in sequence : ";
        std::cin>>n;
        //Начальные счётчики сумм в ноль
        upsum = 0;
        downsum = 0;
        for(i = 1; i < n; i++)
        {
            if(i % 2 == 0)
                upsum += (x - i);
            else
                downsum += (x - i);
        }
        std::cout <<"answer : "<<upsum/downsum<<std::endl;
        std::cout<<"\r\nPress Y to new input\r\n";
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
Результат работы
Enter x : 5.64
Enter max power in sequence : 65
answer : 1.03794

Press Y to new input
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.09.2011, 22:03     Вычислить значение выражения #4
Как вариант:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
int main()
{
   double x, rez;
   int i, flag;
   std::cin >> x;
   flag = rez = 1;
   for (i = 2; i <= 64 && flag; i += 2)
      if (x - i + 1 == 0)
         flag = 0;
      else
         rez *= (x - i)/(x - i + 1);
   flag ? std::cout << rez : std::cout << "incorrect x";
   std::cin.get();
   return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
25.09.2011, 22:09     Вычислить значение выражения #5
akimbladina, учитывая пост Thinker, предложенный мной алгоритм можно ускорить в 2 раза записав этот цикл
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(i = 1; i < n; i++)
* * * * * * * * {
* * * * * * * * * * * * if(i % 2 == 0)
* * * * * * * * * * * * * * * * upsum += (x - i);
* * * * * * * * * * * * else
* * * * * * * * * * * * * * * * downsum += (x - i);
* * * * * * * * }
таким образом
C++
1
2
3
4
5
for(i = 2; i < n; i += 2)
        {
            upsum   += (x - i);
            downsum += (x - (i - 1));
        }
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.09.2011, 22:12     Вычислить значение выражения #6
-=ЮрА=-, а почему вы суммируете, если там произведения в числителе и знаменателе. Вечер сказывается
-=ЮрА=-
Заблокирован
Автор FAQ
25.09.2011, 22:40     Вычислить значение выражения #7
Thinker, да точно уже совсем невнимателен стал...
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.09.2011, 00:12     Вычислить значение выражения #8
Thinker, да вечер на вас обоих сказывается
http://www.cyberforum.ru/cgi-bin/latex.cgi?f(x) =\frac{f_{1}(x)}{f_{2}(x)}= \frac{(x - n_{i - 1})  (x - n_{i }) (x - n_{i + 1})} {(x - m_{i - 1}) (x - m_{i } )(x - m_{i + 1})} при этом http://www.cyberforum.ru/cgi-bin/latex.cgi?n_{1} = 2, m_{1} = 1, m_{2} = 3 и дальше http://www.cyberforum.ru/cgi-bin/latex.cgi?n_{i}= 2^{i} \wedge n_{i} \leq 65 \Rightarrow i_{max} = 6 , http://www.cyberforum.ru/cgi-bin/latex.cgi? m_{i + 1} =m_{i - 1} + 2m_{i} я только не понимаю как получается http://www.cyberforum.ru/cgi-bin/latex.cgi?m = 63 ну, вообще - то я понял как при i = 6, m = 63 с кем поделиться? ладно, не буду выделываться :-) http://www.cyberforum.ru/cgi-bin/latex.cgi?m_{i+1} = 3m_{i} - 2m_{i - 1}

Добавлено через 59 минут
конечно чтобы скомпилировать в винде придется поработать головой немного
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
#include </usr/include/c++/4.5/iostream>
#include </usr/include/c++/4.5/cstdlib>
#include </usr/include/c++/4.5/cmath>
 
float up_rez(float rezult, float x, int stepen, int iter);
float down_rez(float rezult, float x, int iter);
 
int main(){
    float x = 65, up_rezult = 1, down_rezult = 1, rez;
 
    rez = up_rez(up_rezult, x, 1, 6) / down_rez(down_rezult, x, 6);
 
    std::cout << rez << "\n";
    return 0;
}
 
float up_rez(float rezult, float x, int stepen, int iter){
    if(iter > 0){
        rezult *= x - pow(2, stepen);
        return up_rez(rezult, x, ++stepen, --iter);
    }
    return rezult;
}
 
float down_rez(float rezult, float x, int iter){
    int dx = 1, x1 = 0, tmp;
    while(iter){
        rezult *= x - dx;
        tmp = dx;
        dx = 3 * dx - 2 * x1;
        x1 = tmp;
        --iter;
    }
    return rezult;
}
результат
Код
$ ./temp 
0.452665
был бы признателен, если бы показали вызов функции рекурсивно
C++
1
float down_rez(float rezult, float x, int iter)
magirus
26.09.2011, 09:44
  #9
 Комментарий модератора 
akimbladina, называйте темы информативно...
-=ЮрА=-
Заблокирован
Автор FAQ
26.09.2011, 09:51     Вычислить значение выражения #10
Цитата Сообщение от alkagolik Посмотреть сообщение
float up_rez(float rezult, float x, int stepen, int iter);
float down_rez(float rezult, float x, int iter);
, можно вообще на каждой итерации считать отношение
C++
1
2
3
buf = 1;
for(i = 2; i < n; i += 2)
        buf *= (x - i)/(x - (i - 1));
и не считать ни верх ни низ

Не по теме:

Когда вчера сонным делал задачу грешным образом думал что и в числителе и в знаменателе суммы скобок, а в случае произведения лучше использовать свойства дробей.

alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.09.2011, 14:22     Вычислить значение выражения #11
-=ЮрА=-, вы так и не поняли. там нет цикла с шагом 2. есть цикл числителя с шагом http://www.cyberforum.ru/cgi-bin/latex.cgi?n=2^{i},~i = 1, 2, 3, 4, 5, 6 и цикл знаменателя с шагом http://www.cyberforum.ru/cgi-bin/latex.cgi?m_{i+1} = 3m_{i}-2m_{i-1}, i = 1, 2, 3, 4, 5, 6 i - шаг и отрезок цикла, n, m - переменные. В вашем варианте это будет выглядеть так
C++
1
2
3
4
5
6
7
8
float rezult = 1, x = 65, dx = 1, x1 = 0;/*x1 = 0 это значение переменной m с индексом 0,
которое опускается т.к. i > 0*/
for(int i = 1; i < 6, ++i){
      rezult *= (x - pow(2, i)) / (x - dx);
      int tmp = dx;
      dx = 3 * dx - 2 * x1;
      x1 = tmp;
}
-=ЮрА=-
Заблокирован
Автор FAQ
26.09.2011, 14:24     Вычислить значение выражения #12
alkagolik, посмотрите 10-й пост и сравните с вашим циклом
Цитата Сообщение от alkagolik Посмотреть сообщение
float rezult = 1, x = 65, dx = 1, x1 = 0;/*x1 = 0 это значение переменной m с индексом 0,
которое опускается т.к. i > 0*/
for(int i = 1; i <=6, ++i){
* * * rezult *= (x - pow(2, i)) / (x - dx);
* * * int tmp = dx;
* * * dx = 3 * dx - 2 * x1;
* * * x1 = tmp;
}
- смысл искать скрытые последовательности, если в лоб намного быстрей и понятней решать. PS:Я прекрасно понял о чём говорилось вами ранее...
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.09.2011, 14:26     Вычислить значение выражения #13
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
если в лоб намного быстрей и понятней решать
так я не спорю, я просто говорю что решаете вы не то что нужно решать ведь видно же что при х = 65 у меня результат верный, а ваш нет. значит что-то не так с алгоритмом, верно ведь?
-=ЮрА=-
Заблокирован
Автор FAQ
26.09.2011, 14:48     Вычислить значение выражения #14
Цитата Сообщение от alkagolik Посмотреть сообщение
так я не спорю, я просто говорю что решаете вы не то что нужно решать ведь видно же что при х = 65 у меня результат верный, а ваш нет.
- с чего вы это взяли???

Добавлено через 1 минуту
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(i = 1; i < n; i++)
- цикл прекратиться при i = 64 < 65 или что вам не понятно в моём решении???

Добавлено через 2 минуты
Для избежания неверных трактовок предлагаю ТС в этих циклах заменить условие окончания цикла на следующее i <= n и вводить 64 по этому запросу
std::cout<<"Enter max power in sequence : ";
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for(i = 1; i < n; i++)
* * * * * * * * {
* * * * * * * * * * * * if(i % 2 == 0)
* * * * * * * * * * * * * * * * upsum += (x - i);
* * * * * * * * * * * * else
* * * * * * * * * * * * * * * * downsum += (x - i);
* * * * * * * * }
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
buf = 1;
for(i = 2; i < n; i += 2)
* * * * buf *= (x - i)/(x - (i - 1));
Добавлено через 11 минут
alkagolik, вот листинг с выводом промежуточных результатов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main () 
{
        int i,n;
        double x,buf;
        do
        {
                std::cout<<"Enter x : ";
                std::cin>>x;
                std::cout<<"Enter max power in sequence : ";
                std::cin>>n;
                //Начальные счётчики сумм в ноль
                for(buf = 1, i = 2; i <= n; i += 2)
                    std::cout<<(buf *= (x - i)/(x - (i - 1)))<<"\r\n";
                std::cout <<"answer : "<<buf<<std::endl;
                std::cout<<"\r\nPress Y to new input\r\n";
        }
        while(toupper(getch()) == 'Y');
    return 0;
}
Enter x : 65
Enter max power in sequence : 64
0.984375
0.968498
продолжение
0.952356
0.935936
0.919223
0.902201
0.884851
0.867154
0.849088
0.830629
0.811752
0.792424
0.772613
0.752282
0.731385
0.709874
0.68769
0.664767
0.641025
0.61637
0.590688
0.563839
0.535647
0.505889
0.474271
0.440394
0.403695
0.363325
0.31791
0.264925
0.198694
0.0993468
answer : 0.0993468


Добавлено через 3 минуты
Проверка
Итерация 1
(64 - 2)/(64 - 1) = 62/63 = 0,9841
Итерация 2
0,9841*(64 - 4)/(64 - 3) = 0,9841*60/61 = 0,9841*0,9836 = 0,96796076 (~0,968)
-=ЮрА=-
Заблокирован
Автор FAQ
26.09.2011, 15:08     Вычислить значение выражения #15
alkagolik, чтобы снять у вас все вопросы не поленился и добросовестно вбил 64 скобки в маткаде, прилагаю скрин и ответ 0.09935 , сравните его с этим
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
answer : 0.0993468
думаю все вопросы будут сняты
Миниатюры
Вычислить значение выражения  
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.09.2011, 15:14     Вычислить значение выражения #16
-=ЮрА=-, вы же видите что ваш результат не отвечает заданному... вывод: не так построено вычисление.
требуемый результат:
Input:
65
Output:
0.452665
представлю задачу иначе, немного проще.
дано:
http://www.cyberforum.ru/cgi-bin/latex.cgi?F(x, n, m) = \frac {\sigma(x, f_{1}(n))}{\omega (x, f_{2}(m))}<br />
\sigma (x, f_{1}(n)) = (x - f_{1}(n_{1}))(x - f_{1}(n_{2})) \dot ... \dot (x - f_{1}(n_{i}))<br />
\omega (x, f_{2}(m)) = (x - f_{2}(m_{1})) (x - f_{2}(m_{2})) \dot ... \dot (x - f_{2}(i))<br />
f_{1}(n) = n_{i} = 2^{i}<br />
f_{2}(m) = m_{i} = 3m_{i - 1} - 2m_{i - 2}<br />
в моем решении http://www.cyberforum.ru/cgi-bin/latex.cgi?F(x, n, m) была вычислена с помощью двух функций числителя http://www.cyberforum.ru/cgi-bin/latex.cgi?\sigma(x, f_{1}(n)) и знаменателя http://www.cyberforum.ru/cgi-bin/latex.cgi?\omega (x, f_{2}(m)) и что самое главное получен верный результат. Вы просто запутались в задаче, поэтому и неверно составили алгоритм, т.е. просто не то что надо вычисляете. Посмотрите внимательно уравнение функции в первом топике. Доказательство моей правоты - верный результат при исходном х = 65. Без обид, ничего дурного.
а где дано числитель
(x - 2)(x - 4)( x - 6)(x - 8)... ? я такого не видел в задании.
тоже касается и знаменателя. думаю все вопросы будут сняты
-=ЮрА=-
Заблокирован
Автор FAQ
26.09.2011, 15:22     Вычислить значение выражения #17
alkagolik,в задании в числетеле даны чётные минусы в знаменателе нечётные, все их перебрал в маткад, и програмно, я уже не пойму почему спорим???
Цитата Сообщение от akimbladina Посмотреть сообщение
0.452665
не думали что данный ответ может быть взят из головы лишь для того чтобы показать как вводить и как выводить
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.09.2011, 15:27     Вычислить значение выражения #18
ага вот так

Добавлено через 2 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
alkagolik,в задании в числетеле даны чётные минусы в знаменателе нечётные, все их перебрал в маткад, и програмно, я уже не пойму почему спорим???
не думали что данный ответ может быть взят из головы лишь для того чтобы показать как вводить и как выводить
вас не смущает третий множитель числителя?
-=ЮрА=-
Заблокирован
Автор FAQ
26.09.2011, 15:28     Вычислить значение выражения #19
Цитата Сообщение от alkagolik Посмотреть сообщение
ага вот так
- в смысле?Я уж думал что скобки сокращаются, но они не сократимы, вбил в ручную чтобы и себя проверить и вас переубедить -результаты програмного расчёта и маткад совпали до 3-го знака думаю вопросов не далжно уже возникать...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2011, 15:41     Вычислить значение выражения
Еще ссылки по теме:

C++ Вычислить значение выражения
Вычислить значение выражения C++
C++ Вычислить значение выражения

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

Или воспользуйтесь поиском по форуму:
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
26.09.2011, 15:41     Вычислить значение выражения #20
-=ЮрА=-, почему в задании в числителе нету четного числа 6?
Yandex
Объявления
26.09.2011, 15:41     Вычислить значение выражения
Ответ Создать тему
Опции темы

Текущее время: 10:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru