Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.05.2007, 18:24
MasteR MasteR вне форума
Прохожий
 
Регистрация: 14.05.2006
Сообщения: 12
Репутация: 10
Восклицание Определенный интеграл

Надо написать прогу, считающую любой определенный интеграл (с небольшими ограничениями конечно по функциям - только sin, cos, tg, arcsin, arccos, arctg, ln, exp, sqrt) думаю по методу Симпсона.
вот даже алгоритм нашел:
Код:
Вычисление интеграла с заданной точностью алгоритмом Симпсона. 



// (c) Copydown 2002, all left reserved. http://world.fpm.kubsu.ru.

{$APPTYPE CONSOLE}

{$F+} {разрешение передачи функций, как параметров}

type FunctionType = function(x: real): real;

{интегрируемая функция}
function f(x: real): real; begin f := x end;

{интегрирование от a до b функции f с точностью e}
function IntegralSimpson(a, b: real; f: FunctionType; e: real): real;
  var
    h, x, s, s1, s2, s3, sign: real;
 begin

  if (a = b) then
    begin
      IntegralSimpson := 0; exit
    end;

  if (a > b) then
    begin
      x := a; a := b; b := x; sign := -1
    end
   else sign:=1;

  h := b - a; s := f(a) + f(b); s2 := s;

  repeat
    s3 := s2; h := h/2; s1 := 0; x := a + h;

    repeat
      s1 := s1 + 2*f(x); x := x + 2*h;
    until (not(x < b));

    s := s + s1; s2 := (s + s1)*h/3; x := abs(s3 - s2)/15
  until (not(x > e));

  IntegralSimpson := s2*sign;
 end;

begin
  {вывод результата интегрирования от 0 до 1 функции f с точностью 0.001}
  writeln(IntegralSimpson(0, 1, f, 0.001));
  writeln; writeln(′Press Enter′); readln;
end.
 
Пробовал, не могу его адаптировать. Мож я не догоняю.
Как из Edit.text считать выражение допустим 5*x+sin(x) без преобразования в строку, а как просто математическое выражение? Невозможно?
Может у кого еще какие мысли есть?
Ответить с цитированием
  #2  
Старый 24.05.2007, 19:18
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Из Edit можно считать только строку… Но потом из этой строки можно сформировать что захочешь… Возможно, тебе будет полезно прочитать про "обратную польскую запись", например здесь - http://decoding.narod.ru/practic/pol...ishrecord.html
Ответить с цитированием
  #3  
Старый 24.05.2007, 19:48
MasteR MasteR вне форума
Прохожий
 
Регистрация: 14.05.2006
Сообщения: 12
Репутация: 10
По умолчанию

Цитата:
Сообщение от Decoding
ничё так инфа, щас попробуем )))
Ответить с цитированием
  #4  
Старый 24.05.2007, 20:46
MasteR MasteR вне форума
Прохожий
 
Регистрация: 14.05.2006
Сообщения: 12
Репутация: 10
По умолчанию

послушайте, Евгений, как лучше адаптировать программу, чтобы она работала и с переменной Х?
Ответить с цитированием
  #5  
Старый 25.05.2007, 13:23
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Если тебе нужно использовать переменные внутри строки, то нет никаких проблем - используй. только перед началом разбора замени их на соответствующие им значения (например StringReplace()).
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter