Помощь - Поиск - Пользователи - Календарь
Полная версия: Графика
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-=АнЮтА=-
blink.gif Никак не могу найти ошибку - график рисуется просто линией, независимо от коэффициентов. А должен масштабироваться. wacko.gif Помогите пожалуйста!
 Program pic_mas;
uses crt,graph;
var e,s,del1:integer;
a,b,c:real;
const delta=20;
Procedure OpenGraph;
var gd,gm, ge: integer;
begin
gd:=detect;
initgraph(gd, gm, 'egavga.bgi');
ge:= GraphResult;
if ge<>0 then writeln (GraphErrorMsg(ge));
end;
Procedure ocu(del:integer);
var i,count: integer;
st:string;
const delta=20;
begin
e:=getmaxx;
s:=getmaxy;
Setcolor(red);
line (e -delta*2 ,s div 2,delta*2,s div 2);
line (e -delta*2, s div 2,(e -delta*2 - 5), ((s div 2)-3) );
line (e -delta*2, s div 2,(e -delta*2 - 5), ((s div 2)+3) );
OutTextXY(e -delta*2 , (s div 2-10) , 'x');
line (e div 2, delta ,e div 2, s - delta);
line(e div 2, (delta),( e div 2 - 3),(delta +5));
line(e div 2, (delta),( e div 2 + 3),(delta +5));
OutTextXY(e div 2 -10,delta , 'y');
setcolor(15);
i:=2*delta;
while (i<s - delta) do {no y}
begin
Line(e div 2+2,i, e div 2-2,i);
inc(i, delta);
end;
i:= 3*delta;
while (i<=e-2*delta ) do {no x}
begin
Line(i, s div 2+2,i, s div 2-2);
inc(i, delta);
end;
outtextxy(e div 2 -5, s div 2 + 5,'0');
str(del,st);
outtextxy( e div 2 +10, s div 2 -20,st);
end;


Procedure choose_mast(var del:integer);
var
ay:array [1 .. 20] of integer;
b,c,a:real;
x,i:integer;
maxy:integer;
begin
readln(a);
readln(b);
readln©;
maxy:=trunc(abs((a*sqr(10)+b*10+c)));
x:=9;
for i:=1 to 20 do
begin
ay[i]:=trunc(abs((a*sqr(x)+b*x+c)));
if ay[i]>maxy then maxy:=ay[i];
writeln(ay[i]);
x:=x-1;
end;
writeln(maxy);{Нахожу максимальное значение на данном отрезке (-10;10) и в зависимости от этого выбираю масштаб}
case maxy of
0..10: del:=1;
11..50: del:=5;
51..100:del:=10;
101..150: del:=15;
151..200: del:=20;
201..250: del:=25;
251..300: del:=30;
301..350: del:=35;
351..400: del:=40;
401..450: del:=45;
451..500: del:=50;
501..550: del:=55;
551..600: del:=60;
601..650: del:=65;
651..700: del:=70;
701..750: del:=75;
751..800: del:=80;
801..850: del:=85;
851..900: del:=90;
901..950: del:=95;
951..1000: del:=100;
end;
if maxy>1000 then begin writeln('Љ®нддЁжЁҐ­вл б«ЁиЄ®¬ ўҐ«ЁЄЁ'); readln; halt(1);end;
end;
Procedure gr(del:integer); {Сам график: в зависимости от максимального значения делю на коэффициент значение у перед тем как брать точки}
var x1,y1:real;
begin
x1:=-10;{Х фиксирован - от -10 до 10, поэтому изменяется только цена деления по у}
while x1<=10 do
begin
y1:=(a*sqr(x1)+b*x1+c)/del;
putpixel(e div 2+trunc((x1)*delta),s div 2 -trunc((y1)*delta),14);
x1:=x1+0.01;
end;
end;
Begin
clrscr;
choose_mast(del1);
readln;
opengraph;
ocu(del1);
gr(del1);
readln;
closegraph;
End.

Заранее спасибо)
TarasBer
При рисовании графика а, бэ и це нулевые. Потому что их и не менял никто. Потому что в процедуре choose_mast вводились ЛОКАЛЬНЫЕ а, бэ и цэ. Их надо из раздела переменных процедуры choose_mast убрать и всё станет нормально.
Это легко прослеживается отладкой при помощи Watches.
-=АнЮтА=-
unsure.gif Спасибо) Я и думаю,что где-то совсем рядом ошибка)) give_rose.gif
-=АнЮтА=-
И правда все работает - а всего-то переменные описала и локально и глобально) Пасип огромное good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.