void calc_compute(op_t *op) { if (op->type != OP_CMP) return; op_t *cop = (op_t *) op->arg1; switch (cop->type) { case OP_ADD: calc_add(cop); break; case OP_SUB: calc_sub(cop); break; case OP_MUL: calc_mul(cop); break; case OP_DIV: calc_div(cop); break; case OP_MOD: calc_mod(cop); break; default: break; } }
/* main */ int main (int argc, char** argv) // Have Problems! Do you know why? { unsigned int calc_mod = 0; int idata = 0; int kdata = 0; long long result = 0; if(argc < 2) { printf("enter cmd numbers must > 2!!!\n"); return -1; } argv ++; calc_mod = atoi(*argv); argv ++; idata = atoi(*argv); argv ++; kdata = atoi(*argv); printf("Enter is mod<%d> data_f<%d> data_b<%d> \n", calc_mod, idata, kdata); switch(calc_mod) { case 1: result = calc_add(idata, kdata); printf("Calc add (%d + %d) result is %d\n", idata, kdata, (int)result); break; case 2: result = calc_sub(idata, kdata); printf("Calc sub (%d - %d) result is %d\n", idata, kdata, (int)result); break; default: printf("Enter calc mod error!!!\n"); break; } return 0; }
/* main */ int main (int argc, char** argv) { unsigned int calc_mod = 0; double idata = 0; double kdata = 0; double result = 0; if(argc < 2 || argc > 4) { printf("enter cmd numbers must greater than 2 and less than 5!!!\n\n"); printf("命令格式如下所示:\n"); printf("./calc_sim 1 xxx xxx add\n"); printf("./calc_sim 2 xxx xxx sub\n"); printf("./calc_sim 3 xxx xxx multi\n"); printf("./calc_sim 4 xxx xxx div\n"); printf("./calc_sim 5 PI\n"); printf("./calc_sim 6 xxx sin\n"); printf("./calc_sim 7 xxx cos\n"); printf("./calc_sim 8 xxx tan\n"); printf("./calc_sim 9 xxx fabs\n"); printf("./calc_sim 10 xxx exp\n"); printf("./calc_sim 11 xxx log\n"); printf("./calc_sim 12 xxx log10\n"); printf("./calc_sim 13 xxx xxx pow\n"); printf("./calc_sim 14 rand\n"); return -1; } argv++; calc_mod=atoi(*argv); if(calc_mod < 1 || calc_mod > 14){ printf("命令格式如下所示:\n"); printf("./calc_sim 1 xxx xxx add\n"); printf("./calc_sim 2 xxx xxx sub\n"); printf("./calc_sim 3 xxx xxx multi\n"); printf("./calc_sim 4 xxx xxx div\n"); printf("./calc_sim 5 PI\n"); printf("./calc_sim 6 xxx sin\n"); printf("./calc_sim 7 xxx cos\n"); printf("./calc_sim 8 xxx tan\n"); printf("./calc_sim 9 xxx fabs\n"); printf("./calc_sim 10 xxx exp\n"); printf("./calc_sim 11 xxx log\n"); printf("./calc_sim 12 xxx log10\n"); printf("./calc_sim 13 xxx xxx pow\n"); printf("./calc_sim 14 rand\n"); return -1; } if(argc==2){ printf("Enter is mod<%d> \n", calc_mod); switch(calc_mod){ case 5: result = calc_PI(); printf("calc PI result is %f\n",result); break; case 14: result = calc_rand(); printf("calc rand result is %f\n",result); break; default: if(calc_mod==1) printf("add 格式:./calc_sim 1 xxx xxx\n"); if(calc_mod==2) printf("sub 格式:./calc_sim 2 xxx xxx\n"); if(calc_mod==3) printf("multi 格式:./calc_sim 3 xxx xxx\n"); if(calc_mod==4) printf("div 格式:./calc_sim 4 xxx xxx\n"); if(calc_mod==5) printf("PI 格式:./calc_sim 5\n"); if(calc_mod==6) printf("sin 格式:./calc_sim 6 xxx\n"); if(calc_mod==7) printf("cos 格式:./calc_sim 7 xxx\n"); if(calc_mod==8) printf("tan 格式:./calc_sim 8 xxx\n"); if(calc_mod==9) printf("fabs 格式:./calc_sim 9 xxx\n"); if(calc_mod==10) printf("exp 格式:./calc_sim 10 xxx\n"); if(calc_mod==11) printf("log 格式:./calc_sim 11 xxx\n"); if(calc_mod==12) printf("log10 格式:./calc_sim 12 xxx\n"); if(calc_mod==13) printf("pow 格式:./calc_sim 13 xxx xxx\n"); if(calc_mod==14) printf("rand 格式:./calc_sim 14\n"); break; } } if(argc==3){ argv ++; idata = atof(*argv); printf("Enter is mod<%d> data_f<%f> \n", calc_mod, idata); switch(calc_mod){ case 6: result = calc_sin(idata); printf("calc sin (%f) result is %f\n",idata,result); break; case 7: result = calc_cos(idata); printf("calc cos (%f) result is %f\n",idata,result); break; case 8: result = calc_tan(idata); printf("calc tan (%f) result is %f\n",idata,result); break; case 9: result = calc_fabs(idata); printf("calc fabs (%f) result is %f\n",idata,result); break; case 10: result = calc_exp(idata); printf("calc exp (%f) result is %f\n",idata,result); break; case 11: if(idata<=0){ printf("真数必须大于0\n"); break; } result = calc_log(idata); printf("calc log (%f) result is %f\n",idata,result); break; case 12: if(idata<=0){ printf("真数必须大于0\n"); break; } result = calc_log10(idata); printf("calc log10 (%f) result is %f\n",idata,result); break; default: if(calc_mod==1) printf("add 格式:./calc_sim 1 xxx xxx\n"); if(calc_mod==2) printf("sub 格式:./calc_sim 2 xxx xxx\n"); if(calc_mod==3) printf("multi 格式:./calc_sim 3 xxx xxx\n"); if(calc_mod==4) printf("div 格式:./calc_sim 4 xxx xxx\n"); if(calc_mod==5) printf("PI 格式:./calc_sim 5\n"); if(calc_mod==6) printf("sin 格式:./calc_sim 6 xxx\n"); if(calc_mod==7) printf("cos 格式:./calc_sim 7 xxx\n"); if(calc_mod==8) printf("tan 格式:./calc_sim 8 xxx\n"); if(calc_mod==9) printf("fabs 格式:./calc_sim 9 xxx\n"); if(calc_mod==10) printf("exp 格式:./calc_sim 10 xxx\n"); if(calc_mod==11) printf("log 格式:./calc_sim 11 xxx\n"); if(calc_mod==12) printf("log10 格式:./calc_sim 12 xxx\n"); if(calc_mod==13) printf("pow 格式:./calc_sim 13 xxx xxx\n"); if(calc_mod==14) printf("rand 格式:./calc_sim 14\n"); break; } } if(argc==4){ argv ++; idata = atof(*argv); argv ++; kdata = atof(*argv); printf("Enter is mod<%d> data_f<%f> data_b<%f> \n", calc_mod, idata, kdata); switch(calc_mod) { case 1: result = calc_add(idata, kdata); printf("Calc add (%f + %f) result is %f\n", idata, kdata, result); break; case 2: result = calc_sub(idata, kdata); printf("Calc sub (%f - %f) result is %f\n", idata, kdata, result); break; case 3: result = calc_multi(idata,kdata); printf("calc multi(%f * %f) result is %f\n",idata,kdata,result); break; case 4: if(kdata==0){ printf("除数不能为0\n"); break;} else result = calc_div(idata,kdata); printf("calc div(%f / %f) result is %f\n",idata,kdata,result); break; case 13: result = calc_pow(idata,kdata); printf("calc pow (%f , %f) result is %f\n",idata,kdata,result); break; default: if(calc_mod==1) printf("add 格式:./calc_sim 1 xxx xxx\n"); if(calc_mod==2) printf("sub 格式:./calc_sim 2 xxx xxx\n"); if(calc_mod==3) printf("multi 格式:./calc_sim 3 xxx xxx\n"); if(calc_mod==4) printf("div 格式:./calc_sim 4 xxx xxx\n"); if(calc_mod==5) printf("PI 格式:./calc_sim 5\n"); if(calc_mod==6) printf("sin 格式:./calc_sim 6 xxx\n"); if(calc_mod==7) printf("cos 格式:./calc_sim 7 xxx\n"); if(calc_mod==8) printf("tan 格式:./calc_sim 8 xxx\n"); if(calc_mod==9) printf("fabs 格式:./calc_sim 9 xxx\n"); if(calc_mod==10) printf("exp 格式:./calc_sim 10 xxx\n"); if(calc_mod==11) printf("log 格式:./calc_sim 11 xxx\n"); if(calc_mod==12) printf("log10 格式:./calc_sim 12 xxx\n"); if(calc_mod==13) printf("pow 格式:./calc_sim 13 xxx xxx\n"); if(calc_mod==14) printf("rand 格式:./calc_sim 14\n"); break; } } return 0; }
int main(int argc,char **argv){ unsigned int calc_mod = 0; double idata = 0; double kdata = 0; double result = 0; if(argc <2){ printf("enter cmd numbers must >= 2!!\n"); return -1; } if(2 == argc){ argv++; calc_mod = atoi(*argv); switch(calc_mod){ case 5: printf("Calc PI is %f\n",calc_pi()); break; case 14: result = calc_rand(); printf("Calc rand result is %f\n", result); break; default: printf("Input abnormally\n"); break; } } if(3 == argc){ argv++; calc_mod = atoi(*argv); argv++; idata = atof(*argv); switch(calc_mod){ case 6: result = calc_sin((double) idata); printf("Calc sin (%f) result is %f\n",idata,result); break; case 7: result= calc_cos((double) idata); printf("Calc cos (%f) result is %f\n",idata,result); break; case 8: if(PI/2 == idata ||-PI/2 == idata){ printf("Input abnormally\n"); break; } result = calc_tan((double) idata); printf("Calc tan (%f) result is %f\n",idata,result); break; case 9: result = calc_fabs((double) idata); printf("Calc tan (%f) result is %f\n",idata,result); break; case 10: result = calc_exp((double) idata); printf("Calc exp (%f) result is %f\n",idata,result); break; case 11: if(idata <= 0){ printf("Input abnormally\n"); break; } result = calc_ln((double) idata); printf("Calc ln (%f) result is %f\n",idata,result); break; case 12: if(idata <= 0){ printf("Input abnormally\n"); break; } result = calc_log10((double) idata); printf("Calc log10 (%f) result is %f\n",idata,result); break; default: printf("Input abnormally\n"); break; } } if(4 == argc){ argv++; calc_mod = atoi(*argv); argv++; idata = atof(*argv); argv++; kdata = atof(*argv); switch(calc_mod){ case 1: result = calc_add(idata, kdata); printf("Calc add (%f + %f) result is %f\n", idata, kdata, result); break; case 2: result = calc_sub(idata, kdata); printf("Calc sub (%f - %f) result is %f\n", idata, kdata, result); break; case 3: result = calc_mul(idata,kdata); printf("Calc mul (%f * %f) result is %f\n", idata, kdata, result); break; case 4: if(0 == kdata){ printf("Input abnormaly\n"); break; } result = calc_div(idata,kdata); printf("Calc div (%f / %f) result is %f\n", idata, kdata, result); case 13: result = calc_pow(idata,kdata); printf("Calc pow (%f / %f) result is %f\n", idata, kdata, result); break; default: printf("Input abnormally\n"); break; } } return 0; }
/* * H*x will make [c+2~m] zero, c is script, Error */ static Matrix* householder(Matrix *v, int c) { Matrix* oldAns = ans; Matrix* oldAns2; Matrix* temp = NULL; int i; double norm; int k; if (v == NULL) { //Error return NULL; } if (v->n != 1) { //Error return NULL; } ans = NULL; if (!stor_createMatrix(&temp, v->m, 1)) { //Error return NULL; } if (!stor_assign(temp, v)) { //Error return NULL; } for (i = 0; i < c; i++) { *stor_entry(temp, i, 0) = 0; } if (!calc_norm(temp))//NULL { //Error return NULL; } norm = *stor_entry(ans, 0, 0); k = c; *stor_entry(temp, k, 0) += norm; if (!calc_norm(temp)) { //Error return NULL; } norm = *stor_entry(ans, 0, 0); if (util_isZero(norm)) { //Error return NULL; } if (!calc_numMul(calc_mul(temp, calc_trans(temp)),(double)2.0/(norm*norm))) { //Error return NULL; } oldAns2 = ans; ans = NULL; if (!calc_sub(calc_eye(temp->m), oldAns2)) { //Error return NULL; } stor_freeMatrix(oldAns2); stor_freeMatrix(oldAns); return ans; }