Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5

Построение графика функции

27.01.2019, 10:03. Показов 2097. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, ребята, подсобите, кому не сложно. Построить график по формуле и условиям, которые на скриншоте. Вывести результаты в текстовом и графическом виде (график функции в виде скриншота )
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.01.2019, 10:03
Ответы с готовыми решениями:

Построение графика функции
Построить график функции f(x)=\begin{cases}-x+2&\text{, }x\leq 1\\\\x^2+1&\text{, } x\,>\,1\end{cases} Порядок работы: ...

Построение графика функции
помогите плиз график построить

Построение графика функции!
Если кого-то не затруднит помочь) нужно построить семейство кривых y = f(x) для указанных значений параметра и оси координат с указанием...

11
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
27.01.2019, 12:04
Лучший ответ Сообщение было отмечено Почтальон как решение

Решение

Если просто протабулировать, то
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
program test;
 
const
  a = 2;
  b = 2.5;
  c = 1.3;
 
  Xstart = -4.0;
  Xfinish = 3.0;
  dX = 0.25;
 
  function f(x: real): real;
  begin
    if x <= -2 then
      f := 2 * sqr(sqr(cos(b * x))) * cos(b * x)
    else if x < 1.5 then
      f := c * sqr(sin(x / a) / cos(x / a))
    else
      f := c * ln(2 * x);
  end;
 
var
  x: real;
begin
  {табуляция функции}
  x := Xstart;
  repeat
    writeln('x=', x: 8: 5, ' f=', f(x): 8: 5);
    x := x + dX;
  until x > Xfinish;
end.
А построение графика сильно привязано к названию компилятора и ОС.

Ещё в функции заменил вторую строку - она неопределена при x=0 - решил трактовать ctg, как c*tg
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
27.01.2019, 12:13  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
А построение графика сильно привязано к названию компилятора и ОС.
если есть возможность, мне достаточно простого скриншота вывода графика
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
27.01.2019, 12:31
Проблема не в скриншоте, а в компиляции. Работа с графикой для разных компиляторов выполняется по уникальным библиотекам. PascalABC.NET не сможет скомпилировать исходник FreePascal. И преподаватель по виду исходника определит другой компилятор.
1
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
27.01.2019, 12:50
Лучший ответ Сообщение было отмечено Почтальон как решение

Решение

В АВС.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
uses graphABC;
const a=2;
      b=2.5;
      c=1.3;
function f(x:real):real;
var z:real;
begin
z:=cos(b*x);
if x<=-2 then f:=2*z*z*z*z*z
else if x<1.5 then
 begin
  if abs(x)>0.1 then f:=sqr(cos(x/a)/sin(x/a))//вблизи 0 функция не определена
 end
else f:=c*ln(2*x);
end;
 
var xn,xk,max,x,dx,mx,my,y:real;
    x0,y0,n,i:integer;
begin
//интервал
xn:=-4;
xk:=3;
x:=xn;
//начало координат
x0:=4*windowwidth div 7;
y0:=windowheight div 2;
//масштабы
mx:=(x0-20)/4;
my:=(y0-30)/10;
//оси
line(0,y0,windowwidth,y0);
textout(windowwidth-20,y0-20,'X');
line(x0,0,x0,2*y0);
textout(x0+5,0,'Y');
textout(x0+5,y0+10,'0');
//засечки и подписи по осям
for i:=1 to 10 do
 begin
  line(x0+round(i*mx/2),y0-3,x0+round(i*mx/2),y0+3);
  line(x0-round(i*mx/2),y0-3,x0-round(i*mx/2),y0+3);
  textout(x0+round(i*mx/2),y0+10,floattostr(i/2));
  textout(x0-round(i*mx/2),y0+10,floattostr(-i/2));
  line(x0-5,y0-round(i*my),x0+5,y0-round(i*my));
  textout(x0-25,y0-round(i*my)-5,inttostr(i));
  line(x0-5,y0+round(i*my),x0+5,y0+round(i*my));
  textout(x0-25,y0+round(i*my)-5,inttostr(-i));
 end;
 //график
setpencolor(clBlue);
x:=xn;
dx:=0.01;
while x<=xk do
 begin
  if x=xn then moveto(x0+round(x*mx),y0-round(f(x)*my))
  else lineto(x0+round(x*mx),y0-round(f(x)*my));
  x:=x+dx;
 end;
end.
Миниатюры
Построение графика функции  
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
27.01.2019, 13:14  [ТС]
Puporev, спасибо огромное!
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
27.01.2019, 13:45
FreePascal
И я свою добавлю, но ещё раз отмечу - изменил вторую строку функции, т.к. в 0 исходная не определена. Поэтому график имеет иной вид
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
program test;
 
uses
  Graph;
 
const
  a = 2;
  b = 2.5;
  c = 1.3;
 
  Xstart = -4.0;
  Xfinish = 3.0;
  dX = 0.25;
 
  function f(x: real): real;
  begin
    if x <= -2 then
      f := 2 * sqr(sqr(cos(b * x))) * cos(b * x)
    else if x < 1.5 then
      f := c * sqr(sin(x / a) / cos(x / a))
    else
      f := c * ln(2 * x);
  end;
 
var
  x, y: real;
  GraphDrv, GraphMode: integer;
  Xmax, Ymax: integer;
  Xc, Yc: integer;{экранные координаты начала координат графика}
  Xs, Ys: integer;{экранные координаты точки графика}
  Mx, My: real;{масштабные коэффициенты для пересчёта координат графика к экранным}
  Ystart, Yfinish: real;
begin
  {табуляция функции}
  x := Xstart;
  repeat
    writeln('x=', x: 8: 5, ' f=', f(x): 8: 5);
    x := x + dX;
  until x > Xfinish;
 
  {построение графика}
  readln;
  GraphDrv  := Detect;
  GraphMode := Detect;
  InitGraph(GraphDrv, GraphMode, '');
  ErrorCode := GraphResult;
  if ErrorCode <> grOK then
  begin
    WriteLn('Графическая ошибка :', GraphErrorMsg(ErrorCode));
    Halt(1);
  end;
  Xmax := GetMaxX;
  Ymax := GetMaxY;
 
  Ystart  := -5;
  Yfinish := 5;
 
  Mx := Xmax / (Xfinish - Xstart);
  My := Ymax / (Yfinish - Ystart);
  { - линии осей координат}
  SetColor(5);
  Yc := Ymax div 2;
  Xc := (Xmax * 4) div 7;
  Line(1, Yc, Xmax, Yc);
  Line(Xc, 1, Xc, Ymax);
  { - график}
  SetColor(7);
  x  := Xstart;
  y  := f(x);
  Xs := 1 + round((x - Xstart) * Mx);
  Ys := Yc - round((y) * My);
  MoveTo(Xs, Ys);
  repeat
    y := f(x);
 
    Xs := 1 + round((x - Xstart) * Mx);
    Ys := Yc - round((y) * My);
    LineTo(Xs, Ys);
 
    x := x + dX / 4;
  until x > Xfinish;
  readln;
end.
Миниатюры
Построение графика функции  
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
27.01.2019, 13:47
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
изменил вторую строку функции, т.к. в 0 исходная не определена.
И зачем? Просто не рисовать ее в окрестностях 0.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
27.01.2019, 13:50
При табуляции нужно выводить значение при 0. И выражение "ctg(x/a)" можно попробовать трактовать как "c*tg".

Хотя можно попробовать обходить 0 в условиях и табуляции и графика.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
27.01.2019, 13:54
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
обходить 0 в условиях и табуляции
Pascal
1
2
if x=0 then writeln('x=',x:5:2,'  Функция не определена')
else writeln('x=',x:5:2,'y=',y:10:3);
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8652 / 4487 / 1669
Регистрация: 01.02.2015
Сообщений: 13,895
Записей в блоге: 12
27.01.2019, 14:11
У меня не было наработок по графикам, поэтому тут намертво привязано к текущему заданию
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
program test;
 
uses
  Graph;
 
const
  a = 2;
  b = 2.5;
  c = 1.3;
 
  Xstart = -4.0;
  Xfinish = 3.0;
  dX = 0.25;
 
  function f(x: real): real;
  begin
    if x <= -2 then
      f := 2 * sqr(sqr(cos(b * x))) * cos(b * x)
    else if x < 1.5 then
      f := sqr(cos(x / a) / sin(x / a))
    else
      f := c * ln(2 * x);
  end;
 
var
  x, y: real;
  GraphDrv, GraphMode: integer;
  Xmax, Ymax: integer;
  Xc, Yc: integer;{экранные координаты начала координат графика}
  Xs, Ys: integer;{экранные координаты точки графика}
  Mx, My: real;{масштабные коэффициенты для пересчёта координат графика к экранным}
  Ystart, Yfinish: real;
begin
  {табуляция функции}
  x := Xstart;
  repeat
    if abs(x) > 0.0001 then
      writeln('x=', x: 8: 5, ' f=', f(x): 8: 5)
    else
      writeln('x=', x: 8: 5, ' f= Не определена');
    x := x + dX;
  until x > Xfinish;
 
  {построение графика}
  readln;
  GraphDrv  := Detect;
  GraphMode := Detect;
  InitGraph(GraphDrv, GraphMode, '');
  ErrorCode := GraphResult;
  if ErrorCode <> grOK then
  begin
    WriteLn('Графическая ошибка :', GraphErrorMsg(ErrorCode));
    Halt(1);
  end;
  Xmax := GetMaxX;
  Ymax := GetMaxY;
 
  Ystart  := -20;
  Yfinish := 20;
 
  Mx := Xmax / (Xfinish - Xstart);
  My := Ymax / (Yfinish - Ystart);
  { - линии осей координат}
  SetColor(5);
  Yc := Ymax div 2;
  Xc := (Xmax * 4) div 7;
  Line(1, Yc, Xmax, Yc);
  Line(Xc, 1, Xc, Ymax);
  { - график}
  SetColor(7);
  x  := Xstart;
  y  := f(x);
  Xs := 1 + round((x - Xstart) * Mx);
  Ys := Yc - round((y) * My);
  MoveTo(Xs, Ys);
  repeat
    if abs(x) > 0.0001 then
    begin
      y  := f(x);
      Xs := 1 + round((x - Xstart) * Mx);
      Ys := Yc - round((y) * My);
      LineTo(Xs, Ys);
    end;
    x := x + dX / 4;
  until x > Xfinish;
 
  readln;
end.
Миниатюры
Построение графика функции  
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
27.01.2019, 15:23
Может нужно таблицу значений вместе с графиком?
Паскаль АВС.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
uses graphABC;
const a=2;
      b=2.5;
      c=1.3;
function Y(x:real):real;
var z:real;
begin
z:=cos(b*x);
if x<=-2 then Y:=2*z*z*z*z*z
else if x<1.5 then
 begin
  if abs(x)>0.1 then Y:=sqr(cos(x/a)/sin(x/a))//вблизи 0 функция не определена
 end
else Y:=c*ln(2*x);
end;
var xn,xk,x,dx,max,mx,my:real;
    x0,y0,i,n:integer;
    s1,s2:string;
begin
centerwindow;
//начало координат
x0:=50+4*(windowwidth-50) div 7;
y0:=windowheight div 2+150;
//интервал
xn:=-4;
xk:=3;
//масштабы
mx:=(windowwidth-x0-30)/7;
my:=(y0-20)/10;
//оси
line(x0-round(-xn*mx),y0,x0+round(xk*mx),y0);
textout(x0+round(xk*mx),y0-20,'X');
line(x0,0,x0,2*y0);
textout(x0+5,0,'Y');
textout(x0+5,y0+10,'0');
//подписи по осям
for  i:=1 to 16 do
 begin
  if i<13 then
   begin
    line(x0+round(i*mx/4),y0-3,x0+round(i*mx/4),y0+3);
    if i mod 4=0 then textout(x0+round(i*mx/4),y0+10,inttostr(i div 4));
   end;
  line(x0-round(i*mx/4),y0-3,x0-round(i*mx/4),y0+3);
  if i mod 4=0 then textout(x0-round(i*mx/4),y0+10,inttostr(-i div 4));
  line(x0-3,y0-round(i*my),x0+3,y0-round(i*my));
  line(x0-3,y0+round(i*my),x0+3,y0+round(i*my));
  textout(x0-25,y0-round(i*my)-5,floattostr(i));
  textout(x0-30,y0+round(i*my)-5,floattostr(-i));
 end;
//график
setpencolor(clBlue);
x:=xn;
dx:=0.01;
while x<=xk do
 begin
  if x=xn then moveto(x0+round(x*mx),y0-round(Y(x)*my))
  else lineto(x0+round(x*mx),y0-round(Y(x)*my));
  x:=x+dx;
 end;
//таблица
setfontsize(10);
textout(40,0,'Таблица значений');
textout(10,20,'аргумента и функции шаг=0.2');
setpencolor(clBlack);
line(10,40,230,40);
textout(30,42,'X');
textout(90,42,'Y');
textout(145,42,'X');
textout(200,42,'Y');
line(10,60,230,60);
x:=-4;
n:=60;
while x<=0 do
 begin
  str(x:0:2,s1);
  if abs(x)<0.1 then s2:='NAN'
  else str(Y(x):0:3,s2);
  textout(20,n,s1);
  textout(80,n,s2);
  line(10,n,120,n);
  inc(n,20);
  x:=x+0.25;
 end;
line(10,40,10,n);
line(65,40,65,n);
line(120,40,120,n);
line(10,n,120,n);
n:=60;
while x<=4 do
 begin
  str(x:0:2,s1);
  textout(130,n,s1);
  str(Y(x):0:3,s2);
  textout(185,n,s2);
  line(120,n,230,n);
  inc(n,20);
  x:=x+0.25;
 end;
line(120,n,230,n);
line(10,40,10,n);
line(175,40,175,n);
line(230,40,230,n);
line(10,n,120,n);
setfontsize(12);
setfontstyle(fsBold);
setfontcolor(clBlue);
textout(x0+50,20,'x<-2    Y(x)=2*cos^5(bx))');
textout(x0+50,40,'x<1.5   Y(x)=ctg^2(x/a)');
textout(x0+50,60,'x>=1.5 Y(x)=aln(2x)');
end.
Миниатюры
Построение графика функции  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.01.2019, 15:23
Помогаю со студенческими работами здесь

построение графика функции
Нужна помощь в построении графика функции y=sqr(1+x)/sqrt(1+sqr(x)) на интервале -10&lt;=x&lt;=10 с шагом 1.

Построение графика функции
Здравствуйте помогите пожалуйста с построением графика функции в декартовых координатах

Построение графика функции
Друзья, график этой функции tgX+sqrt(e(X)-1) доставил мне не мало проблем и я вынужден попросить у вас помощи. Зарание благодарю)))

Построение графика функции
Помогите пожалуйста девушке! Не понимаю, как строить график... В книжках как-то очень заумно! Какие-то цифры непонятно откуда =( Нужно...

Построение графика функции и запись результата в файл
Помогите пожалуйста решить задачку. Задача на самом деле не слишком сложная, но учитывая то, как пролетел предыдущий семестр то как её...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru