Turbo Pascal

serg_pet

New Member
Ответ: Turbo Pascal

чем писать посты в которых жаловаться на нехватку времени, уже давно можно было написать, тем более, как отметил господин Акел, прога достаточно типичная, можно найти в инете.
 

Apokalypsis

I'll be back!!!!!!)))))))
Ответ: Turbo Pascal

Народ, кто может помочь вот с этим. Короче пишу я прогу для рисования графика математических функций. Все рисует нормально, вот только с ввода данных не присваивает переменной Y значение то что ввели. Мучаюсь уже аж башка болит. Помогите разобраться ПЛЗ кому не влом.
В архиве лежат 2 файла. Из них 1-й (Proekt_b.pas) основной файл программы. 2-й (Proekt_f.pas) дополнительный файл с функциями и процедурами.
 

Вкладення

Пух

كنت بلهاء
Модератор
Ответ: Turbo Pascal

program f;
uses CRT,Graph;
var gd, gm: integer;
x,y: integer;
cx,cy:integer;
begin
clrscr;
gd:=detect;
initgraph(gd, gm, '');
SetColor(5);
cx:=GetMaxX div 2;
cy:=GetMaxY div 2;
Line(0, cy, GetMaxX, cy);
Line(cx, 0, cx, GetMaxY);
x:=-20;
While x<=20 do
begin
y:=-x;
PutPixel(x*5+cx , y*5+cy, 15);
x:=x+0.01;
end;
readln;
CloseGraph;
end.
Собственно: в строке x:=x+0.01; выбивает Type Mistmach. Если меняю x,y:integer; на x,y:real; то выбивает Type Mistmach в строке PutPixel(x*5+cx , y*5+cy, 15);
Что делать?
 

Hamster

Well-Known Member
Как к целому числу можно добавить 0,01 и получить целое?
Параметры в путпиксель должны быть целыми и положительными.

Раз уж приспичило работать с реал х и у, то в путпикселе "переводи" их в интеджер методом отбрасывания дробной части (trunc(x)) либо округлением round(x).
 

Vladimir B.

милый добрый кот
Модератор
Ответ: Turbo Pascal

Собственно: в строке x:=x+0.01; выбивает Type Mistmach. Если меняю x,y:integer; на x,y:real; то выбивает Type Mistmach в строке PutPixel(x*5+cx , y*5+cy, 15);
Что делать?
Итак, разберемся:
Код:
procedure PutPixel(X, Y: Integer; Pixel: Word);
Значение Х - целочисленное. А вы пытаетесь к аргументу X добавлять вещественное (дробное) значение 0.01 - естественно ошибка. На экране пиксели задаются целыми числами - нельзя сдвинуть точку на 0.01 пикселя!
 

Пух

كنت بلهاء
Модератор
Ответ: Turbo Pascal

И как мне ,например, нормально начертить параболу?
если шаг ставить 1, то строится "точками",а не спошлой прямой.
 

serg_pet

New Member
Ответ: Turbo Pascal

линиями Line(x1,y1,x2,y2), но более оптимально используя
MoveTo(x,y)/LineTo(x1,y1)

Принцип такой, вначале используя MoveTo(x,y) устанавливаешь перую точку параболы, а дальше обсчитываешь следующую точку и добавляешь ее через LineTo(xn,yn) и Паскаль соеденяет предидущую точку с xn,yn и так далее.
Конечто не самый красивый вариант, но лучше данными средствами не сделаешь.
 

Hamster

Well-Known Member
Извращенцы. Для каждой задачи есть свое оптимальное решение.
Для данного случая паскаль далеко не лучший вариант.
 

ScreameR

Воен уп4к!!!11адинадин
Ответ: Turbo Pascal

Пух не трахай моск :Ь Делал йа по точкам эту хрень, очнь красиво и легко. И 6 строчек рабочего кода) При гут масштабе реально красиво получается. Но шаг надо уж не 1, а меньше. Имеетцо 640х480 и сделать масштаб в 32 пикселя (от -10 до +10 по иксу) и шаг 1/32, тоесть 0.3 с капейгами или меньше (ч1нить типа 0.001) :) Потом переводиж в каардинаты пиГселя и строиж пиГсель. А если соединять его лайнту... Реально будет калллл...
 
Останнє редагування:
Зверху