Построить график функции с помощью символов
Нужно нарисовать график функции в консоли на С++, но проблема в том, что нельзя использовать библиотеки для работы с графикой. То есть нарисовать её нужно с помощью символов (*) и цикла, а я не понимаю, как это сделать.Вот сама функция exp(x-2)-5*x^2+3
#include <iostream>
#include<Windows.h>
#include<cmath>
double foo(const double x)
{
return exp(x-2)-5*x*x+3;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int x,a,b,t;
while (true) {
std::cout << "Введите диапазон: ";
std::cin >> a;
std::cin >> b;
if (a > b) {
std::cout << "Ошибка! a > b" << std::endl;
}
else {
break;
}
}
while (true) {
std::cout << "Введите шаг изменения переменной x: ";
std::cin >> t;
if (t <=0) {
}
else {
break;
}
}
for (int i = a; i <= b; i +=t) {
const int y = foo(i);
}
}
Получилось только ось нарисовать. Функция может возвращать как положительные так и отрицательные значения.
Ответы (2 шт):
посмотрите здесь: Рисование в консоли Visual Studio c++ если у вас windows.
впредь прежде чем задать вопрос попробуйте вначале воспользоваться поиском. что-то вроде такого: "рисование графика в консоли с++".
примерно так. Но под вашу функцию надо оси масштабировать. этим займитесь сами В общем и целом подход такой - график "рисуется" в двумерном массиве и потом выводится.
// размеры "экрана"
// по оси абсцисс
#define scene_length 150
// по оси ординат
#define scene_width 40
char scene[scene_length][scene_width*2]; // тут будем график рисовать. по оси ординат делаем в 2 раза больше (под отрицательные значения)
for(int x=0;x<scene_length;x++){ // чистим массив
for(int y=0;y<scene_width*2;y++)
scene[x][y]='.';
scene[x][scene_width]='-'; // это будет абсцисса
}
// тут будем обсчитывать функцию и рисовать график
for(int x=0;x<scene_length;x++){
double y = 2*x; // моя функция
if(abs(y)<scene_width) // проверяем чтобы значение за пределы "экрана" не выходило
scene[x][(int)round(y-scene_width)]='*'; // ставим точку
}
// выводим на экран
for(int y=scene_width*2-1;y>=0;y--){
printf ("%03d ", y-scene_width);
for(int x=0;x<scene_length;x++){
printf("%c",scene[x][y]);
}
printf("\n");
}
return 0;