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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2011, 21:35   #1
tiger
Пользователь
 
Регистрация: 30.03.2008
Сообщений: 52
По умолчанию площадь методом левых прямоугольником и статистических исследований

Как часть программы нужно найти площадь функции cos((x+1)/3) и еще нескольких методом левых прямоугольников. Так как данная функция проходит как выше так и ниже оси абсцис то получается нужно отдельно искать площадь ниже оси и брать ее по модулю? и отдельно суму выше оси? и потом их складывать? или не так? подскажите пожалуйста, очень нужно сделать правильно. ниже код.
Код:
float livi(float a,float b,int n,float e)
{
float h,xi,f2,sum,S,S2,SZAG,SMX,SMX2,SS,SS2,SZAG2,rez;
int n2,j;
sum=0;
SMX=0;
j=0;
for (int i=0;i<=n-1;i++)
{
h=(b-a)/n;
xi=a+i*h;
f2=func(xi);
if (f2<0)
{
SMX=SMX+f2; //сума меньше нуля
}
else
sum=sum+f2;
}
SS=h*fabs(SMX);
S=h*sum;
n2=2*n;
SZAG=S+SS;


while (fabs(SZAG-SZAG2)>=e)
{
if (j!=0)
{
  S=S2;
  SZAG=SZAG2;
  SS=SS2;
  n2=2*n2;
}
sum=0;
SMX2=0;
for (int i=0;i<=n2-1;i++)
{
h=(b-a)/n2;
xi=a+i*h;
f2=func(xi);
if (f2<0) SMX2=SMX2+f2;// f2=fabs(f2);
else
sum=sum+f2;
}
S2=h*sum;
SS2=h*fabs(SMX2);
SZAG2=S2+SS2;
j=j+1;
}

if (fabs(SZAG-SZAG2)<e)
{
rez=SZAG2;
Form1->Edit5->Text=FloatToStr(rez)
Form2->StringGrid1->Cells[1][1]=FloatToStr(rez);
}
return rez;
}
и еще площадь методом статистических исследований. только они у меня не совпадают, видно где-то ошибка.
Код:
Form1->Chart1->SeriesList->Series[1]->Clear();
        Form1->Chart1->SeriesList->Series[2]->Clear();
        float maxZn=Form1->Chart1->Series[0]->MaxYValue();
        float minZn=Form1->Chart1->Series[0]->MinYValue();
        rdmz(10000);
        for (int i=0; i<n; i++)
        {
               rand = (float) rnd();
                randX =(float) (a+(b-a)*rand);
                rand = (float) rnd();
                randY=(float) (minZn+(maxZn-minZn)*rand);

                if ( (randY<func(randX)) && (randY>0) )//если точка попала
                {
                        Form1->Chart1->Series[2]->AddXY(randX,randY);
                        k++;
                }
                else
                        Form1->Chart1->Series[1]->AddXY(randX,randY);

        }

        float rezultat = (b-a)*(maxZn-minZn);

        rezultat *= k/float(n);

        return rezultat;//k/(float)n;
tiger вне форума Ответить с цитированием
Старый 24.05.2011, 00:00   #2
tiger
Пользователь
 
Регистрация: 30.03.2008
Сообщений: 52
По умолчанию

ну подскажите хотя бы немного что я написал направильно.
tiger вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны площадь круга и площадь квадрата Joker<777> Паскаль, Turbo Pascal, PascalABC.NET 10 17.01.2012 07:00
ООП (паскаль) - дан ромб. найти площадь. построить пирамиду, найти её площадь Rfn.if Помощь студентам 0 27.04.2011 16:10
Интеграл методом левых прямоугольников murzic28 Помощь студентам 1 17.05.2010 10:17
вывести звёздочки прямоугольником designer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 13.11.2008 09:52