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

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

19.12.2015, 16:04. Показов 2619. Ответов 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
7816 / 4635 / 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
7816 / 4635 / 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
7816 / 4635 / 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
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru