1 / 1 / 0
Регистрация: 25.01.2011
Сообщений: 12
1

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

06.10.2011, 12:50. Показов 43504. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть код, который выводит график функции тангенс х, помогите изменить его так, чтобы выводило график lnx

C++
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#define _WIN32_WINNT 0x0501
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <windows.h>
 
using namespace std;
 
const double Pi = 3.14159265;
 
BOOL Line(HDC hdc, int x1, int y1, int x2, int y2){
    MoveToEx(hdc, x1, y1, NULL); 
    return LineTo(hdc, x2, y2);
} 
 
string makeLine(int n){
    string str = "";
    for (int i = 0; i < n; i++){
        str+="-";
    }
    return str;
}
 
 
int main(){
    system ("color f0");
    cout << makeLine(19);
    printf("\n| x\t|y=tanh(x)|\n");
    cout << makeLine(19);   
    for (float x = -Pi+0.3f; x <= Pi; x+=1.0f) {        
        printf("\n|");
        if (x > 0)
            printf(" ");
        printf("%.2f\t|", x);
        if (tanh(x) > 0) 
            printf(" ");
        printf("%.2f\t  |", tanh(x));
            
    }
 
    //printf("\n| %.2f\t|%.2f\t  |", Pi, tanh(Pi)); 
    cout << "\n" << makeLine(19);
 
    int x = 400;
    int y = 200;
    double a = 1;
    int b = 2;
    
cout << '\t';
cout << '\t';
cout << '\t';
cout << '\t';
cout << '1';
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << '\t';
cout << '\t';
cout << '\t';
cout << '\t';
cout << "          - 1";
cout << '\t';
cout << '0';
cout << "       1";
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << endl;
cout << endl;
 
 
cout << '\t';
cout << '\t';
cout << '\t';
cout << '\t';
cout << '\t';
cout << '\t';
cout << "-1";
    //srand ( time(NULL) );
    HWND hWnd = GetConsoleWindow();
    HDC hDc = GetDC(hWnd);
    
    COLORREF color = RGB(0,0,0);
    HPEN pen = CreatePen(PS_SOLID,1,color);
    SelectObject(hDc,pen);
    Line(hDc,x,0,x,2*y);
    Line(hDc,100,y,2*x,y);
 
    
    COLORREF c2 = color;
    SetPixel(hDc,x+1,2,color);
    SetPixel(hDc,x+2,3,color);
    SetPixel(hDc,x+3,4,color);
 
    SetPixel(hDc,x-1,2,color);
    SetPixel(hDc,x-2,3,color);
    SetPixel(hDc,x-3,4,color);
 
    SetPixel(hDc,2*x - 2,y - 1,color);
    SetPixel(hDc,2*x - 3,y - 2,color);
    SetPixel(hDc,2*x - 4,y - 3,color);
 
    SetPixel(hDc,2*x - 2,y + 1,color);
    SetPixel(hDc,2*x - 3,y + 2,color);
    SetPixel(hDc,2*x - 4,y + 3,color);
    for(int i = 100; i < 600; i+=50){
        Line(hDc,i,y-2,i,y+2);
    }
    for(int i = 0; i < y*2; i+=45){
        Line(hDc,x-2,i+19,x+2,i+19);
    }
    for (int i = 100; i < 800; i+= 4) {
        Line(hDc,i,110,i+2,110);
    }
    for (int i = 100; i < 800; i+= 4) {
        Line(hDc,i,290,i+2,290);
    }
    for(double x1 = -250; x1 < 250; x1++){
        double y1 = tanh(x1/100.0) * 90;
        SetPixel(hDc, x1 + x, y - y1, color);
    }
 
    int xD;
    cin >> xD;
    
    ReleaseDC(hWnd, hDc);
    return 0;   
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2011, 12:50
Ответы с готовыми решениями:

Построение графиков функций через graphics.h
Доброго времени суток. Необходимо построить графики функции y=2/x. line(300,0,300,480);...

Написать програму для подсчета элементарных функций
&quot;Написать програму для подсчета элементарных функций&quot; - это все задание лабораторной. Я так понял...

Печать значений элементарных функций по формуле Тейлора!
http://i043.***********/0912/82/fa0b56f41821.jpg Помогите пожалуйста закодить,ну или хотя бы...

Заменить значения членов массива на значение одной из элементарных функций
Заменить значения членов массива на значение одной из элементарных функций, аргумент которой...

17
Заблокирован
Автор FAQ
06.10.2011, 16:49 2
Лучший ответ Сообщение было отмечено как решение

Решение

Я привожу код строящий cos(x), используя всю плоскость окна консоли(для этого снабдил проект функциями масштабирования). Думаю подогнать под проект труда не составит
Код программы
C
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
#include <windows.h>
#include <stdio.h>
#include <math.h>
 
#define RED RGB(255,0,0)
#define GRN RGB(0,255,0)
#define BLU RGB(0,0,255)
 
#define BLK RGB(0,0,0)
#define WHT RGB(255,255,255)
 
HPEN  getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF);
BOOL  SetPoint(HDC hDC, HPEN hPen, COORD PNT);
BOOL  PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END);
//Функция график которой строим
double f(double x){return cos(x);}
double * mf(double a, double b, double n)
{
    double x = a;
    double h = (b - a)/n;
    double vec[2];
    vec[0] = f(a);
    vec[1] = f(a);
    while(x < b)
    {
        if(vec[1] < f(x))
            vec[1] = f(x);
        if(f(x) < vec[0])
            vec[0] = f(x);
        x += h;
    }
    return &vec[0];
}
 
int main()
{
    long n;
    double a = 0, b = 0,x, dx, *vec;
    double CX, CY;
    
    HWND    hWnd = GetForegroundWindow();
    HPEN    RPEN = getPen(PS_SOLID, 2, RED);
    HPEN    GPEN = getPen(PS_SOLID, 2, GRN);
    HPEN    BPEN = getPen(PS_SOLID, 2, BLU);
    HPEN    WPEN = getPen(PS_SOLID, 3, WHT);
    RECT    pRECT= {0};
    COORD   BGN  = {0};
    COORD   END  = {0};
    GetClientRect(hWnd,&pRECT);
    
    HDC hDC = GetWindowDC(hWnd);
 
    printf("\tPloting f(x) = ln(x)\r\n");
    printf("Enter diapasone [a;b]\r\n");
    printf("a = ");scanf("%lf",&a);
    printf("b = ");scanf("%lf",&b);
    printf("Enter number of points\r\n");
    printf("n = ");scanf("%u",&n);
    vec = mf(a, b, n);//Нужно знать макс и мин для масштабирования
    if(hDC)
    {
        CX = (b - a)/(pRECT.right - pRECT.left);
        CY = (vec[1] - vec[0])/(pRECT.bottom - pRECT.top);
        
        x = a;dx = (b - a)/n;
        BGN.X = x   /CX;
        BGN.Y = f(x)/CY + (pRECT.bottom - pRECT.top)/2;
        SetBkMode(hDC,TRANSPARENT);
        SetPoint (hDC, WPEN, BGN);
        while(x < b)
        {
            END.X = x   /CX;
            END.Y = f(x)/CY + (pRECT.bottom - pRECT.top)/2;
            PlotLine(hDC, RPEN, BGN, END);
            SetPoint (hDC,WPEN, END);
            BGN = END;
            x += dx;
        }
    }
    system("pause");
    return 0;
}
 
HPEN getPen(int iPEN_STYLE, int iPEN_SIZE, int iCOLORREF)
{
        return CreatePen(iPEN_STYLE, iPEN_SIZE, iCOLORREF);
}
 
BOOL SetPoint(HDC hDC, HPEN hPen, COORD PNT)
{
        EXTLOGPEN pINFO;
        GetObject(hPen,sizeof(EXTLOGPEN),&pINFO);
        SelectObject(hDC,hPen);
        return Ellipse
        (
                hDC,
                PNT.X - pINFO.elpWidth,
                PNT.Y + pINFO.elpWidth, 
                PNT.X + pINFO.elpWidth,
                PNT.Y - pINFO.elpWidth
        );
}
 
BOOL PlotLine(HDC hDC, HPEN hPen, COORD BGN, COORD END)
{
        SelectObject(hDC,hPen);
        MoveToEx(hDC,BGN.X,BGN.Y,NULL);
        return LineTo(  hDC,END.X,END.Y);
}
Миниатюры
Построение графиков элементарных функций  
5
Заблокирован
Автор FAQ
06.10.2011, 17:01 3
PS: Для построения f(x) = ln(x) в моём коде достаточно провести такую замену
C++
1
double f(double x){return log(x);}
Только диапазон построения нужно с умом выбирать!

Не по теме:

помним что в точке х=0 ln(0) - НЕОПРЕДЕЛЁН и об ОДЗ ln(x) нужно помнить т.е. x > 0

Миниатюры
Построение графиков элементарных функций  
1
0 / 0 / 0
Регистрация: 11.06.2012
Сообщений: 3
12.06.2012, 00:58 4
-=ЮрА=-, не поминаю как построить можешь пожалуйста сделать весь код программы синусоиды
0
Заблокирован
Автор FAQ
12.06.2012, 07:11 5
Цитата Сообщение от Артёмий Посмотреть сообщение
-=ЮрА=-, не поминаю как построить можешь пожалуйста сделать весь код программы синусоиды
Артемий, ты пробовал нажать мышкой на эту надпись?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Код программы
Миниатюры
Построение графиков элементарных функций  
0
0 / 0 / 0
Регистрация: 14.05.2013
Сообщений: 7
04.06.2013, 09:28 6
надо написать программу построения графика функции cos x^2 на вижуал 10-12 С++
0
Заблокирован
Автор FAQ
04.06.2013, 09:37 7
t668, ты вообще чтоли безрукий?
вот эту строку
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
double f(double x){return cos(x);}
- запиши вот так
double f(double x){return pow(cos(x), 2.0);}
- и всё больше ничего трогать не надо.

Не по теме:

Чертовски злит и убивает, когда человек даже в таком примитиве не способен разобраться:negative:

1
0 / 0 / 0
Регистрация: 14.05.2013
Сообщений: 7
16.06.2013, 18:43 8
А диапазон построения какой?
0
Заблокирован
Автор FAQ
16.06.2013, 19:00 9
Цитата Сообщение от t668 Посмотреть сообщение
А диапазон построения какой?
- любой который введёшь, даже ввод сделан
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
printf("\tPloting f(x) = ln(x)\r\n");
* * printf("Enter diapasone [a;b]\r\n");
* * printf("a = ");scanf("%lf",&a);
* * printf("b = ");scanf("%lf",&b);
* * printf("Enter number of points\r\n");
* * printf("n = ");scanf("%u",&n);
- что ещё можно пояснять?
0
0 / 0 / 0
Регистрация: 14.05.2013
Сообщений: 7
16.06.2013, 19:31 10
просто при вводе станд
0.0001
6
20, выводит не cos x во2

и ещё

написанный на С?
0
Заблокирован
Автор FAQ
16.06.2013, 21:07 11
Цитата Сообщение от t668 Посмотреть сообщение
просто при вводе станд
0.0001
6
20, выводит не cos x во2
- а 6 и 20 ты вводишь как градусы?Ввод сделан под радианы, 6 градусов это PI*6/180 = PI/30 радиан
0
0 / 0 / 0
Регистрация: 14.05.2013
Сообщений: 7
16.06.2013, 21:28 12
посоветуйте лучший вариант
a =
b =

n =
0
Заблокирован
Автор FAQ
16.06.2013, 21:39 13
0
6,28
50
0
0 / 0 / 0
Регистрация: 20.11.2013
Сообщений: 37
21.11.2013, 23:33 14
[QUOTE=-=ЮрА=-;4729905] прости пожалуйста, а можно как то твой код в класс вкинуть?
что нужно добавить?..

Добавлено через 7 минут
прости пожалуйста, а можно как то твой код в класс вкинуть?
что нужно добавить?..
0
Заблокирован
Автор FAQ
22.11.2013, 21:02 15
Сделай функции из кода методами класса, перменные из кода сделай его полями.
2
0 / 0 / 0
Регистрация: 20.11.2013
Сообщений: 37
24.11.2013, 22:53 16
а ты не мог бы помочь мне с этим?
если не трудно, пожалуйста
я не очень понимаю этот язык
0
13 / 13 / 12
Регистрация: 11.04.2015
Сообщений: 64
22.04.2015, 22:21 17
-=ЮрА=-, помоги, пожалуйста, исправить эту процедуру.
Надо чтобы график y=x^2 был плавным.

C++
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
LRESULT CALLBACK WndProc(HWND hWnd,  UINT iMsg,  WPARAM wParam,  LPARAM lParam)
{
    HDC             hDC;
    PAINTSTRUCT     ps;
 
    static Point    center;
    static int      cxClient,  cyClient;
    const double    scale = 2;  
 
    
    switch (iMsg)
    {
        case WM_SIZE:
            cxClient = LOWORD(lParam);
            cyClient = HIWORD(lParam);
 
            center.x = cxClient/2;
            center.y = cyClient/2;
 
            return 0;
 
 
        case WM_PAINT:
            hDC = BeginPaint(hWnd, &ps);
 
            // Ось X
            MoveTo(hDC, 0, cyClient/2);
            LineTo(hDC, cxClient, cyClient/2);
 
            // Ось Y
            MoveTo(hDC, cxClient/2, 0);
            LineTo(hDC, cxClient/2, cyClient);
            
            // Рисуем y = x^2
            // Правая ветвь
            MoveTo(hDC, center.x, center.y);
            for (int x=center.x;  x<cxClient;  ++x)
            {
                LineTo(hDC, x, center.y - (x-center.x)*(x-center.x) );
            }
 
            // Левая ветвь
            MoveTo(hDC, center.x, center.y);
            for (int x=center.x;  x>=0;  --x)
            {
                LineTo(hDC, x, center.y - (center.x-x)*(center.x-x) );
            }
 
 
            EndPaint(hWnd, &ps);
            return 0;
 
 
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
 
 
    return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
0
Заблокирован
Автор FAQ
23.04.2015, 18:59 18
Цитата Сообщение от f1ff Посмотреть сообщение
for (int x=center.x; *x<cxClient; *++x)
- шаг единица потому и неплавно, сделай шаг хотя бы 0,1
1
23.04.2015, 18:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2015, 18:59
Помогаю со студенческими работами здесь

Построение графиков
Спасибо всем заранее,кто откликнулся!!! Помогите, пожалуйста построение графиков в С++.

построение графиков в С++
Доброго времени суток. Столкнулась с такой проблемой: нужно построить лежащую параболу. Оси...

Построение графиков в консоле с++
Задание: Составить программу построения графиков y=-6x^2+3x; y= Sin x Я что-то нашёл на...

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru