From matsuno@mx2.ttcn.ne.jp Mon May 17 23:52:19 1999 Received: from wise13.mn.waseda.ac.jp (wise13.mn.waseda.ac.jp [133.9.4.145]) by newton.kashi.info.waseda.ac.jp (8.8.8/3.7W) with ESMTP id XAA11268 for ; Mon, 17 May 1999 23:52:17 +0900 (JST) Received: from wise20.mn.waseda.ac.jp (wise20.mn.waseda.ac.jp [133.9.4.141]) by wise13.mn.waseda.ac.jp (8.9.1a/3.7W-19980811) with ESMTP id XAA00696 for ; Mon, 17 May 1999 23:41:23 +0900 (JST) Received: from wise13.mn.waseda.ac.jp (wise13.mn.waseda.ac.jp [133.9.4.145]) by wise20.mn.waseda.ac.jp (8.9.1+3.0W/3.7W-19981111) with ESMTP id XAA10988 for ; Mon, 17 May 1999 23:41:22 +0900 (JST) Received: from mx2.ttcn.ne.jp (mx2.ttcn.ne.jp [210.238.9.16]) by wise13.mn.waseda.ac.jp (8.9.1a/3.7W-19980811) with ESMTP id XAA00691 for ; Mon, 17 May 1999 23:41:22 +0900 (JST) Received: from mx2.ttcn.ne.jp (hoj-aa224.ppp.ttcn.ne.jp [210.143.50.224]) by mx2.ttcn.ne.jp (Post.Office MTA v3.5.3 release 223 ID# 110-58167U50000L50000S0V35) with ESMTP id jp for ; Mon, 17 May 1999 23:41:18 +0900 Message-ID: <37402300.17CC7644@mx2.ttcn.ne.jp> Date: Mon, 17 May 1999 23:09:05 +0900 From: Matuno Hiroki X-Mailer: Mozilla 4.5 [ja] (Win95; I) X-Accept-Language: ja MIME-Version: 1.0 To: kashi@mn.waseda.ac.jp Subject: [JSJ]Report(2) Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Status: OR 4月23日の課題  期限を過ぎてしまい、申し訳ありません。 (1)プログラム #include #include #include #define E 0.00001 /* 誤差の範囲 */ #define TRUE 1 /* 無限ループ用 */ typedef struct { double num; char str[20]; } numform; int count = 0; /* 何通りかを数える */ int basenum[4]; numform tempnum[5]; void make(numform a, numform b, int n){ numform ans; /* 10に十分近ければ、結果表示 */ if(n > 3){ if(a.num < 10+E && a.num > 10.0-E){ printf("%s\n", a.str); count++; } return; } /* + patarn */ ans.num = a.num + b.num; sprintf(ans.str, "%s+%s", a.str, b.str); make(ans, tempnum[n+1], n+1); /* - patarn1 */ ans.num = a.num - b.num; if(strlen(b.str) == 1) sprintf(ans.str, "%s-%s", a.str, b.str); else sprintf(ans.str, "%s-(%s)", a.str, b.str); make(ans, tempnum[n+1], n+1); /* - patarn2 */ ans.num = b.num - a.num; if(strlen(a.str) == 1) sprintf(ans.str, "%s-%s", b.str, a.str); else sprintf(ans.str, "%s-(%s)", b.str, a.str); make(ans, tempnum[n+1], n+1); /* * patarn */ ans.num = a.num * b.num; if(strlen(a.str) == 1) sprintf(ans.str, "%s*%s", a.str, b.str); else if(strlen(b.str) == 1) sprintf(ans.str, "(%s)*%s", a.str, b.str); else sprintf(ans.str, "(%s)*(%s)", a.str, b.str); make(ans, tempnum[n+1], n+1); /* / patarn1 */ if(b.num > 0.0+E || b.num < 0.0-E){ ans.num = a.num / b.num; if(strlen(a.str) == 1) sprintf(ans.str, "%s/%s", a.str, b.str); else if(strlen(b.str) == 1) sprintf(ans.str, "(%s)/%s", a.str, b.str); else sprintf(ans.str, "(%s)/(%s)", a.str, b.str); make(ans, tempnum[n+1], n+1); } /* / patarn2 */ if(a.num > 0.0+E || a.num < 0.0-E){ ans.num = b.num / a.num; if(strlen(a.str) == 1) sprintf(ans.str, "%s/%s", b.str, a.str); else if(strlen(b.str) == 1) sprintf(ans.str, "%s/(%s)", b.str, a.str); else sprintf(ans.str, "(%s)/(%s)", b.str, a.str); make(ans, tempnum[n+1], n+1); } return; } void setnum(int a, int b, int c, int d){ /* 数字の入れ替えと、文字コードの初期化 */ tempnum[0].num = (double)basenum[a]; tempnum[0].str[0] = (char)basenum[a] + '0'; tempnum[1].num = (double)basenum[b]; tempnum[1].str[0] = (char)basenum[b] + '0'; tempnum[2].num = (double)basenum[c]; tempnum[2].str[0] = (char)basenum[c] + '0'; tempnum[3].num = (double)basenum[d]; tempnum[3].str[0] = (char)basenum[d] + '0'; tempnum[4].num = -1; make(tempnum[0], tempnum[1], 1); } int main(void){ int i; char str[128]; printf("4つの数を入力すると、10を作る式を作ります。\n"); for(i = 0; i < 4; i++){ do{ printf("number[%d] = ?", i); basenum[i] = atoi(gets(str)); if(basenum[i] >= 0 && basenum[i] <= 9) break; printf("0から9までの数字を入れて下さい。\n"); }while(TRUE); } /* 4つの数を並び替える */ setnum(0, 1, 2, 3); setnum(0, 1, 3, 2); setnum(0, 2, 1, 3); setnum(0, 2, 3, 1); setnum(0, 3, 1, 2); setnum(0, 3, 2, 1); setnum(1, 2, 0, 3); setnum(1, 2, 3, 0); setnum(1, 3, 0, 2); setnum(1, 3, 2, 0); setnum(2, 3, 0, 1); setnum(2, 3, 1, 0); printf("%d通りできました。\n", count); return 0; } (2)実行結果 number[0] = ?3 number[1] = ?4 number[2] = ?7 number[3] = ?8 (3-7/4)*8 --  松 野 洋 希(Matsuno Hiroki)  E-Mail:matsuno@mx2.ttcn.ne.jp