1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Chương trình mô phỏng Excel viết bằng C++ load ở đây !!!

Chủ đề trong 'ĐH Dân lập Hải Phòng - DHP Club' bởi haanhtu, 26/05/2002.

  1. 0 người đang xem box này (Thành viên: 0, Khách: 0)
  1. haanhtu

    haanhtu Thành viên quen thuộc

    Tham gia ngày:
    21/03/2002
    Bài viết:
    521
    Đã được thích:
    0
    Chương trình mô phỏng Excel viết bằng C++ load ở đây !!!

    Gửi bạn Trần Trung và các bạn sv CNTT cần quan tâm, chương trình mô phỏng Excel viết bằng C++


    // Chuong trinh mo phong Excel bang C++
    // Chuong trinh co thuc hien xu ly mot so bieu thuc tuong tu trong Excel
    // Bai nay la mot bai tap lon cua sinh vien Khoa Cong nghe DHQG HN thuc hien
    // Sinh vien Ha Anh Tu suu tam

    Huong dan su dung:
    + Nhap du lieu: Bam Enter
    + Ket thuc chuong trinh: Alt+Q
    + Bam Alt+phim nong: Chon lenh tren thuc don
    + Cac kieu du lieu:
    . Kieu chuoi: Hien thi duoc can trai
    . Kieu so: Hien thi duoc can phai
    . Cong thuc: duoc bat dau boi dau =
    + Cac ham duoc su dung:
    . SUM(gia tri, vung o, ham...): tinh tong
    . MAX(...): Tinh gia tri lon nhat
    . MIN(...): Tinh gia tri nho nhat
    . SIN(bieu thuc): Tinh sin
    . COS(...): tinh cos
    . ATAN(...): tinh Arctan
    + He thong tu tinh toan lai khi co su thay doi du lieu tren cac o
    Chuong trinh su dung dem dia nen khi tinh toan lai,
    voi toc do may cham thi toc do tinh tuong doi cham (it nhat cau hinh P166 16M RAM)
    + Bao loi neu cong thuc nhap sai
    + Chuong trinh cho phep doc va luu tru du lieu tren dia
    + Khi thuc hien, neu dang nhap du lieu thi khong dieu
    khien di chuyen hoac chon lenh hoac ket thuc
    * Luu y: + Khong duoc goi de quy dia chi o trong cong thuc
    vi su de quy do khong co dieu kien dung, se gay thieu bo nho
    + Chuong trinh su dung o dia ao C: de lam bo dem cho mang gia tri
    (khong su dung o dia hien thoi vi la o mang nen toc do doc cham)
    + Doi khi cong thuc tinh hien ket qua sai, khong phai do chuong trinh
    ma do toc do may cham nen hien thi mot gia tri khong dung, can cho mot luc
    */

    #include <graphics.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <mem.h>
    #include <io.h>
    #include <math.h>
    struct cell{ //Dinh nghia o du lieu
    char st[128];
    float so;
    };
    struct Box{ //Dinh nghia o hien thi tren man hinh
    int x,y,dx,dy;
    char bkcolor,color;
    char *st;
    };
    cell data[7][17]; //Bang tinh hien thoi tren man hinh
    char X_=1,Y_=0,X=0,Y=0,Xo=1,Yo=0;
    char ghi=0;
    int Xmn=1,Ymn=20;
    float myval(char *st); //Ham cho ket qua tinh toan cua mot bieu thuc, err loi
    void Boxnoi(Box dt); //Dinh nghia hop noi (button)
    void sv();
    void trangthai(char ok);
    void op();
    void Boxchim(Box dt);
    void trinhbay(); //Trinh bay man hinh
    void KTDH();
    void help(); //Khoi tao do hoa
    void open_(char *st,char ok); //Mo tep
    void tentep(char *td,char *tentep);
    void new_();
    void view();
    void onhap(int x,int y,int dx,int dy); //O nhap du lieu
    void control(); //Cac dieu khien tu ban phim
    void printtext(Box dt,int vtd); //In chuoi ky tu tren man hinh can trai
    void printnum(Box dt,float kq); //In so tren man hinh can phai
    void printcell(int x,int y); //In gia tri trong mot o
    void messbox(int x,int y,int dx,int dy,char *td,char *nd); //Cua so thong bao
    void menu(int x,int y,int dx,char tt,char *st); //Dinh nghia thuc don
    cell getdt(int x,int y); //Lay du lieu tai o co toa do (x,y) vi du: (A,3)
    char *subst(char *st,int vt,int sl); //Lay mot chuoi con trong chuoi st
    void putdt(int x,int y,cell temp); //Ket xuat du lieu ra o co toa do (x,y)
    void read(); //Doc du lieu tu tep ra bang tinh
    void hst(int x,int y,int sv);
    char hoi(int x,int y,int dx,int dy,char *st); //Hop cac cau hoi

    int posst(char *st1,char *st2); //Vi tri dau tien cua chuoi st1 trong chuoi st2
    float val(char *st); //Ham tinh gia tri cur chuoi st voi bieu thuc don gian (co goi de quy ham val_())

    //Cac ham trong chuong trinh
    float sin_(char *st);
    float cos_(char *st);
    float atan_(char *st);
    float max_(char *st);
    float smm(char *st,char k);

    //*
    float val_(char *st); //Ham tinh gia tri cua chuoi st tong quat (co cac ham, dia chi...) co goi de quy ham val()
    float cvr_d(float gt);
    float cvd_r(float gt);

    void cuondoc(char ok); //Dieu khien thanh cuon doc
    void cuonngang(char ok); //Dieu khien thanh cuon ngang
    void readstring(int x,int y,int sv,char *st,char c);
    void delst(char *sttemp,int vt,int sl); //Xoa cac gia tri trong chuoi
    void dc(char *st,char *x,char *y);
    float diachi(char *st,char k); //Lay gia tri trong dia chi o xac dinh boi chuoi st
    void indiachi(); //Hien dia chi hien thoi tren hop dia chi
    char err; //Xac dinh loi cua cong thuc, gom cac gia tri
    // 0: Khong co loi
    // 1: Loi thieu ngoac
    // 2: Loi ham khong co
    // 3: Cong thuc co kha nang bi de quy

    //Dinh nghia cac ham su dung trong chuong trinh
    const soham=7; //Co luong cac ham
    typedef char* string;
    string tenham[soham]={"(","SIN(","COS(","ATAN(","SUM(","MAX(","MIN("};

    FILE *filetemp; //Tep temp su dung lam bo dem
    FILE *filemo; //Tep su dung de luu bang tinh
    char filename[256];

    //Chuong trinh chinh
    main()
    {
    filetemp= fopen("C:\FileTemp.tmp", "w+b");
    if(filetemp==NULL)
    printf("Loi ghi tep! Khong co dia C: de lam dem... De nghi tao them o ao C:");
    KTDH();
    trinhbay();
    view();
    cuondoc(1);
    cuonngang(1);
    control();
    closegraph();
    fclose(filetemp);
    return 0;
    }

    void KTDH()
    {
    int gdriver = DETECT, gmode, errorcode;
    initgraph(&gdriver, &gmode, "d:\tc\bgi");
    errorcode = graphresult();
    if (errorcode != grOk)
    {
    printf("Loi do hoa! Can xac dinh lai duong dan cac tep *.BGI: %s
    ", grapherrormsg(errorcode));
    printf("Chuong trinh ket thuc...Goodbye");
    getch();
    exit(1);
    }
    settextjustify(1,1);
    }
    void Boxnoi(Box dt)
    {
    setfillstyle(1,dt.bkcolor);
    bar(dt.x,dt.y,dt.x+dt.dx,dt.y+dt.dy);
    setcolor(15);
    line(dt.x,dt.y,dt.x+dt.dx,dt.y);
    line(dt.x,dt.y,dt.x,dt.y+dt.dy);
    setcolor(8);
    line(dt.x+dt.dx,dt.y,dt.x+dt.dx,dt.y+dt.dy);
    line(dt.x,dt.y+dt.dy,dt.x+dt.dx,dt.y+dt.dy);
    setcolor(dt.color);
    if(dt.st!=NULL)
    outtextxy(dt.x+dt.dx/2,dt.y+dt.dy/2,dt.st);
    }
    void Boxchim(Box dt)
    {
    setfillstyle(1,dt.bkcolor);
    bar(dt.x,dt.y,dt.x+dt.dx,dt.y+dt.dy);
    setcolor(8);
    line(dt.x,dt.y,dt.x+dt.dx,dt.y);
    line(dt.x,dt.y,dt.x,dt.y+dt.dy);
    setcolor(15);
    line(dt.x+dt.dx,dt.y,dt.x+dt.dx,dt.y+dt.dy);
    line(dt.x,dt.y+dt.dy,dt.x+dt.dx,dt.y+dt.dy);
    setcolor(dt.color);
    if(dt.st!=NULL)
    outtextxy(dt.x+dt.dx/2,dt.y+dt.dy/2,dt.st);
    }
    void trinhbay()
    {
    setfillstyle(1,7);
    bar(0,0,640,480);
    Box dt1={4,79,630,385,7,0,NULL};
    Boxchim(dt1);
    setfillstyle(1,15);
    bar(40,100,620,439);
    setcolor(8);
    int i,j;
    new_();
    for(j=100;j<440;j=j+20)
    for(i=50;i<540;i=i+80)
    rectangle(i,j,i+80,j+20);
    onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);
    menu(Xmn,Ymn,105,0,"~New");
    menu(Xmn+106,Ymn,105,0,"~Open");
    menu(Xmn+106*2,Ymn,105,0,"~Save");
    menu(Xmn+106*3,Ymn,105,0,"Save ~As");
    menu(Xmn+106*4,Ymn,105,0,"~Help");
    menu(Xmn+106*5,Ymn,106,0,"~Quit");
    Box dt={1,1,636,18,1,15,"Chuong trinh mo phong EXCEL viet bang C++"};
    Boxnoi(dt);
    char st[]="Copyright (C) 1999-2000 by Nguyen Long Chinh - K41C * CNTT";
    setcolor(8);
    outtextxy(319,472,st);
    setcolor(15);
    outtextxy(321,474,st);
    setcolor(1);
    outtextxy(320,473,st);
    indiachi();
    dt.x=175;
    dt.y=50;
    dt.dx=32;
    dt.dy=20;
    dt.bkcolor=7;
    dt.color=0;
    dt.st="Ÿ(x)";
    Boxnoi(dt);
    dt.x=154;
    dt.dx=20;
    dt.st="X";
    Boxnoi(dt);
    dt.x=154-21;
    dt.dx=20;
    dt.st="û";
    Boxnoi(dt);

    }
    void view()
    {
    if((Xo!=X)||(Yo!=Y))
    {
    int i,j;
    onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);
    if(((Xo-X_==0)&&(Xo>X))||((Xo-X_==6)&&(Xo<X))||((Yo-Y_==0)&&(Yo>Y))||((Yo-Y_==16)&&(Yo<Y)))
    {

    for(j=Y_;j<Y_+17;j++)
    for(i=X_;i<X_+7;i++)
    {
    fseek(filetemp,long(i*50+j)*long(sizeof(cell)),SEEK_SET);
    fwrite(&data[i-X_][j-Y_],sizeof(cell),1,filetemp);
    }
    if((Xo-X_==0)&&(Xo>X))X_--;
    else
    if((Xo-X_==6)&&(Xo<X))X_++;
    if((Yo-Y_==0)&&(Yo>Y))Y_--;
    else
    if((Yo-Y_==16)&&(Yo<Y))Y_++;
    for(j=Y_;j<Y_+17;j++)
    for(i=X_;i<X_+7;i++)
    {
    fseek(filetemp,long(i*50+j)*long(sizeof(cell)),SEEK_SET);
    fread(&data[i-X_][j-Y_],sizeof(cell),1,filetemp);
    }
    cuondoc(0);
    cuonngang(0);
    Box dt;
    dt.x=5;
    dt.y=80;
    dt.dx=44;
    dt.dy=19;
    dt.st=NULL;
    dt.bkcolor=7;
    dt.color=0;
    Boxnoi(dt);
    dt.dx=45;
    dt.y=100;
    dt.st=(char *) malloc(3);
    strcpy(dt.st," 1");
    dt.st[0]='0'+(Y_+1)/10;
    if(dt.st[0]=='0')dt.st[0]=' ';
    dt.st[1]='0'+(Y_+1)%10;
    for(j=100;j<440;j=j+20)
    {
    Boxnoi(dt);
    dt.y=dt.y+20;
    dt.st[1]++;
    if(dt.st[1]==58)
    {
    if(dt.st[0]==' ')
    dt.st[0]='1';
    else dt.st[0]++;
    dt.st[1]='0';
    }
    }
    dt.x=50;
    dt.y=80;
    dt.dx=79;
    strcpy(dt.st,"A");
    dt.st[0]='A'+X_;
    for(i=50;i<540;i=i+80)
    {
    Boxnoi(dt);
    dt.x=dt.x+80;
    dt.st[0]++;
    }
    free(dt.st);
    for(j=Y_;j<Y_+17;j++)
    for(i=X_;i<X_+7;i++)
    {
    printcell(i,j);
    }
    }
    onhap(50+(X-X_)*80,100+(Y-Y_)*20,80,20);
    Xo=X;
    Yo=Y;
    }
    }
    void onhap(int x,int y,int dx,int dy)
    {
    setwritemode(1);
    setlinestyle(0,0,3);
    setcolor(8);
    line(x,y+2,x,y+dy-2);
    line(x-1,y,x+dx+1,y);
    line(x+dx,y+2,x+dx,y+dy-2);
    line(x-1,y+dy,x+dx+1,y+dy);
    setwritemode(0);
    setlinestyle(0,0,1);
    }
    void control()
    {
    int ch,cho;
    char c;
    do
    {
    trangthai(0);
    read();
    trangthai(1);
    hst(210,50,50);
    do
    {
    indiachi();
    ch=getch();
    cho=ch;
    if(ch==0)
    {
    ch=getch();
    cho=ch;
    switch(ch)
    {
    case 75:if(X>0)X--;break;
    case 77:if(X<25)X++;break;
    case 72:if(Y>0)Y--;break;
    case 80:if(Y<49)Y++;break;
    case 49://N
    menu(Xmn,Ymn,105,1,"~New");
    if((ghi==1)||(ghi==3))
    {
    c=hoi(150,200,300,70,"Ban co muon ghi lai hay khong ?(C/K)");
    if((c=='C')||(c=='c'))
    {
    if(ghi==1)open_("Ten Tep Can Ghi",1);
    sv();
    }
    };
    new_();
    menu(Xmn,Ymn,105,0,"~New");
    break;
    case 24://O
    menu(Xmn+106,Ymn,105,1,"~Open");
    if((ghi==1)||(ghi==3))
    {
    c=hoi(150,200,300,70,"Ban co muon ghi lai hay khong ?(C/K)");
    if((c=='C')||(c=='c'))
    {
    if(ghi==1)open_("Ten Tep Can Ghi",1);
    sv();
    }
    };
    open_("Ten Tep Can Mo",0);
    op();
    menu(Xmn+106,Ymn,105,0,"~Open");
    break;
    case 31://S
    menu(Xmn+106*2,Ymn,105,1,"~Save");
    if(ghi==1)open_("Tep Can Ghi",1);
    sv();
    menu(Xmn+106*2,Ymn,105,0,"~Save");
    break;
    case 30://A
    menu(Xmn+106*3,Ymn,105,1,"Save ~As");
    open_("Ten Tep Can Ghi",1);
    sv();
    menu(Xmn+106*3,Ymn,105,0,"Save ~As");
    break;
    case 35:help();break;
    case 16:menu(Xmn+106*5,Ymn,106,1,"~Quit");
    c=hoi(150,200,300,70,"Ban co muon thoat khong ?(C/K)");
    if((c=='C')||(c=='c'))ch=256;
    menu(Xmn+106*5,Ymn,106,0,"~Quit");
    break;
    }
    }else switch(ch)
    {
    case 13:
    case 27:break;
    default:ch=0;
    }
    view();
    hst(210,50,50);
    }
    while((ch!=13)&&(ch!=0)&&(ch!=256));
    if(ch==0)
    ungetch(cho);
    }
    while(ch!=256);
    }
    cell getdt(int x,int y)
    {
    cell temp;
    if((x>=X_)&&(x<=X_+6)&&(y>=Y_)&&(y<=Y_+16))
    temp=data[x-X_][y-Y_];
    else
    {
    fseek(filetemp,long((x*50+y)*sizeof(cell)),SEEK_SET);
    fread(&temp,sizeof(cell), 1,filetemp);
    }
    return(temp);
    }
    void putdt(int x,int y,cell temp)
    {
    if((x>=X_)&&(x<=X_+6)&&(y>=Y_)&&(y<=Y_+16))
    data[x-X_][y-Y_]=temp;
    else
    {
    fseek(filetemp,long((x*50+y)*sizeof(cell)),SEEK_SET);
    fwrite(&temp,sizeof(cell), 1,filetemp);
    }
    }
    char *subst(char *st,int vt,int sl)
    {
    char *sttemp;
    sttemp=(char*)malloc(strlen(st)+1);
    movmem(&st[vt],sttemp,sl);
    sttemp[sl]='';
    return sttemp;
    }
    void hst(int x,int y,int sv)
    {
    cell temp;
    Box dt;
    dt.x=x;
    dt.y=y;
    dt.dx=sv*8;
    dt.dy=20;
    dt.bkcolor=15;
    dt.color=0;
    temp=getdt(X,Y);
    dt.st=temp.st;
    printtext(dt,0);
    }
    void readstring(int x,int y,int sv,char *st,char c)
    {
    Box dt;
    dt.x=x;
    dt.y=y;
    dt.dx=sv*8;
    dt.dy=20;
    dt.bkcolor=15;
    dt.color=0;
    dt.st=NULL;
    Boxchim(dt);
    dt.st=st;
    char ok=0;
    int vtd=0;
    int i=0,l=0;
    int ch;
    l=strlen(st);
    printtext(dt,vtd);
    outtextxy(dt.x+(i-vtd)*8+4,dt.y+dt.dy/2+2,"_");
    do
    {
    ch=getch();
    if(ch==0)
    {
    ch=getch();
    switch(ch)
    {
    case 75:if(i>0)i--;if(i<vtd){if(vtd>=5)vtd=vtd-5;else vtd=0;ok=1;};break;
    case 77:if(i<l)i++;if(i>vtd+sv-1){vtd=vtd+5;ok=1;};break;
    case 83:if(i<l){movmem(&st[i+1],&st,l-i);ok=1;l--;if((c==0)&&(ghi==0))ghi=1;if((c==0)&&(ghi==2))ghi=3;}break;
    }
    }else
    switch(ch)
    {
    case 8:if((l>=i)&&(i>0)){
    i--;
    if(i<vtd)if(vtd>=5)vtd=vtd-5;else vtd=0;
    movmem(&st[i+1],&st,l-i);
    l--;
    ok=1;
    if((c==0)&&(ghi==0))ghi=1;
    if((c==0)&&(ghi==2))ghi=3;
    }
    break;
    case 27:
    case 13:
    case 9:break;
    default:if(l<127)
    {
    l++;
    movmem(&st,&st[i+1],l-i);
    st=ch;
    i++;
    if(i>vtd+sv-1)vtd=vtd+5;
    ok=1;
    if((c==0)&&(ghi==0))ghi=1;
    if((c==0)&&(ghi==2))ghi=3;
    }
    }
    if(ok==1)
    printtext(dt,vtd);else
    { setcolor(dt.bkcolor);
    line(dt.x+1,dt.y+15,dt.x+dt.dx-1,dt.y+15);
    }
    ok=0;
    setcolor(dt.color);
    outtextxy(dt.x+(i-vtd)*8+4,dt.y+dt.dy/2+2,"_");
    }while(ch!=13);
    }
    void read()
    {
    cell temp;
    temp=getdt(X,Y);
    readstring(210,50,50,temp.st,0);
    int i=0,l=0;
    putdt(X,Y,temp);
    printcell(X,Y);
    if(err!=0){
    messbox(220,200,200,70,"Thong bao","Loi bieu thuc");
    getch();
    }
    for(l=0;l<50;l++)
    for(i=0;i<26;i++)
    printcell(i,l);
    for(l=49;l>=0;l--)
    for(i=25;i>=0;i--)
    printcell(i,l);
    if(Y<49)Y++;else{Y=0;if(X<25)X++;else X=0;};
    view();
    }
    void printtext(Box dt,int vtd)
    {
    setfillstyle(1,dt.bkcolor);
    bar(dt.x+1,dt.y+1,dt.x+dt.dx-1,dt.y+dt.dy-1);
    setcolor(dt.color);
    char *temp;
    temp=subst(dt.st,vtd,(dt.dx-4)/8);
    settextjustify(0,1);
    outtextxy(dt.x+2,dt.y+dt.dy/2,temp);
    settextjustify(1,1);
    free(temp);
    }
    void printnum(Box dt,float kq)
    {
    char *st;
    gcvt(kq,100,st);
    if(strlen(st)>8)gcvt(kq,4,st);
    setfillstyle(1,dt.bkcolor);
    bar(dt.x+1,dt.y+1,dt.x+dt.dx-1,dt.y+dt.dy-1);
    setcolor(dt.color);
    char *temp;
    temp=subst(st,0,dt.dx/8);
    settextjustify(2,1);
    outtextxy(dt.x+dt.dx,dt.y+dt.dy/2,temp);
    settextjustify(1,1);
    free(temp);
    }
    void printcell(int x,int y)
    {
    cell temp;
    char *t;
    Box dt;
    temp=getdt(x,y);
    dt.x=52+(x-X_)*80;
    dt.y=102+(y-Y_)*20;
    dt.dx=76;dt.dy=16;
    dt.bkcolor=15;
    dt.color=0;
    dt.st=temp.st;
    temp.so=val_(temp.st);

    //Chuan chuoi
    if((err!=0)&&(temp.st[0]=='='))
    { strcpy(t,temp.st);
    strupr(t);
    delst(t,0,1);
    temp.so=myval(t);
    }
    if((x>=X_)&&(x<=X_+6)&&(y>=Y_)&&(y<=Y_+16))
    if((err==0)&&(temp.st[0]!=0))printnum(dt,temp.so);else printtext(dt,0);
    putdt(x,y,temp);
    if(err!=0)temp.so=0;
    if(temp.st[0]!='=')err=0;
    }
    float myval(char *st)
    {
    int i;
    int j;
    int m=0,vt1=0,vt2;
    float gt[50];
    char dau[50];
    char dem=0;
    char *stxl;
    for(i=0;i<=strlen(st);i++)
    switch(st)
    {
    case '(':m=m+1;break;
    case ')':m=m-1;break;
    case '*':
    case '+':
    case '-':
    case '/':
    case '':if(m==0)
    {
    if (((st=='+')||(st=='-'))&&(st[i-1]=='E'));else
    {
    vt2=i;
    stxl=subst(st,vt1,vt2-vt1);
    gt[dem]=val(stxl);
    dau[dem]=st;
    dem+=1;
    vt1=i+1;
    if(stxl!=NULL)
    free(stxl);
    if(err!=0)
    {
    return(0);
    }
    }
    }
    }
    if(m!=0)
    {
    err=2;
    return(0);
    }
    dem--;
    for(i=0;i<dem;i++)
    switch(dau)
    {
    case '*':gt=gt*gt[i+1];
    for(j=i+1;j<dem;j++)
    {
    gt[j]=gt[j+1];
    dau[j-1]=dau[j];
    }
    dem--;
    i--;
    break;
    case '/':if(gt[i+1]!=0)
    {
    gt=gt/gt[i+1];
    for(j=i+1;j<dem;j++)
    {
    gt[j]=gt[j+1];
    dau[j-1]=dau[j];
    }
    dem--;
    i--;
    }
    else
    {
    err=3;
    return(0);
    }
    break;
    }
    while(dem!=0)
    switch(dau[0])
    {
    case '+':gt[0]=gt[0]+gt[1];
    for(j=1;j<dem;j++)
    {
    gt[j]=gt[j+1];
    dau[j-1]=dau[j];
    }
    dem--;
    break;
    case '-':gt[0]=gt[0]-gt[1];
    for(j=1;j<dem;j++)
    {
    gt[j]=gt[j+1];
    dau[j-1]=dau[j];
    }
    dem--;
    break;
    }

    return gt[0];
    }

    void delst(char *sttemp,int vt,int sl)
    {
    movmem(&sttemp[vt+sl],&sttemp[vt],strlen(sttemp));
    }

    //Dinh nghia ham posst
    int posst(char *st1,char *st2)
    {
    if(strstr(st2,st1)==NULL)return(255);
    else
    return strstr(st2,st1)-st2;
    }
    float val_(char *st)
    {
    char i,d=0;
    err=0;
    for(i=0;i<strlen(st);i++)
    {
    if(((st=='+')||(st=='-'))&&(st[i-1]!='E'))
    {
    err=1;
    return 0;
    }
    else
    if(st[i-1]!='E')
    if(st=='E')
    {
    d++;
    if(d>1)
    {
    err=1;
    return 0;
    }
    }
    else
    if(((st<'0')||(st>'9'))&&(st!='.'))
    {
    err=1;
    return 0;
    }
    }
    return atof(st);
    }

    float val(char *st)
    {
    // float kq;
    cell kq;
    char i;
    char *tg;
    char x;char y;
    kq.so=val_(st);
    char ok=0;
    if(err==1)
    {
    for(i=0;i<soham;i++)
    if(posst(tenham,st)==0)
    { err=0;
    tg=subst(st,strlen(tenham[i]),strlen(st)-strlen(tenham[i])-1);
    switch(i)
    {
    case 0:kq.so=myval(tg);ok=1;break;
    case 1:kq.so=sin_(tg);ok=1;break;
    case 2:kq.so=cos_(tg);ok=1;break;
    case 3:kq.so=atan_(tg);ok=1;break;
    case 4:kq.so=smm(tg,0);ok=1;break;
    case 5:kq.so=smm(tg,1);ok=1;break;
    case 6:kq.so=smm(tg,2);ok=1;break;
    // default: dc(st,&x,&y);
    // kq=getdt(x,y);
    }
    free(tg);
    }
    if(ok==0)
    {
    dc(st,&x,&y);
    kq=getdt(x,y);
    }
    }
    return(kq.so);
    }
    float cvr_d(float gt)
    {
    return(gt*3.141592654/180);
    }
    float cvd_r(float gt)
    {
    return(gt*180/3.141592654);
    }

    float sin_(char *st)
    {
    float kq;
    kq=myval(st);
    kq=cvr_d(kq);
    kq=sin(kq);
    return(kq);
    }
    float cos_(char *st)
    {
    float kq;
    kq=myval(st);
    kq=cvr_d(kq);
    kq=cos(kq);
    return(kq);
    }
    float atan_(char *st)
    {
    float kq;
    kq=myval(st);
    kq=atan(kq);
    kq=cvd_r(kq);
    return(kq);
    }
    float smm(char *st,char k)
    {
    char i;
    char j=0;
    char m=0;
    char kt=0;
    float kq_=0;
    float kq=0;
    char *tg;
    for(i=0;i<=strlen(st);i++)
    {
    switch(st[i])
    {
    case'(':m++;break;
    case')':m--;break;
    case'':
    case',':if(m==0)
    {
    tg=subst(st,j,i-j);
    j=i+1;
    if(posst(":",tg)!=255)
    {
    kq_=diachi(tg,k);
    }
    else kq_=myval(tg);
    switch(k)
    {
    case 0:kq=kq+kq_;break;
    case 1:if(kt==0)kq=kq_;else if(kq<kq_)kq=kq_;break;
    case 2:if(kt==0)kq=kq_;else if(kq>kq_)kq=kq_;break;
    }
    kt=1;
    if(tg!=NULL)
    free(tg);
    }
    }
    }
    return(kq);
    }
    void dc(char *st,char *x,char *y)
    {
    char *tg;
    if((st[0]>='A')||(st[0]<='Z'))
    {
    *x=st[0]-'A';
    tg=subst(st,1,strlen(st)-1);
    *y=val_(tg)-1;
    free(tg);
    }
    else err=5;
    }
    float diachi(char *st,char k)
    {
    char vt;
    char i;
    cell kq;
    cell tg;
    char x1;
    char y1;
    char x2;
    char y2;
    char *lt;
    lt=subst(st,0,vt);
    vt=posst(":",st);
    dc(lt,&x1,&y1);
    if(lt!=NULL)
    free(lt);
    lt=subst(st,vt+1,strlen(st)-vt);
    dc(lt,&x2,&y2);
    if(lt!=NULL)
    free(lt);
    if(k==0)kq.so=0;else kq=getdt(x1,y1);//data[x1][y1];
    for(i=x1;i<=x2;i++)
    for(vt=y1;vt<=y2;vt++)
    {
    tg=getdt(i,vt);
    switch(k)
    {
    case 0:/*SUM*/kq.so=kq.so+tg.so;break;
    case 1:/*MAX*/if(kq.so<tg.so)kq.so=tg.so;break;
    case 2:/*MIN*/if(kq.so>tg.so)kq.so=tg.so;break;
    }
    }
    return(kq.so);
    }
    void messbox(int x,int y,int dx,int dy,char *td,char *nd)
    {
    Box dt;
    dt.x=x;
    dt.y=y+20;
    dt.dx=dx;
    dt.dy=dy-20;
    dt.bkcolor=7;
    dt.color=0;
    dt.st=nd;
    int size = imagesize(x, y,x+dx,y+dy);
    void *arrow;
    arrow = malloc(size);
    getimage(x,y,x+dx,y+dy,arrow);
    Boxnoi(dt);
    dt.bkcolor=1;
    dt.color=15;
    dt.y=y;
    dt.dy=20;
    dt.st=td;
    Boxnoi(dt);
    size=getch();
    putimage(x, y, arrow,0);
    free(arrow);
    ungetch(size);
    }
    void cuondoc(char ok)
    {
    int x=612,y=100,dy=340;
    Box dt;
    if(ok==1)
    {
    dt.x=x;
    dt.y=y;
    dt.dy=dy;
    dt.dx=20;
    dt.bkcolor=7;
    dt.st=NULL;
    Boxnoi(dt);
    dt.x=x+2;
    dt.y=y+2;
    dt.dy=16;
    dt.dx=17;
    dt.color=0;
    dt.st="-";
    Boxnoi(dt);
    dt.y=y+dy-18;
    dt.dy=16;
    dt.dx=17;
    dt.color=0;
    dt.st="-";
    Boxnoi(dt);
    }
    dt.x=x+2;
    dt.y=y+20;
    dt.dy=dy-40;
    dt.dx=17;
    dt.bkcolor=7;
    dt.st=NULL;
    Boxchim(dt);
    dt.x=x+3;
    dt.dy=17*dt.dy/50;
    dt.y=y+20+(dy-40)*Y_/50;
    dt.dx=15;
    dt.bkcolor=7;
    dt.st=NULL;
    Boxnoi(dt);
    }
    void cuonngang(char ok)
    {
    int x=210,y=442,dx=400;
    Box dt;
    if(ok==1)
    {
    dt.x=x;
    dt.y=y;
    dt.dx=dx;
    dt.dy=20;
    dt.bkcolor=7;
    dt.st=NULL;
    Boxnoi(dt);
    dt.x=x+2;
    dt.y=y+2;
    dt.dx=16;
    dt.dy=17;
    dt.color=0;
    dt.st=" ";
    dt.st[0]=17;
    Boxnoi(dt);
    dt.x=x+dx-18;
    dt.dx=16;
    dt.dy=17;
    dt.color=0;
    dt.st=" ";
    Boxnoi(dt);
    }
    dt.y=y+2;
    dt.x=x+20;
    dt.dx=dx-40;
    dt.dy=17;
    dt.bkcolor=7;
    dt.st=NULL;
    Boxchim(dt);
    dt.y=y+3;
    dt.dx=7*dt.dx/26;
    dt.x=x+20+(dx-40)*X_/26;
    dt.dy=15;
    dt.st=NULL;
    Boxnoi(dt);
    }
    void menu(int x,int y,int dx,char tt,char *st)
    {
    char st1[20];
    strcpy(st1,st);
    int vth=posst("~",st1);
    if(vth!=255)delst(st1,vth,1);
    Box dt;
    dt.x=x;
    dt.y=y;
    dt.dx=dx;
    dt.dy=20;
    dt.bkcolor=7;
    dt.color=0;
    dt.st=st1;
    int i;
    if(tt==0)Boxnoi(dt);else Boxchim(dt);
    for(i=0;i<strlen(st1);i++)if(i!=vth)st1[i]=' ';
    setcolor(4);
    outtextxy(dt.x+dt.dx/2,dt.y+dt.dy/2,st1);
    }
    char hoi(int x,int y,int dx,int dy,char *st)
    {
    messbox(x,y,dx,dy,"Thong Bao",st);
    return getch();
    }
    void new_()
    {
    int i,j;
    cell temp;
    for(i=0;i<128;i++)temp.st[i]=0;
    temp.so=0;
    fseek(filetemp,0L,SEEK_SET);
    for(i=0;i<50*26;i++)
    fwrite(&temp,sizeof(cell),1,filetemp);
    for (i=0;i<7;i++)
    for (j=0;j<17;j++)
    {
    strcpy(data[i][j].st,"");
    data[i][j].so=0;
    }
    onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);
    X_=1;Y_=0;X=0;Y=0;Xo=1;Yo=0;
    onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);
    view();
    }
    void tentep(char *td,char *tentep)
    {
    Box dt;
    int x=150,y=200,dx=300,dy=70;
    dt.x=x;
    dt.y=y+20;
    dt.dx=dx;
    dt.dy=dy-20;
    dt.bkcolor=7;
    dt.color=0;
    dt.st=NULL;
    int size = imagesize(x, y,x+dx,y+dy);
    void *arrow;
    arrow = malloc(size);
    getimage(x,y,x+dx,y+dy,arrow);
    Boxnoi(dt);
    dt.bkcolor=1;
    dt.color=15;
    dt.y=y;
    dt.dy=20;
    dt.st=td;
    Boxnoi(dt);
    readstring(x+20,y+30,32,tentep,1);
    putimage(x, y, arrow,0);
    free(arrow);
    }
    void open_(char *st,char ok)
    {
    char loi=0;
    FILE *temp;
    char filentemp[256];
    tentep(st,filentemp);
    if ((temp = fopen(filentemp,"r"))== NULL)
    {
    if(ok==0)
    { messbox(150,200,300,70,"Thong Bao","Tep chua ton tai");
    getch();
    loi=1;
    }
    }else
    if (ok==1)
    { messbox(120,200,350,70,"Thong Bao","Tep da ton tai!Ban co muon ghi de ? (C/K)");
    if(getch()=='K')loi=1;
    }
    fclose(temp);
    if(loi==0)
    {
    strcpy(filename,filentemp);
    }
    }
    void sv()
    {
    int i;
    cell dt;
    size_t size;
    filemo=fopen(filename,"w+b");
    fseek(filetemp,0L,SEEK_SET);
    fseek(filemo,0L,SEEK_SET);
    for(i=0;i<26*50;i++)
    {
    fread(&dt,sizeof(cell),1,filetemp);
    fwrite(&dt,sizeof(cell),1,filemo);
    }
    fclose(filemo);
    ghi=2;
    }
    void op()
    {
    int i;
    cell data;
    size_t size;
    filemo=fopen(filename,"r+b");
    fseek(filetemp,0L,SEEK_SET);
    fseek(filemo,0L,SEEK_SET);
    for(i=0;i<26*50;i++)
    {
    fread(&data,sizeof(cell),1,filemo);
    fwrite(&data,sizeof(cell),1,filetemp);
    }
    onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);
    X_=1;Y_=0;X=0;Y=0;Xo=1;Yo=0;
    fclose(filemo);
    onhap(50+(Xo-X_)*80,100+(Yo-Y_)*20,80,20);
    view();
    }
    void indiachi()
    {
    Box dt;
    char st[4];
    dt.x=6;
    dt.y=50;
    dt.dx=122;
    dt.dy=20;
    dt.color=0;
    dt.bkcolor=15;
    st[3]=0;
    st[0]=X+'A';
    st[1]=(Y+1)/10+'0';
    st[2]=(Y+1)%10+'0';
    if(st[1]=='0'){st[1]=st[2];st[2]=0;}
    dt.st=st;
    Boxchim(dt);
    }
    void trangthai(char ok)
    {
    char st[]="Nhap du lieu",st1[]="Dieu khien";
    Box dt={5,442,203,20,7,0,NULL};
    if(ok==0)dt.st=st;else dt.st=st1;
    Boxnoi(dt);
    }
    void help()
    {
    int x=180;
    int y=110;
    int dx=280;
    int dy=200;
    Box dt;
    dt.x=x;
    dt.y=y+20;
    dt.dx=dx;
    dt.dy=dy-20;
    dt.bkcolor=7;
    dt.color=0;
    dt.st=NULL;
    int size = imagesize(x, y,x+dx,y+dy);
    void *arrow;
    arrow = malloc(size);
    getimage(x,y,x+dx,y+dy,arrow);
    Boxnoi(dt);
    dt.bkcolor=1;
    dt.color=15;
    dt.y=y;
    dt.dy=20;
    dt.st="Help";
    Boxnoi(dt);
    setcolor(0);
    outtextxy(320,140,"* Cac ham su dung: ");
    outtextxy(320,150," SUM: Tinh tong ");
    outtextxy(320,160," MAX: Tinh gia tri lon nhat");
    outtextxy(320,170," MIN: Tinh gia tri nho nhat");
    outtextxy(320,180," SIN: Tinh sin() ");
    outtextxy(320,190," COS: Tinh cos() ");
    outtextxy(320,200," ATAN: Tinh Arctan ");
    outtextxy(320,210,"* Cong thuc bat dau boi dau = ");
    outtextxy(320,220," + Chuoi ky tu: Hien ben trai");
    outtextxy(320,230," + So: Hien ben phai ");
    outtextxy(320,240,"* Ket thuc nhap du lieu: Enter");
    outtextxy(320,250,"* Alt+Hotkey: Chon Menu ");
    outtextxy(320,260,"-----o0o-----");
    setcolor(4);
    outtextxy(320,270,"Copyright (C) 1999-2000 by");
    outtextxy(320,280,"Nguyen Long Chinh");
    outtextxy(320,290,"K41C * Cong nghe - DHQG Ha Noi");
    getch();
    putimage(x, y, arrow,0);
    free(arrow);
    }
    //Ket thuc chuong trinh


    Sunlight[/i][/i][/i][/i][/i][/i][/i]
  2. hahuyduonghp20012002

    hahuyduonghp20012002 Thành viên rất tích cực

    Tham gia ngày:
    25/02/2002
    Bài viết:
    3.459
    Đã được thích:
    3
    Thanks!
    Tôi yêu người và mong mọi điều tốt đẹp cho mọi người
  3. haanhtu

    haanhtu Thành viên quen thuộc

    Tham gia ngày:
    21/03/2002
    Bài viết:
    521
    Đã được thích:
    0

    Không có gì ! Tôi chỉ mong sao Sv CNTT DHP sôi động hơn ở BOX này mà thôi. Cảm ơn các bác MOD đã dành đất cho anh em.
    Sunlight

Chia sẻ trang này