Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ не могу доделать

Автор: Jocker 13.05.2008 3:14

написал прожку которая строит графики, но только чтоб ввести функцию графика нужно открывать програмный код, и в нём изменять. можно как-то обойтись без этого (не открывая код)

program graphiki;
uses crt,graph;

var gd,gm,xx,yy:integer;
fun:string;

procedure osicoordinat;
const step=25;
var x1,y1,r:integer;
s:string;
begin
line(0,240,640,240);
line(320,0,320,480);
line(630,235,640,240);
line(630,245,640,240);
line(315,10,320,0);
line(325,10,320,0);
outtextxy(330,5,'Y');
outtextxy(630,220,'X');
y1:=240; x1:=320; r:=0;
while x1+r<640 do
begin
line(x1+r,y1-2,x1+r,y1+2);
line(x1-r,y1-2,x1-r,y1+2);
r:=r+step;
str(r div step, S);
settextjustify (1,1);
outtextxy(x1+r,y1+10,S);
s:='-'+S;
outtextxy(x1-r,y1+10,S);
end;
r:=0;
while y1+r<480 do
begin
line(x1+4,y1+r,x1-4,y1+r);
line(x1+4,y1-r,x1-4,y1-r);
r:=r+step;
str(r div step, S);
settextjustify (1,1);
outtextxy(x1-10,y1-r,S);
s:='-'+S;
outtextxy(x1-10,y1+r,S);
end;
end;

procedure gra;
var x,y,a,b:real;
begin
setcolor(2);
x:=-15; y:=0; a:=1; b:=0;
repeat
y:=x*x; {вот эту строчку приходится менять}
putpixel(round(x*a*25)+320,240-round(y*25)-round(b*25),2);
x:=x+0.0003;
until x>15;
end;

begin
initgraph(gd,gm,'..\bgi');
osicoordinat;
gra;
readln
end.

Автор: andriano 13.05.2008 12:12

Ту можно идти различными путями в зависимости от того, что требуется получить.
Можно, например, заранее предусмотреть несколько функций и в программе предлагать пользователю выбрать одну из них.
Можно просить пользователя ввести строку (или вводить ее из файла), а в программе осуществлять разбор выражения и по нему строить график. Но последний вариант увеличит суммарный объем (количество строк) твоей программы раз в 10. Впрочем, для этого можно нйти подходящий модуль.

Автор: Jocker 13.05.2008 13:11

Цитата(andriano @ 13.05.2008 8:12) *

Ту можно идти различными путями в зависимости от того, что требуется получить.
Можно, например, заранее предусмотреть несколько функций и в программе предлагать пользователю выбрать одну из них.
Можно просить пользователя ввести строку (или вводить ее из файла), а в программе осуществлять разбор выражения и по нему строить график. Но последний вариант увеличит суммарный объем (количество строк) твоей программы раз в 10. Впрочем, для этого можно нйти подходящий модуль.

Первый вариант мне не подходит так как хочется чтоб прога была универсальной и строила любой график, а не только из предлагаемого. А если по последнему варианту это разбирать в заданой строке-функции по символу?

Автор: andriano 13.05.2008 13:36

Совсем любой, боюсь не выйдет - разве только ты реализуешь язык, на котором можно записать любую функцию. В остальных же случаях - любое выражение, содержащее тот набор функций, которые ты предусмотрел заранее, например, любое выражение, содержащее 4 арифметических операции и скобки. Или + набор тригонометрических функций. Или еще + экспонены и логарифмы.
Можно, например, набратьв Google "разбор выражения паскаль" и походить по ссылкам.
Здесть простейший вариант http://pascal.sources.ru/parsing/calc_my.htm

Автор: Jocker 14.05.2008 0:06

как раз то что я искал, спасибо