Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 4

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

25.09.2011, 20:08. Показов 4463. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\left(x-2 \right)\left(x-4 \right)\left(x-8 \right)\dots\left(x-64 \right)}{\left(x-1 \right)\left(x-3 \right)\left(x-7 \right)\dots\left(x-63 \right)}

Example:
Input:
65
Output:
0.452665
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2011, 20:08
Ответы с готовыми решениями:

Вычислить значение выражения (значение х ввести с компонента Edit)
Перевести математическую формулу на язык с++

Вычислить значение выражения при заданных исходных данных. Сравнить полученное значение с указанным правильным результат
При x = -4.5, y=0,75*10^-4, z=-0.845*10^2 Ответ: s=3,23765

Дан файл, содержащий текст и арифметические выражения. Выписать и вычислить все выражения
Дан файл, содержащий текст и арифметические выражения вида a®b, где ® — один из знаков +, -, *, /...

26
25.09.2011, 21:52

Не по теме:

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

0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
25.09.2011, 22:00
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
1
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.09.2011, 22:03
Как вариант:


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;
}
2
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
25.09.2011, 22:09
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));
        }
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.09.2011, 22:12
-=ЮрА=-, а почему вы суммируете, если там произведения в числителе и знаменателе. Вечер сказывается
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
25.09.2011, 22:40
Thinker, да точно уже совсем невнимателен стал...
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
26.09.2011, 00:12
Thinker, да вечер на вас обоих сказывается
https://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})} при этом https://www.cyberforum.ru/cgi-bin/latex.cgi?n_{1} = 2, m_{1} = 1, m_{2} = 3 и дальше https://www.cyberforum.ru/cgi-bin/latex.cgi?n_{i}= 2^{i} \wedge n_{i} \leq 65 \Rightarrow i_{max} = 6 , https://www.cyberforum.ru/cgi-bin/latex.cgi? m_{i + 1} =m_{i - 1} + 2m_{i} я только не понимаю как получается https://www.cyberforum.ru/cgi-bin/latex.cgi?m = 63 ну, вообще - то я понял как при i = 6, m = 63 с кем поделиться? ладно, не буду выделываться :-) https://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;
}
результат
Code
1
2
$ ./temp 
0.452665
был бы признателен, если бы показали вызов функции рекурсивно
C++
1
float down_rez(float rezult, float x, int iter)
1
26.09.2011, 09:44
 Комментарий модератора 
akimbladina, называйте темы информативно...
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.09.2011, 09:51
Цитата Сообщение от 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));
и не считать ни верх ни низ

Не по теме:

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

0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
26.09.2011, 14:22
-=ЮрА=-, вы так и не поняли. там нет цикла с шагом 2. есть цикл числителя с шагом https://www.cyberforum.ru/cgi-bin/latex.cgi?n=2^{i},~i = 1, 2, 3, 4, 5, 6 и цикл знаменателя с шагом https://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;
}
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.09.2011, 14:24
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:Я прекрасно понял о чём говорилось вами ранее...
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
26.09.2011, 14:26
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
если в лоб намного быстрей и понятней решать
так я не спорю, я просто говорю что решаете вы не то что нужно решать ведь видно же что при х = 65 у меня результат верный, а ваш нет. значит что-то не так с алгоритмом, верно ведь?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.09.2011, 14:48
Цитата Сообщение от 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)
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.09.2011, 15:08
alkagolik, чтобы снять у вас все вопросы не поленился и добросовестно вбил 64 скобки в маткаде, прилагаю скрин и ответ 0.09935 , сравните его с этим
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
answer : 0.0993468
думаю все вопросы будут сняты
Миниатюры
Вычислить значение выражения  
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
26.09.2011, 15:14
-=ЮрА=-, вы же видите что ваш результат не отвечает заданному... вывод: не так построено вычисление.
требуемый результат:
Input:
65
Output:
0.452665
представлю задачу иначе, немного проще.
дано:
https://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 />
в моем решении https://www.cyberforum.ru/cgi-bin/latex.cgi?F(x, n, m) была вычислена с помощью двух функций числителя https://www.cyberforum.ru/cgi-bin/latex.cgi?\sigma(x, f_{1}(n)) и знаменателя https://www.cyberforum.ru/cgi-bin/latex.cgi?\omega (x, f_{2}(m)) и что самое главное получен верный результат. Вы просто запутались в задаче, поэтому и неверно составили алгоритм, т.е. просто не то что надо вычисляете. Посмотрите внимательно уравнение функции в первом топике. Доказательство моей правоты - верный результат при исходном х = 65. Без обид, ничего дурного.
а где дано числитель
(x - 2)(x - 4)( x - 6)(x - 8)... ? я такого не видел в задании.
тоже касается и знаменателя. думаю все вопросы будут сняты
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.09.2011, 15:22
alkagolik,в задании в числетеле даны чётные минусы в знаменателе нечётные, все их перебрал в маткад, и програмно, я уже не пойму почему спорим???
Цитата Сообщение от akimbladina Посмотреть сообщение
0.452665
не думали что данный ответ может быть взят из головы лишь для того чтобы показать как вводить и как выводить
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
26.09.2011, 15:27
ага вот так

Добавлено через 2 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
alkagolik,в задании в числетеле даны чётные минусы в знаменателе нечётные, все их перебрал в маткад, и програмно, я уже не пойму почему спорим???
не думали что данный ответ может быть взят из головы лишь для того чтобы показать как вводить и как выводить
вас не смущает третий множитель числителя?
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
26.09.2011, 15:28
Цитата Сообщение от alkagolik Посмотреть сообщение
ага вот так
- в смысле?Я уж думал что скобки сокращаются, но они не сократимы, вбил в ручную чтобы и себя проверить и вас переубедить -результаты програмного расчёта и маткад совпали до 3-го знака думаю вопросов не далжно уже возникать...
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
26.09.2011, 15:41
-=ЮрА=-, почему в задании в числителе нету четного числа 6?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.09.2011, 15:41
Помогаю со студенческими работами здесь

Дан файл, содержащий текст и арифметические выражения. Выписать и вычислить все выражения
Дан файл, содержащий текст и арифметические выражения вида a®b, где ® — один из знаков +, -, *, / ....

Написать программу, которая вычисляет значение выражения, и определить ее значение для введенных пользователем значений фактических параметров.
Написать программу, которая вычисляет значение выражения, и определить ее значение для введенных...

Вычислите значение выражения. Значение х вводится с клавиатуры
Определите количество трехзначных натуральных чисел, произведение цифр которых равно введенному с...

Написать функцию, которая вычисляет значение выражения, и определить ее значение для введенных пользователем значений фа
Помогите, пожалуйста, написать функцию, которая вычисляет значение выражения, и определить ее...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru