Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2024, 10:59   #1
Dushnila
Новичок
Джуниор
 
Регистрация: 05.10.2024
Сообщений: 2
По умолчанию Помогите с кодом

Помогите с кодом, при вводе x > 1 выдает бесконечность. Как исправить?
#include <iostream>
#include <cmath>
#include <locale>
#include <iomanip>
using namespace std;

int main() {
setlocale(LC_ALL, "RUS");
float x;
cout << "Введите X" << endl;
cin >> x;
float eps = 0.0001, sum = x, q = x;
int zn = -1;
float c = 1;
int a = 1, b = 2;
int i = 3;
do {
c = c * (a / (float)b);
q = zn * (c * (pow(x, i) / i));
if (abs(q) < eps) {
break;
}
sum += q;
zn = zn * (-1);
a += 2;
b += 2;
i += 2;
if (q == INFINITY or q == -1 * INFINITY){
break;
}
} while (true);
cout << fixed << setprecision(4) << sum << endl << "Проверка: " << log(x + sqrt(1 + pow(x,2)));
return 0;
}
Dushnila вне форума Ответить с цитированием
Старый 05.10.2024, 12:36   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

Не вижу определения константы:
Код:
const int INFINITY = INT_MAX;
digitalis вне форума Ответить с цитированием
Старый 05.10.2024, 14:00   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Цитата:
Сообщение от Dushnila Посмотреть сообщение
Помогите с кодом, при вводе x > 1 выдает бесконечность. Как исправить?
Выдает и выдает. Что не так-то, если в коде это прописано? Или мы сами должны угадать, что этот код должен был делать по итогу?

Код:
if (q == INFINITY || q == -INFINITY)
  cout << "Ну не будем мы выдавать INF, так лучше?";
else
  cout << fixed << setprecision(4) << sum << endl << "Проверка: " << log(x + sqrt(1 + pow(x,2)));
Arigato вне форума Ответить с цитированием
Старый 05.10.2024, 23:03   #4
Dushnila
Новичок
Джуниор
 
Регистрация: 05.10.2024
Сообщений: 2
По умолчанию

Arigato, Не совсем корректно прописал вопрос, почему переменная q вообще принимает значение inf и как это можно исправить? Результат после слова "проверка" должен совпадать со значением "sum".
Dushnila вне форума Ответить с цитированием
Старый 06.10.2024, 10:20   #5
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 746
По умолчанию

Если Вы пишете ряд, то посмотрите какой должен быть x. Часто в рядах |x|<1, т.е. маленькое значение должно быть.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 06.10.2024, 12:38   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Добавьте вывод q в цикле, чтобы проследить динамику его изменения:
Код:
        q = zn * (c * (pow(x, i) / i));
        cout << q << endl;
При значениях > 1 ваш ряд не сходится.
Arigato вне форума Ответить с цитированием
Старый 07.10.2024, 06:23   #7
Алексей1153
фрилансер, препод.
Участник клуба
 
Регистрация: 11.10.2019
Сообщений: 1,045
По умолчанию

Dushnila, где текст задания?
И на бесконечность не так вещественные числа проверяют
Алексей1153 вне форума Ответить с цитированием
Старый 07.10.2024, 12:50   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,716
По умолчанию

А ему это и не надо уже.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с кодом Utkaworlddd C# (си шарп) 4 15.09.2023 19:24
Помогите с кодом С# Skofield Помощь студентам 6 19.01.2017 13:28
Помогите с кодом dvpvitas Паскаль, Turbo Pascal, PascalABC.NET 5 16.06.2015 18:27