Форум программистов, компьютерный форум CyberForum.ru

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

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

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

06.10.2011, 12:50. Просмотров 20736. Ответов 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;   
}
 Комментарий модератора 
Используйте теги форматирования кода!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2011, 12:50     Построение графиков элементарных функций
Посмотрите здесь:

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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);
}
Миниатюры
Построение графиков элементарных функций  
-=ЮрА=-
Заблокирован
Автор 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

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

Не по теме:

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

t668
0 / 0 / 0
Регистрация: 14.05.2013
Сообщений: 7
16.06.2013, 18:43     Построение графиков элементарных функций #8
А диапазон построения какой?
-=ЮрА=-
Заблокирован
Автор 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);
- что ещё можно пояснять?
t668
0 / 0 / 0
Регистрация: 14.05.2013
Сообщений: 7
16.06.2013, 19:31     Построение графиков элементарных функций #10
просто при вводе станд
0.0001
6
20, выводит не cos x во2

и ещё

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

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

Добавлено через 7 минут
прости пожалуйста, а можно как то твой код в класс вкинуть?
что нужно добавить?..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 21:02     Построение графиков элементарных функций
Еще ссылки по теме:

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

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

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

Работа над ошибками,пару элементарных заданий - C++
Дополните пожалуйста,где это нужно. 1)Классы памяти. auto — автоматическая (локальная), динамическая переменная....

Решит, вроде легко, но учусь на элементарных! Дайте экстра-класс - C++
Задана последовательность n. Найти количество элементов, кратных 3. Напишите на С++ пожалуйста, с комментариями!!! Если вас не...


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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
22.11.2013, 21:02     Построение графиков элементарных функций #15
Сделай функции из кода методами класса, перменные из кода сделай его полями.
Yandex
Объявления
22.11.2013, 21:02     Построение графиков элементарных функций
Ответ Создать тему
Опции темы

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