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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2009, 17:16   #1
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию Построение графика [Delphi]

Здравствуйте уважаемые эксперты, вообщем есть небольшая проблема. Есть процедура по нажатию кнопки:
Код:
procedure TMainFormOfLab8.ButtonScheduleClick(Sender: TObject);
var Xmin,Xmax,H_tabl,t,X,Y,Z:extended;
begin
  Series1.Clear;
  try
    X:=StrToFloat(EditX.Text);
    Y:=StrToFloat(EditY.Text);
    Z:=StrToFloat(EditZ.Text);
    Xmin:=StrToFloat(EditXmin.Text);
    Xmax:=StrToFloat(EditXmax.Text);
    H_tabl:=StrToFloat(EditStepTabl.Text);
  except
    on EConvertError do
      begin
        ShowMessage('Не все поля заполнены!');
        Exit;
      end;
  end;
  X:=Xmin;
  repeat
    t:=((2*cos(x-pi/6))/(0.5+Power(sin(y),2)))/(1+Power(z,2)/3-((Power(z,2))/5));
    Series1.AddXY(x,Calc(Xmin,Xmax,H_tabl,x,y,z),'',clRed);
    X:=X+H_tabl;
  until (X>Xmax);
end;
Преподаватель сказала, что нужно вынести расчет точек графика в отдельную функцию, но что-то не получается, выскакивает ошибка:[Warning] Unit1.pas(90): Return value of function 'Calc' might be undefined
Вот код:
Код:
function Calc(Xmin,Xmax,H_tabl,x,y,z:extended):extended;
begin
  x:=Xmin;
  while x>Xmax do
    begin
      Result:=((2*cos(x-pi/6))/(0.5+Power(sin(y),2)))/(1+Power(z,2)/3-((Power(z,2))/5));
      x:=x+H_tabl;
    end;
end;
И вот так я ее вызываю:
Код:
procedure TMainFormOfLab8.ButtonScheduleClick(Sender: TObject);
var Xmin,Xmax,H_tabl,t,X,Y,Z:extended;
begin
  Series1.Clear;
  try
    X:=StrToFloat(EditX.Text);
    Y:=StrToFloat(EditY.Text);
    Z:=StrToFloat(EditZ.Text);
    Xmin:=StrToFloat(EditXmin.Text);
    Xmax:=StrToFloat(EditXmax.Text);
    H_tabl:=StrToFloat(EditStepTabl.Text);
  except
    on EConvertError do
      begin
        ShowMessage('Не все поля заполнены!');
        Exit;
      end;
  end;
  Series1.AddXY(x,Calc(Xmin,Xmax,H_tabl,x,y,z),'',clRed);

end;
Помогите исправить ошибку, заранее огромное спасибо!
StudeHt вне форума Ответить с цитированием
Старый 23.12.2009, 20:31   #2
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Неужели никто не подскажет?
StudeHt вне форума Ответить с цитированием
Старый 23.12.2009, 20:37   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Если не ошибаюсь, то ворнинг выскакивает из-за отсутствия инициализации Result, а так как в случае когда изначально x <= Xmax, переменной Result ни разу не будет присвоено какое-либо значение, то она(переменная) может содержать внутри мусор, о чём и предупреждает компилятор. Чтобы не ругалось попробуйте перед While написать Result := 0 или что-то в этом роде
netrino вне форума Ответить с цитированием
Старый 23.12.2009, 20:40   #4
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Да, warning исчез, но график функции почему-то все равно не строится, в чем может быть ошибка?
StudeHt вне форума Ответить с цитированием
Старый 23.12.2009, 20:47   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Наверное потому что ф-ция Calc считает и возвращает значение только последней точки(у вас ведь цикл), то есть Series1.AddXY вызывается лишь раз
netrino вне форума Ответить с цитированием
Старый 23.12.2009, 20:59   #6
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

Честно говоря, чувствую себя идиотом.. Уже 2 час сижу, и ничего не работает.. Посмотрите если не сложно проект, попытался учесть Ваше последнее замечание, сделав через цикл while, но программа просто стала зависать..
Вложения
Тип файла: rar Восьмая лаба.rar (304.8 Кб, 13 просмотров)
StudeHt вне форума Ответить с цитированием
Старый 23.12.2009, 21:08   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Проверить я не могу, Delphi не использую )
Но говорил я не о том, а о
Код:
function Calc(Xmin,Xmax,H_tabl,x,y,z:extended):extended;
begin
  x:=Xmin;
  Result:=0;
  while x<Xmax do
    begin
      Result:=((2*cos(x-pi/6))/(0.5+Power(sin(y),2)))/(1+Power(z,2)/3-((Power(z,2))/5));
      x:=x+H_tabl;
    end;
end;
этом.
Вы отдаёте себе отчёт в том, что эта функция вычисляет последнуюю точку графика? Только её она и возвращает и никакую другую. Не знаю чего именно хотел Ваш преподаватель, но могу предположить, что нечто вроде такого:
Код:
function Calc(x,y,z:extended):extended;
begin
      Result:=((2*cos(x-pi/6))/(0.5+Power(sin(y),2)))/(1+Power(z,2)/3-((Power(z,2))/5));
end;

...

  repeat
    Series1.AddXY(x, Calc(x, y, z),'',clRed);
    X:=X+H_tabl;
  until (X>Xmax);
netrino вне форума Ответить с цитированием
Старый 23.12.2009, 21:11   #8
StudeHt
Пользователь
 
Регистрация: 05.04.2009
Сообщений: 78
По умолчанию

В этом то вся и проблема, что препод сказал полностью вынести вычисления, а не одну функцию.. Еще попробую что-нить придумать, а если нет, то действительно просто вынесу одну функцию вычисления, спасибо Вам!
StudeHt вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение графика в TP XanderV13 Помощь студентам 0 22.11.2009 10:55
Построение графика Nikkkk Общие вопросы C/C++ 7 01.06.2009 01:46
Построение графика! kiling Мультимедиа в Delphi 0 19.05.2009 21:03
Построение графика в Delphi сер4ей Помощь студентам 0 25.04.2009 15:15
Построение графика KARSH Общие вопросы Delphi 3 28.05.2007 17:05