【问题标题】:Problems with graphing program绘图程序的问题
【发布时间】:2013-12-21 21:42:36
【问题描述】:
#include <iostream>
using namespace std;

#define CHANGE 0.5
#define YMAX (yourterminallength/(2*(1/CHANGE)))
#define YMIN (-yourterminallength/(2*(1/CHANGE)))
#define XMAX (yourterminalwidth/(2*(1/CHANGE)))
#define XMIN (-yourterminalwidth/(2*(1/CHANGE)))

int main()
{
float m,b,y,x,c;

cout << "Intervals:" <<  CHANGE << "    \tYMAX: " << YMAX << "\tYMIN: " << YMIN <<      "\tXMAX: " << XMAX << "\tXMIN: " << XMIN;
cout << "\nEnter any key to continue...";
cout << "nEnter a linear equation in slope-intercept form: y = Mx + B";
cout << "\nM=";
cin >> m;
cout << "B=";
cin >> b;

c=YMAX;
while(c>YMIN)
{
    x=XMIN;
    while(x<XMAX)
    {
        if(c==0)
        {
            if(x==0)
                cout << char(197);
            else
                cout << char(196);
        }
        else if(x==0)
            cout << char(179);
        else if((m*x+b)==c)
            cout << char(254);
        else
            cout << char(176);
        x+=CHANGE;
    }
    c-=CHANGE;
}
return 0;
}   

该程序旨在绘制简单的线性方程。它在我的 Windows 计算机上运行良好,我只是复制了它以在我的 Ubuntu 操作系统上运行,但结果看起来很有趣。我知道我没有提供太多信息,但我不知道这有什么问题。

【问题讨论】:

    标签: c++ graphing


    【解决方案1】:
    1. 首先,您可以使用环境变量来获取终端的COLUMNS/LINES。

      否则,请确保添加换行符,因为这些天终端模拟器通常不再进行换行(?)。

    2. 现在,真正的问题似乎是使用float 比较。

      一行

      if (c==0)
      

      else if((m*x+b)==c)
      

      由于不精确的浮点表示,几乎完全未定义。

    3. 最后,您的示例出现 (?) 假定为 ASCII 或带有块绘图字符的代码页。这些不会在启用 UTF8 的终端上很好地打印。只需将字符替换为更合适的字符即可。

    4. y 在代码中未使用。 c 好像是双倍的意思?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多