Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2011, 19:11   #1
user100
Пользователь
 
Регистрация: 08.11.2010
Сообщений: 11
По умолчанию Построить график функции и протабулировать функцию

Требуется написать программу, которая будет табулировать функцию на заданном отрезке и строить график функции. На паскале.
f(x)=1/20*ln|tg(x)+2/tg(x)-2|+x/5+C, х принадлежит промежутку [a;b].
Требуется с клавиатуры вводить, концы отрезка, константу С и количество разбиений функции.
Количество разбиений функции это то число на которое функция будет разбиваться на данном промежутке, чтобы произвести табуляцию.
Помогите кто сможет.
user100 вне форума Ответить с цитированием
Старый 21.04.2011, 18:25   #2
user100
Пользователь
 
Регистрация: 08.11.2010
Сообщений: 11
По умолчанию

Программу написал.
Вопрос в следующем.
После введения всех данных выскакивает ошибка.

Подскажите как ее устранить?
user100 вне форума Ответить с цитированием
Старый 21.04.2011, 22:26   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

зачем нам ошибка )) ? ты код покажи, разберем, что там намудрёно
phomm вне форума Ответить с цитированием
Старый 21.04.2011, 22:44   #4
user100
Пользователь
 
Регистрация: 08.11.2010
Сообщений: 11
По умолчанию

Вот код.
Код:
uses crt,graph;
const nmax=30;
function F(x,c:real):real;
var tg:real;
begin
{вычислим тангенс}
if sin(x)=0 then tg:=0.000001{при sin=0 функция не определена=деление на 0, 
поэтому присвоим ей маленькое значение}
else if cos(x)=0 then tg:=100000{тоже самое, но значение большое}
else tg:=sin(x)/cos(x);
F:=ln(abs(tg+2/tg-2))/20+x/5+c;{значение функции}
end;
var g,d,{переменные для входа в графику}
    xc,yc,{Экранные координаты начала координат}
    n,i,{количество разбиений и счетчик циклов}
    p:integer;{смещение экранных координат по оси Х}
    x,y:array[0..nmax] of real;{массивы абцисс и ординат}
    a,b,c,{вводимыe параметры}
    h,max,min,{шаг табуляции, макс и мин значение функции}
    mx,my:real;{масштабы по осям}
    st:string;{строковая переменная для вывода чисел на экран}
begin
clrscr;
write('Nachalo integvala a=');
readln(a);
repeat
write('Konec integvala b>',a:0:1,' b=');
readln(b);
until b>a;
write('Kol. razbienij n=');
readln(n);
write('Konstanta c=');
readln(c);
h:=(b-a)/n;{шаг табуляции}
{найдем значение макс и мин для масштаба графика по У}
max:=F(a,c);
min:=F(a,c);
for i:=0 to n do
 begin
  x[i]:=a+i*h;
  y[i]:=F(x[i],c);
  if y[i]>max then max:=y[i];
  if y[i]<min then min:=y[i];
 end;
g:=0;
initgraph(g,d,'');
{найдем положение 0 на оси Х и масштаб по Х}
if a*b<0 then{по разные стороны от оси У}
 begin
  xc:=round(getmaxX*(-a)/(b-a));
  mx:=(xc-50)/-a;
 end
else if a>=0 then{все х неотрицательные}
 begin
  mx:=(getmaxX-100)/(b-a);
  xc:=50;
 end
else if b<=0 then
 begin
  xc:=getmaxX-50;
  mx:=(xc-50)/(b-a);
 end;
if(a*b<0)or(a=0)or(b=0) then p:=0
else if a>0 then p:=round(a*mx)
else if b<0 then p:=round(b*mx);
{найдем положение 0 на оси У и масштаб по У}
if max<=0 then
 begin
  yc:=50;
  my:=(getmaxY-2*yc)/-min;
 end
else if min>=0 then
 begin
  yc:=getmaxY-100;
  my:=(yc-100)/max;
 end
else if max*min<0 then
 begin
  yc:=round(getmaxY*max/(max-min));
  my:=(yc-50)/max;
 end;
{оси}
line(20,yc,getmaxX-20,yc);
outtextXY(getmaxX-15,yc-15,'X');
line(xc,getmaxY-10,xc,20);
outtextXY(xc-15,10,'Y');
{разметка оси Х}
settextstyle(0,1,1);{текст вертикально}
for i:=0 to n do
 begin
  line(xc+round(x[i]*mx)-p,yc+3,xc+round(x[i]*mx)-p,yc-3);
  str(x[i]:0:1,st);
  outtextXY(xc+round(x[i]*mx)-p+10,yc+10,st);
 end;
{разметка оси Y}
settextstyle(0,0,1);{текст горизонтально}
for i:=1 to round(max)+1 do
 begin
  line(xc-3,yc-round(i*my),xc+3,yc-round(i*my));
  line(xc-3,yc+round(i*my),xc+3,yc+round(i*my));
  str(i,st);
  outtextXY(xc-20,yc-round(i*my),st);
  outtextXY(xc-20,yc+round(i*my),'-'+st);
 end;
{график}
moveto(xc+round(x[0]*mx)-p,yc-round(y[0]*my));
for i:=0 to n do
 begin
  setcolor(12);
  lineto(xc+round(x[i]*mx)-p,yc-round(y[i]*my));{линии}
  setcolor(10);
  circle(xc+round(x[i]*mx)-p,yc-round(y[i]*my),2);{обозначение точек графика}
 end;
readln
end.
Все заработало после использования dosbox.
Но дело в том что, как выводить таблицу со значениями я так и недопер...
user100 вне форума Ответить с цитированием
Старый 22.04.2011, 06:34   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
writeln(x, ' ', y);
p51x вне форума Ответить с цитированием
Старый 05.05.2011, 08:07   #6
user100
Пользователь
 
Регистрация: 08.11.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
writeln(x, ' ', y);
и ничего не выводится..
user100 вне форума Ответить с цитированием
Старый 09.05.2011, 13:05   #7
user100
Пользователь
 
Регистрация: 08.11.2010
Сообщений: 11
По умолчанию

Код табуляции функции:
Код:
uses crt, gra;;
function F(x,c:real):real;
begin
F:=ln(abs(((sin(x)/cos(x))+2)/((sin(x)/cos(x))-2)))/20+x/5+c;
end;
var g,d,
    xc,yc,
    n,i,
    p:integer;
    x,y:array[0..nmax] of real;
    k,a,b,c,
    h,max,min,
    mx,my,l:real;
    st:string;
    f1:text;
begin
clrscr;
repeat
  write('Введите начало промежутка a= ');
  readln(a);
  write('Введите конец промежутка* b>',a:0:1,' b= ');
  readln(b);
  write('Введите константу С');readln(c);
  until a<=b;
writeln('Введите количество разбиений');
readln(n);
h:=(b-a)/n;
writeln('Шаг равен ',h:0:1);
k:=a;
ASSIGN(F1,'C:\OTVeT.TXT');
rewrite(f1);
while k<=b do begin
  l:=F(k,c);
  writeln(' x: ', k:7:3 ,' y: ', l:7:3);
  writeln(f1,'x: ',K:7:3 ,' Y: ', l:7:3);
  k:=h+k;
  writeln;
  end;
  close(f1);
write('Для построения графика нажмите Enter');
  graphik;
Код модуля gra:
Код:
unit gra;
interface
  uses graph;
  const nmax=30;
  procedure graphik;
  var g,d,
    xc,yc,
    n,i,
    p:integer;
    x,y:array[0..nmax] of real;
    k,a,b,c,
    h,max,min,
    mx,my,l:real;
    st:string;
    f1:text;
Implementation
procedure graphik;
function F(x,c:real):real;
begin
F:=ln(abs(((sin(x)/cos(x))+2)/((sin(x)/cos(x))-2)))/20+x/5+c;
end;
begin
max:=F(a,c);
min:=F(a,c);
for i:=0 to n do
 begin
  x[i]:=a+i*h;
  y[i]:=F(x[i],c);
  if y[i]>max then max:=y[i];
  if y[i]<min then min:=y[i];
 end;
g:=0;
initgraph(g,d,'');
if a*b<0 then
 begin
  xc:=round(getmaxX*(-a)/(b-a));
  mx:=(xc-50)/-a;
 end
else if a>=0 then
 begin
  mx:=(getmaxX-100)/(b-a);
  xc:=50;
 end
else if b<=0 then
 begin
  xc:=getmaxX-50;
  mx:=(xc-50)/(b-a);
 end;
if(a*b<0)or(a=0)or(b=0) then p:=0
else if a>0 then p:=round(a*mx)
else if b<0 then p:=round(b*mx);
if max<=0 then
 begin
  yc:=50;
  my:=(getmaxY-2*yc)/-min;
 end
else if min>=0 then
 begin
  yc:=getmaxY-100;
  my:=(yc-100)/max;
 end
else if max*min<0 then
 begin
  yc:=round(getmaxY*max/(max-min));
  my:=(yc-50)/max;
 end;
line(20,yc,getmaxX-20,yc);
outtextXY(getmaxX-15,yc-15,'X');
line(xc,getmaxY-10,xc,20);
outtextXY(xc-15,10,'Y');
settextstyle(0,1,1);
for i:=0 to n do
 begin
  line(xc+round(x[i]*mx)-p,yc+3,xc+round(x[i]*mx)-p,yc-3);
  str(x[i]:0:1,st);
  outtextXY(xc+round(x[i]*mx)-p+10,yc+10,st);
 end;
settextstyle(0,0,1);
for i:=1 to round(max)+1 do
 begin
  line(xc-3,yc-round(i*my),xc+3,yc-round(i*my));
  line(xc-3,yc+round(i*my),xc+3,yc+round(i*my));
  str(i,st);
  outtextXY(xc-20,yc-round(i*my),st);
  outtextXY(xc-20,yc+round(i*my),'-'+st);
 end;
moveto(xc+round(x[0]*mx)-p,yc-round(y[0]*my));
for i:=0 to n do
 begin
  setcolor(12);
  lineto(xc+round(x[i]*mx)-p,yc-round(y[i]*my));
  setcolor(10);
  circle(xc+round(x[i]*mx)-p,yc-round(y[i]*my),2);
 end;
 closegraph;
readln;
end;
end.
Куда надо засунуть этот модуль и как его(если надо поправить), чтобы из программы табуляции можно было построить график?
user100 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
построить график функции Катюшка_92 Microsoft Office Excel 2 19.09.2010 10:17
за $ построить график функции c# NastyaL Фриланс 3 12.08.2010 08:57
Построить график функции Horknee Паскаль, Turbo Pascal, PascalABC.NET 15 23.09.2008 09:50