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