| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2755 人关注过本帖
标题:将一维数组转化成曲线图
只看楼主 加入收藏
kyauto
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:19 
将一维数组转化成曲线图
譬如我有一个20大小的数组
void main()
{
  int a[20]={。。。。。。。。。。。};//被赋值
  int i;
  。。。。。。
} 通过什么方式才能得到以i(0到20)为横坐标,以a[i]为纵坐标的离散点图,或者曲线
或者如何用C++得到曲线图
  求大神解答  
搜索更多相关主题的帖子: void 曲线图 散点图 如何 
2012-03-22 19:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用你画金字塔、菱形之类的方法画。

授人以渔,不授人以鱼。
2012-03-22 22:38
kyauto
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-8
收藏
得分:0 
回复 2楼 TonyDeng
我是菜鸟,能说得具体点么
2012-03-22 22:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你自己在纸上描了图,想办法把它搬到屏幕中去,就跟你以前看到星号金字塔把它做出来时一样的做法。

授人以渔,不授人以鱼。
2012-03-22 22:57
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
..

[ 本帖最后由 TonyDeng 于 2012-3-23 17:39 编辑 ]

授人以渔,不授人以鱼。
2012-03-23 03:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:20 
显示随机数据的代码:
程序代码:
#include <Windows.h>
#include <locale>
#include <conio.h>
#include "Screen.h"

const SHORT MaxRowNumber(24);                       // 屏幕最大行号
const SHORT MaxColNumber(79);                       // 屏幕最大列号
const SMALL_RECT statusBar = { 0, MaxRowNumber, MaxColNumber, MaxRowNumber };

const size_t MaxNumber(20);                         // 最大数据量
const int MaxValue(22);                             // 最大数据值

const clock_t Interval(1000);                       // 刷新画面的时间间隔(毫秒)

Screen screen(GetStdHandle(STD_OUTPUT_HANDLE));     // 控制台对象

// 函数原型
void CreateData(int* pData, const size_t Count);
void ShowStatusBar(void);
void ShowData(const int Data[], size_t Count);

// 程序入口
int wmain(int argc, wchar_t argv[])
{
    setlocale(LC_ALL, "chs");

    screen.SetTitle(L"数据条形图");
    screen.SetCursorVisible(false);
    clock_t StartClock(clock());
    bool Show(true);
    while (!_kbhit() || (screen.ReadKey() != Screen::K_ESC))
    {
        if (Show)
        {
            int Data[MaxNumber];
            CreateData(Data, _countof(Data));
            screen.Cls(BACKGROUND_BLUE);
            ShowStatusBar();
            ShowData(Data, _countof(Data));
            Show = false;
        }
        if (clock() - StartClock >= Interval)
        {
            Show = true;
            StartClock = clock();
        }
    }
    screen.SetCursorVisible(true);

    return EXIT_SUCCESS;
}

void CreateData(int* pData, const size_t Count)
{
    srand(static_cast<unsigned int>(_time32(NULL)));
    rand();
    for (size_t i = 0; i < Count; ++i)
    {
        *pData++ = static_cast<int>(MaxValue * static_cast<double>(rand()) / (RAND_MAX + 1));
    }
}

void ShowStatusBar(void)
{
    WORD attr(screen.GetTextAttribute());
    screen.SetTextAttribute(FOREGROUND_YELLOW | BACKGROUND_RED);
    screen.Clear(statusBar);
    screen.MoveCursor(statusBar.Left, statusBar.Top);
    screen.WriteText(L"按Esc键结束程序");
    screen.SetTextAttribute(attr);
}

void ShowData(const int Data[], size_t Count)
{
    size_t Number((Count > MaxNumber) ? MaxNumber : Count);
    for (size_t i = 0; i < Number; ++i)
    {
        COORD pos = { 4 * i, MaxRowNumber - 1 };
        WCHAR buffer[10];
        swprintf(buffer, sizeof(buffer) / sizeof(WCHAR), L"%2d", i + 1);
        screen.MoveCursor(pos).SetTextAttribute(FOREGROUND_GREEN | BACKGROUND_BLUE).WriteText(buffer);
        if (Data[i] < 0)
        {
            pos.Y = MaxRowNumber - 2;
        }
        else
        {
            int theData((Data[i] > MaxValue) ? MaxValue : Data[i]);
            for (int j = 0; j < theData; ++j)
            {
                pos.Y = MaxRowNumber - 2 - j;
                screen.MoveCursor(pos).SetTextAttribute(FOREGROUND_WHITE | BACKGROUND_BLUE).WriteText(L'');
            }
            --pos.Y;
        }
        WORD attr(FOREGROUND_RED | BACKGROUND_BLUE);
        if (Data[i] < 0)
        {
            attr = FOREGROUND_BLACK | BACKGROUND_BLUE;
        }
        if (Data[i] > MaxValue)
        {
            attr = FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE;
        }
        swprintf(buffer, sizeof(buffer) / sizeof(WCHAR), L"%d", Data[i]);
        screen.MoveCursor(pos).SetTextAttribute(attr).WriteText(buffer);
    }
}


[ 本帖最后由 TonyDeng 于 2012-3-23 17:38 编辑 ]

授人以渔,不授人以鱼。
2012-03-23 04:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
test5.exe.zip (12 KB)

授人以渔,不授人以鱼。
2012-03-23 17:36
kyauto
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2012-3-8
收藏
得分:0 
回复 7楼 TonyDeng
版主很给力,我好好研究下,再请教
2012-03-23 18:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这只是一个示范。如果你没有可令光标在屏幕上到处游走输出文字的手段,那么可以换一种实现方法,把上面那样的图案输出到数组中——数组是可以自由游走的,把屏幕上每个字符位置放在一张表格上即可模拟屏幕——然后用常规的办法输出这个数组。

授人以渔,不授人以鱼。
2012-03-23 18:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你要这样的效果吗?

图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2012-03-26 22:53
快速回复:将一维数组转化成曲线图
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035546 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved