IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Графика, Масштабирование
-=АнЮтА=-
сообщение 12.03.2007 13:11
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 55
Пол: Женский
Реальное имя: АнЯ

Репутация: -  0  +


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.

Заранее спасибо)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 11:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"