⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 绘制一元函数曲线的工具 输入C语言语法的函数公式, 即可绘制函数的二维曲线 采用内置编译器和虚拟机(这是调整OK的版本)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"

#include "calc_flex.c"
#include "calc_yacc.c"
#include "ucvm_type.c"

#include "ucvm9.cpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1; 
//---------------------------------------------------------------------------
FILE *asout = NULL;
//---------------------------------------------------------------------------
void *func_exp(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)  
        v_parame = *(long *)(parame_stack->dat_addr);
    else            
        v_parame = *(char *)(parame_stack->dat_addr); 

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = exp(v_parame);

    return(p_result);
}                                                          
//---------------------------------------------------------------------------
void *func_log(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)  
        v_parame = *(long *)(parame_stack->dat_addr);
    else            
        v_parame = *(char *)(parame_stack->dat_addr); 

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = log(v_parame);

    return(p_result);
}
//---------------------------------------------------------------------------
void *func_sin(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)  
        v_parame = *(long *)(parame_stack->dat_addr);
    else            
        v_parame = *(char *)(parame_stack->dat_addr); 

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = sin(v_parame);

    return(p_result);
}                                  
//---------------------------------------------------------------------------
void *func_cos(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)  
        v_parame = *(long *)(parame_stack->dat_addr);
    else            
        v_parame = *(char *)(parame_stack->dat_addr); 

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = cos(v_parame);

    return(p_result);
}                                        
//---------------------------------------------------------------------------
void *func_tan(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)  
        v_parame = *(long *)(parame_stack->dat_addr);
    else            
        v_parame = *(char *)(parame_stack->dat_addr); 

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = tan(v_parame);

    return(p_result);
}                                                   
//---------------------------------------------------------------------------
void *func_asin(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)
        v_parame = *(long *)(parame_stack->dat_addr);
    else
        v_parame = *(char *)(parame_stack->dat_addr);

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = asin(v_parame);

    return(p_result);
}                                                                    
//---------------------------------------------------------------------------
void *func_acos(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)
        v_parame = *(long *)(parame_stack->dat_addr);
    else
        v_parame = *(char *)(parame_stack->dat_addr);

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = acos(v_parame);

    return(p_result);
}                                                                                  
//---------------------------------------------------------------------------
void *func_atan(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)
        v_parame = *(long *)(parame_stack->dat_addr);
    else
        v_parame = *(char *)(parame_stack->dat_addr);

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = atan(v_parame);

    return(p_result);
}                                                                                                     
//---------------------------------------------------------------------------
void *func_sinh(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)
        v_parame = *(long *)(parame_stack->dat_addr);
    else
        v_parame = *(char *)(parame_stack->dat_addr);

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = sinh(v_parame);

    return(p_result);
}                                                                                                               
//---------------------------------------------------------------------------
void *func_cosh(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)
        v_parame = *(long *)(parame_stack->dat_addr);
    else
        v_parame = *(char *)(parame_stack->dat_addr);

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = cosh(v_parame);

    return(p_result);
}                                                                                                    
//---------------------------------------------------------------------------
void *func_tanh(long parame_count, T_DAT *parame_stack)
{
    REAL  v_parame;
    REAL *p_result;

    if(parame_stack->dat_type == UCVM9_TYPE_FLT)
        v_parame = *(REAL *)(parame_stack->dat_addr);
    else
    if(parame_stack->dat_type == UCVM9_TYPE_INT)
        v_parame = *(long *)(parame_stack->dat_addr);
    else
        v_parame = *(char *)(parame_stack->dat_addr);

    p_result = (REAL *)(new char[sizeof(REAL)]);

    *p_result = tanh(v_parame);

    return(p_result);
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}                                                            
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    my_ucvm9 = new TUCVM9;

    my_ucvm9->reg_fun("exp", UCVM9_TYPE_FLT, func_exp);  
    my_ucvm9->reg_fun("log", UCVM9_TYPE_FLT, func_log);

    my_ucvm9->reg_fun("sin", UCVM9_TYPE_FLT, func_sin);
    my_ucvm9->reg_fun("cos", UCVM9_TYPE_FLT, func_cos);
    my_ucvm9->reg_fun("tan", UCVM9_TYPE_FLT, func_tan);
        
    my_ucvm9->reg_fun("asin", UCVM9_TYPE_FLT, func_asin);
    my_ucvm9->reg_fun("acos", UCVM9_TYPE_FLT, func_acos); 
    my_ucvm9->reg_fun("atan", UCVM9_TYPE_FLT, func_acos);

    my_ucvm9->reg_fun("sinh", UCVM9_TYPE_FLT, func_sinh);
    my_ucvm9->reg_fun("cosh", UCVM9_TYPE_FLT, func_cosh);
    my_ucvm9->reg_fun("tanh", UCVM9_TYPE_FLT, func_tanh);

    my_bmp_a = new Graphics::TBitmap; 
    my_bmp_b = new Graphics::TBitmap;

    my_bmp_a->PixelFormat = pf16bit;
    my_bmp_a->Width = this->Image1->Width;
    my_bmp_a->Height = this->Image1->Height;
    this->Image1->Picture->Graphic = my_bmp_a;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    delete this->my_ucvm9;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{             
    //clean;
    if(this->Image1->Tag == 0)
        Button2Click(Sender);

    int w = this->Image1->Width;
    int h = this->Image1->Height;

    //绘制轴线;
    if(this->CheckBox1->Checked)
    {
        this->Image1->Canvas->Pen->Color = this->Shape3->Brush->Color;
        
        this->Image1->Canvas->MoveTo(10, h / 2);
        this->Image1->Canvas->LineTo(w - 10, h / 2);
        this->Image1->Canvas->LineTo(w - 20, h / 2 - 2);
        this->Image1->Canvas->MoveTo(w - 10, h / 2);  
        this->Image1->Canvas->LineTo(w - 20, h / 2 + 2);

        this->Image1->Canvas->MoveTo(w / 2, h - 10);
        this->Image1->Canvas->LineTo(w / 2, 10);
        this->Image1->Canvas->LineTo(w / 2 + 2, 20);
        this->Image1->Canvas->MoveTo(w / 2, 10);   
        this->Image1->Canvas->LineTo(w / 2 - 2, 20);
    }

    //提取参数;
    double xv_min;
    double xv_stp;
    double xv_max;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -