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

Вычисление точности числа - C++

Восстановить пароль Регистрация
 
samarcs
 Аватар для samarcs
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 82
07.06.2013, 18:59     Вычисление точности числа #1
Здравствуйте, прошу вас помочь мне разобраться с такой вот задачкой:
Есть такое уравнение(прикрепил).
Нужно её как-то ввести и при выполнении она должна вычислить это уравнение до того момента, когда перестанет изменяться знак.
Например:
Число 1,957377777777, т.е. 1,9573(7).
Сама проблема у меня возникла в вводе формулы, не знаю как сделать так, чтобы знак менялся.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <math.h>
#include <iostream.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    int X;
    int i;
    int n=1;
    for(i=0;i<=1;i++)
    {
    X=(1/pow(n,2));
    n++;
    }
    cout<<"X="<<X<<endl;
    system("pause");
    return 0;
}
И с циклами чуток ещё напутался)
Изображения
 
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
samarcs
 Аватар для samarcs
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 82
07.06.2013, 19:13  [ТС]     Вычисление точности числа #2
Думал создать цикл без точки выхода и задать условие выхода из бесконечного цикла если появится повторение цифр, только не допру как
Selot
155 / 91 / 23
Регистрация: 19.01.2010
Сообщений: 364
Завершенные тесты: 1
08.06.2013, 16:46     Вычисление точности числа #3
Ну, первый вариант, что пришло - это считать " в лоб". Каждое число представлять строкой и проверять последний символ, запоминать его, затем проверять предпоследний. Если последний и предпоследний равны, то проверять разряд постарше итд, только надо ограничить количество проверок этих.
samarcs
 Аватар для samarcs
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 82
08.06.2013, 19:00  [ТС]     Вычисление точности числа #4
у меня возникает проблема с тем, что я не могу понять как ввести формулу чтобы знак менялся
volvo
Супер-модератор
 Аватар для volvo
21836 / 14199 / 3960
Регистрация: 22.10.2011
Сообщений: 25,089
Записей в блоге: 2
08.06.2013, 19:39     Вычисление точности числа #5
Цитата Сообщение от samarcs Посмотреть сообщение
чтобы знак менялся
надо его определить:
C++
1
2
3
4
5
6
7
8
    double s = 0;
    int sign = 1; // вот он, знак ...
    for(int i = 1; i < 25; i++)
    {
        s += sign / static_cast<float>(i * i);
        sign = -sign; // меняем на противоположный
    }
    cout << "s = " << setprecision(12) << s << endl;
Цитата Сообщение от samarcs Посмотреть сообщение
задать условие выхода из бесконечного цикла если появится повторение цифр
Это плохая идея. Смотри, почему. Берем тот же код, что я написал выше, и делаем так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
int main()
{
    double s = 0;
    int sign = 1;
    for(int i = 1; i < 25; i++)
    {
        s += sign / static_cast<float>(i * i);
        sign = -sign;
        cout << "s = " << setprecision(12) << s << endl;
    }
    cout << "total s = " << setprecision(12) << s << endl;
    return 0;
}
Запускаем, и получаем:
s = 1
s = 0.75
s = 0.861111111111 // 3-я итерация
s = 0.798611111111
s = 0.838611111111
s = 0.810833333333 // 6-я итерация
s = 0.831241496599
s = 0.815616496599
s = 0.827962175611
s = 0.817962175611
s = 0.826226638421
s = 0.819282193976
s = 0.82519935374
s = 0.820097312923
s = 0.824541757368
s = 0.820635507368
s = 0.82409571498
s = 0.821009295227
s = 0.82377937833
s = 0.82127937833
s = 0.823546952026
s = 0.821480836323
s = 0.823371195492
s = 0.821635084381
total s = 0.821635084381
На каком этапе будешь прерывать вычисления? Неужели на третьей итерации? Там же уже цифры повторяются. Однако, ничего похожего. На шестой итерации повторяется уже другая цифра, а на седьмой никакого повторения нет и в помине. Итак, что делать будем, на какой итерации (и почему) выходим из цикла?
samarcs
 Аватар для samarcs
0 / 0 / 0
Регистрация: 01.08.2012
Сообщений: 82
09.06.2013, 16:37  [ТС]     Вычисление точности числа #6
Как-то не могу разобраться, каким образом знак меняется? и ещё эта строка как я понял static_cast<float>(i * i) задает тип переменной для i*i как float, а само i*i это как бы квадрат?

Добавлено через 24 минуты
И ещё вопрос. Нужно обосновать: почему и когда число перестает изменяться?
Как-то додуматься не могу...
Yandex
Объявления
09.06.2013, 16:37     Вычисление точности числа
Ответ Создать тему
Опции темы

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