Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429

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

19.12.2015, 16:04. Показов 2823. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем, проблемма не в самой постройке графика.. А скажем так в задании там сказано, что надо построить график по Х - каким-то равномерным масштабом, а по Y - логарифмическим масштабом и ещё какая-то "Привязка" там по X,Y - автоматическим масштабом, вообщем ничего не ясно.. И ещё надо создать окно и всунуть туда график используя
Pascal
1
setviewport
, помогите разобратся пожалуйста!
Вот мой код:
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
program lb10;
uses graph, crt;
const a=0; b=2*pi; h=0.1; h1=20; x0=60; y0=240; m=50;
var driver, d2, mode, x1, y1: integer;
    x,y:real;
 function f(x:real):real;
 begin
 f:=exp(-x)*sin(8*x)+1;
 end;
begin clrscr;
driver:=detect;
initgraph(driver,mode,'C:\TP7\TP\BGI');
setviewport(600,600,800,800,clipoff);
setcolor(5);
line(20,y0,600,y0);
line(x0,440,x0,20);
x:=a; x1:=x0+trunc(m*x);
y:=f(x); y1:=y0-trunc(m*y);
moveto(x1,y1);
while x<=6 do begin
y:=f(x); y1:=y0-trunc(m*y);
lineto(x1,y1);
x1:=x1+h1; x:=x+h;
end;
outtextxy(200,320,'GRAFIK ');
end.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.12.2015, 16:04
Ответы с готовыми решениями:

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

Построение графика.
Построить график указанной функции. (x2+y2-ax)2-L2(x2+y2)=0, a&gt;0, L&gt;0

Построение графика
1.Построить горизонтальную и вертикальную координатные оси. 2.Подписать названия координатных осей. 3.Построить на координатных осях...

44
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
23.12.2015, 17:38
Лучший ответ Сообщение было отмечено Azazel-San как решение

Решение

Студворк — интернет-сервис помощи студентам
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
uses graph;
type
  TViewArea = record
    sxc, syc: Integer;
    xc, yc, mx, my: Real;
    xlg, ylg: Boolean;
  end;
function Lg(x: Real): Real;
const Ln10=2.302585099405;
begin
  Lg:=Ln(x)/Ln10;
end;
procedure InitVU(var v: TViewArea;
  xmin, ymin, xmax, ymax: Real;
  sxmin, symin, sxmax, symax: Integer;
  xlog, ylog: Boolean);
var t: Real;
begin
  with v do begin
    xlg:=xlog; ylg:=ylog;
    sxc:=sxmin+(sxmax-sxmin) div 2;
    syc:=symin+(symax-symin) div 2;
    if xlg then begin
      xmin:=Lg(xmin); xmax:=Lg(xmax);
    end;
    if ylg then begin
      ymin:=Lg(ymin); ymax:=Lg(ymax);
    end;
    t:=xmax-xmin; xc:=xmin+t/2; mx:=(sxmax-sxmin)/t;
    t:=ymax-ymin; yc:=ymin+t/2; my:=(symin-symax)/t; 
  end;
end;
function GetSX(const v: TViewArea; x: Real): Integer;
begin
  with v do begin if xlg then x:=Lg(x); GetSX:=sxc+Trunc(mx*(x-xc)); end;
end;
function GetSY(const v: TViewArea; y: Real): Integer;
begin
  with v do begin if ylg then y:=Lg(y); GetSY:=syc+Trunc(my*(y-yc)); end;
end;
function f(x: Real): Real;
begin
  f:=exp(-x)*Sin(8*x)+1;
end;
const
  vx1=40; vy1=100; vx2=200; vy2=200; LeftMargin=8*3; vwx=vx2-vx1-LeftMargin;
  xmn=0.1; xmx=2.1; mm=2;
procedure Draw;
var
  i, j, k: Integer;
  x, y, xmin, ymin, xmax, ymax: Real;
  v: TViewArea;
  s: String;
begin
  ymin:=f(xmn); ymax:=ymin;
  for i:=1 to vwx do begin
    y:=f(xmn+i*(xmx-xmn)/vwx);
    if ymin>y then ymin:=y;
    if ymax<y then ymax:=y;
  end;
  xmin:=0; xmax:=2.4;
  InitVU(v,xmin,ymin,xmax,ymax,LeftMargin,2,vx2-vx1,vy2-vy1-2,False,True);
  SetColor(Blue);
  k:=GetSX(v,0);
  i:=GetSY(v,ymin); MoveTo(k-3,i); LineRel(5,0); Str(ymin:3:1,s); OutTextXY(0,i-8,s);
  i:=GetSY(v,ymax); MoveTo(k-3,i); LineRel(5,0); Str(ymax:3:1,s); OutTextXY(0,i,s);
  i:=GetSY(v,1);    MoveTo(k-3,i); LineRel(5,0); OutTextXY(0,i-4,' 1');
  Line(k,0,k,vy2-vy1); Line(k,i,vx2-vx1,i);
  for j:=0 to 2 do begin
    k:=GetSX(v,j);
    MoveTo(k,i-3); LineRel(0,5); MoveRel(2,0); OutText(Chr(Ord('0')+j));
  end;
  SetColor(White);
  MoveTo(GetSX(v,xmn),GetSY(v,f(xmn)));
  for i:=1 to Trunc(vwx*mm) do begin
    x:=xmn+i*(xmx-xmn)/vwx/mm;
    LineTo(GetSX(v,x),GetSY(v,f(x)));
  end;
end;
var gd, gm, gr: Integer;
begin
  gd:=Detect; InitGraph(gd,gm,''); gr:=GraphResult;
  if gr<>0 then begin
    WriteLn('*** Error: ',GraphErrorMsg(gr)); Halt(1);
  end;
  SetFillStyle(SolidFill,Green);
  Bar(vx1,vy1,vx2,vy2);
  SetViewPort(vx1,vy1,vx2,vy2,ClipOff);
  Draw;
  Write('Press Enter...'); ReadLn;
  CloseGraph;
end.
По-прежнему требует доделки в части подбора "хороших" значений для осей (там сейчас заглушки для конкретных значений).

Добавлено через 3 минуты
Работа с координатами , включая логарифмические шкалы (используется функция Lg, в текущем варианте там log10), инкапсулирована в InitVU() для расчета опорной точки и масштабов, функции GetSX(), GetSY() получения экранных координат по реальным значениям.
Миниатюры
Построение графика  
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
23.12.2015, 17:47
67 строка порвалась случайным Enter, поправить бы (склеить со следующей).
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
23.12.2015, 17:50  [ТС]
bormant, спасибо большое, но мне было достаточно скинуть предыдущий код:
Цитата Сообщение от bormant Посмотреть сообщение
Ось X с засечками 1 и 2:
PascalВыделить код
1
2
* i:=Round(vwy+ymn*my); Line(0,i,vwx,i); {0=Ln(1)}
* for j:=1 to 2 do Line(Trunc(j*mx-xmn),i-2,Trunc(j*mx-xmn),i+2);
Никто никуда не бежит ;-)
Миниатюры
Но т.к. не скинули я сам(криво) доработал что было и сдал уже, делал без засечек, примерно аналогичный график, и просто подписал его, как советовали, ещё раз спасибо!!! Сам бы это никогда не осилил..

Добавлено через 1 минуту
bormant, теперь мне неловко, заставил вас писать такой огромный код
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
23.12.2015, 17:53
Azazel-San,
тут предпринята попытка отделить мух от котлет, собрать переменные, отвечающие за преобразования в кучку, дать возможность прозрачно работать с получением экранных координат вне зависимости от типа шкал. Оно просится, конечно, завернуть в объект с методами, но только если будет желание и время...
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
23.12.2015, 18:08  [ТС]
bormant, сейчас ещё посижу поразбираю код)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.12.2015, 18:08

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru