Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 161, средняя оценка - 4.93
fcrCullen93
1 / 1 / 0
Регистрация: 25.01.2011
Сообщений: 12
#1

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

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

У меня есть код, который выводит график функции тангенс х, помогите изменить его так, чтобы выводило график 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2011, 12:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построение графиков элементарных функций (C++):

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

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

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

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

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

Построение графиков в окошке - C++
Здравствуйте! Хочу написать программу на C++ — небольшая формочка с полями ввода исходных данных, и чтобы программа рисовала 2-мерные и...

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
Миниатюры
Построение графиков элементарных функций  
t668
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);}
- и всё больше ничего трогать не надо.

Не по теме:

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

1
t668
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
t668
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
t668
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
monk22092011
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
22.11.2013, 21:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 21:02
Привет! Вот еще темы с ответами:

Построение графиков по массивам данных - C++
Добрый вечер! Идея вот в чём, сначала производятся какие-то расчёты в консоли, создаётся текстовый файл с результатами. Потом,...

Как инвертировать ось у в построение графиков - C++
Проблема в следующем, я не знаю как инверитровать ось у в с++, у меня строит графики, но перевернутые, я понимаю в компьютере сверху...

Подбор графиков функций по эскизу - C++
Суть программы заключается в следующем: 1) Загружаем эскиз например.. электрогитары. 2) После нужно собственно разбить этот эскиз на...

Построение графика функций - C++
Спасибо всем заранее,кто откликнулся!!! С чего начинать и чем заканчивать (в общем случае) построение графиков в С++. Dev c++ 4.9 ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru