Function Root(indx,expon: Extended): Extended; Begin If (expon = 0) Or (indx = 0) Then Root:=0 Else If (round(indx) mod 2 =0) Then If (expon < 0) Then Root:=0 Else Root:= exp(Ln(expon)/indx) Else If (round(indx) mod 2 =1) Then If (expon < 0) Then Root:= -exp(Ln(-expon)/indx) Else Root:= exp(Ln(expon)/indx) Else Root:= exp(Ln(expon)/indx); End; Begin DetectGraph(Driver, Mode); Mode := m800x600; InitGraph(Driver, Mode, ''); first_step:= true; tmp:= 10; x:= -tmp; While (x <= tmp) do begin If (Round(x / step) = 0) then first_step:= true else begin Value:= Trunc(root(2,x) * f_root); If first_step then begin first_step:= false; MoveTo((300 + Trunc(x * f_root)), (300 - Value)); end else LineTo((300 + Trunc(x * f_root)), (300 - Value)); end; x:= x + step; delay(10); end; Readkey; CloseGraph; End.
помогите с найти ошибку! Ошибка в том тош-то он рисует впереди квадратного корня простую линию .
!!!!!!!!! Tmp dolzno ostatsa 10
Последний раз редактировалось itwork 28.01.2007 12:24:28, всего редактировалось 1 раз.
"SAK"НЕт это должно остаться, иначе если вместо root(2,x) ставим другую формулу типо 1/X видает ошибку! Ж)
короче, вот в чем дело- я подставляю вместо ROOT(2,X) любую другую формулу (например, 1/X, X^2, COS(x), ROOT(3,X)) и всё работает, А ВОТ ТОКО ROOT(2, X)СКАДАЛИТ, ВООЩЕ В САМОМ НАЧАЛЕ ВЫДАВАЛ ОШЫБКУ - ТИПО У ВАС ХПОЛУЧИЛСЯ ОТРИЦАТЕЛЬНЫЙ, ну я и указал чтоб при x<0 root:=0 ну теперь конечно же рисует впереди линию, а потом свой Квадратный корень! ЛЮди так что можно сделать чтоб все работало т.е нересавал впереди эту линию?
Написать универсальную функцию рисования графиков (на самом деле это совсем не сложно). Функция по которой рисуется график передаётся как параметр. В функции рисования при вызове вычисляемой функции проверяется наличие исключения и если таковое произошло, то ничего не рисуется. Но такое легко сделать на FreePascal, в Turbo Pascal нет try except и обработать исключительную ситуацию гораздо сложнее. Какой компилятор используется?
SAK писал(а):Написать универсальную функцию рисования графиков (на самом деле это совсем не сложно). Функция по которой рисуется график передаётся как параметр. В функции рисования при вызове вычисляемой функции проверяется наличие исключения и если таковое произошло, то ничего не рисуется. Но такое легко сделать на FreePascal, в Turbo Pascal нет try except и обработать исключительную ситуацию гораздо сложнее. Какой компилятор используется?
function root(x: real): real; begin result:=sqrt(x) end;
function sinus(x: real): real; begin result:=sin(x) end;
function xfi(i: integer): real; begin result:=ax*i+bx end;
function ifx(x: real): integer; begin result:=round((x-bx)/ax) end;
function jfy(y: real): integer; begin result:=round((y-by)/ay) end;
procedure DrawGraph(f: func); var i, j: integer; defined: boolean; begin defined:=false; for i:=i1 to i2 do begin try j:=jfy(f(xfi(i))); except defined:=false; continue end; if defined then LineTo(i, j) else MoveTo(i, j); defined:=true end; end;