Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Bầu trời đầy sao bằng C

  1. #1
    Ngày gia nhập
    06 2007
    Bài viết
    0

    Red face Bầu trời đầy sao bằng C

    Em đang làm bài biểu thức nhưng muốn đưa đồ họa vào nhưng ko rành,em chép code làm trời đầy ngôi sao làm nền cho chương trình,tiếc là bị sai
    Mấy pro coi dùm rồi chỉ dùm em nghen,pro nào làm dùm đồ họa thì em cám ơn rất nhiều
    C Code:
    1. /* ----------------------------------------------/
    2. /   CHUONG TRINH TINH GIA TRI BIEU THUC         /
    3. /                              /
    4. /                                             /
    5. / ----------------------------------------- */
    6.  
    7. #include <stdio.h>
    8. #include <string.h>
    9. #include <stdlib.h>
    10. #include <math.h>
    11. #include <alloc.h>
    12. #include <conio.h>
    13. #include <graphics.h>
    14. main()
    15. {int x[101],y[101];
    16. int mh=0,mode=0,i,n;
    17. char *p[10];
    18. initgraph(&mh,&mode,"");
    19. if(graphresult()!=0)exit(1);
    20. setcolor(BLUE);
    21. /*Ve bau troi day sao*/
    22. for(i=1;i<=1000;++i)
    23. {
    24. putpixel(random(getmaxx()),random(getmaxy()),random(getmaxcolor()));
    25. }
    26. //Luu hien trang 100 hinh chu nhat tren man hinh de khoi phuc
    27. for(i=1;i<=100;++i)
    28. {
    29. x[i]=random(getmaxx())-10;
    30. y[i]=random(getmaxy())-10;
    31. if(x[i]<0) x[i]=0;if(y[i]<0)y[i]=0;
    32. n=imagesize(x[i],y[i],x[i]+10,y[i]+10);
    33. p[i]=(char*)malloc(n);
    34. getimage(x[i],y[i],x[i]+10,y[i]+10,p[i]);
    35. }
    36. //Chu trinh ban phao hoa
    37. do{
    38. //Dua 100 qua phao len man hinh tai cac vi tri quy dinh
    39. for(i=1;i<=100;++i)
    40.  
    41. setfillstyle(SOLID_FILL,i%15+1);
    42. pieslice(x[i]+5,y[i]+5,0,360,5);
    43.  
    44. delay(500);
    45. //xoa chum phao hoa vua ban bang cach khoi phuc man hinh
    46. for(i=100;i>=1;-i)
    47. putimage(x[i],y[i],p[i],COPY_PUT);
    48. delay(500);
    49. }
    50. while(!kbhit());
    51. getch();getch();
    52. closegraph();
    53. }
    54. const stacklimit=256;
    55.  
    56. char *operators="+-*/()";
    57. char *digits="0123456789";
    58.  
    59. double stack[stacklimit];
    60. unsigned int top;
    61.  
    62. char *s=(char*)malloc(256);
    63.  
    64. void error(int code);
    65.  
    66. char *strcadd(char *dest, char source) {
    67.    return strcat(dest,&source);
    68. }
    69.  
    70. int strcfind(char subs, const char *str) {
    71.    int i=0;
    72.  
    73.    for (;i<strlen(str);i++) if (str[i]==subs) return i;
    74.    return -1;
    75. }
    76.  
    77. char *strcreplace(char *dest, int pos, const char* newsubstr) {
    78.    int i,j;
    79.    int n=strlen(dest);
    80.    int m=strlen(newsubstr);
    81.  
    82.    for (i=n+m-1;i>pos;i--) dest[i]=dest[i-m+1];
    83.    for (i=pos;i-pos<m;i++) dest[i]=newsubstr[i-pos];
    84.    dest[m+n]=0;
    85.    return dest;
    86. }
    87.  
    88. char *strtrimall(char *dest) {
    89.    int i=0,j;
    90.  
    91.    for (;i<strlen(dest);i++)
    92.       if (dest[i]==32) {
    93.          for (j=i;j<strlen(dest)-1;j++) dest[j]=dest[j+1];
    94.          dest[strlen(dest)-1]=0;
    95.          i--;
    96.       }
    97.    return dest;
    98. }
    99.  
    100. char round(float x) {
    101.    return (char)(x);
    102. }
    103.  
    104. int isin(char ch,char *st) {
    105.    int i=0;
    106.    for (;i<strlen(st);i++) {
    107.       if (ch==st[i]) return 1; }
    108.    return 0;
    109. }
    110.  
    111. void initstack() {
    112.    int i=0;
    113.  
    114.    for (;i<=stacklimit-1;i++) stack[i]=0;
    115.    top=0;
    116. }
    117.  
    118. int emptystack() {
    119.    return (top==0);
    120. }
    121.  
    122. void push(double x) {
    123.    top++;
    124.    stack[top]=x;
    125. }
    126.  
    127. double pop() {
    128.    if (!emptystack()) {
    129.       top--;
    130.       return stack[top+1];
    131.    }
    132.    else return 0;
    133. }
    134.  
    135. float get() {
    136.    if (!emptystack()) return stack[top];
    137.    else return 0;
    138. }
    139.  
    140. void deltop() {
    141.    top--;
    142. }
    143.  
    144. unsigned char order(char x) {
    145.    switch (x) {
    146.       case '(' : return 0;
    147.       case '+' :
    148.       case '-' : return 1;
    149.       case '*' :
    150.       case '/' : return 2;
    151.       default  : return 0;
    152.    }
    153. }
    154.  
    155. void PRN(char *s){
    156.    unsigned char i;
    157.    char s1[256]="";
    158.  
    159.    for (i=0;i<strlen(s);i++) {
    160.       if (!isin(s[i],operators)) {
    161.          if ((i>0)&&(isin(s[i-1],operators))) strcadd(s1,' ');
    162.          strcadd(s1,s[i]);
    163.       }
    164.       else {
    165.          if (s[i]!=')') {
    166.             while ((!emptystack())&&(s[i]!='(')
    167.                  &&(order(s[i])<=order(round(get()))))
    168.                  strcadd(s1,round(pop()));
    169.             push(s[i]);
    170.          }
    171.          else {
    172.             do strcadd(s1,round(pop()));
    173.             while (round(get())!='(');
    174.             deltop();
    175.          }
    176.       }
    177.    }
    178.    while (!emptystack()) strcadd(s1,round(pop()));
    179.    strcpy(s,s1);
    180. }
    181.  
    182. double cost(char *s) {
    183.    char c;
    184.    int i;
    185.    double x;
    186.    long temp;
    187.  
    188.    i=0;
    189.    initstack();
    190.    do {
    191.       x=0;
    192.       while (s[i]==' ') i++;
    193.       switch (s[i]) {
    194.          case '*': x=pop()*pop();break;
    195.          case '+': x=pop()+pop();break;
    196.          case '-': x=pop();x=pop()-x;break;
    197.          case '/': x=pop(); if (x) x=pop()/x; else error(200);break;
    198.          case '0': case '1': case '2':
    199.          case '3': case '4':   case '5':
    200.          case '6': case '7':   case '8':
    201.          case '9': temp=1;
    202.                  do {
    203.                      if (temp>1) {
    204.                         x+=(double)(s[i]-'0')/temp;
    205.                         temp*=10;
    206.                      }
    207.                      else x=x*10+(s[i]-'0');
    208.                      i++;
    209.                      if (s[i]=='.') {
    210.                         temp=10;
    211.                         i++;
    212.                      }
    213.                  } while (isin(s[i],digits));
    214.                  i--;
    215.                  break;
    216.       }
    217.       push(x);
    218.       i++;
    219.    } while (i<strlen(s));
    220.    return x;
    221. }
    222.  
    223. void error(int code) {
    224.    printf("\r\n");
    225.    if (code<200) printf("Syntax-error #%d : ",code); else printf("\nRuntime-error #%d : ",code);
    226.    switch (code) {
    227.       case 1: printf("Invalid expression syntax.");break;
    228.       case 2: printf("Invalid expression direction.");break;
    229.       case 3: printf("Invalid bracket \"(\".");break;
    230.       case 4: printf("Invalid bracket \")\".");break;
    231.       case 5: printf("Invalid brackets \"()\".");break;
    232.       case 6: printf("Invalid decimal symbol \".\".");break;
    233.       case 7: printf("Empty expression.");break;
    234.       case 8: printf("Expression too long (256 characters max).");break;
    235.       case 9: printf("Invalid symbol. Only use \"+-*/().\", 0-9, A-Z, a-z and space.");break;
    236.       case 200: printf("Devision by zero (0).");break;
    237.    }
    238.    printf("\r\nPress any key ...\r\n");
    239.    getch();
    240.    free(s);
    241.    exit(code);
    242. }
    243.  
    244. char *replacevar(char *dest, char var, const char *value) {
    245.    int i,j,k;
    246.    int n=strlen(dest);
    247.    char temp[256]="";
    248.  
    249.    do {
    250.       i=strcfind(var,dest);
    251.       if (i==-1) return dest;
    252.       else {
    253.          n=strlen(dest);
    254.          strcpy(temp,value);
    255.          if (i+1<n) if (!isin(dest[i+1],operators)) {
    256.             k=strlen(temp);
    257.             temp[k]='*';
    258.             temp[k+1]=0;
    259.          }
    260.          if (i>0) if (!isin(dest[i-1],operators)) {
    261.             k=strlen(temp);
    262.             for (j=k;j>=0;j--) temp[j]=temp[j-1];
    263.             temp[0]='*';
    264.             temp[k+1]=0;
    265.          }
    266.          strcreplace(dest,i,temp);
    267.       }
    268.    } while (i!=-1);
    269.    return dest;
    270. }
    271.  
    272. char *fixexp(char *s) {
    273.    int i=0,j=0,k=0;
    274.  
    275.    for (i=0;i<strlen(s);i++) {
    276.       if (s[i]=='(') j++;
    277.       else if (s[i]==')') k++;
    278.       if (k>j) error(4);
    279.    }
    280.    if (j>k) error(3); else if (j<k) error(4);
    281.  
    282.    for (i=0;i<strlen(s);i++) {
    283.       switch (s[i]) {
    284.       case '.' :  if (i==strlen(s)-1) {s[i]=0;break;}
    285.                if (i==0) {strcreplace(s,0,"0."); i++; break;}
    286.                if (i>0)
    287.                switch (s[i-1]) {
    288.                   case '+' : case '-' : case '*' : case '/' : strcreplace(s,i,"0."); i++; break;
    289.                   case ')' : strcreplace(s,i,"*0."); i+=2; break;
    290.                   case '(' : strcreplace(s,i,"0+0."); i+=3; break;
    291.                }
    292.                if (i<strlen(s)-1)
    293.                switch (s[i+1]) {
    294.                   case '+' : case '-' : case '*' : case '/' : case ')' : strcreplace(s,i,".0");break;
    295.                   case '(' : strcreplace(s,i,".0*");break;
    296.                   case '.' : error(6);
    297.                }
    298.                break;
    299.  
    300.       case '+' :  if (i<strlen(s)-1)
    301.                switch (s[i+1]) {
    302.                   case '+' : case '-' : case ')' : s[i]=32;break;
    303.                   case '*' : case '/' : error(1);
    304.                }
    305.                break;
    306.       case '-' :  if (i<strlen(s)-1)
    307.                switch (s[i+1]) {
    308.                   case '+' : s[i+1]=32;break;
    309.                   case '-' : s[i]=32;s[i+1]='+';break;
    310.                   case '*' : case '/' : error(1);
    311.                   case ')' : s[i]=32;break;
    312.                }
    313.                break;
    314.       case '*' :  if (i<strlen(s)-1)
    315.                switch (s[i+1]) {
    316.                   case '+' : s[i+1]=32;break;
    317.                   case '*' : error(2);
    318.                   case '-' : j=i;
    319.                            while (isin(s[j],digits) || s[j]=='.' || j<strlen(s)) j++;
    320.                            strcreplace(s,j,strcat(")",&s[j]));
    321.                            strcreplace(s,i+1,"(-");
    322.                            break;
    323.                   case '/' : error(1);
    324.                   case ')' : s[i]=32;break;
    325.                }
    326.                break;
    327.       case '/' :  if (i<strlen(s)-1)
    328.                switch (s[i+1]) {
    329.                   case '+' : s[i+1]=32;break;
    330.                   case '-' : j=i;
    331.                            while (isin(s[j],digits) || s[j]=='.' || j<strlen(s)) j++;
    332.                            strcreplace(s,j,strcat(")",&s[j]));
    333.                            strcreplace(s,i+1,"(-");
    334.                            break;
    335.                   case '*' : error(1);
    336.                   case '/' : error(2);
    337.                   case ')' : s[i]=32;break;
    338.                }
    339.                break;
    340.       case '(' :  if (i>0)
    341.                switch (s[i-1]) {
    342.                   case '+' : case '-' : case '*' : case '/' : break;
    343.                   default : strcreplace(s,i,"*("); i++; break;
    344.                }
    345.                if (i<strlen(s)-1)
    346.                switch (s[i+1]) {
    347.                   case '+' : strcreplace(s,i+1,"0+");break;
    348.                   case '-' : strcreplace(s,i+1,"0-");break;
    349.                   case '*' : strcreplace(s,i+1,"1*");break;
    350.                   case '/' : strcreplace(s,i+1,"1/");break;
    351.                   case ')' : error(5);
    352.                   default  : k=0;
    353.                            j=i+1;
    354.                            while (s[j]!=')') {
    355.                               if (isin(s[j],operators)) k++;
    356.                               j++;
    357.                            }
    358.                            if (!k) strcreplace(s,i,"(0+");
    359.                            break;
    360.                }
    361.                break;
    362.       case ')' :  if (i<strlen(s)-1)
    363.                switch (s[i+1]) {
    364.                   case '+' : case '-' : case '*' : case '/' : case ')' : case '.' : break;
    365.                   default : strcreplace(s,i,")*"); break;
    366.                }
    367.                break;
    368.       }
    369.    }
    370.    strtrimall(s);
    371.    j=strlen(s);
    372.    if (!j) error(7); else if (j>256) error(8);
    373.    switch (s[j-1]) {
    374.       case '+' : case '-' : s[j]='0';s[j+1]=0;break;
    375.       case '*' : case '/' : s[j]='1';s[j+1]=0;break;
    376.       case '.' : s[j-1]=0;break;
    377.    }
    378.  
    379.    return s;
    380. }
    381.  
    382. int main() {
    383.    int i=0;
    384.    float var;
    385.    int sig=5;
    386.    char vars[25]="";
    387.  
    388.  
    389.    clrscr();
    390.    printf("\n\t\tTINH GIA TRI BIEU THUC\n");
    391.    printf("\r\nBieu thuc : P = "); gets(s);
    392.  
    393.    for (i=0;i<strlen(s);i++) {
    394.       if (!isin(s[i],digits) && !isin(s[i],operators) && s[i]!='.' && s[i]!=32) {
    395.          if ((s[i]>='A' && s[i]<='Z') || (s[i]>='a' && s[i]<='z')) {
    396.             printf("\r%c = ",s[i]); scanf("%f",&var);
    397.             gcvt(var,sig,vars);
    398.             replacevar(s,s[i],vars);
    399.          }
    400.          else error(9);
    401.       }
    402.    }
    403.    fixexp(s);
    404.    fixexp(s);
    405.    printf("Ket qua : P = %s",s);
    406.  
    407.    PRN(s);
    408.  
    409.    printf(" = %1.4f\r\n",cost(s));
    410.  
    411.    printf("Bam phim bat ki de ket thuc ... \r\n");
    412.    getch();
    413.    free(s);
    414.  
    415.    return 0;
    416. }
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 21-03-2009 lúc 10:23 PM. Lý do: Bạn nên đưa code vào tab [code] [/code] hoặc [php][/php]

  2. #2
    No Avatar
    zelda Khách

    Post code kiểu này thì chẳng ai giúp đâu, làm ơn bỏ vào tag code

  3. #3
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    218

    Muốn đưa đồ hoạ vào thì bạn phải tìm hiểu nó chứ, đâu thử paste nguyên chương trình của nó đến nỗi có nguyên 2 hàm main() như thế.
    Mình đã giúp bạn đưa về chương trình ban đầu để các bạn khác tiện giúp đỡ
    C Code:
    1. /* ----------------------------------------------/
    2. /    CHUONG TRINH TINH GIA TRI BIEU THUC          /
    3. /                                 /
    4. /                                             /
    5. / ----------------------------------------- */
    6.  
    7. #include <stdio.h>
    8. #include <string.h>
    9. #include <stdlib.h>
    10. #include <math.h>
    11. #include <alloc.h>
    12. #include <conio.h>
    13. #include <graphics.h>
    14. #include <dos.h>
    15. const stacklimit=256;
    16.  
    17. char *operators="+-*/()";
    18. char *digits="0123456789";
    19.  
    20. double stack[stacklimit];
    21. unsigned int top;
    22.  
    23. char *s=(char*)malloc(256);
    24.  
    25. void error(int code);
    26.  
    27. char *strcadd(char *dest, char source) {
    28.    return strcat(dest,&source);
    29. }
    30.  
    31. int strcfind(char subs, const char *str) {
    32.    int i=0;
    33.  
    34.    for (;i<strlen(str);i++) if (str[i]==subs) return i;
    35.    return -1;
    36. }
    37.  
    38. char *strcreplace(char *dest, int pos, const char* newsubstr) {
    39.    int i,j;
    40.    int n=strlen(dest);
    41.    int m=strlen(newsubstr);
    42.  
    43.    for (i=n+m-1;i>pos;i--) dest[i]=dest[i-m+1];
    44.    for (i=pos;i-pos<m;i++) dest[i]=newsubstr[i-pos];
    45.    dest[m+n]=0;
    46.    return dest;
    47. }
    48.  
    49. char *strtrimall(char *dest) {
    50.    int i=0,j;
    51.  
    52.    for (;i<strlen(dest);i++)
    53.       if (dest[i]==32) {
    54.          for (j=i;j<strlen(dest)-1;j++) dest[j]=dest[j+1];
    55.          dest[strlen(dest)-1]=0;
    56.          i--;
    57.       }
    58.    return dest;
    59. }
    60.  
    61. char round(float x) {
    62.    return (char)(x);
    63. }
    64.  
    65. int isin(char ch,char *st) {
    66.    int i=0;
    67.    for (;i<strlen(st);i++) {
    68.       if (ch==st[i]) return 1; }
    69.    return 0;
    70. }
    71.  
    72. void initstack() {
    73.    int i=0;
    74.  
    75.    for (;i<=stacklimit-1;i++) stack[i]=0;
    76.    top=0;
    77. }
    78.  
    79. int emptystack() {
    80.    return (top==0);
    81. }
    82.  
    83. void push(double x) {
    84.    top++;
    85.    stack[top]=x;
    86. }
    87.  
    88. double pop() {
    89.    if (!emptystack()) {
    90.       top--;
    91.       return stack[top+1];
    92.    }
    93.    else return 0;
    94. }
    95.  
    96. float get() {
    97.    if (!emptystack()) return stack[top];
    98.    else return 0;
    99. }
    100.  
    101. void deltop() {
    102.    top--;
    103. }
    104.  
    105. unsigned char order(char x) {
    106.    switch (x) {
    107.       case '(' : return 0;
    108.       case '+' :
    109.       case '-' : return 1;
    110.       case '*' :
    111.       case '/' : return 2;
    112.       default  : return 0;
    113.    }
    114. }
    115.  
    116. void PRN(char *s){
    117.    unsigned char i;
    118.    char s1[256]="";
    119.  
    120.    for (i=0;i<strlen(s);i++) {
    121.       if (!isin(s[i],operators)) {
    122.          if ((i>0)&&(isin(s[i-1],operators))) strcadd(s1,' ');
    123.          strcadd(s1,s[i]);
    124.       }
    125.       else {
    126.          if (s[i]!=')') {
    127.             while ((!emptystack())&&(s[i]!='(')
    128.                  &&(order(s[i])<=order(round(get()))))
    129.                  strcadd(s1,round(pop()));
    130.             push(s[i]);
    131.          }
    132.          else {
    133.             do strcadd(s1,round(pop()));
    134.             while (round(get())!='(');
    135.             deltop();
    136.          }
    137.       }
    138.    }
    139.    while (!emptystack()) strcadd(s1,round(pop()));
    140.    strcpy(s,s1);
    141. }
    142.  
    143. double cost(char *s) {
    144.    char c;
    145.    int i;
    146.    double x;
    147.    long temp;
    148.  
    149.    i=0;
    150.    initstack();
    151.    do {
    152.       x=0;
    153.       while (s[i]==' ') i++;
    154.       switch (s[i]) {
    155.          case '*': x=pop()*pop();break;
    156.          case '+': x=pop()+pop();break;
    157.          case '-': x=pop();x=pop()-x;break;
    158.          case '/': x=pop(); if (x) x=pop()/x; else error(200);break;
    159.          case '0': case '1': case '2':
    160.          case '3': case '4':   case '5':
    161.          case '6': case '7':   case '8':
    162.          case '9': temp=1;
    163.                  do {
    164.                      if (temp>1) {
    165.                         x+=(double)(s[i]-'0')/temp;
    166.                         temp*=10;
    167.                      }
    168.                      else x=x*10+(s[i]-'0');
    169.                      i++;
    170.                      if (s[i]=='.') {
    171.                         temp=10;
    172.                         i++;
    173.                      }
    174.                  } while (isin(s[i],digits));
    175.                  i--;
    176.                  break;
    177.       }
    178.       push(x);
    179.       i++;
    180.    } while (i<strlen(s));
    181.    return x;
    182. }
    183.  
    184. void error(int code) {
    185.    printf("\r\n");
    186.    if (code<200) printf("Syntax-error #%d : ",code); else printf("\nRuntime-error #%d : ",code);
    187.    switch (code) {
    188.       case 1: printf("Invalid expression syntax.");break;
    189.       case 2: printf("Invalid expression direction.");break;
    190.       case 3: printf("Invalid bracket \"(\".");break;
    191.       case 4: printf("Invalid bracket \")\".");break;
    192.       case 5: printf("Invalid brackets \"()\".");break;
    193.       case 6: printf("Invalid decimal symbol \".\".");break;
    194.       case 7: printf("Empty expression.");break;
    195.       case 8: printf("Expression too long (256 characters max).");break;
    196.       case 9: printf("Invalid symbol. Only use \"+-*/().\", 0-9, A-Z, a-z and space.");break;
    197.       case 200: printf("Devision by zero (0).");break;
    198.    }
    199.    printf("\r\nPress any key ...\r\n");
    200.    getch();
    201.    free(s);
    202.    exit(code);
    203. }
    204.  
    205. char *replacevar(char *dest, char var, const char *value) {
    206.    int i,j,k;
    207.    int n=strlen(dest);
    208.    char temp[256]="";
    209.  
    210.    do {
    211.       i=strcfind(var,dest);
    212.       if (i==-1) return dest;
    213.       else {
    214.          n=strlen(dest);
    215.          strcpy(temp,value);
    216.          if (i+1<n) if (!isin(dest[i+1],operators)) {
    217.             k=strlen(temp);
    218.             temp[k]='*';
    219.             temp[k+1]=0;
    220.          }
    221.          if (i>0) if (!isin(dest[i-1],operators)) {
    222.             k=strlen(temp);
    223.             for (j=k;j>=0;j--) temp[j]=temp[j-1];
    224.             temp[0]='*';
    225.             temp[k+1]=0;
    226.          }
    227.          strcreplace(dest,i,temp);
    228.       }
    229.    } while (i!=-1);
    230.    return dest;
    231. }
    232.  
    233. char *fixexp(char *s) {
    234.    int i=0,j=0,k=0;
    235.  
    236.    for (i=0;i<strlen(s);i++) {
    237.       if (s[i]=='(') j++;
    238.       else if (s[i]==')') k++;
    239.       if (k>j) error(4);
    240.    }
    241.    if (j>k) error(3); else if (j<k) error(4);
    242.  
    243.    for (i=0;i<strlen(s);i++) {
    244.       switch (s[i]) {
    245.       case '.' :  if (i==strlen(s)-1) {s[i]=0;break;}
    246.                if (i==0) {strcreplace(s,0,"0."); i++; break;}
    247.                if (i>0)
    248.                switch (s[i-1]) {
    249.                   case '+' : case '-' : case '*' : case '/' : strcreplace(s,i,"0."); i++; break;
    250.                   case ')' : strcreplace(s,i,"*0."); i+=2; break;
    251.                   case '(' : strcreplace(s,i,"0+0."); i+=3; break;
    252.                }
    253.                if (i<strlen(s)-1)
    254.                switch (s[i+1]) {
    255.                   case '+' : case '-' : case '*' : case '/' : case ')' : strcreplace(s,i,".0");break;
    256.                   case '(' : strcreplace(s,i,".0*");break;
    257.                   case '.' : error(6);
    258.                }
    259.                break;
    260.  
    261.       case '+' :  if (i<strlen(s)-1)
    262.                switch (s[i+1]) {
    263.                   case '+' : case '-' : case ')' : s[i]=32;break;
    264.                   case '*' : case '/' : error(1);
    265.                }
    266.                break;
    267.       case '-' :  if (i<strlen(s)-1)
    268.                switch (s[i+1]) {
    269.                   case '+' : s[i+1]=32;break;
    270.                   case '-' : s[i]=32;s[i+1]='+';break;
    271.                   case '*' : case '/' : error(1);
    272.                   case ')' : s[i]=32;break;
    273.                }
    274.                break;
    275.       case '*' :  if (i<strlen(s)-1)
    276.                switch (s[i+1]) {
    277.                   case '+' : s[i+1]=32;break;
    278.                   case '*' : error(2);
    279.                   case '-' : j=i;
    280.                            while (isin(s[j],digits) || s[j]=='.' || j<strlen(s)) j++;
    281.                            strcreplace(s,j,strcat(")",&s[j]));
    282.                            strcreplace(s,i+1,"(-");
    283.                            break;
    284.                   case '/' : error(1);
    285.                   case ')' : s[i]=32;break;
    286.                }
    287.                break;
    288.       case '/' :  if (i<strlen(s)-1)
    289.                switch (s[i+1]) {
    290.                   case '+' : s[i+1]=32;break;
    291.                   case '-' : j=i;
    292.                            while (isin(s[j],digits) || s[j]=='.' || j<strlen(s)) j++;
    293.                            strcreplace(s,j,strcat(")",&s[j]));
    294.                            strcreplace(s,i+1,"(-");
    295.                            break;
    296.                   case '*' : error(1);
    297.                   case '/' : error(2);
    298.                   case ')' : s[i]=32;break;
    299.                }
    300.                break;
    301.       case '(' :  if (i>0)
    302.                switch (s[i-1]) {
    303.                   case '+' : case '-' : case '*' : case '/' : break;
    304.                   default : strcreplace(s,i,"*("); i++; break;
    305.                }
    306.                if (i<strlen(s)-1)
    307.                switch (s[i+1]) {
    308.                   case '+' : strcreplace(s,i+1,"0+");break;
    309.                   case '-' : strcreplace(s,i+1,"0-");break;
    310.                   case '*' : strcreplace(s,i+1,"1*");break;
    311.                   case '/' : strcreplace(s,i+1,"1/");break;
    312.                   case ')' : error(5);
    313.                   default  : k=0;
    314.                            j=i+1;
    315.                            while (s[j]!=')') {
    316.                               if (isin(s[j],operators)) k++;
    317.                               j++;
    318.                            }
    319.                            if (!k) strcreplace(s,i,"(0+");
    320.                            break;
    321.                }
    322.                break;
    323.       case ')' :  if (i<strlen(s)-1)
    324.                switch (s[i+1]) {
    325.                   case '+' : case '-' : case '*' : case '/' : case ')' : case '.' : break;
    326.                   default : strcreplace(s,i,")*"); break;
    327.                }
    328.                break;
    329.       }
    330.    }
    331.    strtrimall(s);
    332.    j=strlen(s);
    333.    if (!j) error(7); else if (j>256) error(8);
    334.    switch (s[j-1]) {
    335.       case '+' : case '-' : s[j]='0';s[j+1]=0;break;
    336.       case '*' : case '/' : s[j]='1';s[j+1]=0;break;
    337.       case '.' : s[j-1]=0;break;
    338.    }
    339.  
    340.    return s;
    341. }
    342.  
    343. int main() {
    344.    int i=0;
    345.    float var;
    346.    int sig=5;
    347.    char vars[25]="";
    348.  
    349.  
    350.    clrscr();
    351.    printf("\n\t\tTINH GIA TRI BIEU THUC\n");
    352.    printf("\r\nBieu thuc : P = "); gets(s);
    353.  
    354.    for (i=0;i<strlen(s);i++) {
    355.       if (!isin(s[i],digits) && !isin(s[i],operators) && s[i]!='.' && s[i]!=32) {
    356.          if ((s[i]>='A' && s[i]<='Z') || (s[i]>='a' && s[i]<='z')) {
    357.             printf("\r%c = ",s[i]); scanf("%f",&var);
    358.             gcvt(var,sig,vars);
    359.             replacevar(s,s[i],vars);
    360.          }
    361.          else error(9);
    362.       }
    363.    }
    364.    fixexp(s);
    365.    fixexp(s);
    366.    printf("Ket qua : P = %s",s);
    367.  
    368.    PRN(s);
    369.  
    370.    printf(" = %1.4f\r\n",cost(s));
    371.  
    372.    printf("Bam phim bat ki de ket thuc ... \r\n");
    373.    getch();
    374.    free(s);
    375.  
    376.    return 0;
    377. }
    Vì phạm vi câu hỏi không thuộc về giải thuật nên mình đã chuyển sang box C/C++ truyền thống
    Đã được chỉnh sửa lần cuối bởi hailoc12 : 14-06-2007 lúc 03:34 PM.

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hà nội
    Bài viết
    204

    Lần sau đặt tên nhớ đặt cho cẩn thận, phải thể hiện được nội dung chứ cứ "giúp em với", "bài này khó quá"...thì làm sao mà biết viết cái gì.
    Life:\> dir

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Có hailoc thật là vui quá . Mấy bài về đồ họa thế này kid chẳng biết gì để giúp anh em cả ? Anh em cố lên nhé .

  6. #6
    Ngày gia nhập
    06 2007
    Bài viết
    0

    Mặc định Chỉ dùm em

    vậy em phải làm sao?Em cũng tìm hiểu rồi,nên mới đưa code làm đầy sao vô mà ko chạy?
    Hướng dẫn dùm cho em đi?:((

  7. #7
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    bạn copy toàn bộ file.bgi vào thư mục bạn chưa mã nguồn. Nếu compiler của bạn không có phần file.bgi thì bạn vào đây down load. Giải nén rồi copy toàn bộ file trong này vào thư mục chứa mã nguồn của bạn
    http://www.zshare.net/download/228523100bda6d/
    In code we trust

  8. #8
    Ngày gia nhập
    06 2007
    Bài viết
    0

    ý bạn là sao vậy?Mình down về rồi! Hic :((,hôm nay nộp bài rồi
    Chưa làm dc đồ họa nửa,Bro nào bít chỉ dùm để tham khảo nha

  9. #9
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    Rồi bây giờ bạn giải nén ra ném toàn bộ mấy cái file trong đó vào thư mục bạn chứa cái mã nguồn của bạn là ok. Bài của bạn mình chạy rồi đó, ko lỗi đâu.
    Chúc thành công và được điểm cao nhá.
    In code we trust

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn