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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
akimbladina
0 / 0 / 0
Регистрация: 25.09.2011
Сообщений: 4
#1

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

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

http://www.cyberforum.ru/attachment....1&d=1316966829

Example:
Input:
65
Output:
0.452665
0
Миниатюры
Вычислить значение выражения  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2011, 20:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить значение выражения (C++):

Вычислить значение выражения - C++
Здравствуйте. помогите в решении задачи вычислить: \(sqrt{3+\sqrt{6+\sqrt{9+...+\sqrt{96+\sqrt{99}\) #include <conio.h> #include...

Вычислить значение выражения - C++
Я пока функцию не до конца понял, может бы кто-то из вас помог написать программу! Даны целые числа а, b, с. Вычислить в-сумму у = min...

Вычислить значение выражения - C++
Помогите прописать решение на программе Borland: z = \frac{\log_{2 - x^2}\, (1 + y^2)}{\log_{2 + |y|} \,(1 + |x|)}

Вычислить значение выражения - C++
Вот примеры и их реализация,не пойму чем ошибки.Сдал преподователю задание,он говорит что и в каждом есть по ошибке,искал не...

Вычислить значение выражения - C++
Даны натуральные числа n, действительные числа X1,....,Xn (n>=2). Вычислить:

Вычислить значение выражения - C++
http://www.cyberforum.ru/cgi-bin/latex.cgi?z\begin{cases}\text%20{y/5.5+sqrt{a+c}^3%20\\\text%20{7.3c/y}%20\end{cases}

26
Olga_
25.09.2011, 21:52
  #2

Не по теме:

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

0
-=ЮрА=-
Заблокирован
Автор 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
1
Thinker
Эксперт С++
4227 / 2201 / 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;
}
2
-=ЮрА=-
Заблокирован
Автор 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));
        }
0
Thinker
Эксперт С++
4227 / 2201 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.09.2011, 22:12 #6
-=ЮрА=-, а почему вы суммируете, если там произведения в числителе и знаменателе. Вечер сказывается
0
-=ЮрА=-
Заблокирован
Автор FAQ
25.09.2011, 22:40 #7
Thinker, да точно уже совсем невнимателен стал...
0
alkagolik
Заблокирован
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)
1
magirus
26.09.2011, 09:44
  #9
 Комментарий модератора 
akimbladina, называйте темы информативно...
0
-=ЮрА=-
Заблокирован
Автор 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));
и не считать ни верх ни низ

Не по теме:

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

0
alkagolik
Заблокирован
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;
}
0
-=ЮрА=-
Заблокирован
Автор 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:Я прекрасно понял о чём говорилось вами ранее...
0
alkagolik
Заблокирован
26.09.2011, 14:26 #13
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
если в лоб намного быстрей и понятней решать
так я не спорю, я просто говорю что решаете вы не то что нужно решать ведь видно же что при х = 65 у меня результат верный, а ваш нет. значит что-то не так с алгоритмом, верно ведь?
0
-=ЮрА=-
Заблокирован
Автор 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)
0
-=ЮрА=-
Заблокирован
Автор FAQ
26.09.2011, 15:08 #15
alkagolik, чтобы снять у вас все вопросы не поленился и добросовестно вбил 64 скобки в маткаде, прилагаю скрин и ответ 0.09935 , сравните его с этим
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
answer : 0.0993468
думаю все вопросы будут сняты
0
Миниатюры
Вычислить значение выражения  
26.09.2011, 15:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2011, 15:08
Привет! Вот еще темы с ответами:

Вычислить значение выражения - C++
b=(1+(2*(sin(y)*sin(y)))) Будет ли правильной такая запись для примера? (в прикрепе) Вроде бы всё верно записал, но с калькулятором не...

Вычислить значение выражения - C++
Правильный ли данный код для данного примера (изображение в закрепе)? { double w,a,b,c,d,e,f,g,x,y,z; puts(&quot;\nVvedite : x,y,z &quot;); ...

Вычислить значение выражения - C++
Привет всем. Помогите мне написать программу для расчета функции. http://i6.pixs.ru/storage/5/7/1/Bezimyanni_4509711_24799571.jpg Нужна...

Вычислить значение выражения - C++
Добрый день форумчани! Прошу Вашей помощи с написание кодов программ, для сдачи экзамена по C++!!! В этом семестре, остался единственный...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru