Помогите с решением задачи на языке паскаль

Тема в разделе "Pascal and Delphi", создана пользователем -, 29 май 2010.

Статус темы:
Закрыта.
  1. Гость

    Помогите с решением задачи на языке паскаль. Есть решение но по результатам выводит один корень, а нужэно что бы выводил все, что делать не знаю!!! Вот условие: Вычислние корня уровнения и построения графика функциии уровнения
    tgx-0.5x+1=0. Вот мое решение:


    Код (Delphi):
    uses graph;
    var sx,sy,gd,gm,d:integer;x1,y1,c,x0,y0,x,y,Aa,Bb:real;
    function f3(x:real):real;
    begin f3:=(sin(x)/cos(x))-0.5*x+1;end;
    procedure korni;
    var a,b,c,e,s:real;
    begin
    Write('vvedite nizchnii granicu A= ');ReadLn(A);
    Write('vvedite vverexnii granicu B= ');ReadLn(B);
    repeat
    Write('vvedite tochnost E= ');ReadLn(E);
    until (e>0)and(e<1); aa:=a;bb:=b;
    if abs(a)>abs(B) then d:=2*abs(trunc(a))+1 else
    d:=2*abs(trunc(B))+1;
    repeat c:=(a+B)/2;
    if f3(a)*f3©<=0 then b:=c else a:=c;
    until (b-a)<e;
    writeln('koren=',(a+B)/2:5:5);readln
    end;

    {для построения графика}

    begin

    korni;
    d:=trunc(480/d);


    gd:=detect;
    initgraph(gd,gm,'c:\work\1');
    cleardevice;
    sx:=getmaxx div 2;{koordinat seredini}
    sy:=getmaxy div 2;{akran displei }

    {osi koordinat}
    setbkcolor(0);
    setcolor(2);
    line(0,sy,getmaxx,sy);
    line(sx,0,sx,getmaxy);

    {strelki na osi}
    setcolor(14);
    moveto(sx-5,5);
    lineto(sx,0);
    lineto(sx+5,5);
    moveto(getmaxx-5,sy-5);
    lineto(getmaxx,sy);
    lineto(getmaxx-5,sy+5);

    {nadpisi na osi X i Y}
    settextstyle(0,0,2);
    outtextxy(sx-22,2,'Y');
    outtextxy(getmaxx-16,sy-22,'X');


    {rametka osi OX}
    setcolor(1);
    x0:=d;
    while x0<sx do
    begin
    line(trunc(sx-x0),sy-2,trunc(sx-x0),sy+2);
    line(trunc(sx+x0),sy-2,trunc(sx+x0),sy+2);
    x0:=x0+d;

    end;

    {rametka osi OY}
    y0:=d;
    while y0<sy do
    begin
    line(sx-2,trunc(sy-y0),sx+2,trunc(sy-y0));
    line(sx-2,trunc(sy+y0),sx+2,trunc(sy+y0));
    y0:=y0+d
    end;

    {postroenie grafika funkcii y=f(x)}
    setcolor(15);

    x:=aa;x1:=x;y1:=f3(x1);
    while x<=bb do
    begin
    y:=f3(x);
    {       line(trunc(x1*d)+sx,sy-trunc(y1*d),trunc(x*d)+sx,sy-trunc(y*d));}
    putpixel(trunc(x*d)+sx,sy-trunc(y*d),5);
    y1:=y;x1:=x;
    x:=x+1e-2{1/d};
    end;
    readln;
    closegraph
    end.
     
  2. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    bb - что это?


    так не проще?
    Код (Text):
     while x<=bb do
    begin
    if (sin(x)/cos(x)-0.5*x+1)=0 then
    putpixel(sin(x)/cos(x)-0.5*x+1,0,5);
    end;
     
  3. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Dock1100 if забавный :rolleyes:
    вещественные числа на точное равенство в выч. математике не сравнивают, обычно используют проверку на заданную точность.
     
  4. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Точность у него вроде с клавы вводится.

    Так у него "у" в функции нету, ну я и взял то что справа.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей