IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Программа вычисление золотого сечения, Циклы
Casio
сообщение 5.11.2005 15:17
Сообщение #1


Гость






Здраствуйте. Помогите решить след. задачу:
Составить программу вычисления золотого сечения q с точностью Е=0.00001, используя представление q в виде:
Программа строится на вычислении предыдущего z1 и нового значения z2. Итерационный
Код

q=1 + ______1_________
      2 + ____1_______
           2 + ___1___
               2 + ...

цикл заканчивается, если |z2-z1|<=E
Z1 начальное =2+2/5
Z2=2+1/z1
 К началу страницы 
+ Ответить 
volvo
сообщение 5.11.2005 15:35
Сообщение #2


Гость






Ну, по твоему же алгоритму - вот так:
var
z1, z2: real;
eps: real;
done: boolean;

begin
eps := 0.00001;
z1 := 2 + 2/5;
repeat
z2 := 2 + 1/z1;
done := (abs(z2 - z1) < eps);
z1 := z2;
until done;
writeln(z1:10:6);
end.
 К началу страницы 
+ Ответить 
Casio
сообщение 5.11.2005 16:08
Сообщение #3


Гость






Огромное спасибо ;)
Я вот только не пойму зачем дана формула q? Она ведь не используется?
У меня вот еще одна проблема. Задача:
Составить таблицу ступенчатой функции
1.5<=a<=3; da=0.3; 6<x<=10; dx=2. Найти wmax и определить a, x, при которых оно определяется. Дана система (так как там много символов я запишу уравнения в другом виде)
Код

     x*sqrt(x-a)
W=   x*sinx(a*x)
                          Exp(x*Ln(a))
    ------------------------------------------------------
      cos(sqr(a*x-1))*cos(sqr(a*x-1))*cos(sqr(a*x-1))

P.S В системе 3 уравнения ^^. Я реализовал программу таким способом:
Код

program sistema;
uses crt;
const
da=0.3;                                      
dx=2;                                                                    
var                                                                        
a,p,w,w1,w2,w3,maximum,max: real;                                          
i,x: word;                                                                  
begin                                                                      
clrscr;                                                                  
a:=1.5;                                                                  
repeat {cikl po a}                                                    
x:=8;                                                                
repeat {cikl po x}                                                  
w1:=x*sqrt(x-a);                                                  
w2:=x*sin(a*x);                                                    
w3:= Exp(x*Ln(a))/cos(sqr(a*x-1))*cos(sqr(a*x-1))*cos(sqr(a*x-1));            
if w1>w2 then max:=w1 else max:=w2;                            
if max>w3 then maximum:=max else maximum:=w3;                  
if maximum>max then                                            
begin                                                          
maximum:=maximum;                                              
writeln('W max = ',maximum:2:1);                                
write(' a = ',a:2:0);                                          
writeln('; x = ',x);                                            
end;                                                            
x:=x+dx;                                                          
until(x>10);                                                        
a:=a+da;                                                            
until(a>3);                                                          
readln;                                                                  
end.    

Вообщем. Wmax я нашел. По условию надо найти "Найти wmax и определить a, x, при которых оно определяется.". Выше указанным моим кодом выдается несколько вариантов:
Код

W max = 356.9
a =  2; x = 10
W max = 2223.8
a =  2; x = 10
W max = 2301.2
a =  3; x = 8
W max = 34499.8
a =  3; x = 10

Где верный вариант только
W max = 34499.8
a = 3; x = 10
Как видно он находит и max и при каких a и x. Но мне мешают остальные три варианта при выводе. Собственно, помогите подправить программу. Возможно, где то условие не верно в цикле.
 К началу страницы 
+ Ответить 
volvo
сообщение 5.11.2005 16:17
Сообщение #4


Гость






Цитата
Я вот только не пойму зачем дана формула q? Она ведь не используется?

Формула q - это для рекурсивного вычисления "золотого сечения"... Посмотри, как она представлена: там итерацией даже и не пахнет no1.gif

Теперь по поводу второй программы:
Цитата
Дана система (так как там много символов я запишу уравнения в другом виде)

Ты бы как-то объяснил по-другому, т.к. то, что ты написал - полный бред с математической точки зрения... Это значит, что
Цитата
        x*sqrt(x-a)
W=  x*sinx(a*x)
        ...
Одновременно??? Или все-таки так:
Цитата
W = x*sqrt(x-a) , если { 1-е дополнительное условие }
W = x*sinx(a*x) , если { 2-е дополнительное условие }
...
 К началу страницы 
+ Ответить 
Guest
сообщение 5.11.2005 16:31
Сообщение #5


Гость






Цитата
Ты бы как-то объяснил по-другому, т.к. то, что ты написал - полный бред с математической точки зрения... Это значит, что

Вообщем одновременно.
Цитата
        x*sqrt(x-a)
W=  x*sinx(a*x)
        ...

После W= идет фигурная скобка и 3 уравнения
 К началу страницы 
+ Ответить 
Casio
сообщение 5.11.2005 21:02
Сообщение #6


Гость






Ну, так что есть предложения? sad.gif
 К началу страницы 
+ Ответить 
volvo
сообщение 5.11.2005 21:07
Сообщение #7


Гость






Так пойдет?
program sistema;
uses crt;
const
da=0.3;
dx=2;

function max(a, b: real): real;
begin
max := a;
if b > a then max := b;
end;

var
a, max_a,
p, w1, w2, w3, maximum, next: real;
i, x, max_x: word;
begin
clrscr;
a:=1.5;

maximum := -maxint;
repeat

x:=8;
repeat

w1:=x*sqrt(x-a);
w2:=x*sin(a*x);
w3:= Exp(x*Ln(a))/cos(sqr(a*x-1))*cos(sqr(a*x-1))*cos(sqr(a*x-1));

next := max(max(w1, w2), w3);

if maximum < next then begin
maximum := next;
max_a := a; max_x := x
end;

x:=x+dx;

until(x>10);

a:=a+da;
until(a>3);

writeln('W max = ',maximum:2:1);
writeln(' a = ', max_a:2:0, '; x = ',max_x);
readln;
end.
 К началу страницы 
+ Ответить 
Casio
сообщение 7.11.2005 17:52
Сообщение #8


Гость






Да. Огромное спасибо.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.06.2025 14:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"