/*------------------------------------------------- * 100マス四則演算。暇なときでもドウゾ * timeGetTimeを使用してるので、Windowsしか動かないぽ。 * というかwindows.hをIncludeしてる時点でそりゃそうか... * Ver 1.02--行数ちょこっと減らしたお。 * Ver 1.03--更に軽量化. ついでにミス計測カウンタをつけた * Ver 1.04--小数点に対応。下2桁(0.xx)まで有効 * Ver 1.05--整数から倍精度実数に変更 * Ver 1.06--timeBeginPeriod()がwhile内にあったのを修正 * ソースの無断掲載禁止な!まあこんなヒドいソース * 誰もしないと思うけど。 * コンパイルはVC2003で確認。動作はXPSP2で確認済み * メモリ破壊バグ・書き換えバグなどあったら * 言ってください。つかここをreadmeにしてどうするよ(爆 * あー。めんどくさくて判定チェック甘いのは仕様ってことで * スコア保存つけてもいいけどソースかさむしなあ。 * by エリオン(ワイド) *------------------------------------------------- */ #include #include #include #include #pragma comment(lib,"winmm.lib") #define TX 10 #define TY 10 //#define ENA_DIGIT 100/*有効小数点*/ //Xline&Yline=100桁ベースライン //Table=100マス  マスターテーブル=0〜9まで順に入った箱 short XLine[TX],YLine[TY], Table[TX][TY]={0}, MasterTable[TX], mtMode;//mtMode:演算選択 double ans; long int StartTime, EndTime; int Fadd(double fa, double fb){return fa + fb;} int Fsub(double fa, double fb){return fa - fb;} int Fmul(double fa, double fb){return fa * fb;} int Fdiv(double fa, double fb){return fa * 100 / fb;} int (*pOpe[])(double, double)={Fadd,Fsub,Fmul,Fdiv}; int main(void) { int i,j,mode,t, result, sTimeMin, sTimeSec,MissCount,ti,tj;//ti,tj=tmpcount char Str[] = {"[255]"}, sOperator[] = {"+-*/"}; timeBeginPeriod(1);//timeGetTimeの精度を上げる while (1){ printf("100マス計算\n--モード選択----\n"); printf("0:足し算\n1:引き算\n2:掛け算\n3:割り算\n----------------\n> "); if(scanf("%2d", &mtMode)<1){scanf("%*[^0-9]");} mtMode = mtMode>=0&&mtMode<4?mtMode:0; system("pause"); srand((unsigned)time(NULL));//擬似乱数の初期値をセット //マスターテーブルセット for(i = 0; i < TX; i++){MasterTable[i] = i;} for(i = 0; i < TX; i++){ do{t = rand() % 10;}while(MasterTable[t] == -1); XLine[i] = MasterTable[t]; MasterTable[t] = -1; } for(j = 0; j < TY; j++){MasterTable[j] = j;} for(j = 0; j < TY; j++){ do{t = rand() % 10;}while(MasterTable[t] == -1); YLine[j] = MasterTable[t]; MasterTable[t] = -1; } //テーブル描画 for(i = 0, printf(" ");i", Table[ti][tj]):(mtMode==3?sprintf(Str,"%1.2lf", (double)Table[ti][tj]/100):sprintf(Str,"%d", Table[ti][tj])); Table[ti][tj]==255?printf("%5s", "Pass"):printf("%5s", Str); } } do{ MissCount++,printf("[%2d %c %2d] = ", YLine[j], sOperator[mtMode], XLine[i]); result = scanf("%14lf", &ans); ans = mtMode==3?ans*100:ans; if (result < 1){scanf("%*[^0-9]");} }while (ans!=(int)pOpe[mtMode](YLine[j], XLine[i])); Table[i][j] = ans, MissCount--; } } EndTime = timeGetTime(); printf("ミス回数:%3d タイム: %5d 秒\n\n",MissCount, (EndTime - StartTime) / 1000); } timeEndPeriod( 1 ); }