Помощь - Поиск - Пользователи - Календарь
Полная версия: График функций
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
TP7.0
Здраствуйте! Помогите пожалуйсто, кто может подредактировать програму, она написана, но не запускается=(
Задание: Вычислить таблицу значений и построить график функций Y(x) на интервале 0<=x<=pi c шагом h=0,15
y=exp(-x/2)/(1-0,5sin3x)



программа:
Код

  Program Graphic;
Uses crt, graph;
const n=40;
const P=3.1415926;
var
a,d,b,x,y,k:real;
c,r,f:integer;
sx,sy,sz:string;
begin
ClrScr;
write ('Vvedite x, y, shag : ');
initGraph(c,r,'c:\tp8\BGI');
setcolor(2);
x:=a;
f:=20;
While b>=x do
  begin
    y:=Exp(-x/2)/(1-0.5*sin(3*x));
      str(x:0:5,sx);
      str(y:0:5,sx);
outtextxy(0,f,'X='+sx+' Y='+sy);
f:=f+10;
x:=x+d;
end;
setcolor(white);
line(0,240,640,240);
line(640,240,625,237);
line(640,240,625,243);
line(320,0,320,480);
line(320,0,317,15);
line(320,0,323,15);
outtextxy(310,4,'Y');
outtextxy(631,220,'X');
outtextxy(325,243,'0');
settextstyle(2,0,2);
x:=320; k:=0.2;
while x<640-n*0.3 do
   begin
   x:=x+n*0.2;
   line(round(x),235,round(x),245);
   str(k:2:1,sz);
   outtextxy(round(x), 245,sz);
   k:=k+0.2;
   end;
   x:=a;
   x:=320; k:=-0.2;
   while x>n*0.3 do
    begin
    x:=x-n*0.2;
    line(round(x),235,round(x),245);
    str(k:2:1,sz);
    outtextxy(round(x)-5,245,sz);
    k:=k-0.2;
    end,
   y:=240; k:=0.2;
   while y>n*0.3 do
    begin
    y:=y-n*0.2;
    line(325,round(y),315,round(y));
    str(k:2:1,sz);
    outtextxy(330,round(y),sz);
    k:=k+0.2;
    end;
   y:=240; k:=-0.2;
   while y<480-n*0.3 do
    begin
    y:=y+n*0.2;
    line(325,round(y),315,round(y));
    str(k:2:1,sz);
    outtextxy(325,round(y),sz);
    k:=k-0.2;
    end;
  settextstyle(2,0,6);
  setcolor(4);
     outtextxy(340,100,'y:=Exp((-(x)/2)/(1-0.5*sin(3*x)');
     outtextxy(450,135,'0<=x<=P);
      x:=a;
      y:=Exp(-x/2)/(1-0.5*sin(3*x));
      moveto(322+round(x*1.1*n),240+round(y*1.1*n));
  while b>=x do
  begin
     y:=Exp(-x/2)/(1-0.5*sin(3*x));
     lineto(322+round(x*n),240+round(y*1.1*n));
     x:=x+d;
  delay(1000);
    end;
    readkey;
    closegraph;
end.


Заранее пасибо=)

Добавлено через 12 мин.
Решение подобного задания
Вычислить y=exp(1/3*ln(x+4)/exp(x), (где x в степени е) напечатать таблицу значений и построить график функции на интервале -4,4<=X<=4 c шагом ΔX=0,4
Программа:
Код

program grafik;
uses crt,graph;
var x,y,xn,xk,h:real;
    GD,GM,X0,Y0,dX,dY,ch:integer;
    s1,s2:string;
Begin
     write(' Введите xn,xk,h: ');
     read(xn,xk,h);
     DetectGraph(GD,GM);
     InitGraph(GD,GM,'\bgi');
     SetColor(15);
     SetBkColor(3);
     { Вывод таблицы значений }
     OutTextXY(10,10,' X      Y');
     x:=xn; dy:=20;
     while x<xk+0.01 do begin
           if x<-4.01 then y:=-exp(1/3*ln(abs(x+4)))/exp(x)
                  else if x>-3.99 then y:=exp(ln(x+4)*1/3)/exp(x)
                                          else y:=0;
           str(x:4:1,s1); str(y:7:3,s2);
           OutTextXY(10,dy,s1); OutTextXY(50,dy,s2);
           dy:=dy+10;
           x:=x+h end;
     readkey;

     { Координатная плоскость }
     OutTextXY(350,100,'y=exp(ln(x+4)*1/3)/exp(x)');
     outtextxy(350,120,'-4.4<=x<=4.0,h=0.4 ');
     settextstyle(2,0,2);
     X0:=GetMaxX div 2; Y0:=GetMaxY div 2;
     Line(0,Y0,GetMaxX,Y0);
     Line(X0,0,X0,GetMaxY);
     dx:=6;ch:=1;
     while x0+dx<getmaxX-10 do begin
           Line(x0+dx,Y0-1,x0+dx,Y0+1);
           Line(x0-dx,y0-1,x0-dx,y0+1);
           str(ch,s1);str(-ch,s2);
           OuttextXY(x0+dx-2,y0+5,s1);
           OuttextXY(x0-dx-6,y0+5,s2);
           ch:=ch+2;
           dX:=dX+12 end;
     dy:=6;ch:=1;
     while y0+dy<getmaxy-10 do begin
           Line(x0-1,y0+dy,x0+1,y0+dy);
           Line(x0-1,y0-dy,x0+1,y0-dy);
           str(ch:2,s1);str(-ch:3,s2);
           OuttextXY(x0-13,y0+dy-3,s2);
           OuttextXY(x0-10,y0-dy-3,s1);
           ch:=ch+2;
           dy:=dy+12 end;
     Line(X0,0,X0-3,5);
     Line(X0,0,X0+3,5);
     Line(GetMaxX,Y0,GetMaxX-5,Y0+3);
     Line(GetMaxX,Y0,GetMaxX-5,Y0-3);

     OutTextXY(GetMaxX-5,Y0+5,'X');
     OutTextXY(X0-10,5,'Y');

     { График }
     SetColor(6);
     x:=xn;
     moveto(x0+round(xn*6),y0-round(-exp(1/3*ln(abs(xn+4)))/exp(xn)*6));
     while x<=xk do begin
         if x<-4.0 then y:=-exp(1/3*ln(abs(x+4)))/exp(x)
                  else if x>-4.0 then y:=exp(ln(x+4)*1/3)/exp(x)
                                        else y:=0;
         lineto(X0+round(x*6),Y0-round(y*6));
         x:=x+0.001;delay(50) end;
     readkey;
     CloseGraph
End.
volvo
Ошибки - то все синтаксические... Исправляешь - программа работает...

А где они - это компилятор должен показать...
Гость
А он пишет вот в этой строчке ошибка, что тут неправильно?
Код

  Program Graphic;
Uses crt, graph;
const n=40;
const P=3.1415926;
var
a,d,b,x,y,k:real;
c,r,f:integer;
sx,sy,sz:string;
begin
ClrScr;
write ('Vvedite x, y, shag : ');
initGraph(c,r,'c:\tp8\BGI');
setcolor(2);
x:=a;
f:=20;
While b>=x do
  begin
    y:=Exp(-x/2)*(1-0.5*sin(3*x));
      str(x:0:5,sx);
      str(y:0:5,sx);
outtextxy(0,f,'X='+sx+' Y='+sy);
f:=f+10;
x:=x+d;
end;
setcolor(white);
line(0,240,640,240);
line(640,240,625,237);
line(640,240,625,243);
line(320,0,320,480);
line(320,0,317,15);
line(320,0,323,15);
outtextxy(310,4,'Y');
outtextxy(631,220,'X');
outtextxy(325,243,'0');
settextstyle(2,0,2);
x:=320; k:=0.2;
while x<640-n*0.3 do
   begin
   x:=x+n*0.2;
   line(round(x),235,round(x),245);
   str(k:2:1,sz);
   outtextxy(round(x), 245,sz);
   k:=k+0.2;
   end;
   x:=a;
   x:=320; k:=-0.2;
   while x>n*0.3 do
    begin
    x:=x-n*0.2;
    line(round(x),235,round(x),245);
    str(k:2:1,sz);
    [size=6] outtextxy(round(x)-5.245,sz);  [/size]
    k:=k-0.2;
    end,
   y:=240; k:=0.2;
   while y>n*0.3 do
    begin
    y:=y-n*0.2;
    line(325,round(y),315,round(y));
    str(k:2:1,sz);
    outtextxy(330,round(y),sz);
    k:=k+0.2;
    end;
   y:=240; k:=-0.2;
   while y<480-n*0.3 do
    begin
    y:=y+n*0.2;
    line(325,round(y),315,round(y));
    str(k:2:1,sz);
    outtextxy(325,round(y),sz);
    k:=k-0.2;
    end;
  settextstyle(2,0,6);
  setcolor(4);
     outtextxy(340,100,'y:=Exp((-(x)/2)*(1-0.5*sin(3*x)');
     outtextxy(450,135,'0<=x<=P);
      x:=a;
      y:=Exp((-(x)/2)*(1-0.5*sin(3*x));
      moveto(322+round(x*1.1*n),240+round(y*1.1*n));
  while b>=x do
  begin
     y:=Exp((-(x)/2)*(1-0.5*sin(3*x));
     lineto(322+round(x*n),240+round(y*1.1*n));
     x:=x+d;
  delay(1000);
    end;
    readkey;
    closegraph;
end.

Гость
А он пишет вот в этой строчке ошибка, что тут неправильно?
Код


outtextxy(round(x)-5.245,sz);
    

andriano
Процедура требует 3 параметра, а у тебя только 2. Причем, первый - вещественный.
TP7.0
Цитата(Гость @ 16.12.2007 0:18) *

А он пишет вот в этой строчке ошибка, что тут неправильно?
Код


outtextxy(round(x)-5.245,sz);
    


пишет: type mismath
volvo
outtextxy(round(x)-5, 245, sz);


Добавлено через 1 мин.
Кстати,
y:=Exp(-x/2)*(1-0.5*sin(3*x));
ты умножение с делением не перепутал случайно? У тебя в условии именно деление
TP7.0
Цитата(volvo @ 16.12.2007 0:31) *

outtextxy(round(x)-5, 245, sz);


Добавлено через 1 мин.
Кстати,
y:=Exp(-x/2)*(1-0.5*sin(3*x));
ты умножение с делением не перепутал случайно? У тебя в условии именно деление

Уряяяя=) заработало=)
Пасибо огромное за помощь=))


Добавлено через 3 мин.

Хм.. Ток странно работает=(

выскакивает ошибка, выделеляет эту строку...
Код

f:=f+10;
volvo
А ты бы после строки:

write ('Vvedite x, y, shag : ');

добавил еще
Readln(a, b, d);


и при запуске ввел, скажем, 1, 3 и 0.01 - тогда, глядишь, и вылетать не будет...
TP7.0
Цитата(volvo @ 16.12.2007 0:48) *

А ты бы после строки:

write ('Vvedite x, y, shag : ');

добавил еще
Readln(a, b, d);


и при запуске ввел, скажем, 1, 3 и 0.01 - тогда, глядишь, и вылетать не будет...

Пасибо огромное=))) работает, осталось доредактиравать, уж завтра доделаю, спать пошёл.
Ещё раз огромное спасибо volvo=)))))
TP7.0
Маленький вопросик, а как записывается на языке паскаль y=3x (где х степень 3). как формула в паскале будет?
Пример:
Client
Цитата
а как записывается на языке паскаль
Т.е. тебе написать само выражение? Если так, то надо сделать цикл, где будешь умножать на 3 и все
TP7.0
Цитата(Client @ 16.12.2007 12:42) *

Т.е. тебе написать само выражение?

формулу, как в паскале будет... я блоксхему состовляю и в ней один момент, подзабыл как записать ф-ю y=3x( где x в степени)
volvo
Y := Exp(X*Ln(3)); { Это и есть 3^X }
TP7.0
Цитата(volvo @ 16.12.2007 12:52) *

Y := Exp(X*Ln(3)); { Это и есть 3^X }


Пасибо volvo=)))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.