Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 05.12.2010, 23:21   #1
Protey
Оператор ЭВМ
 
Аватар для Protey
 
Регистрация: 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;  //зануляем на всякий случай переменную
  
:= 1;  //начальное кол-во отрезков
  
dx :=(b-a)/n;

  if 
>= b then WriteLn('Sorry, my bad')  //защита от дурака
    
else

  for 
i:=0 to n-do
    while (
rez-rez+1)/rez 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
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (06.12.2010)
Старый 06.12.2010, 01:32   #3
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 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); 
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (06.12.2010)
Старый 06.12.2010, 02:39   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (06.12.2010)
Старый 06.12.2010, 17:09   #5
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Условие в задаче с интегралом

Ну так на результирующую точность это ведь вроде не повлияет?
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 06.12.2010, 18:37   #6
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Условие в задаче с интегралом

повлияет: сначала загрязним результат, а лишь оптом проверим: надо ли было.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (06.12.2010)
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 09:51.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com