Форум программистов, компьютерный форум CyberForum.ru Форум программистов | Компьютерный форум | Форум web-программистов | Форум по электронике и бытовой технике | Форум о софте | Научный форум | Карьера и бизнес
CyberForum.ru - форум программистов и сисадминов > Форум Форум программистов > Форум Delphi > Форум Delphi для начинающих
Восстановить пароль Регистрация

Ответ Создать новую тему
 
01.09.2010, 16:12   #1
Prelest)
Форумчанин
 
Регистрация: 22.03.2010
Сообщений: 141
Репутация: 2 (2)
Решить систему уравнений методом перебора / Delphi для начинающих

Решить систему уравнений методом перебора: y=3-sin(x)
_________________________________________x=2+0.5cos(y-2)
Помогите, пожалуйста. Ничего не смыслю в программировании.
01.09.2010, 16:12
AdAgent
Объявления
01.09.2010, 20:20   #2
D@rkD@iver
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 863
Репутация: 109 (109)
Лучшие ответы: 1
Решить систему уравнений методом перебора

Prelest),

Код Delphi
1
2
3
4
x:= x0;{начальное значение}
repeat
       x:= x+0.001;
until (3-sin(x))<e;
где e- точность
Другие темы раздела
Delphi Найти кратчайшее расстояние между двумя вершинами в графе
Найти кратчайшее расстояние между двумя вершинами в графе. Найти все возможные пути между этими двумя вершинами в графе не пересекающиеся по рёбрам и вершинам. Очень нужна программа в течение этой недели. Помогите, пожалуйста.
Delphi Irc
нужна информация про работу с IRC, какой компонент лучше использовать, где его взять. PS IdHttp не хочет коннектиться к серверам.
01.09.2010, 21:12  [ТС]   #3
Prelest)
Форумчанин
 
Регистрация: 22.03.2010
Сообщений: 141
Репутация: 2 (2)
Решить систему уравнений методом перебора

Спасибо, D@rkD@iver. Но можно было бы поподробнее, из этого фрагмента программка у меня не выйдет
02.09.2010, 00:37   #4
flatgad
geJI<|>eP
 
Регистрация: 22.07.2010
Сообщений: 683
Репутация: 178 (178)
Лучшие ответы: 8
Решить систему уравнений методом перебора

Цитата Сообщение от D@rkD@iver Посмотреть сообщение
Prelest),

Код Delphi
1
2
3
4
x:= x0;{начальное значение}
repeat
       x:= x+0.001;
until (3-sin(x))<e;
где e- точность
не знаю по каким побуждениям вы так решали я тогда понять не могу зачем там нужно уравнение x=2+0.5cos(y-2).
Я думаю что надо так а именно алгоритм :
1. x-2-0.5cos(y-2)=0
2. Вместо у ставим 3-sin(x);
3. Получим x-2-0.5cos(1-sin(x))=0
после чего находим у=3-sin(x) подставивши найденій х;

Итого такая вот программка(пишу без делфи так как на работе):

Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var x,x0,y,e,reshenie1:real;
label reshenie;
begin
//так как на условие х и у наложены пределы от -1 до 1 то будем решать таким образом 
x0:=-1;
e:=0,001;
deltax:=0.01;
  while x0<=1 do begin 
    reshenie1:=x0-2-0.5*cos(1-sin(x0));
      if reshenie1<e then 
         begin
          x:=x0;
          goto reshenie;
        end;
     end;
reshenie: y:=3-sin(x);
showmessage('x='+strtofloat(x)+#13+'y='+strtofloat(y));
end;
Вроде что то так могут быть ошибки.
02.09.2010, 00:37
AdAgent
Объявления
02.09.2010, 22:02  [ТС]   #5
Prelest)
Форумчанин
 
Регистрация: 22.03.2010
Сообщений: 141
Репутация: 2 (2)
Решить систему уравнений методом перебора

Спасибо, flatgad. Но ваша программа у меня не пошла. В программировании я разбираюсь плохо и причину найти не смогла. Пожалуйста, допишите программу целиком
03.09.2010, 09:50   #6
flatgad
geJI<|>eP
 
Регистрация: 22.07.2010
Сообщений: 683
Репутация: 178 (178)
Лучшие ответы: 8
Решить систему уравнений методом перебора

Цитата Сообщение от flatgad Посмотреть сообщение
не знаю по каким побуждениям вы так решали я тогда понять не могу зачем там нужно уравнение x=2+0.5cos(y-2).
Я думаю что надо так а именно алгоритм :
1. x-2-0.5cos(y-2)=0
2. Вместо у ставим 3-sin(x);
3. Получим x-2-0.5cos(1-sin(x))=0
после чего находим у=3-sin(x) подставивши найденій х;

Итого такая вот программка(пишу без делфи так как на работе):

Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var x,x0,y,e,reshenie1:real;
label reshenie;
begin
//так как на условие х и у наложены пределы от -1 до 1 то будем решать таким образом 
x0:=-1;
e:=0,001;
deltax:=0.01;
  while x0<=1 do begin 
    reshenie1:=x0-2-0.5*cos(1-sin(x0));
      if reshenie1<e then 
         begin
          x:=x0;
          goto reshenie;
        end;
     end;
reshenie: y:=3-sin(x);
showmessage('x='+strtofloat(x)+#13+'y='+strtofloat(y));
end;
Вроде что то так могут быть ошибки.
немного я тут натупил без делфи решил все таки сделать ету прогу. Нчал с того что узнал приделы х и у:
х=[1.5 - 2.5]
y=[2 - 4]

Вот подправил получилось такое :
Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button1Click(Sender: TObject);
var x0,deltax,reshenie,e,x,y:real;
label exit;
begin
x0:=1.5;
deltax:=0.01;
e:=0.01;
while x0<2.5 do begin
 reshenie:=x0-2-0.5*cos(1-sin(x0));
 Memo1.Lines.Add(FloatToStr(reshenie));
 if  abs(reshenie)<e then begin
   x:=x0;
   y:=3-sin(x);
   goto exit;
   end;
   x0:=x0+deltax;
end;
exit: ShowMessage(FloatToStr(x)+'   '+FloatToStr(y));
end;
reshenie.rar

Но один минус такого решения х и у в косинус и синус надо ставить в радианах иначе не заработает.
ну соответственно точность чем больше точность тем значения х и у будут бешеные.
03.09.2010, 11:09   #7
Vas-e-na
Форумчанин
 
Регистрация: 21.06.2010
Сообщений: 1,131
Репутация: 345 (342)
Лучшие ответы: 23
Решить систему уравнений методом перебора

Цитата Сообщение от Prelest) Посмотреть сообщение
методом перебора
люди, метод перебора значит что обе переменные перебираются, вот набросал правильный алгоритм (насколько все правильно написал хз)
Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure perebor(sx,ex,sy,ey,e:real); // передаются: начальные значения,
                                       // конечные значения и точность
var z1,z2,y: real;
begin
  while sx<=ex do
  begin
    y:=sy;
    while y<=ey do
    begin
      z1:=3-sin(sx)-y;
      z2:=2+0.5*cos(y-2)-sx;
      if (z1<e)and(z2<e) then
      begin
        // здесь делаете вывод или сохранение полученных значений
        exit;
      end;
      y:=y+e;
    end;
  sx:=sx+e;
  end;
end;
PS
Цитата Сообщение от flatgad Посмотреть сообщение
label reshenie;
Цитата Сообщение от flatgad Посмотреть сообщение
label exit;
flatgad, позор, не пишут уже программы используя goto!!!
PPS ксатати в обоих процедурах у тебя goto можно просто заменить на break, рузультат будет тот же...
03.09.2010, 11:19   #8
flatgad
geJI<|>eP
 
Регистрация: 22.07.2010
Сообщений: 683
Репутация: 178 (178)
Лучшие ответы: 8
Решить систему уравнений методом перебора

ну пускай не пишут, я просто не пойму если оно работает почему им не пользоваться да не спорю может это и не удобно но иногда бывает очень полезно когда приходится скакать по программе как черт вот и написал goto. А break если мне память не изменяет то это выход из цыкла. Но всеравно спасибки за критику )
03.09.2010, 18:53  [ТС]   #9
Prelest)
Форумчанин
 
Регистрация: 22.03.2010
Сообщений: 141
Репутация: 2 (2)
Решить систему уравнений методом перебора

flatgad, а как вы нашли, что
х=[1.5 - 2.5]
y=[2 - 4]
Разве не
х=[-1 - 1]
y=[1 - 3]?
И программа, если её запустить через делфи, не пашет, выдаёт ошибку почти в самом начале программы. И могли бы вы объяснить, что за цифры программа перебирает при нажатии на кнопку?
03.09.2010, 19:17   #10
flatgad
geJI<|>eP
 
Регистрация: 22.07.2010
Сообщений: 683
Репутация: 178 (178)
Лучшие ответы: 8
Решить систему уравнений методом перебора / Delphi для начинающих

Цитата Сообщение от Prelest) Посмотреть сообщение
flatgad, а как вы нашли, что
х=[1.5 - 2.5]
y=[2 - 4]
Разве не
х=[-1 - 1]
y=[1 - 3]?
И программа, если её запустить через делфи, не пашет, выдаёт ошибку почти в самом начале программы. И могли бы вы объяснить, что за цифры программа перебирает при нажатии на кнопку?
y=3-sin(x) => здесь sin(x) может быть от -1 до 1 а значит у будет лежать в пределах от 2 до 4
x=2+0.5cos(y-2) => здесь cos(y-2) также не может выходить за интервал от -1 до 1 тогда х лежит в пределах от 1.5 до 2.5
Но если мы имеем дело с комплексными величинами то тогда такое утверждение будет не верно.
03.09.2010, 19:17
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Автор Дата
Решить систему уравнений методом итераций и методом Зейделя
1. Решить систему уравнений методом итераций и методом Зейделя проделав в каждом из методов по четыре итерации 12х1+х2+2х3=13, х1+11х2+х3=11, 2х1+х2+12х3=14. у иксов нижняя степень спасибо.
Численные методы Deman1986 15.10.2013 15:45
Решить систему уравнений матричным методом.
Решить систему уравнений матричным методом.
С++ для начинающих наташа ч 12.01.2012 12:18
Решить систему уравнений методом Крамера
Ненавижу математику!!! Нужно написать программу на чистом C для решения системы уравнений методом Крамера. Помню там нужно подставлять правый столбец (числа которые после знака равно) вместо каждого, находить определители и делить их на основной определитель, но его я умею искать только для...
С++ для начинающих AlexSun 10.04.2011 23:40
Решить систему уравнений методом подстановки
Решить систему уравнений методом подстановки ax+bx=c dx+ly=f Переменные это a,b,c,d,l.
С++ для начинающих ImmortalGlory 25.12.2010 17:31
Решить систему уравнений методом Гаусса
Решить систему уравнений методом Гаусса ,вычислить Н=Е-Х*Хт 8,2х1-3,2х2+14,2х3+14,8х4=-8,4 5,6х1-12х2 +15х3 - 6,4х4=4,5 5,7х1+3,6х2-12,4х3-2,3х4=3,3 6,8х1+13,2х2-6,3х3-8,78х4=14,3
С++ для начинающих Milka. 24.12.2010 18:48
Опции темы

Текущее время: 06:47. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.