#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, но результат выглядит забавно. Я знаю, что не даю много информации, но я понятия не имею, что с этим не так.
Во-первых, вы можете использовать переменные окружения, чтобы получить COLUMNS / LINES вашего терминала.
В противном случае, убедитесь, что вы добавили новые строки, потому что эмуляторы терминалов обычно больше не выполняют перенос строк в эти дни (?).
Теперь реальная проблема заключается в использовании float
сравнения.
Линия как
if (c==0)
или же
else if((m*x+b)==c)
практически не определены из-за неточных представлений с плавающей точкой.
Наконец, ваш образец появляется (?) предполагать ASCII или кодовую страницу с символами рисования блока. Они не будут хорошо печататься на терминале с поддержкой UTF8. Просто замените символы более подходящими.
y
не используется в коде. c
кажется, удваивает это значение?
Других решений пока нет …