Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> написание алгоритма на С, нужна помощь в написании плиз 
:(
    Опции темы
CrazzzyPerson
Дата 7.5.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



Нужно разработать алгоритм численного интегрирования методом прямоугольников с автоматическим выбором шага интегрирования на С
совсем не понимаю что и как. если кому не очень трудно напишите плиз...буду очень благодарен!
PM MAIL   Вверх
jonie
Дата 7.5.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



алгоритмы пишутся на мат языке.
поищи книжки по численным методам. там вполне описан твой метод...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
bronislav
Дата 7.5.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: 2
Всего: 3



Вот написал. Комментарии не писал, чтоб тебе было в чем разбираться. Описание метода взял отсюда .

Код

#include <stdio.h>
#include <math.h>

int maxloop = 1000;

double int_func(double x)
{
    return 5*x*x+7*x+12;
}

double calc(double (*func)(double), double a, double b, double step)
{
    double _a = a;
    double _b = a + step;
    double res = 0;
    while(_b <= b)
    {
        double x = (_a + _b)/2.0;
        res += func(x)*(_b-_a);
        
        _a = _b;
        _b += step;
    }
    return res;
}

double solve(double (*func)(double), double a, double b, double eps)
{    
    double r1 = 0,
        r2 = 0;
    
    int loop = 0;
    
    double step1 = (b - a),
        step2 = (b - a)/2.0;
    
    do
    {
        loop++;
            
        r1 = calc(func,a,b,step1);
        r2 = calc(func,a,b,step2);
        
        if (loop > maxloop)
        {
            printf("Слишком много проходов\n");
        }
        
        step1 = step2;
        step2 = step2/2.0;
    }
    while(fabs(r1 - r2) >= eps);
        
    return r2;
}

int main(int argc, char* argv[])
{
    double eps = 0.1;
    double a = -1;
    double b = 5;
    
    double res = solve(int_func,a,b,eps);
    
    printf("Ответ: %f\n",res);
    
    return 0;
}



Это сообщение отредактировал(а) bronislav - 7.5.2008, 12:36


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
CrazzzyPerson
Дата 10.5.2008, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



спасибо огромное..прям щас сяду буду разбираться в коде.)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1108 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.