Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2014, 21:05   #11
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Сообщений: 335
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Все правильно. Вы искали корень в интервале [1;2], а там его нет. Корень 0,147 примерно. Если x в радианах конечно.
Ищите в [0;1], а лучше границы a,b тоже StrToFloat, и искать например [0,01;1]
Сделал всё как вы сказали. Корень нашёлся) УРА! Но рисовать график не хочет( нажимаю на Button1 - выдаёт ошибку(((
Изображения
Тип файла: jpg ошибка.jpg (28.3 Кб, 94 просмотров)
beygul вне форума Ответить с цитированием
Старый 26.05.2014, 21:14   #12
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Да тоже самое 1/0 наверное.
Вообще как-то топорно все сделано.
Зачем писать в обработчике Батон1Клик y:=7*sin и т.д. Почему не поместить определение функции выше, и писать просто y:=f(x); ?
И зачем все переменные - глобальные ?

И графику у вас рисует при x от -100 до +100 с шагом 0,01 ( непонятно зачем такой мелкий шаг на графике).
Может быть лучше тоже задавать границы и шаг для графика в Edit ?

Последний раз редактировалось type_Oleg; 26.05.2014 в 21:18.
type_Oleg вне форума Ответить с цитированием
Старый 26.05.2014, 21:35   #13
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Сообщений: 335
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Да тоже самое 1/0 наверное.
Вообще как-то топорно все сделано.
Зачем писать в обработчике Батон1Клик y:=7*sin и т.д. Почему не поместить определение функции выше, и писать просто y:=f(x); ?
И зачем все переменные - глобальные ?

И графику у вас рисует при x от -100 до +100 с шагом 0,01 ( непонятно зачем такой мелкий шаг на графике).
Может быть лучше тоже задавать границы и шаг для графика в Edit ?
Деление на ноль я устранил вроде бы
Код:
procedure TForm1.Button1Click(Sender: TObject);        //ãðàôèê
begin
 m := 10;  //ìàñøòàá
 x := -100;
 x0:=200;
 y0:=125;

  while x <=100  do
    begin
      if (x<-0.005) or (x>0.005) then begin
      y := 7*sin(x)-1/x+5*exp(x);
      image1.Canvas.Pixels[x0+Round(x*m),y0-Round(y*m)] := clGreen;
      end;
      x := x + 0.01;
    end;
end;
А шаг по крупнее сделать какой?
beygul вне форума Ответить с цитированием
Старый 26.05.2014, 21:48   #14
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от beygul Посмотреть сообщение
.. А шаг по крупнее сделать какой?
Да здесь шаг на ошибку вроде не влияет.
Просто как-то нелогично. Зачем вот это задавать в самом коде
Код:
 m := 10;  
 x := -100;
// и т.д.
while x <=100  do
А если на интервале [-100;100]нет решения ?
И шаг 0.01 в графике не нужен. Это же просто чтобы посмотреть.

Лучше сделать так, как в procedure TForm1.Button3Click, то есть границы и шаг задавать в Edit.
type_Oleg вне форума Ответить с цитированием
Старый 26.05.2014, 21:56   #15
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Сообщений: 335
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Да здесь шаг на ошибку вроде не влияет.
Просто как-то нелогично. Зачем вот это задавать в самом коде
Код:
 m := 10;  
 x := -100;
// и т.д.
while x <=100  do
А если на интервале [-100;100]нет решения ?
И шаг 0.01 в графике не нужен. Это же просто чтобы посмотреть.

Лучше сделать так, как в procedure TForm1.Button3Click, то есть границы и шаг задавать в Edit.
Не совсем понял идею. О каких границах идет речь? Можно поподробнее, как реализовать этот способ?
beygul вне форума Ответить с цитированием
Старый 26.05.2014, 22:06   #16
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от beygul Посмотреть сообщение
..О каких границах идет речь? ..
Об этих
Код:
 x := -100;  // что значит  число - 100 ?
// и т.д. 
while x <=100  do  // что значит число 100 ?
type_Oleg вне форума Ответить с цитированием
Старый 26.05.2014, 22:12   #17
beygul
Форумчанин
 
Аватар для beygul
 
Регистрация: 15.09.2008
Сообщений: 335
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Об этих
Код:
 x := -100;  // что значит  число - 100 ?
// и т.д. 
while x <=100  do  // что значит число 100 ?
Так в итоге ошибка то у меня в чём? Если деление на ноль я устранил.
Код:
procedure TForm1.Button1Click(Sender: TObject);        //ãðàôèê
begin
 m := 10;  //ìàñøòàá
 x := -100;
 x0:=200;
 y0:=125;

  while x <=100  do
    begin
      if (x<-0.005) or (x>0.005) then begin
      y := 7*sin(x)-1/x+5*exp(x);
      image1.Canvas.Pixels[x0+Round(x*m),y0-Round(y*m)] := clGreen;
      end;
      x := x + 0.01;
    end;
end;
beygul вне форума Ответить с цитированием
Старый 26.05.2014, 23:34   #18
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вместо этого
Код:
 image1.Canvas.Pixels[x0+Round(x*m),y0-Round(y*m)] := clGreen;
вот это
Код:
 if (Abs(x*m)<1000)and(Abs(y*m)<1000)
    then image1.Canvas.Pixels[x0+Round(x*m),y0-Round(y*m)] := clGreen;
По крайней мере ошибки не будет.
type_Oleg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Решение системы нелинейных уравнений методами Ньютона и простых итераций. Помогите найти ошибку! Sianessa Помощь студентам 8 13.04.2012 17:32
Решение нелинейных уравнений методом хорд на Delphi 6 или 7 Vovanella Помощь студентам 1 06.12.2010 22:36
Решение нелинейных уравнений s2dentishe Помощь студентам 0 18.04.2010 11:47
решение нелинейных уравнений Жанна__90 Помощь студентам 21 22.07.2009 01:30