Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как нарисовать график функции в С++


Автор: googlegum 3.11.2009, 12:57
Есть задачка:
Нарисовать график функции sin(x) с помощью С++,можно использовать звездочки,плюсики и прочие знаки))
Ну,как забить весь экран звездами я разобрался,а вот как протоптать в этом "лесу" синусоиду непонятно. Писать за меня не требую, прошу подсказать хоть какую функцию использовать)) Среда Visual Studio C++ 6.0 
Зарание поклоны и благодарности!

P.s. в борландовском С есть ф-ия gotoxy() в инклуде conio.h , здесь я ее не нашел

Автор: azesmcar 3.11.2009, 13:03
Цитата(googlegum @  3.11.2009,  12:57 Найти цитируемый пост)
P.s. в борландовском С есть ф-ия gotoxy() в инклуде conio.h , здесь я ее не нашел 

http://en.wikipedia.org/wiki/Ncurses

Автор: googlegum 3.11.2009, 14:18
Компилятор при подключении #include <ncurses.h> ругается и выдает fatal error C1083: Cannot open include file: 'ncurses.h': No such file or directory

Может эта библиотека для Linux ?

Автор: bsa 3.11.2009, 15:21
googlegum, для *nix.
Думаю, тебе стоит обратить внимание на: http://en.wikipedia.org/wiki/Conio.h

Автор: azesmcar 3.11.2009, 15:42
Цитата(googlegum @  3.11.2009,  14:18 Найти цитируемый пост)
Может эта библиотека для Linux ? 

должны быть портированные версии, но я не пробовал.

Автор: googlegum 3.11.2009, 17:56
Цитата(bsa @  3.11.2009,  15:21 Найти цитируемый пост)
Думаю, тебе стоит обратить внимание на: http://en.wikipedia.org/wiki/Conio.h


Обратил внимание,там нет функции,устанавливающей курсор в требуемое положение на экране((

Автор: Anikmar 3.11.2009, 18:11
Можно создать массив строк (25х80) - нарисовать график в нем и вывести на экран.

Автор: bsa 3.11.2009, 18:40
googlegum, тебе нужна функция gotoxy(). Поищи в документации к твоему IDE.

Автор: Valinur 4.11.2009, 07:14
Доброе утро! smile  Вот, что-то наваял сутречка... сильно не ругайте за код, не тянет он конечно на лучший из возможных smile  Приму любые замечания! smile 
Код
#include <iostream>
#include <cmath>

using namespace std;

#define M_PI    3.14159265358979323846
#define X1        -2*M_PI
#define X2        2*M_PI    

// функция для вывода
float func(float x) {
    return sin(x);
}

int main() {
    bool prn_x=false;
    bool prn_y=false;

    float epsilon = 0.05;
    float y = 1.0;
    float step = M_PI/16;        // шаг приращения к аргументу

    while (y>=-1.1) {
        for(float x=X1; x<=X2; x+=step) {
            if (abs(func(x)-y) >= epsilon)
                if (abs(y)<epsilon) 
                    cout << "-";        // печать оси X
                else
                    cout << " "; 
            else {
                cout << "*";
            }
            if (abs(x)<epsilon)
                    cout << "|";        // печать оси Y
        }
        cout << endl;
        y=y-0.1;
    }

    return 0;
}
Вроде все понятно в коде  smile 

PS. Вопрос не по теме... почему у меня код не подсвечивается? Хотя нажимаю код С++!

Автор: zim22 4.11.2009, 09:32
Цитата(Valinur @  4.11.2009,  06:14 Найти цитируемый пост)
PS. Вопрос не по теме... почему у меня код не подсвечивается? Хотя нажимаю код С++!

глюки только в Опере. Firefox, Internet Explorer нормально отображают.

Автор: Anikmar 4.11.2009, 11:35
Цитата(zim22 @  4.11.2009,  09:32 Найти цитируемый пост)
глюки только в Опере. Firefox, Internet Explorer нормально отображают. 

Safari тоже глючит.

Автор: azesmcar 4.11.2009, 11:41
 smile 
Цитата(Anikmar @  4.11.2009,  11:35 Найти цитируемый пост)
Safari тоже глючит. 

Подсветку у меня нормально показывает Safari. А вообще глюки есть, например Ctrl+Enter не работает.

Автор: googlegum 4.11.2009, 15:08
Спасибо всем! Получилось!
Valinur, Жжош!! Почти получилось, но я пошел другим путем, а именно тем, который посоветовал мне Anikmar, пришлось однако попотеть))ну ничего, для начинающего -полезно..

Добавлено через 4 минуты и 56 секунд
Да, забыл, вот собсно код:
Код

#include <iostream.h>
#include <math.h>

int main() 
{
    
     const double M_PI=3.14159265358979323846;
     int  Visota=25;
     int  Shirina=79;
     char array [25][79];
    for ( int y=0;y<Visota;++y)
    
    for (int x=0;x<Shirina;++x)
    
    {
        int y=(sin(x*2*M_PI/Shirina)+1)/2*Visota;
        
        if ((y>=0)&&(y<Visota))
        array[y][x]= '*';
        
    }
        
    
    

    for ( y=0;y<Visota;++y)
    {
        for (int x=0;x<Shirina;++x)
        
         cout<< array[y][x];
         cout<<endl;
        
    }

    return 0;

}



Автор: Valinur 4.11.2009, 15:55
Цитата

глюки только в Опере. Firefox, Internet Explorer нормально отображают.

действительно так... спасибо!

googlegum, у меня смотрится так

Автор: googlegum 4.11.2009, 17:44
Valinur, 
Красиво!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)