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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2016, 11:44   #1
max.krejjk
 
Регистрация: 20.05.2016
Сообщений: 9
Вопрос Delphi. Как реализовать проверку ОДЗ?

Есть код нахождения значений функции:
Код:
procedure TForm1.Button1Click(Sender: TObject);
  var
   x, y, xmin, xmax, dx : Real;
   pew : integer;
   odz:integer;
   begin
   xmin :=StrtoFloat(Edit1.Text);
   xmax :=StrtoFloat(Edit2.Text);
   dx :=StrtoFloat(Edit3.Text);
   odz :=0;
   pew := Round(xmin)*Round(xmax);
   if ((xmin=odz) or (xmax=odz) or (pew > odz)) then begin
    Memo1.Text:='В промежутке имеется число, которое не входит в ОДЗ';
   end
   else
    x := xmin;while x<=xmax do begin
     y :=sin(1/(2*x)+Log10(3))*sin(1/(2*x)+Log10(3));
     x := x+dx;
     Memo1.Lines.Add('| '+FloatToStr(dx)+' | '+FloatToStrF(x,fffixed,5,4)+
                   ' | '+FloatToStrF(y,fffixed,5,4)+' | ');
end;
   end;
Почему не отрабатывает условие:
Код:
odz :=0;
   pew := Round(xmin)*Round(xmax);
   if ((xmin=odz) or (xmax=odz) or (pew > odz))
max.krejjk вне форума Ответить с цитированием
Старый 12.07.2016, 11:48   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вещественные числа НЕЛЬЗЯ сравнивать с помощью знаков равно!

проблема в машинном представленни вещественных (дробных) чисел.

Например, вещественные числа (числа с десятичной запятой - например, тип real) НЕЛЬЗЯ сравнивать друг с другом просто так.
Почему так - подробнее по ссылкам в этом сообщении

кроме того, а с чего вы взяли, что
формула
Цитата:
Код:
pew := Round(xmin)*Round(xmax);
if ... (pew > odz) then
даст Вам корректный результат?!!!
например, xmin = -1 и xmax = 2
умножаем, получаем -2
если -2 >0 условие не выполняется, однако ноль явно будет в промежутке от -1 до 2

Последний раз редактировалось Serge_Bliznykov; 12.07.2016 в 11:53.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.07.2016, 12:04   #3
max.krejjk
 
Регистрация: 20.05.2016
Сообщений: 9
По умолчанию Fail :D

А в конструкции if можно Round(xmin)=0 написать?
max.krejjk вне форума Ответить с цитированием
Старый 12.07.2016, 13:56   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от max.krejjk Посмотреть сообщение
А в конструкции if можно Round(xmin)=0 написать?
безусловно можно. round возвращает целочисленное значение, его можно (надёжно и безопасно) сравнивать с константой.

но мне не совсем понятен ваш подход.
у Вас функция не определена только в точке 0 ?
так в цикле проверяйте это значение.

примерно так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  x, y, xmin, xmax, dx : Real;
  odz : integer;
begin
   xmin :=StrtoFloat(Edit1.Text);
   xmax :=StrtoFloat(Edit2.Text);
   dx   :=StrtoFloat(Edit3.Text);
   odz  := 0;
   Memo1.Lines.Clear;
   x := xmin;
   while x<=xmax do begin
      if abs(x-odz)<0.0001 then 
       Memo1.Lines.Add('| '+FloatToStr(dx)+' | '+FloatToStrF(x,fffixed,5,4)+
                    ' | '+' #не определено (x не вх. в ОДЗ)'+' | ');
      else begin
         y :=sin(1/(2*x)+Log10(3))*sin(1/(2*x)+Log10(3));
         Memo1.Lines.Add('| '+FloatToStr(dx)+' | '+FloatToStrF(x,fffixed,5,4)+
                 ' | '+FloatToStrF(y,fffixed,5,4)+' | ');
      end;
      x := x+dx;
   end;
end;

Последний раз редактировалось Serge_Bliznykov; 12.07.2016 в 14:03.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.07.2016, 19:54   #5
max.krejjk
 
Регистрация: 20.05.2016
Сообщений: 9
По умолчанию

Как мне пояснил преподаватель, необходимо перед расчётом функции проверить ОДЗ, и если задаваемая ООФ содержит число не входящее в ОДЗ вывести предупреждение.
max.krejjk вне форума Ответить с цитированием
Старый 13.07.2016, 00:36   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

хорошо, я не возражаю, делайте так, как Вам пояснил преподаватель.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно реализовать проверку условия Айдар94941228 Общие вопросы Delphi 1 25.03.2013 01:22
Как реализовать? (excel+delphi) Rusik Общие вопросы Delphi 3 05.01.2013 15:38
можна как то реализовать проверку записи? DarkEvil SQL, базы данных 2 31.10.2009 13:27
Тест на Delphi 7: как реализовать? M|a|G Помощь студентам 2 19.02.2009 17:37
2d эффекты в игре. Как реализовать на Delphi? t3ns0r Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 06.08.2007 18:57