|
Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения |
05.12.2010, 23:21
|
#1
|
Оператор ЭВМ
Регистрация: 02.02.2010
Сообщений: 37
Написано одно полезное сообщение (для 2 участников)
|
Условие в задаче с интегралом
var n:integer; //кол-во отрезков a:integer; //левая граница b:integer; //правая граница dx:real; rez:real; //будущий ответ xi,xi1:real; //отрезок 1 и отрезок 2 h:real; y0,y1,y2,y3,y4:real; inter:real; //накапливаяемая сумма i:integer; //переменная, необходимая для великой миссии E:real; //необходимая точность function y(x:real):real; begin Result:=sqrt(2*x+1); end; begin WriteLn('Please input border integral(a,b): '); //просьба ввести границы интеграла ReadLn(a,b); //границы интерграла WriteLn; WriteLn('Enter the desired accuracy: '); //просьба ввести желаемую точность ReadLn(E); //E - необходимая точность WriteLn; rez := 0; //зануляем на всякий случай переменную n := 1; //начальное кол-во отрезков dx :=(b-a)/n; if a >= b then WriteLn('Sorry, my bad') //защита от дурака else for i:=0 to n-1 do while (rez-rez+1)/rez < E do //собственно условие на проверку точности begin xi:=dx*i; xi1:=dx*(i+1); h:=(xi1-xi)/4; y0:=y(xi); y1:=y(xi+h); y2:=y(xi+2*h); y3:=y(xi+3*h); y4:=y(xi1); inter:=(2*h/45)*(7*y0+32*y1+12*y2+32*y3+7*y4); rez:=rez+inter; end; WriteLn('Response to your example: ',rez:6:5); //ответ вашего примера WriteLn; WriteLn('Press ENTER to exit...'); //показание к действию ReadLn; end.
while (rez-rez+1)/rez < E do - вот это условие нужно поменять так, чтобы выполнялась идея:
пользователь вводит границы интеграла (а и б), необходимую точность (Е), далее машина считает до тех пор пока некая формула, имеющая в себе результат, не получит ответ менее заданной погрешности
|
|
(Offline)
|
|
06.12.2010, 00:23
|
#2
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Условие в задаче с интегралом
while true do //собственно условие на проверку точности
begin
xi:=dx*i;
xi1:=dx*(i+1);
h:=(xi1-xi)/4;
y0:=y(xi);
y1:=y(xi+h);
y2:=y(xi+2*h);
y3:=y(xi+3*h);
y4:=y(xi1);
inter:=(2*h/45)*(7*y0+32*y1+12*y2+32*y3+7*y4);
if(abs(inter)<E)exit
rez:=rez+inter;
end;
|
х3 как там на вашем паскале это синтаксически реализовано
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.12.2010, 01:32
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Условие в задаче с интегралом
Сообщение от impersonalis
х3 как там на вашем паскале это синтаксически реализовано
|
Проще тогда так:
repeat xi:=dx*i; xi1:=dx*(i+1); h:=(xi1-xi)/4; y0:=y(xi); y1:=y(xi+h); y2:=y(xi+2*h); y3:=y(xi+3*h); y4:=y(xi1); inter:=(2*h/45)*(7*y0+32*y1+12*y2+32*y3+7*y4); rez:=rez+inter; until(Abs(inter) <= E);
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.12.2010, 02:39
|
#4
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Условие в задаче с интегралом
inter:=0 repeat rez:=rez+inter; //<========= xi:=dx*i; xi1:=dx*(i+1); h:=(xi1-xi)/4; y0:=y(xi); y1:=y(xi+h); y2:=y(xi+2*h); y3:=y(xi+3*h); y4:=y(xi1); inter:=(2*h/45)*(7*y0+32*y1+12*y2+32*y3+7*y4); //тут нельзя складывать - вдруг прирост уже и так меньше? тогда мы получим приближение лучше, чем заказывали until(Abs(inter) <= E);
тогда
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.12.2010, 17:09
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Условие в задаче с интегралом
Ну так на результирующую точность это ведь вроде не повлияет?
|
(Offline)
|
|
06.12.2010, 18:37
|
#6
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Условие в задаче с интегралом
повлияет: сначала загрязним результат, а лишь оптом проверим: надо ли было.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:51.
|