Professional Documents
Culture Documents
h>
#include<string.h>
#define ERROR -1
#define max 52
char cmd[104];
char num1[max];
char num2[max];
char result[102];
int main()
{
get_command(cmd);
if(check_command(cmd) == ERROR)
{
printf("Wrong command\n");
exit(0);
}
int operation = find_operation(cmd);
if(operation == ERROR)
{
printf("Wrong Operation\n");
exit(0);
}
if(get_number(cmd,num1,num2) == ERROR)
{
printf("Invalid Numbers");
exit(0);
}
if(do_operation(num1,num2,result,operation) == ERROR)
{
printf("Unable perform Operation\n");
exit(0);
}
if(print_result(result) == ERROR)
{
printf("Unable To Print Result \n");
exit(0);
}
return 0;
}
void get_command(char cmd[]){
gets(cmd);
}
int check_command(char cmd[]){
int i=0,j=0;
while(cmd[i]){
if((cmd[i]>='!')&&(cmd[i]<='?')){
// if((cmd[i]>='0')&&(cmd[i]<='9')||(cmd[i]=='+')||(cmd[i]=='-')||
(cmd[i]=='/')||(cmd[i]=='+')){
j++;
}
i++;
}
int p=strlen(cmd);
if(j==p){
return 1;
}
else{
return -1;
}
}
int find_operation(char cmd[]){
int p=0;
char opt;
while(cmd[p]!='\0'){
if(cmd[p]=='+'||cmd[p]=='-'||cmd[p]=='*'||cmd[p]=='/'){
opt=cmd[p];
}
p++;
}
if(opt=='+'){
return 1;
}
else if(opt=='-'){
return 2;
}
else if(opt=='*'){
return 3;
}
else if(opt=='/'){
return 4;
}
else {
return -1;
}
}
int get_number(char cmd[],char num1[],char num2[]){
int i=0;
while(cmd[i]!='\0'){
if(cmd[i]=='+'||cmd[i]=='-'||cmd[i]=='*'||cmd[i]=='/'){
break;
}
else{
num1[i]=cmd[i];
}
i++;
}
num1[i]='\0';
int f = cheaking_string(num1);
//printf("\n num1 :- %s\n",num1);
int j=0;
for(j=0;cmd[j]!='\0';j++){
num2[j]=cmd[j+i+1];
}
// printf("\n num2 :- %s\n",num2);
int m = cheaking_string(num2);
if(m*f ==1){
return 1;
}
else{
return -1;
}
}
int do_operation(num1,num2,result,operation){
int m = do_operar(result);
if(m==1){
switch(operation){
case 1:
addition_of_number(num1,num2,result);
break;
case 2:
compare(num1,num2);
break;
case 3:
Multiplication(num1,num2,result);
break;
case 4:
division(num1,num2,result);
break;
default:
printf("\nerror");
}
}
else{
return -1;
}
}
void addition_of_number(char num1[max],char num2[max],char result[max]){
int i,j,p1,p2,k,s,c=0;
p1=strlen(num1);
p2=strlen(num2);
i=p1-1;
j=p2-1;
k=p1>p2?p1:p2;
result[k]='\0';
k--;
while(i>=0&&j>=0){
s=(num1[i]-48)+(num2[j]-48)+c;
result[k]=s%10+48;
c=s/10;
i--;
j--;
k--;
}
if(i>=0){
while(i>=0){
s=num1[i]-48+c;
result[k]=s%10+48;
c=s/10;
i--;
k--;
}
}else if(j>=0){
while(j>=0){
s=num2[j]-48+c;
result[k]=s%10+48;
c=s/10;
j--;
k--;
}
}
if(c>0){
for(i=strlen(result);i>0;i--){
result[i+1]=result[i];
result[0]=c+48;
}
}
}