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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2020, 22:19   #1
lana_ar
Пользователь
 
Регистрация: 17.10.2019
Сообщений: 13
Печаль Си ++ сравнение предыдущего интеграла с текущим и если разница больше выбранной точности - увеличить число разбиений

Помогите подправить программу, пожалуйста
Код:
#include <iostream>
#include <iomanip>
#include <math.h>

double f(double x)
{
	return pow(x, 2) / pow(pow(x, 3) + 1, 1. / 2);
}

using namespace std;
int main()
{
	cout.fixed;
	cout.precision(6);
	setlocale(LC_ALL, "RUS");
	double a, b, n, h, tr, x[11];
	int i;
	cout << "Введите a"; cin >> a;
	cout << "Введите b"; cin >> b;
	cout << "Введите число разбиений n"; cin >> n;
	h = (b - a) / n;
	x[0] = a;
	i = 0;

	cout << "n" << setw(20) << "x" << endl;
	cout << i << setw(20) << x[0] << setw(20) << f(x[i]) << endl;

	for (i = 0;i < n;i++)
	{
		x[i + 1] = x[i] + h;
		cout << i + 1 << setw(20) << x[i + 1] << endl;
	}
	tr = ((f(x[0]) + f(x[10])) / 2 + f(x[1]) + f(x[2]) + f(x[3]) + f(x[4]) + f(x[5]) + f(x[6]) + f(x[7]) + f(x[8]) + f(x[9]))*h;
	cout << "tr=" << tr << endl;

	for (i = 0;i < n;i++)
	{
		cout << "f(x[i])=" << f(x[i]) << endl;
	}
	return 0;

}
Изображения
Тип файла: jpg TLI3IF_f55U.jpg (96.6 Кб, 27 просмотров)
lana_ar вне форума Ответить с цитированием
Старый 16.04.2020, 22:40   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,657
По умолчанию

Код:
	double a, b, n, h, tr, tr0, eps;
...........................................
        h = (b-a)/n;
        tr0 = 0 ;
lab:   tr = f(a) + f(b) ;
         x = a;
         for (i = 1;i<n;i++)
    {
          x = a + h ;
          tr = tr + f(x)*2 ;
      }
           tr = tr * h/2 ;
           if (abs(tr-tr0)>eps) 
      { tr0 = tr ; n := n + n ; h = h/2;  goto lab }
Да, применять goto некошерно, но это я оставляю для думанья ТСу на предмет заменить на while. Можно и for с выходом по условию достижения точности, это как кто любит, а мне думать лень, бо в сон клонит. Хотя боюсь, что после кошмара исходника засну не скоро
И коммент неправильный: "Интеграл ревёт" или "Интеграл рванёт" ?

Последний раз редактировалось digitalis; 16.04.2020 в 23:11.
digitalis вне форума Ответить с цитированием
Старый 17.04.2020, 09:35   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,657
По умолчанию

Поскольку ТСу это уже 100 лет не надо (привычка задать вопрос и уйти на фиг уже стала нормой), напишем это с while
Код:
	double a, b, n, h, tr, tr0, eps,d;
...........................................
        h = (b-a)/n;
        d = 1.0 ;
    while (d>eps)
  {  
        tr = f(a) + f(b) ;
         x = a;
         for (i = 1;i<n;i++)
     {
          x = a + h ;
          tr = tr + f(x)*2 ;
      }
           tr = tr * h/2 ;
           d = abs(tr-tr0) ;
           tr0 = tr ;
           n := n + n ;
           h = h/2;
   }

Последний раз редактировалось digitalis; 17.04.2020 в 16:28.
digitalis вне форума Ответить с цитированием
Старый 20.04.2020, 22:17   #4
lana_ar
Пользователь
 
Регистрация: 17.10.2019
Сообщений: 13
По умолчанию

Да нет, не пропала! спасибо большое за помощь!
lana_ar вне форума Ответить с цитированием
Старый 20.04.2020, 22:30   #5
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,608
По умолчанию

На сколько сложно вопрос написать текстом? зачем форуму нужны ваши картинки? незачем!
Alar вне форума Ответить с цитированием
Старый 20.04.2020, 22:57   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,657
По умолчанию

Это был не вопрос, а рецензия.
digitalis вне форума Ответить с цитированием
Старый 20.04.2020, 23:04   #7
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,608
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Это был не вопрос, а рецензия.
А как мне брать текст на переименование темы? пришлось вручную перепечатывать, а поисковик так ничего кроме моего заголовка не возмёт никогда.

а в теме с вопросом с картинки вообще нет смысла именно для форума для индексации поисковиками, для поиска по форуму.

А если форумчанину нужна только индивидуальная помощь, то можно и денег за неё заплатить.
Alar вне форума Ответить с цитированием
Старый 21.04.2020, 09:24   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,657
По умолчанию

За такой простой вопрос "гусары с да'мав денег не берут" А такая, как теперь, формулировка вопроса делает сам вопрос ненужным: ответ содержится уже в заголовке (дык я и имею в виду - в исправленном).

Последний раз редактировалось digitalis; 21.04.2020 в 13:03.
digitalis вне форума Ответить с цитированием
Старый 21.04.2020, 11:17   #9
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,608
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
ответ содержится уже в заголовке.
В каком заголовке? название темы я сделал. было СИ++ и всё
Alar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java - Должно отобразить это же число только если оно не больше 5 и не меньше 1. Если число 5 или более то должно показать 5 Maxx1127 Помощь студентам 1 31.01.2020 11:04
[РЕШЕНО][Turbo Pascal] Для произвольной матрицы строку с наибольшей суммой элементов заменить нулями, если она четная и увеличить на заданое число, если нечетная иван гаврилов Фриланс 11 14.11.2018 23:32
Ввести число. Если оно положительное, найти его квадратный корень. Если отрицательное - возвести в квадратВвести число. Если оно п FYNZIK Паскаль, Turbo Pascal, PascalABC.NET 1 18.02.2014 16:29
В двусвязном списке продублировать те элементы, которые меньше следующего, но больше больше предыдущего. gvenog Помощь студентам 0 13.12.2010 21:20