Created
May 26, 2013 09:20
-
-
Save misodengaku/5652186 to your computer and use it in GitHub Desktop.
@suzusen0201先生による電卓コードをご覧ください
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include<stdlib.h> | |
| #include<string.h> | |
| /*乗算=mul,割り算=div,足し算=add,引き算=sub,乗除算=mad*/ | |
| void mad(char *,int,char *); | |
| void absu(char *,int,char *); | |
| void main(void) | |
| { | |
| char siki[100],p[100],siki2[100],sikia[1000],sikiA[1000],sikiB[1000]; | |
| int i,A,B,a,b,X,c,d,e,judb,juda,judaaa,bbb,counta,countb,jud1,jud2,jud,i2,i3,aaa,x,y,xa,y1,yyy,xxx,ii; | |
| juda=0; | |
| judb=0; | |
| jud=0; | |
| i=0; | |
| printf("数式を半角で入力してください=>"); | |
| scanf("%s",siki); | |
| while(siki[i]!='\0'){ | |
| if((siki[i]>='0')&&(siki[i]<='9')||(siki[i]=='*')||(siki[i]=='/')||(siki[i]=='+')||(siki[i]=='-')||(siki[i]=='(')||(siki[i]==')')||(siki[i]=='{')||(siki[i]=='}')){ | |
| i++; | |
| } | |
| else{ | |
| printf("不正な文字入力があります\n"); | |
| exit(1); | |
| } | |
| } | |
| /*括弧の判定*/ | |
| i=0; | |
| while(siki[i]!='\0'){ | |
| if(siki[i]=='('){ | |
| juda++; | |
| } | |
| else if(siki[i]==')'){ | |
| judb++; | |
| } | |
| i++; | |
| } | |
| /*printf("%d\n",jud1);*/ | |
| /*printf("%d\n",jud2);*/ | |
| if(juda==judb){ | |
| } | |
| else{ | |
| printf("エラーです。括弧を確認してください。\n"); | |
| exit(1); | |
| } | |
| while(jud!=juda){ | |
| A=0; | |
| B=0; | |
| i=0; | |
| while(siki[i]!='\0'){ | |
| if(siki[i]=='('){ | |
| A=i; | |
| a=i;/*「(」の位置*/ | |
| A++; | |
| } | |
| if(siki[i]==')'){ | |
| B=i; | |
| b=i;/*「)」の位置*/ | |
| B--; | |
| } | |
| if((siki[a]=='(')&&(siki[b]==')')){ | |
| for(X=0;A<=B;X++){ | |
| p[X]=siki[A]; | |
| A++; | |
| } | |
| p[X]='\0'; | |
| break; | |
| } | |
| i++; | |
| } | |
| /*printf("%s\n",p);*/ | |
| sikia[0]='\0'; | |
| sikiA[0]='\0'; | |
| sikiB[0]='\0'; | |
| aaa=0; | |
| counta=0; | |
| countb=0; | |
| bbb=0; | |
| jud1=0; | |
| while(p[counta]!='\0'){ | |
| if((p[counta]=='*')||(p[counta]=='/')){ | |
| aaa++; | |
| } | |
| counta++; | |
| } | |
| while(p[countb]!='\0'){ | |
| if((p[countb]=='+')||(p[countb]=='-')){ | |
| bbb++; | |
| } | |
| countb++; | |
| } | |
| while(jud1!=aaa){ | |
| i=0; | |
| while(p[i]!='\0'){ | |
| if((p[i]=='*')||(p[i]=='/')){ | |
| x=i; | |
| x--; | |
| y=i; | |
| y++; | |
| while(x!=0){ | |
| if((p[x]>='0')&&(p[x]<='9')){ | |
| x--; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| if((p[x]=='*')||(p[x]=='/')||(p[x]=='+')){ | |
| x++; | |
| } | |
| else if(p[x]=='-'){ | |
| } | |
| else{ | |
| } | |
| /*printf("%d\n",x);*/ | |
| xa=x; | |
| while(p[y]!='\0'){ | |
| if((p[y]>='0')&&(p[y]<='9')){ | |
| y++; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| /*if((siki[y]=='*')||(siki[y]=='/')||(siki[y]=='+')||(siki[y]=='-')){ | |
| y--; | |
| } | |
| else{ | |
| }*/ | |
| /*printf("%d\n",y);*/ | |
| y1=y; | |
| i2=0; | |
| while(x!=y){ | |
| sikia[i2]=p[x]; | |
| i2++; | |
| x++; | |
| } | |
| sikia[i2]='\0'; | |
| /*printf("%s☆\n",sikia);*/ | |
| i3=0; | |
| while(sikia[i3]!='\0'){ | |
| if((sikia[i3]=='*')||(sikia[i3]=='/')){ | |
| mad(sikia,i3,sikia); | |
| break; | |
| } | |
| i3++; | |
| } | |
| /*printf("%s\n",sikia);*/ | |
| strcpy(sikiA,p); | |
| c=0; | |
| while(sikia[c]!='\0'){ | |
| sikiA[xa]=sikia[c]; | |
| c++; | |
| xa++; | |
| } | |
| while(p[y1]!='\0'){ | |
| sikiA[xa]=p[y1]; | |
| y1++; | |
| xa++; | |
| }/* | |
| while(siki){ | |
| sikiA[xa]=*/ | |
| sikiA[xa]='\0'; | |
| p[0]='\0'; | |
| strcpy(p,sikiA); | |
| /*printf("%s\n",siki);*/ | |
| /*printf("%d\n",aaa);*/ | |
| /*printf("%s\n",p);*/ | |
| break; | |
| } | |
| else{ | |
| i++; | |
| } | |
| } | |
| jud1++; | |
| } | |
| /*printf("%s\n",p);*/ | |
| sikia[0]='\0'; | |
| sikiA[0]='\0'; | |
| sikiB[0]='\0'; | |
| jud2=0; | |
| while(jud2!=bbb){ | |
| i=0; | |
| while(p[i]!='\0'){ | |
| if(p[0]=='-'){ | |
| i++; | |
| } | |
| else if((p[i]=='+')||(p[i]=='-')){ | |
| x=i; | |
| x--; | |
| y=i; | |
| y++; | |
| while(x!=0){ | |
| if((p[x]>='0')&&(p[x]<='9')){ | |
| x--; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| if((p[x]=='*')||(p[x]=='/')||(p[x]=='+')){ | |
| x++; | |
| } | |
| else if(p[x]=='-'){ | |
| } | |
| else{ | |
| } | |
| /*printf("%d\n",x);*/ | |
| xa=x; | |
| while(p[y]!='\0'){ | |
| if((p[y]>='0')&&(p[y]<='9')){ | |
| y++; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| /*if((siki[y]=='*')||(siki[y]=='/')||(siki[y]=='+')||(siki[y]=='-')){ | |
| y--; | |
| } | |
| else{ | |
| }*/ | |
| /*printf("%d\n",y);*/ | |
| y1=y; | |
| i2=0; | |
| while(x!=y){ | |
| sikia[i2]=p[x]; | |
| i2++; | |
| x++; | |
| } | |
| sikia[i2]='\0'; | |
| /*printf("%s☆\n",sikia);*/ | |
| i3=0; | |
| while(sikia[i3]!='\0'){ | |
| if((sikia[i3]=='+')||(sikia[i3]=='-')){ | |
| absu(sikia,i3,sikia); | |
| break; | |
| } | |
| i3++; | |
| } | |
| /*printf("%s\n",sikia);*/ | |
| strcpy(sikiA,p); | |
| c=0; | |
| while(sikia[c]!='\0'){ | |
| sikiA[xa]=sikia[c]; | |
| c++; | |
| xa++; | |
| } | |
| while(p[y1]!='\0'){ | |
| sikiA[xa]=p[y1]; | |
| y1++; | |
| xa++; | |
| }/* | |
| while(siki){ | |
| sikiA[xa]=*/ | |
| sikiA[xa]='\0'; | |
| p[0]='\0'; | |
| strcpy(p,sikiA); | |
| /*printf("%s\n",siki);*/ | |
| /*printf("%d\n",aaa);*/ | |
| /*printf("%s\n",p);*/ | |
| break; | |
| } | |
| else{ | |
| i++; | |
| } | |
| } | |
| jud2++; | |
| } | |
| /*printf("括弧の式%s\n",p);*/ | |
| c=0; | |
| while(c!=a){ | |
| siki2[c]=siki[c]; | |
| c++; | |
| } | |
| d=0; | |
| while(p[d]!='\0'){ | |
| siki2[c]=p[d]; | |
| d++; | |
| c++; | |
| } | |
| b++; | |
| for(e=b;siki[e]!='\0';e++){ | |
| siki2[c]=siki[e]; | |
| c++; | |
| } | |
| siki2[c]='\0'; | |
| siki[0]='\0'; | |
| strcpy(siki,siki2); | |
| jud++; | |
| } | |
| printf("括弧の式%s\n",siki); | |
| /*/////////////////////////////////////////////////////////////////*/ | |
| sikia[0]='\0'; | |
| sikiA[0]='\0'; | |
| sikiB[0]='\0'; | |
| i=0; | |
| aaa=0; | |
| counta=0; | |
| countb=0; | |
| bbb=0; | |
| jud1=0; | |
| jud2=0; | |
| while(siki[counta]!='\0'){ | |
| if((siki[counta]=='*')||(siki[counta]=='/')){ | |
| aaa++; | |
| } | |
| counta++; | |
| } | |
| while(siki[countb]!='\0'){ | |
| if((siki[countb]=='+')||(siki[countb]=='-')){ | |
| bbb++; | |
| } | |
| countb++; | |
| } | |
| while(jud1!=aaa){ | |
| while(siki[i]!='\0'){ | |
| if((siki[i]=='*')||(siki[i]=='/')){ | |
| x=i; | |
| x--; | |
| y=i; | |
| y++; | |
| while(x!=0){ | |
| if((siki[x]>='0')&&(siki[x]<='9')){ | |
| x--; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| if((siki[x]=='*')||(siki[x]=='/')||(siki[x]=='+')){ | |
| x++; | |
| } | |
| else if(siki[x]=='-'){ | |
| } | |
| else{ | |
| } | |
| /*printf("%d\n",x);*/ | |
| xa=x; | |
| while(siki[y]!='\0'){ | |
| if((siki[y]>='0')&&(siki[y]<='9')){ | |
| y++; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| /*printf("%d\n",y);*/ | |
| y1=y; | |
| sikia[0]='\0'; | |
| i2=0; | |
| while(x!=y){ | |
| sikia[i2]=siki[x]; | |
| i2++; | |
| x++; | |
| } | |
| /*printf("%d%d\n",x,y);*/ | |
| sikia[i2]='\0'; | |
| /*printf("%s\n",sikia);*/ | |
| i3=0; | |
| while(sikia[i3]!='\0'){ | |
| if((sikia[i3]=='*')||(sikia[i3]=='/')){ | |
| mad(sikia,i3,sikia); | |
| break; | |
| } | |
| i3++; | |
| } | |
| /*printf("%s●\n",sikia);*/ | |
| strcpy(sikiA,siki); | |
| /*xa++;*/ | |
| c=0; | |
| while(sikia[c]!='\0'){ | |
| sikiA[xa]=sikia[c]; | |
| c++; | |
| xa++; | |
| } | |
| while(siki[y1]!='\0'){ | |
| sikiA[xa]=siki[y1]; | |
| y1++; | |
| xa++; | |
| } | |
| sikiA[xa]='\0'; | |
| siki[0]='\0'; | |
| strcpy(siki,sikiA); | |
| /*printf("%s★\n",siki);*/ | |
| /*printf("%d\n",aaa);*/ | |
| break; | |
| } | |
| else{ | |
| i++; | |
| } | |
| } | |
| jud1++; | |
| } | |
| sikiA[0]='\0'; | |
| sikia[0]='\0'; | |
| sikiB[0]='\0'; | |
| i=0; | |
| ii=0; | |
| while(jud2!=bbb){ | |
| while(siki[i]!='\0'){ | |
| if(siki[ii]=='-'){ | |
| i++; | |
| ii=-1; | |
| printf("%c\n",siki[ii]); | |
| } | |
| else if((siki[i]=='+')||(siki[i]=='-')){ | |
| x=i; | |
| x--; | |
| xxx=x; | |
| y=i; | |
| y++; | |
| while(x!=0){ | |
| if(siki[xxx]=='-'){ | |
| x--; | |
| } | |
| else if((siki[x]>='0')&&(siki[x]<='9')){ | |
| x--; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| if((siki[x]=='*')||(siki[x]=='/')||(siki[x]=='+')||(siki[x]=='-')){ | |
| x++; | |
| } | |
| else if(siki[x]=='-'){ | |
| } | |
| else{ | |
| } | |
| /*printf("%d\n",x);*/ | |
| xa=x; | |
| yyy=y; | |
| while(siki[y]!='\0'){ | |
| if(siki[yyy]=='-'){ | |
| y++; | |
| yyy=NULL; | |
| } | |
| else if((siki[y]>='0')&&(siki[y]<='9')){ | |
| y++; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| /*printf("yは%c\n",siki[y]);*/ | |
| y1=y; | |
| i2=0; | |
| while(x!=y){ | |
| sikia[i2]=siki[x]; | |
| i2++; | |
| x++; | |
| } | |
| sikia[i2]='\0'; | |
| /*printf("しきだよ%s\n",sikia);*/ | |
| i3=0; | |
| while(sikia[i3]!='\0'){ | |
| if((sikia[i3]=='+')||(sikia[i3]=='-')){ | |
| absu(sikia,i3,sikia); | |
| break; | |
| } | |
| i3++; | |
| } | |
| /*printf("%s\n",sikia);*/ | |
| strcpy(sikiA,siki); | |
| /*xa++;*/ | |
| c=0; | |
| while(sikia[c]!='\0'){ | |
| sikiA[xa]=sikia[c]; | |
| c++; | |
| xa++; | |
| } | |
| while(siki[y1]!='\0'){ | |
| sikiA[xa]=siki[y1]; | |
| y1++; | |
| xa++; | |
| }/* | |
| while(siki){ | |
| sikiA[xa]=*/ | |
| sikiA[xa]='\0'; | |
| siki[0]='\0'; | |
| strcpy(siki,sikiA); | |
| /*printf("%s★\n",siki);*/ | |
| break; | |
| } | |
| else{ | |
| i++; | |
| } | |
| } | |
| jud2++; | |
| } | |
| printf("%s\n",siki); | |
| } | |
| void absu(char *siki,int i,char *p) | |
| { | |
| int x,y,Y,XX,YY,ans,iy,ix,iix; | |
| XX=0; | |
| YY=0; | |
| x=i; | |
| x--; | |
| y=i; | |
| y++; | |
| Y=y; | |
| iy=0; | |
| ix=0; | |
| printf("しき%s\n",siki); | |
| if(siki[y]=='-'){ | |
| y++; | |
| iy=1; | |
| } | |
| while(x!=0){ | |
| if((siki[x]>='0')&&(siki[x]<='9')){ | |
| x--; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| /*printf("%c\n",siki[x]);*/ | |
| iix=x; | |
| if(siki[iix]=='-'){ | |
| ix=1; | |
| x++; | |
| } | |
| while(siki[y]!='\0'){ | |
| if((siki[y]>='0')&&(siki[y]<='9')){ | |
| y++; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| y--; | |
| /*printf("%c\n",siki[y]);*/ | |
| while(x!=i){ | |
| XX=XX*10+siki[x]-'0'; | |
| x++; | |
| } | |
| printf("xの値%d\n",XX); | |
| if(ix==1){ | |
| XX=XX*(-1); | |
| } | |
| y++; | |
| Y++; | |
| while(Y!=y){ | |
| YY=YY*10+siki[Y]-'0'; | |
| Y++; | |
| } | |
| if(iy==1){ | |
| YY=YY*(-1); | |
| } | |
| printf("yの値%d\n",YY); | |
| if(siki[i]=='+'){ | |
| ans=XX+YY; | |
| } | |
| else{ | |
| ans=XX-YY; | |
| } | |
| /*printf("%d\n",ans);*/ | |
| p=itoa(ans,siki,10); | |
| } | |
| void mad(char *siki,int i,char *p) | |
| { | |
| int x,y,Y,XX,YY,ans,iy,iix,ix; | |
| iy=0; | |
| XX=0; | |
| YY=0; | |
| x=i; | |
| x--; | |
| y=i; | |
| y++; | |
| Y=y; | |
| ix=0; | |
| /*printf("しき%s\n",siki);*/ | |
| if(siki[y]=='-'){ | |
| y++; | |
| iy=1; | |
| } | |
| while(x!=0){ | |
| if((siki[x]>='0')&&(siki[x]<='9')){ | |
| x--; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| iix=x; | |
| if(siki[iix]=='-'){ | |
| ix=1; | |
| x++; | |
| } | |
| while(siki[y]!='\0'){ | |
| if((siki[y]>='0')&&(siki[y]<='9')){ | |
| y++; | |
| } | |
| else{ | |
| break; | |
| } | |
| } | |
| y--; | |
| /*printf("%c★\n",siki[y]);*/ | |
| while(x!=i){ | |
| XX=XX*10+siki[x]-'0'; | |
| x++; | |
| } | |
| /*printf("%d(xの値)\n",XX);*/ | |
| if(ix==1){ | |
| XX=XX*(-1); | |
| } | |
| y++; | |
| while(Y!=y){ | |
| YY=YY*10+siki[Y]-'0'; | |
| Y++; | |
| } | |
| if(iy==1){ | |
| YY=YY*(-1); | |
| } | |
| /*printf("%d(yの値)\n",YY);*/ | |
| if(siki[i]=='*'){ | |
| ans=XX*YY; | |
| } | |
| else{ | |
| if(YY==0){ | |
| printf("ゼロ除算は禁止されています\n"); | |
| exit(1); | |
| } | |
| ans=XX/YY; | |
| } | |
| /*printf("%d\n",ans);*/ | |
| p=itoa(ans,siki,10); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment