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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2010, 22:02   #1
Студло
Пользователь
 
Регистрация: 06.02.2010
Сообщений: 32
По умолчанию Я что то забыл?Функции не хватает параметров...

Дана функция:
Код:
Function F(x,xc,b,c:Real): Real;
begin
 F :=(xc-b)/(x-c);
end;
Вызываю к примеру:
Код:
F(a,acc,e,c);
Что пишет Not enough actual parameters.Скажите идиоту что нитак?
Студло вне форума Ответить с цитированием
Старый 14.02.2010, 22:07   #2
Irino4ka-LOL
Пользователь
 
Регистрация: 04.02.2010
Сообщений: 12
По умолчанию

что такое acc и e ??
Irino4ka-LOL вне форума Ответить с цитированием
Старый 14.02.2010, 22:09   #3
Студло
Пользователь
 
Регистрация: 06.02.2010
Сообщений: 32
По умолчанию

Это обычные переменные...называются так
Студло вне форума Ответить с цитированием
Старый 14.02.2010, 22:15   #4
Irino4ka-LOL
Пользователь
 
Регистрация: 04.02.2010
Сообщений: 12
По умолчанию

я точно не помню, но при вызове функции па паскале, кажется можно использовать только её формальные параметры
и поробуй z:=F(....); предварительно описав z
Irino4ka-LOL вне форума Ответить с цитированием
Старый 14.02.2010, 22:15   #5
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

В общем, кидай сюда весь код.
Carbon вне форума Ответить с цитированием
Старый 14.02.2010, 22:17   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

на первый взгляд всё правильно.
только мне кажется, что банально надо результат куда-то деть.. ведь это же ФУНКЦИЯ:
xxx := F(a,acc,e,c);

если не поможет - давайте кусок программы целиком. чтобы можно было проверить у себя.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.02.2010, 22:28   #7
Студло
Пользователь
 
Регистрация: 06.02.2010
Сообщений: 32
По умолчанию

Ойой надо сначала ваши способы попробувать спасибо за ответы секундочку...

код большой....но рискну скинуть....честно скажу у меня очень плохо с функциями
Код:
procedure TForm1.btngoClick(Sender: TObject);
var Ac,i,q:integer;
n,V,Step,A,acc,B,C,E,dx,dy,x,y,xx,yy,xc:real;
begin
try
if (strtofloat(edtx1.Text)<>strtofloat(edtc.Text)) and (strtofloat(edtx2.Text)<>strtofloat(edtc.Text)) then
begin
p:=1;
h:=3;
sm1:=0;
sm2:=0;
scrollbar1.Max:=abs(p*2);
scrollbar2.Max:=abs(p*2);
scrollbar1.Position:=round((scrollbar1.Max)/2);
scrollbar2.Position:=round((scrollbar2.Max)/2);
btnp.Enabled:=true;
btnm.Enabled:=true;
imgr.Canvas.Rectangle(0,0,300,220);
imgr.canvas.MoveTo(0,110);
imgr.Canvas.LineTo(300,110);
imgr.canvas.MoveTo(150,0);
imgr.Canvas.LineTo(150,220);
{очистка экрана}
scrollbar1.Hide;
scrollbar2.Hide;
Step:=0.01;
Ac:=strtoint(edtac.Text);
A:=strtofloat(edtx1.Text);
B:=strtofloat(edtx2.Text);
e:=strtofloat(edte.Text);
c:=strtofloat(edtc.Text);
imgr.canvas.MoveTo(0,110);
imgr.Canvas.LineTo(300,110);
imgr.canvas.MoveTo(150,0);
imgr.Canvas.LineTo(150,220);
   {Определяем маесимальный интервал по Х}
     If (Abs(A) > Abs(B)) Then XX := Abs(A) Else XX := Abs(B);
     {Ищем экстремум функции в интервале от A до B}
Acc:=a;
for i:=2 to ac do
Acc:=acc*a;
     YY := Abs(F(a,acc,e,c));
     x := A;
     repeat
       x := x + Step;
       Xc:=x;
       for i:=2 to ac do
       xc:=xc*x;
       if YY < Abs(F(x,xc,e,c)) then YY := Abs(F(x,xc,e,c));
     until x>c-0.1;
     x:=c+0.1;
     xc:=x;
     repeat
       x := x + Step;
       Xc:=x;
       for i:=2 to ac do
       xc:=xc*x;
       if YY < Abs(F(x,xc,e,c)) then YY := Abs(F(x,xc,e,c));
     until x>b;
     dX := 150 / XX;
     dY := 110 / YY;
     x := A;
     Xc:=x;
     imgr.canvas.MoveTo(150,110);
     if (strtoint(edtx1.text)<0) then
     Repeat
       Xc:=x;
       for i:=2 to ac do
       xc:=xc*x;
       if x=-1.0 then
label1.Caption:=floattostr(e);
       y := F(x,xc,e,c);
       if x=-1.0 then
label2.Caption:=floattostr(y);
      imgr.Canvas.Pixels[150 + Round(dX * x), 110 - Round(dY * y)]:=1;
       x := x + Step;
     Until x>c-0.1;
     if (strtoint(edtx1.text)<0) then
     x:=x+0.2;
     Xc:=x;
for i:=2 to ac do
       xc:=xc*x;
       y := F(x,xc,e,c);
imgr.canvas.MoveTo(150+round(dx * x), 110 - round(dy * y));
          Repeat
       Xc:=x;
       for i:=2 to ac do
       xc:=xc*x;
       y := F(x,xc,e,c);
      imgr.Canvas.Pixels[150 + Round(dX * x), 110 - Round(dY * y)]:=1;
       x := x + Step;
     Until x>b;
{горизонтальные кооорды}
  n:=0;
  q:=150;
A:=strtofloat(edtx1.Text);
B:=strtofloat(edtx2.Text);
n:=0;
  q:=150;
  if p>0 then
  V:=(((abs(a)+abs(b))/p)/5);
{  V:=abs((xx/p)/10);}
  if p<0 then
  V:=(((abs(a)+abs(b))*p)/5);
{  V:=(xx/p)/10;}
  repeat
  n:=n-abs(v);
q:=q-30; Imgr.Canvas.MoveTo(q,107);Imgr.Canvas.LineTo(q,113);
imgr.canvas.TextOut(q,113,floattostrf(n,ffgeneral,3,1));
  until q<=0;
    q:=150;
    n:=0;
A:=strtofloat(edtx1.Text);
B:=strtofloat(edtx2.Text);
n:=0;
  q:=150;
  if p>0 then
  V:=(((abs(a)+abs(b))/p)/5);
  if p<0 then
  V:=(((abs(a)+abs(b))*p)/5);
  repeat
  n:=n+abs(v);
q:=q+30; Imgr.Canvas.MoveTo(q,107);Imgr.Canvas.LineTo(q,113);
imgr.canvas.TextOut(q,113,floattostrf(n,ffgeneral,3,1));
  until q>=300;
  {горизонтальные кооорды}
     {вертикальные коорды}
n:=0;
  q:=110;
  if p>0 then
  V:=((Abs(F(a,acc,e,c))+Abs(F(b,acc,e,c)))/p)/4;
  if p<0 then
  V:=((Abs(F(a,acc,e,c))+Abs(F(b,acc,e,c)))*p)/4;
 repeat
  n:=n+abs(v);
q:=q-30; Imgr.Canvas.MoveTo(147,q);Imgr.Canvas.LineTo(153,q);
imgr.canvas.TextOut(153,q,floattostrf(n,ffgeneral,3,1));
  until q<=0;
n:=0;
  q:=110;
  if p>0 then
  V:=((Abs(F(a,acc,e,c))+Abs(F(b,acc,e,c)))/p)/4;
  if p<0 then
  V:=((Abs(F(a,acc,e,c))+Abs(F(b,acc,e,c)))*p)/4;
 repeat
  n:=n-abs(v);
q:=q+30; Imgr.Canvas.MoveTo(147,q);Imgr.Canvas.LineTo(153,q);
imgr.canvas.TextOut(153,q,floattostrf(n,ffgeneral,3,1));
  until q>=220;
  {вертикальные коорды}
end
else
MessageDlg('X-ы не должны равнятся значению C',mtError,[MbCancel],0);
except
On EconvertError do
begin
MessageDlg('Нужно вводить целые числа',mtError,[MbCancel],0);
end;
end;
end;
рисует график в image size 300x220...не судите строга...переманная p в коде мне нужна для увеличения и уменьшения графика...я её сюда ничаяно засунул наверное...

Последний раз редактировалось Stilet; 15.02.2010 в 08:12.
Студло вне форума Ответить с цитированием
Старый 14.02.2010, 22:53   #8
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Вот код простой проги с функцией. На форме две кнопки "Вызвать функцию" (Button1) и "Вывести результат функции" (Button2).
Код:
var
  Form1: TForm1;
  a1,b1,c1,d1: real;

implementation

{$R *.dfm}

function _math(a,b,c,d: real): real;
begin
  Result:= (a + b) * c / d;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  a1:= 10; b1:= 7;
  c1:= 3; d1:= 11;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  _math(a1,b1,c1,d1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Form1.Label1.Caption:='Результат :   ' +  FloatToStr(_math(a1,b1,c1,d1));
end;

end.
Нормально компиллируется (D7). При выполнении программы нажимаем Button1 и никаких сообщений об ошибках нет. Правда и видимых действий также не видно. Прога функу вызвала, просчитала, но куда девается результат - неизвестно (мне во всяком случае).
При нажатии Button2 - видимый результат вычисления в Label.
Чтоб явно убедиться, что функа выполняется для случая (TForm1.Button1Click(Sender: TObject), создайте функцию с каким либо выводом на форму ( не Result). Ну, например, до вычисления по формуле выводите на форму через TextOut те же переменные a1,b1 и т.д.

PS: не поленился, проверил дополнительно:
Код:
function _math(a,b,c,d: real): real;
begin
  Form1.Canvas.TextOut(50,300,FloatToStr(a1) + '   ' + FloatToStr(d1));
  Result:= (a + b) * c / d;
end;
Нормально на форму выводятся значения a1 и d1 при запуске procedure TForm1.Button1Click(Sender: TObject);
Может Вы что либо с объявлением переменных a, acc, e, c нахомутали?
И не сомневайся даже ... отдых - кайф, работа - лажа!

Последний раз редактировалось DeKot; 14.02.2010 в 23:04.
DeKot вне форума Ответить с цитированием
Старый 14.02.2010, 22:56   #9
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
только мне кажется, что банально надо результат куда-то деть.. ведь это же ФУНКЦИЯ:
xxx := F(a,acc,e,c);
Как мне говорит фпц, результат не обязательно куда-то девать.

Так, на какую строку ругается компилятор?

Последний раз редактировалось Stilet; 15.02.2010 в 08:13.
Carbon вне форума Ответить с цитированием
Старый 14.02.2010, 23:10   #10
Студло
Пользователь
 
Регистрация: 06.02.2010
Сообщений: 32
По умолчанию

Самая страшная проблема в том что у меня тоже ошибки не выводит...я не мог настроить правильный вывод координат на экран, решил проверить правильно ли у меня считает функция...вообщем при проверке в самой функции (в Watch'е я попросил вывести F) он выдает не хватает параметров. + имеются погрешности при просчете
Студло вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функции с переменной количество параметров miki131 Общие вопросы C/C++ 6 23.01.2010 21:35
Функции с переменным числом параметров Matr1x Общие вопросы C/C++ 2 07.01.2010 16:55
забыл пароль, что делать? Screame Microsoft Office Excel 2 10.08.2009 15:45
скопировал фотки, удалил их с карты, вставить забыл. Потом скопировал что-то другое, Как зайти в буфер? Арчо Операционные системы общие вопросы 3 09.08.2009 17:53
Не хватает памяти.Из-за того, что Паскаль старый? delphyok Паскаль, Turbo Pascal, PascalABC.NET 4 17.05.2009 15:49