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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2010, 13:35   #1
dyusha2006
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 17
По умолчанию Найдите ошибку

Значения функции f(x)=(2x+lgx)/(1+lgx) записать в массив. Вычислить значение интеграла использую формулу I1=h*[f(a)/2+f(a+h)+f(a+2h)+...+f(a+(n-1)h)+f(b)/2]
h=(b-a)/n, n=100. a=1, b=10.

Я сначала заполнил массив используя x от 0 до 99 и h. Потом нашёл сумму повторяющейся части формулы интеграла. Потом добавил к ней начало и конец.
Код:
#pragma hdrstop
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define a 1
#define b 10
#define n 100
#include "stdlib.h"
//---------------------------------------------------------------------------

#pragma argsused
main()
{
int i,sum;
float h, x, mass[100], I1, fb;

h=(b-a)/n;

for (i=0; i<100; i++)
{
x=a+i*h;
mass[i]=(2*x+log(x))/(1+log(x));
}

for (i=1; i<100; i++)
sum+=mass[i];

fb=(2*b+log(b))/(1+log(b));
I1=h*(mass[0]/2+sum+fb/2);
printf("l1= %f", I1);
getch();

return 0;
}
При запуске выводятся 0.0000000. Наверное где-то ошибки в типах. Только не пойму где.

Последний раз редактировалось Stilet; 23.11.2010 в 14:00.
dyusha2006 вне форума Ответить с цитированием
Старый 23.11.2010, 13:54   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Код:
int i;
float sum, h, x, mass[100], I1;

h=(b-a)/n;

for (i=0; i<101; i++)
{
x=a+i*h;
mass[i]=(2*x+log(x))/(1+log(x));
}

sum=0;
for (i=1; i<100; i++)
sum+=mass[i];

I1=h*(mass[0]/2+sum+mass[100]/2);

Последний раз редактировалось Sibedir; 23.11.2010 в 13:59.
Sibedir вне форума Ответить с цитированием
Старый 23.11.2010, 14:30   #3
dyusha2006
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 17
По умолчанию

За sum спасибо.
Про
Цитата:
for (i=0; i<101; i++)
{
x=a+i*h;
mass[i]=(2*x+log(x))/(1+log(x));
}

I1=h*(mass[0]/2+sum+mass[100]/2);
Зачем нам i=100, если по формуле i последнее, максимальное = 99. И в конце вычисления интеграла нужно f(b).

В общем поменял тип переменной sum, в результате всё равно 0.
dyusha2006 вне форума Ответить с цитированием
Старый 23.11.2010, 15:41   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

mass[100] = f(b)
Sibedir вне форума Ответить с цитированием
Старый 23.11.2010, 16:17   #5
dyusha2006
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 17
По умолчанию

Точно, спасибо, не обратил внимание. Только почему всё равно не выводит результат?
dyusha2006 вне форума Ответить с цитированием
Старый 23.11.2010, 16:24   #6
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Я прогнал твою программу на Java , так проблема была в h=(b-a)/n; .

Вот код , который я перевел в Java .

Код:
public void testFunc()
	{
		int a = 1;
		int b = 10;
		int n = 100;		

		int i;
		float h, x, I1, fb,sum = 0;
		float[] mass = new float[100];

		h=(float) (b-a)/n;

		for (i=0; i<100; i++)
		{
		x=a+i*h;
		mass[i]=(float) ((2*x+ Math.log(x))/(1+ Math.log(x)));
		}

		for (i=1; i<100; i++)
		sum+=mass[i];

		fb=(float) ((2*b+Math.log(b))/(1+Math.log(b)));
		I1=h*(mass[0]/2+sum+fb/2);
		System.out.println("l1= " + I1);
		
	}
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---

Последний раз редактировалось Stilet; 23.11.2010 в 17:15.
andrewpalkin вне форума Ответить с цитированием
Старый 23.11.2010, 16:34   #7
dyusha2006
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 17
По умолчанию

Поставил (float) в сторку h=(b-a)/n; Сейчас результат выводится. Спасибо. Только зачем это (float) нужно?
dyusha2006 вне форума Ответить с цитированием
Старый 23.11.2010, 16:48   #8
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от dyusha2006 Посмотреть сообщение
Поставил (float) в сторку h=(b-a)/n; Сейчас результат выводится. Спасибо. Только зачем это (float) нужно?
Так как у тебя все числа , вот в этой формуле int : (b-a)/n . Компайлер отбрасывает все что у тебя есть после точки . И если число меньше 1 получилось , то тебе в h записывается 0.0 . Но если ты сделал "Cast to float" , то ничего не отбрасывается . Он считает число как float , а не как int .
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найдите ошибку *natali* Помощь студентам 3 08.11.2009 17:30
Найдите ошибку MaJlbBuHa Паскаль, Turbo Pascal, PascalABC.NET 2 20.10.2009 23:26
Найдите ошибку St1fler92 Помощь студентам 4 26.05.2009 15:23
найдите ошибку Сова Паскаль, Turbo Pascal, PascalABC.NET 9 11.02.2009 18:46