#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int a = 1;
int b = 2;
int c = -10;
int d = 10;
int n = 100;
double h = double(d - c) / n;
vector<double> X, Y;
X.reserve(n + 1);
Y.reserve(n + 1);
// вычисление (как в Python)
for (int i = 0; i <= n; i++) {
double x = c + i * h;
double num = sin(a * x) + pow(b, 2 * c);
double den = b * b + cos(x) * cos(x);
double frac = num / den;
double y = cbrt(frac) - sin(x * x) / (a * b);
X.push_back(x);
Y.push_back(y);
}
// -----------------------------
// ASCII-график
// -----------------------------
int width = 80; // ширина графика
int height = 25; // высота графика
double ymin = *min_element(Y.begin(), Y.end());
double ymax = *max_element(Y.begin(), Y.end());
vector<string> canvas(height, string(width, ' '));
for (int i = 0; i <= n; i++) {
int px = int((double)i / n * (width - 1));
int py = int((Y[i] - ymin) / (ymax - ymin) * (height - 1));
py = height - 1 - py; // инверсия оси Y
if (px >= 0 && px < width && py >= 0 && py < height)
canvas[py][px] = '*';
}
// вывод графика
for (auto &row : canvas)
cout << row << "\n";
// вывод диапазонов
cout << "\nX range: [" << c << ", " << d << "]\n";
cout << "Y range: [" << ymin << ", " << ymax << "]\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGludCBhID0gMTsKICAgIGludCBiID0gMjsKICAgIGludCBjID0gLTEwOwogICAgaW50IGQgPSAxMDsKICAgIGludCBuID0gMTAwOwoKICAgIGRvdWJsZSBoID0gZG91YmxlKGQgLSBjKSAvIG47CgogICAgdmVjdG9yPGRvdWJsZT4gWCwgWTsKICAgIFgucmVzZXJ2ZShuICsgMSk7CiAgICBZLnJlc2VydmUobiArIDEpOwoKICAgIC8vINCy0YvRh9C40YHQu9C10L3QuNC1ICjQutCw0Log0LIgUHl0aG9uKQogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgZG91YmxlIHggPSBjICsgaSAqIGg7CgogICAgICAgIGRvdWJsZSBudW0gPSBzaW4oYSAqIHgpICsgcG93KGIsIDIgKiBjKTsKICAgICAgICBkb3VibGUgZGVuID0gYiAqIGIgKyBjb3MoeCkgKiBjb3MoeCk7CiAgICAgICAgZG91YmxlIGZyYWMgPSBudW0gLyBkZW47CgogICAgICAgIGRvdWJsZSB5ID0gY2JydChmcmFjKSAtIHNpbih4ICogeCkgLyAoYSAqIGIpOwoKICAgICAgICBYLnB1c2hfYmFjayh4KTsKICAgICAgICBZLnB1c2hfYmFjayh5KTsKICAgIH0KCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLy8gQVNDSUkt0LPRgNCw0YTQuNC6CiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgaW50IHdpZHRoID0gODA7ICAgLy8g0YjQuNGA0LjQvdCwINCz0YDQsNGE0LjQutCwCiAgICBpbnQgaGVpZ2h0ID0gMjU7ICAvLyDQstGL0YHQvtGC0LAg0LPRgNCw0YTQuNC60LAKCiAgICBkb3VibGUgeW1pbiA9ICptaW5fZWxlbWVudChZLmJlZ2luKCksIFkuZW5kKCkpOwogICAgZG91YmxlIHltYXggPSAqbWF4X2VsZW1lbnQoWS5iZWdpbigpLCBZLmVuZCgpKTsKCiAgICB2ZWN0b3I8c3RyaW5nPiBjYW52YXMoaGVpZ2h0LCBzdHJpbmcod2lkdGgsICcgJykpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG47IGkrKykgewogICAgICAgIGludCBweCA9IGludCgoZG91YmxlKWkgLyBuICogKHdpZHRoIC0gMSkpOwogICAgICAgIGludCBweSA9IGludCgoWVtpXSAtIHltaW4pIC8gKHltYXggLSB5bWluKSAqIChoZWlnaHQgLSAxKSk7CgogICAgICAgIHB5ID0gaGVpZ2h0IC0gMSAtIHB5OyAvLyDQuNC90LLQtdGA0YHQuNGPINC+0YHQuCBZCgogICAgICAgIGlmIChweCA+PSAwICYmIHB4IDwgd2lkdGggJiYgcHkgPj0gMCAmJiBweSA8IGhlaWdodCkKICAgICAgICAgICAgY2FudmFzW3B5XVtweF0gPSAnKic7CiAgICB9CgogICAgLy8g0LLRi9Cy0L7QtCDQs9GA0LDRhNC40LrQsAogICAgZm9yIChhdXRvICZyb3cgOiBjYW52YXMpCiAgICAgICAgY291dCA8PCByb3cgPDwgIlxuIjsKCiAgICAvLyDQstGL0LLQvtC0INC00LjQsNC/0LDQt9C+0L3QvtCyCiAgICBjb3V0IDw8ICJcblggcmFuZ2U6IFsiIDw8IGMgPDwgIiwgIiA8PCBkIDw8ICJdXG4iOwogICAgY291dCA8PCAiWSByYW5nZTogWyIgPDwgeW1pbiA8PCAiLCAiIDw8IHltYXggPDwgIl1cbiI7CgogICAgcmV0dXJuIDA7Cn0K