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

Các ban sinh viên yêu thích lập trình Pascal, C++ ... hãy vào đây nào

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

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

    GUITAR_PLAYER Thành viên mới

    Tham gia ngày:
    13/04/2002
    Bài viết:
    47
    Đã được thích:
    0
    Chào các bác.. tôi đông ý là pascal và C thì bây giờ không còn là ngôn ngữ mạnh nữa
    Tuy nhiên trên diễn đàn này chúng ta sử dụng nó là công cụ để thể hiện thuật toán bởi vì nhưng người nghiên cứu lập trình đều được biêt về các ngôn ngữ này. CÒn các ngôn ngữ lâp trình bậc cao, hương đối tượng thì mỗi người chuyên về một linh vực riêng .... nếu lấy nó để trao đổi trên diễn đàm hay chủ đề này sẽ không tránh khỏi có nhiều người chả hiểu gì
    Và chúng ta trao đổi ở đây chủ yếu là về thuật toán va ý tưởng chứ không phải chương trình...như vậy thì viêc sử dụng ngôn ngữ gì đâu có quan trọng

    trantrung
  2. 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
    Xin chào các bạn.
    Tôi tin rằng Pascal còn tồn tại ở Việt Nam khoảng 10 năm nữa không thể mất được nếu còn tồn tại HĐH chạy được nó.
    Các bạn nếu mới bắt đầu với lập trình Pascal thì cứ yên tâm học tốt đi đã, sau này chuyển qua ngôn ngữ khác sau. Pascal vẫn giải quyết được nhiều việc. Học năm cuối các bạn đã cài đặt các thuật toán Di truyền, mạng Noron ?? tất cả vẫn được mô phỏng bằng Pascal.
    Pascal thì rất hay - còn Delphi thì vô địch. Nếu muốn tìm hiểu về lập trình Visual xin mời các bạn ghé qua Box Pascal/Delphi .
    haanhtu@b2vn.com
    Sunlight
  3. GUITAR_PLAYER

    GUITAR_PLAYER Thành viên mới

    Tham gia ngày:
    13/04/2002
    Bài viết:
    47
    Đã được thích:
    0
    Tôi cho rằng Pascal sẽ là ngôn ngữ không thể thay thế trong một thời gian dài nữa với tư cách là ngôn ngữ dùng để giảng dạy về lập trình và thể hiên các thuât toán
    Mà thực ra thì Pascal cũng đâu phải là một ngôn ngữ không đủ mạnh.....Hầu như tất cả các công việc mà bạn làm được trên các ngôn ngữ bậc cao thì pascal va C++ đều có thể đảm nhận được
    Ngay cả hệ điều hành Window mà các bạn đang sử dụng thì cũng được viết bằng C mà

    trantrung
  4. GUITAR_PLAYER

    GUITAR_PLAYER Thành viên mới

    Tham gia ngày:
    13/04/2002
    Bài viết:
    47
    Đã được thích:
    0
    Tôi muôn trao đổi với các bạn một bài toán thế này:
    tôi đang viêt một chương trình tính tích phân ,giải phương trình vi phân...của một hàm số bất kì với hàm số được nhập vào từ bàn phím
    Có bạn nào biết cách xử lí đễ nhập hàm số vào dưới dạng chuỗi String và từ chuỗi đó sẽ chuyển thành hàm số để chương trình tính toán....
    Tôi mới chuyển được một sồ hàn đơn giản không có các dấu mở và đóng ngoặc...
    Mong các bạn cho hướng giả quyết một cách tôi ưu..

    trantrung
  5. 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
    Gửi bạn Trần Trung.
    Về bài toán của bạn, hiện tại mình cũng chưa giải quyết được. Vấn đề là phải giải quyết được một lớp hàm và phân tích cú pháp.
    Mình thấy có một số bạn (Sv năm cuối CNTT) thường có bài tập lớn là : viết chương trình như Excel trong đó có thể tính toán được nhiều dạng công thức, xử lý được các dấu ( và ). Hiện mình cũng có Source của nó viết bằng C++ nếu bạn cần tham khảo có thể mail lại cho mình.
    haanhtu@b2vn.com
    Sunlight
  6. ThuyLe

    ThuyLe Thành viên mới

    Tham gia ngày:
    05/04/2002
    Bài viết:
    21
    Đã được thích:
    0
    - Vấn đề nhận dạng hàm số là vấn đề rất thú vị. Hiện nay khoá 2 của trường ta có một tiểu luận về vấn đề này. Đại ý như sau :
    + "Chương trình nhập vào một hàm số dưới dạng chuỗi ký tự, Nhận dạng hàm số đó và vẽ đồ thị của chúng. Mô phỏng thuật toán nhận dạng và tính toán hàm số trên".
    - Vấn đề này dựa vào 2 thuật toán chính.
    1. Thuật toán : " Ký pháp nghịc đảo BaLan"
    2. Thuật toán : " Biến đổi toạ độ trên đồ thị DECAC"
    3. Kỹ năng xử lý xâu ký tự.
    - Tôi đã có thử làm và cũng đã đạt được mục đích đề ra. Nghĩa là chương trình đã có thể nhận dạng, tính toán trên String có dạng của hàm số và cũng đã vẽ được đồ thị của chúng. Nhưng tôi cũng mới chỉ làm đến đó và từ đó tới nay chư có phát triển gì (ngay cả giao diện còn chưa trình bầy). Bạn nào có thể phát triển thêm thì có thể mail cho tôi để lấy source (trên cả : Pascal, C).
    thuyle2001ct@yahoo.com
    Được sửa chữa bởi - ThuyLe vào 24/05/2002 23:00
  7. Yumi

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

    Tham gia ngày:
    21/02/2002
    Bài viết:
    4.899
    Đã được thích:
    0
  8. GUITAR_PLAYER

    GUITAR_PLAYER Thành viên mới

    Tham gia ngày:
    13/04/2002
    Bài viết:
    47
    Đã được thích:
    0
    Gửi Lê thuỵ va bạn Hà Anh Tú
    Cám ơn các bác đã cho ý kiến về bài toán của tôi,,, tiên thể các bác gưi cho tôi cái sỏuce để nghiêm cứu, phát triển......
    Tiên đây cũng có một bài toán khá thú vị là sử lí các hinh anh ba chiều trong đồ hoạ...Tât nhiên không phải là các hình ảnh 3D mà chỉ ở mức độ đơn giản nhử vẽ hình chiếu trục đo của vật thể (một khối hộp lập phương chẳng hạn)và xoay nó theo các hướng khác nhau.
    Mong các bác cho ý kiến
    trantrung
  9. tamtin1

    tamtin1 Thành viên quen thuộc

    Tham gia ngày:
    31/12/2001
    Bài viết:
    156
    Đã được thích:
    0
    Để giải quyết được bài toán này, you phải có kiến thức về hai môn: ngôn ngữ hình thức và chương trình dịch. Hình như chỉ ở BKHN mới dạy 2 môn này thôi, các trường khác không dạy (bên Tổng hợp cũng không có, không biết dưới Hải Phòng thế nào). Học xong 2 môn này you sẽ thấy việc xử lý một chuỗi có cú pháp dễ như ăn cháo, mà mấy cái hàm số thì cũng chỉ có 1 số cú pháp thôi như +,-,*,/,sin, cos, mũ , căn... không nhiều lắm, khoảng 20 loại. Tất cả các ngôn ngữ lập trình các bạn dùng (C, Pas, VB,VC, Java , ...) đều phải dùng kiến thức 2 môn này để hiểu bạn viết những gì trong chương trình.

    I'm sent from the hell and the heaven

  10. 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
    H.A.T Gửi Trần Trung và các bạn.
    Tôi xin gửi đến các bạn đoạn chương trình C++ minh hoạ việc xử lý một biểu thức toán học :
    //=================================================================
    // Chuong trinh xu ly mot bieu thuc toan hoc
    // Moi cac ban tham khao bai toan xu ly bieu thuc toan hoc
    // Rat mong duoc trao doi hoc tap voi tat ca cac ban :
    // haanhtu@b2vn.com
    #include <string.h>
    #include <math.h>
    #include <ctype.h>
    #include <errno.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <graphics.h>
    #define MAXINPUT 79
    #define PARSERSTACKSIZE 20
    #define TEXT 0
    #define VALUE 1
    #define FORMULA 2
    #define TRUE 1
    #define FALSE 0
    #define PLUS 0
    #define MINUS 1
    #define TIMES 2
    #define DIVIDE 3
    #define EXP 4
    #define COLON 5
    #define OPAREN 6
    #define CPAREN 7
    #define NUM 8
    #define CELL 9
    #define FUNC 10
    #define EOLN 11
    #define BAD 12
    #define MAXFUNCNAMELEN 5
    class CParseCell
    {
    protected:
    char State;
    char FuncName[MAXFUNCNAMELEN + 1];
    char *StrIn;
    char isFormula;
    double value;
    private:
    int isFunc(char *s);
    int NextParse(void);
    int Gotostate(int production);
    void FormulaValue(int reduction);
    void shift(int state);
    public:
    CParseCell() {StrIn=NULL;}
    ~CParseCell(){delete StrIn;}
    // virtual void CellValue(char *s,int x,int y);
    double ParseStr(char *s);
    void ch(char *s,int x,int y);
    };
    static CParseCell Stack[PARSERSTACKSIZE+1], current;
    int stacktop, pType, error;
    int CParseCell :: isFunc(char *s)
    {
    int len = strlen(s);
    if (strncmp(s, StrIn, len) == 0)
    {
    strncpy(current.FuncName,StrIn, len);
    current.FuncName[len] = 0;
    StrIn += len;
    return(TRUE);
    }
    return(FALSE);
    }
    void CParseCell::ch(char *s,int x,int y)
    {
    char s1[100];double done;
    if(s[0]=='=')
    {
    for (int i=0;i<strlen(s);i++)
    s1 = s[i+1];
    s1 = '';
    done =ParseStr(s1);
    gotoxy(x,y);
    printf("%0.3f",done);
    }
    else
    {
    gotoxy(x,y);
    printf("%s",s);exit;
    }
    }
    int CParseCell :: NextParse(void)
    {
    char *start, numstring[80];
    int decimal, len, numlen;
    while (*StrIn == ' ') StrIn++;
    if (*StrIn == 0) return(EOLN);
    if (strchr("0123456789.", *StrIn))
    {
    start = StrIn;len = 0;
    decimal = FALSE;
    while ((isdigit(*StrIn)) ||((*StrIn == '.') && (!decimal)))
    {
    if (*StrIn == '.') decimal = TRUE;
    StrIn++;len++;
    }
    if ((len == 1) && (start[0] == '.')) return(BAD);
    if (*StrIn == 'E')
    {
    StrIn++; len++;
    if (strchr("+-", *StrIn) != NULL)
    { StrIn++;len++; }
    numlen = 0;
    while ((isdigit(*StrIn)) && (++numlen <= 3))
    { StrIn++; len++; }
    }
    strncpy(numstring, start, len);
    numstring[len] = 0;
    current.value = atof(numstring);
    if (errno == ERANGE) return(BAD);
    return(NUM);
    }
    else if (isalpha(*StrIn))
    {
    if (isFunc("ABS") ||isFunc("ACOS") ||isFunc("ASIN") ||isFunc("ATAN") ||
    isFunc("COSH") ||isFunc("COS") ||isFunc("EXP") ||isFunc("LOG10") ||
    isFunc("LOG") ||isFunc("POW10") ||isFunc("ROUND") ||isFunc("SINH") ||
    isFunc("SIN") ||isFunc("SQRT") ||isFunc("SQR") ||isFunc("TANH") ||
    isFunc("TAN") ||isFunc("TRUNC"))
    return(FUNC);
    }
    else switch(*(StrIn++))
    {
    case '+' : return(PLUS);
    case '-' : return(MINUS);
    case '*' : return(TIMES);
    case '/' : return(DIVIDE);
    case '^' : return(EXP);
    case ':' : return(COLON);
    case '(' : return(OPAREN);
    case ')' : return(CPAREN);
    default : return(BAD);
    }
    }
    void Push(CParseCell *token)
    {
    if (stacktop == PARSERSTACKSIZE - 1) error = TRUE;
    else Stack[++stacktop] = *token;
    }
    CParseCell Pop(void)
    {
    return(Stack[stacktop--]);
    }
    int CParseCell :: Gotostate(int production)
    {
    int state = Stack[stacktop].State;
    if (production <= 3)
    {
    switch(state) {
    case 0 : return(1);
    case 9 : return(19);
    case 20 : return(28);
    }
    }
    else if (production <= 6)
    {
    switch(state) {
    case 0 : case 9 :
    case 20 : return(2);
    case 12 : return(21);
    case 13 : return(22);
    }
    }
    else if (production <= 8)
    {
    switch(state) {
    case 0 : case 9 :
    case 12 : case 13 :
    case 20 : return(3);
    case 14 : return(23);
    case 15 : return(24);
    case 16 : return(25);
    }
    }
    else if (production <= 10)
    {
    switch(state) {
    case 0 : case 9 :
    case 12 : case 13 :
    case 14 : case 15 :
    case 16 :
    case 20 : return(4);
    }
    }
    else if (production <= 12)
    {
    switch(state) {
    case 0 : case 9 :
    case 12 : case 13 :
    case 14 : case 15 :
    case 16 :
    case 20 : return(6);
    case 5 : return(17);
    }
    }
    else
    {
    switch(state) {
    case 0 : case 5 :
    case 9 : case 12 :
    case 13 : case 14 :
    case 15 : case 16 :
    case 20 : return(8);
    }
    }
    return(30);
    }
    void CParseCell :: shift(int state)
    {
    current.State = state;
    Push(&current);
    pType = NextParse();
    }
    void CParseCell :: FormulaValue(int ReducValue)
    {
    CParseCell value1, value2;
    int counter;
    switch (ReducValue) {
    case 1 : value1 = Pop(); Pop(); value2 = Pop();
    current.value = value1.value + value2.value; break;
    case 2 : value1 = Pop(); Pop(); value2 = Pop();
    current.value = value2.value - value1.value; break;
    case 4 : value1 = Pop(); Pop(); value2 = Pop();
    current.value = value1.value * value2.value;break;
    case 5 : value1 = Pop(); Pop();value2 = Pop();
    if (value1.value == 0)
    current.value = HUGE_VAL;
    else
    current.value = value2.value / value1.value; break;
    case 7 : value1 = Pop(); Pop(); value2 = Pop();
    current.value = pow(value2.value, value1.value); break;
    case 9 : value1 = Pop(); Pop();
    current.value = -value1.value; break;
    case 14 : Pop();current = Pop(); Pop(); break;
    case 16 : Pop(); current = Pop(); Pop();
    value1 = Pop();
    if (strcmp(value1.FuncName, "ABS") == 0)
    current.value = fabs(current.value);
    else if (strcmp(value1.FuncName, "ACOS") == 0)
    current.value = acos(current.value);
    else if (strcmp(value1.FuncName, "ASIN") == 0)
    current.value = asin(current.value);
    else if (strcmp(value1.FuncName, "ATAN") == 0)
    current.value = atan(current.value);
    else if (strcmp(value1.FuncName, "COSH") == 0)
    current.value = cosh(current.value);
    else if (strcmp(value1.FuncName, "COS") == 0)
    current.value = cos(current.value);
    else if (strcmp(value1.FuncName, "EXP") == 0)
    current.value = exp(current.value);
    else if (strcmp(value1.FuncName, "LOG10") == 0)
    current.value = log10(current.value);
    else if (strcmp(value1.FuncName, "LOG") == 0)
    current.value = log(current.value);
    else if (strcmp(value1.FuncName, "ROUND") == 0)
    current.value = (int)(current.value + 0.5);
    else if (strcmp(value1.FuncName, "POW10") == 0)
    current.value = pow10(current.value);
    else if (strcmp(value1.FuncName, "SINH") == 0)
    current.value = sinh(current.value);
    else if (strcmp(value1.FuncName, "SIN") == 0)
    current.value = sin(current.value);
    else if (strcmp(value1.FuncName, "SQRT") == 0)
    current.value = sqrt(current.value);
    else if (strcmp(value1.FuncName, "SQR") == 0)
    current.value *= current.value;
    else if (strcmp(value1.FuncName, "TANH") == 0)
    current.value = tanh(current.value);
    else if (strcmp(value1.FuncName, "TAN") == 0)
    current.value = tan(current.value);
    else if (strcmp(value1.FuncName, "TRUNC") == 0)
    current.value = (int)current.value; break;
    case 3 : case 6 :
    case 8 : case 10 :
    case 12 :
    case 15 : current = Pop(); break;
    }
    current.State = Gotostate(ReducValue);
    Push(&current);
    }
    double CParseCell :: ParseStr(char *s)
    {
    CParseCell firsttoken;
    char accepted = FALSE;
    char copy[80];
    error = FALSE;
    isFormula = FALSE;
    StrIn = copy;
    strupr(strcpy(copy, s));
    stacktop = -1;
    firsttoken.State = 0;
    firsttoken.value = 0;
    Push(&firsttoken);
    pType = NextParse();
    do {
    switch (Stack[stacktop].State) {
    case 0 : case 9 :
    case 12 : case 13 :
    case 14 : case 15 :
    case 16 :
    case 20 : if (pType == NUM) shift(10);
    else if (pType == CELL) shift(7);
    else if (pType == FUNC) shift(11);
    else if (pType == MINUS) shift(5);
    else if (pType == OPAREN) shift(9);
    else error = TRUE; break;
    case 1 : if (pType == EOLN) accepted = TRUE;
    else if (pType == PLUS) shift(12);
    else if (pType == MINUS) shift(13);
    else error = TRUE;break;
    case 2 : if (pType == TIMES) shift(14);
    else if (pType == DIVIDE) shift(15);
    else FormulaValue(3); break;
    case 3 : FormulaValue(6); break;
    case 4 : if (pType == EXP) shift(16);
    else FormulaValue(8); break;
    case 5 : if (pType == NUM) shift(10);
    else if (pType == CELL) shift(7);
    else if (pType == FUNC) shift(11);
    else if (pType == OPAREN) shift(9);
    else error = TRUE; break;
    case 6 : FormulaValue(10); break;
    case 7 : if (pType == COLON) shift(18);
    else FormulaValue(13); break;
    case 8 : FormulaValue(12); break;
    case 10 : FormulaValue(15); break;
    case 11 : if (pType == OPAREN) shift(20);
    else error = TRUE; break;
    case 17 : FormulaValue(9); break;
    case 18 : if (pType == CELL) shift(26);
    else error = TRUE; break;
    case 19 : if (pType == PLUS) shift(12);
    else if (pType == MINUS) shift(13);
    else if (pType == CPAREN) shift(27);
    else error = TRUE; break;
    case 21 : if (pType == TIMES) shift(14);
    else if (pType == DIVIDE) shift(15);
    else FormulaValue(1);break;
    case 22 : if (pType == TIMES) shift(14);
    else if (pType == DIVIDE) shift(15);
    else FormulaValue(2); break;
    case 23 : FormulaValue(4); break;
    case 24 : FormulaValue(5); break;
    case 25 : FormulaValue(7); break;
    case 26 : FormulaValue(11); break;
    case 27 : FormulaValue(14); break;
    case 28 : if (pType == PLUS) shift(12);
    else if (pType == MINUS) shift(13);
    else if (pType == CPAREN) shift(29);
    else error = TRUE; break;
    case 29 : FormulaValue(16);break;
    case 30 : error = TRUE; break;
    }
    }
    while ((!accepted) && (!error));
    strcpy(s, copy);
    return(Stack[stacktop].value);
    }
    /*void CParseCell :: CellValue(char *s,int x,int y)
    {
    char s1[100];double done;
    if(s[0]=='=')
    {
    for (int i=0;i<strlen(s);i++)
    s1 = s[i+1];
    s1 = '';
    done =ParseStr(s1);
    gotoxy(x,y);
    printf("%0.3f",done);
    }
    else
    {
    gotoxy(x,y);
    printf("%s",s);exit;
    }
    }
    class DrawCell : public CParseCell
    {
    private:
    int x1,y1,x2,y2;
    public:
    DrawCell(){x1=0;y1=0;x2=0;y2=0;}
    void Draw(int x1,int y1,int x2,int y2,char *s);
    virtual void CellValue(char *s,int x,int y);
    // DrawSroll(int x1,int y1,int x2,int y2);
    };
    void DrawCell :: CellValue(char *s,int x,int y)
    {
    CParseCell::CellValue(s,x,y);
    }
    void DrawCell:: Draw(int x1,int y1,int x2,int y2,char *s)
    {
    setbkcolor(WHITE);
    line(x1,y1,x1,y2);
    line(x1,y1,x2,y1);
    line(x2,y1,x2,y2);
    line(x1,y2,x2,y2);
    setcolor(0);
    outtextxy(x1,y1,s);
    } */
    void main()
    {
    clrscr();
    int gd,md;
    gd = DETECT;
    // initgraph(&gd,&md,"i:\bc\bgi");
    char s[100];
    // outtext("Nhap vao:");
    fflush(stdin);
    printf("
    Nhap Vao Bieu Thuc:");
    gets(s);
    // DrawCell *p;
    // p->Draw(10,10,50,30,s);
    CParseCell p;
    // p->CellValue(s,50,50);
    p.ch(s,50,50);
    // printf("%f",done);
    getch();
    return;
    }
    Sunlight

Chia sẻ trang này