Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 28.03.2011, 18:17   #1 (permalink)
Олеся
Новичок
 
Регистрация: 28.03.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию График функции

Помогите пожалуйста исправить ошибки в задачах(((((
их две.Вот первая:
uses graph;
function F(x:real):real;
begin
F:=exp(5/2*ln(abs(sqr(x)+3*sqr(x)*x)))+sqrt(x-1);
end;
var xn,xk,max,min,x,y,mx,my,dx:real;
x0,y0,i,px,py:integer;
s:string;
begin
x0:=0;
initgraph(x0,y0,'');
x0:=40;{начало экранных координат}
y0:=getmaxY div 2;
xn:=0.1;xk:=25;{интервал по Х}
mx:=(getmaxX-80)/xk;{масштаб по Х}
{найдем максимумдля масштаба по У, минимум-бесконечность}
max:=F(xn);
x:=xn;
while x<=xk do
begin
x:=x+0.01;
if F(x)>max then max:=F(x)
end;
my:=(y0-40)/max;{по У}
setbkcolor(15);{цвет фона}
setcolor(8);{цвет линий}
line(0,y0,getmaxX,y0);{оси}
line(x0,0,X0,getmaxY);
for i:=1 to round(xk)+1 do{максимальное количество засечек в одну сторону}
begin
line(x0-3,y0-round(i/10*my),x0+3,y0-round(i/10*my));{засечки на оси Y}
line(x0-3,y0+round(i/10*my),x0+3,y0+round(i/10*my));
line(x0+round(i*mx),y0-3,x0+round(i*mx),Y0+3); {засечки на оси Х}
str(i/10:0:1,s);
{подпись оси У}
outtextXY(x0-35,y0-round(i/10*my),s);{соответственно засечкам}
outtextXY(x0-35,y0+round(i/10*my),'-'+s);
{подпись оси Х}
str(i,s);
outtextXY(x0+round(i*mx),y0+10,s);
end;
{центр}
outtextXY(x0+5,y0+10,'0');
{подписи концов осей}
outtextXY(getmaxX-10,y0-10,'X');
outtextXY(x0-10,10, 'Y');
setcolor(8);
{график}
x:=xn;
dx:=0.001;
while x<=xk do
begin
x:=x+dx; {наращиваем х}
px:=x0+round(x*mx); {изменение по оси Х}
y:=F(x); {график в реальных координатах}
py:=y0-round(y*my);{в экранных}
putpixel(px,py,8);
end;
readln
end.
ошибку выводит(((


и вот вторая:
uses graph;
function F(x:real):real;
begin
F:=exp(2.8*ln(abs(18*sqr(x)-ln(x))));
end;
var xn,xk,max,min,x,y,mx,my,dx:real;
x0,y0,i,px,py:integer;
s:string;
begin
writeln('vvedi interval');
readln(xk);
x0:=0;
initgraph(x0,y0,'');
x0:=40;{начало экранных координат}
y0:=getmaxY div 2;
xn:=0.1;
mx:=(getmaxX-80)/xk;{масштаб по Х}
{найдем максимумдля масштаба по У, минимум-бесконечность}
max:=F(xn);
x:=xn;
while x<=xk do
begin
x:=x+0.01;
if F(x)>max then max:=F(x)
end;
my:=(y0-40)/max;{по У}
setbkcolor(15);{цвет фона}
setcolor(8);{цвет линий}
line(0,y0,getmaxX,y0);{оси}
line(x0,0,X0,getmaxY);
for i:=1 to round(xk)+1 do{максимальное количество засечек в одну сторону}
begin
line(x0-3,y0-round(i/10*my),x0+3,y0-round(i/10*my));{засечки на оси Y}
line(x0-3,y0+round(i/10*my),x0+3,y0+round(i/10*my));
line(x0+round(i*mx),y0-3,x0+round(i*mx),Y0+3); {засечки на оси Х}
str(i/10:0:1,s);
{подпись оси У}
outtextXY(x0-35,y0-round(i/10*my),s);{соответственно засечкам}
outtextXY(x0-35,y0+round(i/10*my),'-'+s);
{подпись оси Х}
str(i,s);
outtextXY(x0+round(i*mx),y0+10,s);
end;
{центр}
outtextXY(x0+5,y0+10,'0');
{подписи концов осей}
outtextXY(getmaxX-10,y0-10,'X');
outtextXY(x0-10,10, 'Y');
setcolor(8);
{график}
x:=xn;
dx:=0.001;
while x<=xk do
begin
x:=x+dx; {наращиваем х}
px:=x0+round(x*mx); {изменение по оси Х}
y:=F(x); {график в реальных координатах}
py:=y0-round(y*my);{в экранных}
putpixel(px,py,8);
end;
readln
end.

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


Пожалуйстааааааааааааааааа,очень надо
Олеся вне форума   Ответить с цитированием

Старый 28.03.2011, 18:17
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Данные темы вам очень помогут

График в Excel'e
График снятия с производства процессоров в исполнении Socket AM3
График на Турбо-Паскале
График функций
Помогите сделать в экселе график
Построить график функции

Старый 28.03.2011, 21:48   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Олеся Посмотреть сообщение
эта вроде показывает график,но мне нужно чтоб я интервал графика сама вводила,а здесь тока одну переменную могу ввести,при вводе второй ошибку показывает((((((((((((((((((
Естественно, если у Вас поставлено считывание только одной переменной:
readln(xk);
Замените на
readln(x0,xk);
и не будет ошибки. Числа вводить через пробел. Соответственно дальше
x0:=0;
надо убрать.
Vladimir_S вне форума   Ответить с цитированием
Старый 29.03.2011, 12:55   #3 (permalink)
Олеся
Новичок
 
Регистрация: 28.03.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

сделала как вы посоветовали,но график все равно строится не в заданном мной интервале(((
Олеся вне форума   Ответить с цитированием
Старый 29.03.2011, 13:07   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Олеся Посмотреть сообщение
сделала как вы посоветовали,но график все равно строится не в заданном мной интервале(((
Олеся, будет время - посмотрю Ваши программы. К сожалению, пока я на работе и очень занят. Возможно, вечером.
Vladimir_S вне форума   Ответить с цитированием
Старый 29.03.2011, 13:21   #5 (permalink)
Олеся
Новичок
 
Регистрация: 28.03.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

была бы очень благодарна))))я уже неделю с ними мучаюсь(((
Олеся вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 29.03.2011, 23:11   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Олеся Посмотреть сообщение
Вот первая:
М-да... Стыдно сказать, но часа три провозился. В общем, основательно переделал, получилось так:
Код:
uses CRT, graph;

function F(x:real):real;
 begin
  F:=exp(5/2*ln(abs(sqr(x)+3*sqr(x)*x)))+sqrt(x-1);
 end;

var
 xn,xk,max,min,x,y,mx,my,y_min,y_max,z:real;
 x0,y0,i,px,py,N:integer;
 s:string;

BEGIN
  initgraph(..., ..., ''); {параметры процедуры InitGraph задайте сами!}   

 {найдем максимум и минимум для масштаба по У}
  xn:=1.0; {начальное значение х}
  xk:=1.2; {конечное значение х}
  max:=F(xn);
  min:=F(xn);
  x:=xn;
  while x<=xk do
   begin
    x:=x+0.01;
    if F(x)>max then max:=F(x);
    if F(x)<min then min:=F(x);
   end;
  y_min:=TRUNC(min/10)*10;
  y_max:=(TRUNC(max/10)+1)*10;
  x0:=40;{начало экранных координат}
  y0:=getmaxY-40 ;
  mx:=(getmaxX-40)/(xk-xn);{масштаб по Х}
  my:=(getmaxY-40)/(y_max-y_min);{масштаб по Y}
  setbkcolor(15);{цвет фона}
  setcolor(8);{цвет линий}
  line(40,y0,getmaxX,y0);{оси}
  line(40,0,40,y0);
  N:=Round((y_max-y_min)/10);
  SetTextStyle(defaultfont,horizdir,1);
  SetTextJustify(RightText,CenterText);
  for i:=0 to N do
   begin
    line(x0-3,y0-round(i*10*my),x0+3,y0-round(i*10*my));{засечки на оси Y}
    str(Round(y_min+i*10),s);
    {подпись оси У}
    if i<N then
     outtextXY(x0-10,y0-round(i*10*my),s);{соответственно засечкам}
   end;
  N:=Round((xk-xn)/0.02);
  SetTextJustify(CenterText,TopText);
  for i:=0 to N do
   begin
    line(x0+round(i*0.02*mx),y0-3,x0+round(i*0.02*mx),y0+3);{засечки на оси Х}
    str((xn+0.02*i):4:2,s);
    {подпись оси Х}
    if i<N then
     outtextXY(x0+round(i*0.02*mx),y0+10,s);{соответственно засечкам}
   end;
  N:=Round((xk-xn)/0.0001);
  x:=xn;
  y:=F(x);
  MoveTo(x0,y0-round((y-y_min)*my));
  SetColor(Red);
  for i:=1 to N do
   begin
    x:=xn+0.0001*i;
    y:=F(x);
    LineTo(x0+round((x-xn)*mx),y0-round((y-y_min)*my));
   end;
  ReadKey;
END.
В итоге должно получиться вот так: aa101.jpg

Со второй - и не знаю, как получится со временем.
Vladimir_S вне форума   Ответить с цитированием
Старый 29.03.2011, 23:30   #7 (permalink)
Олеся
Новичок
 
Регистрация: 28.03.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

ой,спасибо огромнооооооооое))))))))))))))))))))))))))
Олеся вне форума   Ответить с цитированием
Старый 29.03.2011, 23:30   #8 (permalink)
Олеся
Новичок
 
Регистрация: 28.03.2011
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Олеся вне форума   Ответить с цитированием
Старый 31.03.2011, 12:27   #9 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
По умолчанию

F:=exp(5/2*ln(abs(sqr(x)+3*sqr(x)*x)))+sqrt(x-1);

Я так понимаю, это уравнение рисует программа?
А если я например хочу, сама ввести любое другое, будь то: F(x)=cos(x) или F(x)=ax^2+bx+c. и чтобы не только нарисовало, но и корни посчитала?
Хелен вне форума   Ответить с цитированием
Старый 31.03.2011, 12:46   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Хелен Посмотреть сообщение
F:=exp(5/2*ln(abs(sqr(x)+3*sqr(x)*x)))+sqrt(x-1);

Я так понимаю, это уравнение рисует программа?
А если я например хочу, сама ввести любое другое, будь то: F(x)=cos(x) или F(x)=ax^2+bx+c. и чтобы не только нарисовало, но и корни посчитала?
Тогда нужно сесть и, например, написать соответствующую универсальную программу.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 21:02.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.