Skip to content

Instantly share code, notes, and snippets.

@misodengaku
Created May 26, 2013 09:20
Show Gist options
  • Save misodengaku/5652186 to your computer and use it in GitHub Desktop.
Save misodengaku/5652186 to your computer and use it in GitHub Desktop.
@suzusen0201先生による電卓コードをご覧ください
#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