Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Ввод математической функции в edit box


Автор: Toyamatokanava 5.5.2014, 16:55
С помощью примеров nehe написал код, который строит график функций. Решил создать еще Edit box для ввода названия функции и столкнулся с проблемой как это сделать? Попробовал читать из edita строку и переводить её в float, но получается,  что читается только обычные числа. Не буду приводить всю программу, приведу только ключевые моменты.
Построение графика:
Код

BOOL DrawGLScene(GLvoid)
{
    i = 0;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    // очистка Экрана и буфера глубины
    glLoadIdentity();
    // Сброс просмотра
    glTranslatef(0.0f, 0.0f, -6.0f);
    glLineWidth(1.0f);
    glColor3f(1.0f, 1.0f, 1.0f);
    glBegin(GL_LINES);
    glColor3f(1.0f, 0.0f, 0.0f);
    //ось Y
    glVertex2f(0.0f, 10.0f);
    glVertex2f(0.0f, -10.0f);
    //ось X
    glVertex2f(10.0f, 0.0f);
    glVertex2f(-10.0f, 0.0f);
    glEnd();
    glPointSize(2);
    glBegin(GL_POINTS);
        glColor3f(0.0f, 0.0f, 0.0f);
    for (x = -50; x <= 50; x=x+0.01)
    {
        k = atof(str);
        y = k;
        glVertex2f(x, y);
    }
    glEnd();
    return true;
}




Создания edita обработка сообщений от него по нажатию кнопки.
Код

case WM_COMMAND:
        if (LOWORD(wParam) == 10000)
        {
                GetDlgItemText(hWnd, 0, str, sizeof(str));
        }
        break;
    case WM_CREATE:
        h = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "", WS_CHILD | WS_VISIBLE | ES_RIGHT,
            10, 60, 80, 30, hWnd, 0, hInstance, NULL);

        break;

Автор: xvr 5.5.2014, 17:12
Цитата(Toyamatokanava @  5.5.2014,  16:55 Найти цитируемый пост)
Попробовал читать из edita строку и переводить её в float, но получается,  что читается только обычные числа.

Гм, а что вы ожидали увидеть от -
Цитата(Toyamatokanava @  5.5.2014,  16:55 Найти цитируемый пост)
        k = atof(str);
? Функция atof и переводит из строки в float 'только обычные числа'. 
Если вы ожидаете в str формулу с участием x, то вам нужен интерпретатор, а это уже за рамками стандартного С/С++


Автор: Toyamatokanava 5.5.2014, 18:50
Подскажите хорошие статьи на  тему интерпретаторов.

Автор: xvr 6.5.2014, 10:22
Цитата(Toyamatokanava @  5.5.2014,  18:50 Найти цитируемый пост)
Подскажите хорошие статьи на  тему интерпретаторов. 

Конкретно по интерпретаторам мне статей не встречалось. По построению компилятором (и как частный случай интерпретаторов) есть классическая книга Ахо и Ульмана - http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80%D1%8B:_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D1%8B,_%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8_%D0%B8_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B (она же 'Dragon book'). Но если вам надо по быстрому просто посчитать формулу я ее читать не рекомендую (там более 1000 страниц), просто возьмите готовый интерпретатор - их вагон и маленькая тележка: http://www.lua.org/, http://code.google.com/p/v8/, http://code.google.com/p/picoc/, http://dunkels.com/adam/ubasic/.
Или напишите сами на http://www.gnu.org/software/bison/'е (У него в документации есть готовый http://www.gnu.org/software/bison/manual/html_node/Infix-Calc.html и вот http://www.gnu.org/software/bison/manual/html_node/Multi_002dfunction-Calc.html)



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)