1 名前:a36 ◆K0BqlCB3.k [2009/05/21(木) 12:30:47 ] 他の宿題スレで出された問題を各々好きな言語で解答して言語の良さを競い合うスレです。 なお、宿題スレが存在する言語についてはその言語のスレで解答してください。 C/C++の宿題片付けます 126代目 pc12.2ch.net/test/read.cgi/tech/1242655611/ Python の宿題ここで答えます Part 1 pc12.2ch.net/test/read.cgi/tech/1153585095/ ★★ Java の宿題ここで答えます Part 67 ★★ pc12.2ch.net/test/read.cgi/tech/1232627790/ Pascalの宿題は俺にやらせろ!!Part2 pc12.2ch.net/test/read.cgi/tech/1136994325/ BASICの宿題はお前にまかせた pc12.2ch.net/test/read.cgi/tech/1136788500/ Rubyの宿題教えてください。2限目 pc12.2ch.net/test/read.cgi/tech/1200175247/ C#,C#の宿題片付けます。 pc12.2ch.net/test/read.cgi/tech/1197620454/
449 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 15:56:25 ] pc12.2ch.net/test/read.cgi/tech/1245853701/946 # 【質問テンプレ】 # [1] 授業単元 C言語 # [2] 問題文(含コード&リンク): # 二つのバイナリファイルの中身を比較して等しいか、等しくないかを # 比較して結果を返す関数を作る
450 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 15:58:28 ] >>449 % Prolog 二つのバイナリファイルの中身を比較(_ファイル1,_ファイル2,_診断) :- open(ファイル1,read,_ストリーム1,[type(binary)]), open(ファイル2,read,_ストリーム2,[type(binary)]), get_byte(_ストリーム1,A), get_byte(_ストリーム2,B), 二つのバイナリファイルの中身を比較(_ストリーム1,_ストリーム2,A,B,_診断), close(_ストリーム1), close(_ストリーム2). 二つのバイナリファイルの中身を比較(_,_,-1,-1,等しい) :- !. 二つのバイナリファイルの中身を比較(_,_,A,B,等しくない) :- not(A=B),!. 二つのバイナリファイルの中身を比較(_ストリーム1,_ストリーム2,A,A,_診断) :- get_byte(_ストリーム1,C), get_byte(_ストリーム2,D), 二つのバイナリファイルの中身を比較(_ストリーム1,_ストリーム2,C,D,_診断).
451 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 18:03:48 ] pc12.2ch.net/test/read.cgi/tech/1245853701/424 # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9644.txt にある # 50コのデータを利用して # 最大値と最小値を取り出すプログラムを以下の1,2の関数を用いて2つ作れ # 1 return文を用いたケース # 2 グローバル変数を用いたケース # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9644.txt の # ポインタは使用不可です #ファイル名はseiseki.txtでお願いします # 70 56 66 45 88 # 66 85 68 55 73 # 55 65 53 67 55 # 85 72 76 58 65 # 92 70 45 73 55 # 56 57 52 62 82 # 72 62 33 85 95 # 46 95 48 72 34 # 83 42 88 92 56 # 68 65 91 82 66
452 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 18:34:55 ] >>451 % Prolog 整数要素ファイルの最小値・最大値(_ファイル,_最小値,_最大値) :- get_chars(_ファイル,Chars), concat_atom(Chars,Atom), split(Atom,['\n',' '],L), ならびの中の最小値・最大値(L,A,A,_最小値,_最大値). ならびの中の最小値・最大値([],X,Y,X,Y) :- !. ならびの中の最小値・最大値([A|R],Min,Max,_最小値,_最大値) :- A < Min, ならびの中の最小値・最大値(R,A,Max,_最小値,_最大値). ならびの中の最小値・最大値([A|R],Min,Max,_最小値,_最大値) :- A > Max, ならびの中の最小値・最大値(R,Min,A,_最小値,_最大値). ならびの中の最小値・最大値([_|R],Min,Max,_最小値,_最大値) :- ならびの中の最小値・最大値(R,Min,Max,_最小値,_最大値).
453 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 18:36:57 ] >>452 また間違い。 整数要素ファイルの最小値・最大値(_ファイル,_最小値,_最大値) :- get_chars(_ファイル,Chars), concat_atom(Chars,Atom), split(Atom,['\n',' '],[A|L]), ならびの中の最小値・最大値(L,A,A,_最小値,_最大値).
454 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 18:48:58 ] >>447 StateT の練習 -- Haskell import Control.Monad.State import Data.Function (on) import System.IO (hFlush, stdout) t447 :: Int -> IO (Int,Double) t447 m = evalStateT (t447' m 1) [] where t447' :: Int -> Int -> StateT [Int] IO (Int,Double) t447' m i = do ls <- get liftIO $ (putStr $ "No." ++ show i ++ ": ") >> hFlush stdout s <- liftIO $ getLine modify (++[read s]) if i == m then get >>= return . sumAndAverage else t447' m (i+1) sumAndAverage :: [Int] -> (Int,Double) sumAndAverage = f . foldl (\(s,l) x -> (s+x,l+1)) (0,0) where f :: (Int,Int) -> (Int,Double) f (s,l) = (s, on (/) fromIntegral s l) main = t447 6 >>= putStrLn . toString where toString :: (Int,Double) -> String toString (s,a) = "sum: "++show s++"\naverage: "++show a
455 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 21:08:36 ] pc12.2ch.net/test/read.cgi/tech/1245853701/950 # 【質問テンプレ】 # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): # 下に示すように,要素数が7 でint 型の配列に読み込んだ全要素を逆順に # 並べ替えるプログラムを作成せよ. # # vx[ 0] : 58 # vx[ 1] : 32 # vx[ 2] : 17 # vx[ 3] : 46 # vx[ 4] : 22 # vx[ 5] : 73 # vx[ 6] : 69 # vx[ 0] = 69 # vx[ 1] = 73 # vx[ 2] = 22 # vx[ 3] = 46 # vx[ 4] = 17 # vx[ 5] = 32 # vx[ 6] = 58
456 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 21:14:39 ] >>455 % Prolog % ここでは定義された単位節の一引数だけソートして差し替えると問題としてみよう。 nojiriko.asia/prolog/t455.html
457 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 23:05:14 ] pc12.2ch.net/test/read.cgi/tech/1245853701/957 # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): # 100個の乱数を発生させ最大値、最小値、平均を求める # また最大値、最小値それぞれ何番目にあるか答えよ
458 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 23:31:59 ] >>457 % Prolog nojiriko.asia/prolog/t457.html
459 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 23:52:08 ] >>457 -- Haskell import System.Random (getStdRandom, random) import Control.Monad (replicateM) import Data.List (maximumBy, minimumBy) import Data.Function (on) main = do rands <- replicateM 100 (getStdRandom random :: IO Int) let i = zip [1..] rands putStrLn $ "(index, maximum) = " ++ show (maximumBy (compare `on` snd) i) putStrLn $ "(index, minimum) = " ++ show (minimumBy (compare `on` snd) i) putStrLn $ "average = " ++ show (on (/) fromIntegral (sum rands) 100)
460 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 05:00:41 ] pc12.2ch.net/test/read.cgi/tech/1245853701/960 # [1] 授業単元: プログラミング演習 # [2] 問題文(含コード&リンク): # 下に示すように,要素数が5 でint 型の配列に、5 人の学生の身長を読み込んで、その 平均 # 身長を求めるプログラムを作成せよ。 # 身長を入力してください # 1 番: 178 # 2 番: 175 # 3 番: 165 # 4 番: 179 # 5 番: 172 # 平均身長: 173.8
461 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 05:16:24 ] >>460 % Prolog % nojiriko.asia/prolog/t460.html '5 人の学生の身長を読み込んで、その平均身長を求める' :- '5 人の学生の身長を読み込んで、'(_身長ならび), sum(_身長ならび,_合計), _平均身長 is _合計 / 5, write_formatted('平均身長: %t\n',[_平均身長]), '5 人の学生の身長を読み込んで、'(_身長ならび) :- findall(_身長,(for(1,N番目,5),身長を得る(N番目,_身長)),_身長ならび). 身長を得る(N番目,_身長) :- write_formatted('%t 番: ',[N番目]), 数値を得る(_身長), _身長 > 0.0, _身長 < 220.0,!. 身長を得る(N番目,_身長) :- write('身長が適切な数値ではありませんでした。再入力が必要です\n'), 身長を得る(N番目,_身長). 数値を得る(_数値) :- get_line(_改行までの文字列), atom_to_term(_改行までの文字列,_数値,_), number(_数値).
462 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 05:38:06 ] >>461 入力検査の部分を修正。 '5 人の学生の身長を読み込んで、その平均身長を求める' :- '5 人の学生の身長を読み込んで、'(_身長ならび), sum(_身長ならび,_合計), _平均身長 is _合計 / 5, write_formatted('平均身長: %t\n',[_平均身長]), '5 人の学生の身長を読み込んで、'(_身長ならび) :- findall(_身長,(for(1,N番目,5),身長を得る(N番目,_身長)),_身長ならび). 身長を得る(N番目,_身長) :- write_formatted('%t 番: ',[N番目]), 数値を得る(_身長), 身長として適切な数値であるか検査する(_身長),!. 身長を得る(N番目,_身長) :- 身長を得る(N番目,_身長). 身長として適切な数値であるか検査する(_身長) :- _身長 > 0.0,_身長 < 230.0,!. 身長として適切な数値であるか検査する(_身長) :- write_formatted('%tは身長として適切な数値ではありませんでした。再入力が必要 です\n',[_身長]),fail. 数値を得る(_数値) :- get_line(_改行までの文字列), atom_to_term(_改行までの文字列,_数値,_), number(_数値).
463 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 05:40:58 ] >>462 もう一度書き直し。すみません。 '5 人の学生の身長を読み込んで、その平均身長を求める' :- '5 人の学生の身長を読み込んで、'(_身長ならび), sum(_身長ならび,_合計), _平均身長 is _合計 / 5, write_formatted('平均身長: %t\n',[_平均身長]), '5 人の学生の身長を読み込んで、'(_身長ならび) :- findall(_身長,(for(1,N番目,5),身長を得る(N番目,_身長)),_身長ならび). 身長を得る(N番目,_身長) :- write_formatted('%t 番: ',[N番目]), 数値を得る(_身長), 身長として適切な数値であるか検査する(_身長),!. 身長を得る(N番目,_身長) :- 身長を得る(N番目,_身長). 身長として適切な数値であるか検査する(_身長) :- _身長 > 0.0,_身長 < 230.0,!. 身長として適切な数値であるか検査する(_身長) :- write_formatted('%tは身長として適切な数値ではありませんでした。再入力が必要 です\n',[_身長]),fail. 数値を得る(_数値) :- get_line(_改行までの文字列), atom_to_term(_改行までの文字列,_数値,_), number(_数値).
464 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 05:43:49 ] >>463 コピペの際に誤って改行してしまいましたが、Prologでは write_formatted('%tは身長として適切な数値ではありませんでした。再入力が必要 です\n',[_身長]),fail. のように文字列のなかで改行すると構文エラーとなります。
465 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 09:32:01 ] pc12.2ch.net/test/read.cgi/tech/1245853701/949 # 【質問テンプレ】 # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9733.txt # 課題: # ・キーボードから正整数を入力し、その逆数を正確に計算し、ディスプレイに # 表示させる。(循環小数である場合には、循環部分が分かるように表示を工夫する。) # 内容: # n(nは任意の正整数)の逆数を正確に計算し、計算過程で出た商、余りを逐次 # 配列に入れていく。計算途中で同じ商、余りが出たら循環小数と判定でき、 # 0が出たら割り切れると判定できる。
466 名前:デフォルトの名無しさん [2009/07/13(月) 09:59:38 ] >>465 (do ((x (read) (read)) (a nil)) ((or (not (integerp x)) (<= x 0))) (setf a (cons x a)) (if (= x 1) (format t "~A ~S~%" x a) (format t "1/~A ~S~%" x a))) どうぞ
467 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 13:25:57 ] >>465 % Prolog nojiriko.asia/prolog/t465.html
468 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 13:42:10 ] >>465 % Prolog 逆数を正確に計算(_最大桁,_正整数,_逆数表示) :- 逆数表示(_最大桁,_正整数,[[0,1]],_逆数表示),!. 逆数表示(N,_,Y,X) :- N < 0,逆数表示(Y,[],X),!. 逆数表示(N,_整数,[[D,0]|Y],X) :- 逆数表示([[D,0]|Y],[],X),!. 逆数表示(N,_整数,[[_商,_剰余]|Y],X) :- _商2 is _剰余 // _整数, _剰余2 is (_剰余 mod _整数) * 10, append(L1,[[_商2,_剰余2]|L2],[[_商,_剰余]|Y]), append([[']...',_]|L1],[[_商2,_剰余2],['[',_]|L2],Z), 逆数表示(Z,[],X),!. 逆数表示(N,_整数,[[_商,_剰余]|Y],X) :- _整数 > _剰余, _剰余2 is _剰余 * 10, N2 is N - 1, 逆数表示(N2,_整数,[[0,_剰余2],[_商,_剰余]|Y],X),!. 逆数表示(N,_整数,[[_商,_剰余]|Y],X) :- _整数 < _剰余, _商2 is _剰余 // _整数, _剰余2 is (_剰余 mod _整数) * 10, N2 is N - 1, 逆数表示(N2,_整数,[[_商2,_剰余2],[_商,_剰余]|Y],X),!. 逆数表示([],[_|X],S) :- concat_atom(['0','.'|X],S),!. 逆数表示([[A|_]|R1],Y,S) :- 逆数表示(R1,[A|Y],S).
469 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 17:49:03 ] pc12.2ch.net/test/read.cgi/tech/1200175247/550 # [1] 授業単元: Ruby演習 [2] 問題文、kansai2channeler.hp.infoseek.co.jp/ c i-bin/joyful/img/9426.txt # Rubyの問題がわかりません 助けてください # # (1)曜日を表す英語と日本語との対応を表すハッシュwdayを定義しなさい # # p wday["sunday"] #=> "日曜日" # p wday["monday"] #=> "月曜日" # p wday["saturday"] #=> "土曜日" # # (2)ハッシュのメソッドを使って(1)のハッシュwdayのペアの数を数えなさい # # (3)eachメソッドと(1)のハッシュwdayを使って以下の文字列を出力させてくださ い。 # 「sunday」は日曜日のことです。 # 「monday」は月曜日のことです。 # # (4)ハッシュには配列の%wのようなものがありません。そこで、空白とタブと改行(正 規表現で定義するなら「/\uff3cs+/」)で区切られた文字列をハッシュに変換するメソ ッドstr2hashを定義してください。 # # p str2hash("bule 青 white 白\uff3cnred赤"); # #=> {"bule"=>"青", "white"=>"白", "red"=>"赤"}
470 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 16:41:33 ] pc12.2ch.net/test/read.cgi/tech/1232627790/958 # 【 課題 】テキストファイルから文字列5行を読み込み、別のテキストへ縦書きで書き出す # 【 形態 】1. Javaアプリケーション(main()で開始) # 【 期限 】7/14 am6:00 # 【 Ver 】Eclipse Version: 3.4.2 # 【 補足 】 # あいう # かきく # さしす # 上記のようなテキストファイルを読み込み、 # あかさ # いきし # うくす # のように別のテキストファイルに書き出す感じです。
471 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 17:02:10 ] >>470 % Prolog テキストファイルから文字列5行を読み込み、別のテキストへ縦書きで書き出す(InFile,OutFile) :- open(InFile,read,Input), open(OutFile,write,Output), findall(Chars,(for(1,N,5),get_line(InFile,_行),atom_chars(_行,Chars)),LL), max(Chars,Max), 空白文字を付加して行の文字数一致させる(Max,LL,LL2), 行列の転置(LL2,LL3), 出力ファイルに書き出す(Output,LL3). 出力ファイルに書き出す(Output,[]) :- close(Output),!. 出力ファイルに書き出す(Output,[L|R]) :- concat_atom(L,S), write_formatted(Output,'%t\n',[S]), 出力ファイルに書き出す(Output,R). 空白文字を付加して行の文字数を一致させる(Max,LL1,LL2) :- findall(L,(member(L1,LL1),length(L,Max),append(L1,L2,L),all(L2,' ')),LL2). all([],_). all([V|R],V) :- all(R,V).
472 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 17:08:27 ] >>470 書き直し % Prolog nojiriko.asia/prolog/t470.html テキストファイルから文字列5行を読み込み、別のテキストへ縦書きで書き出す(InFile,OutFile) :- open(InFile,read,Input), open(OutFile,write,Output), findall(Chars,(for(1,N,5),get_line(InFile,_行),atom_chars(_行,Chars)),LL), max(Chars,Max), 空白文字を付加して行の文字数一致させる(Max,LL,LL2), 行列の転置(LL2,LL3), 出力ファイルに書き出す(Output,LL3). 出力ファイルに書き出す(Output,[]) :- close(Output),!. 出力ファイルに書き出す(Output,[L|R]) :- concat_atom(L,S), write_formatted(Output,'%t\n',[S]), 出力ファイルに書き出す(Output,R). 空白文字を付加して行の文字数を一致させる(Max,LL1,LL2) :- findall(L,(member(L1,LL1),length(L,Max),append(L1,L2,L),all(L2,' ')),LL2). all([],_). all([V|R],V) :- all(R,V).
473 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 17:31:04 ] pc12.2ch.net/test/read.cgi/tech/1136994325/954 # pascal pcpad # 1個の自然数nを適当決めて、nチームが参加する # リーグ戦の全試合を表示するプログラムを書きなさい。
474 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 17:33:35 ] >>473 % Prolog nojiriko.asia/prolog/t473.html リーグ戦の全試合を表示するプログラム(N) :- findall(M,for(1,M,N),L), 組合せ(L,2,[A,B]), write_formatted('%t-%t\n',[A,B]), fail; true. 組合せ(X,1,[A]) :- member(A,X). 組合せ([A|Y],N,[A|X]) :- N > 1, M is N - 1, 組合せ(Y,M,X). 組合せ([_|Y],N,A) :- N > 1, 組合せ(Y,N,A).
475 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 04:06:15 ] pc12.2ch.net/test/read.cgi/tech/1247438792/103 # 【質問テンプレ】 # [1] 授業単元: C言語演習 # [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-b in/joyful/img/9753.txt # 2.入力された年月の1日が何曜日かを調べる。 # 曜日のチェックはZellerの公式を使用する。Zellerの公式は、 # # 曜日を表す値=(y + [ y / 4 ] - [ y / 100 ] + [ y / 400 ] + [ (( 13 * m ) + 8 ) / 5 ] + d ) % 7 # # ※ 上記の公式中の y は年、 m は月、 d は日を表し、 # []はその数を越えない最大の整数を表す。(例: [13.6]は13 になる) # # で、曜日を表す値は次のようになっている。 # # 日曜日 = 0, 月曜日 = 1, 火曜日 = 2, 水曜日 = 3, # # 木曜日 = 4, 金曜日 = 5, 土曜日 = 6, # # ※但し、1月と2月は前年の13月14月として計算するものとする。
476 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 04:18:51 ] >>475 % Prolog 'Zellerの公式'(_年,1,_日,_曜日) :- _前年 is _年 - 1, 'Zellerの公式'(_前年,13,_日,_曜日),!. 'Zellerの公式'(_年,2,_日,_曜日) :- _前年 is _年 - 1, 'Zellerの公式'(_前年,14,_日,_曜日),!. 'Zellerの公式'(_年,_月,_日,_曜日) :- _年=Y,_月=M,_日=D, _曜日を表す値 is (Y + Y // 4 - Y // 100 + Y // 400 + ((( 13 * M ) + 8 ) // 5 ) + D ) mod 7, 曜日を表す値(_曜日を表す値,_曜日). 曜日を表す値(1,月曜). 曜日を表す値(2,火曜). 曜日を表す値(3,水曜). 曜日を表す値(4,木曜). 曜日を表す値(5,金曜). 曜日を表す値(6,土曜). 曜日を表す値(7,日曜).
477 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 07:09:47 ] >>476 まちがえた! % Prolog nojiriko.asia/prolog/t475.html 曜日を表す値(0,日曜). 曜日を表す値(1,月曜). 曜日を表す値(2,火曜). 曜日を表す値(3,水曜). 曜日を表す値(4,木曜). 曜日を表す値(5,金曜). 曜日を表す値(6,土曜).
478 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 10:54:19 ] pc12.2ch.net/test/read.cgi/tech/1247438792/107 # [1] 授業単元: デジタル信号処理 # [2] 問題文(含コード&リンク): 2つのテキストファイル(double型)を読み込み、 # 畳み込み和を計算し、別のファイルに出力せよ。
479 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 11:02:01 ] >>478 % Prolog nojiriko.asia/prolog/t478.html t478(N,Infile1,Infile2,Outfile) :- get_lines(Infile1,L1), get_lines(Infile2,L2), findall(F1,(member(A1,L1),atom_to_term(A2,F1,_)),_フィルタならび), findall(F2,(member(A2,L2),atom_to_term(A2,F2,_)),_サンプルならび), 畳み込み和(N,_フィルタならび,_サンプルならび,_畳み込み和), 畳み込み和出力(Outfile,_畳み込み和). 畳み込み和(N,_フィルタならび,_サンプルならび,_畳み込み和) :- length(L,N), append(L,_,_サンプルならび), reverse(_サンプルならび,_逆順サンプルならび), 畳み込み和の二(_フィルタならび,_逆順サンプルならび,_畳み込み和). 畳み込み和の二([],_,0.0) :- !. 畳み込み和の二([A|R1],[B|R2],X) :- 畳み込み和の二(R,R2,Y), X is A * B + Y. 畳み込み和出力(Outfile,_畳み込み和) :- open(Outfile,write,Output), write_formatted(Output,'%t\n',[_畳み込み和]), close(Output).
480 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 18:41:51 ] OSでSoundBlaster16のリセットをしたいのだが、どうもなかなかリセットが上手くいかない。 できればアセンブラのサンプルコード欲しいのだが誰か頼む ・SB16の詳細 faculty.petra.ac.id/irwankj/ap2/sb16doc.html ・ここにもサンプルコードがあるけど、どうも何をやっているのか良く分からない・・ www.nondot.org/sabre/os/files/Sound/SoundBlaster/SBDETECT.ASM
481 名前:デフォルトの名無しさん [2009/07/16(木) 11:50:34 ] >>473 (defun comb (lim) (do ((n1 1 (1+ n1)) (c 0)) ((> n1 lim)) (do ((n2 (1+ n1) (1+ n2))) ((> n2 lim)) (setf c (1+ c)) (format t "no.~5A ~A - ~A~%" c n1 n2)))) ;20チームだと↓ (comb 20)
482 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 17:02:20 ] >>473 -- Haskell comb :: Int -> [(Int,Int)] comb n = comb' [1..n] where comb' :: [Int] -> [(Int,Int)] comb' [] = [] comb' (x:xs) = map ((,) x) xs ++ comb' xs main = print $ comb 3
483 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 17:29:23 ] >>469 % Prolog これは遊びです。フラットな単位節でなくこのような形式で定義する積極的な理由は見つかりません。 prolog.asia/prolog/t469.html
484 名前:483 mailto:sage [2009/07/16(木) 17:31:06 ] >>483 間違えました。 nojiriko.asia/prolog/t469.html でした。
485 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 17:39:20 ] >>475 % Prolog (1)-(4) まで全て定義おわりました。 nojiriko.asia/prolog/t475.html
486 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 00:10:16 ] | ?- search(hanoi,S,G,P,A). :- [search]. /* 初期状態と目標状態 これは、2枚のハノイ */ initial_state(hanoi, [[1,2,3],[],[]]). goal_state(hanoi, [[],[],[1,2,3]]). %------------------ ハノイの塔 operator(hanoi, left_to_right(Disk), [[Disk|RestA], B, C], [RestA, B, [Disk|C]]) :- con2(Disk, C). operator(hanoi, left_to_center(Disk), [[Disk|RestA], B, C], [RestA, [Disk|B], C]) :- con2(Disk, B). % 移動先で制約2を満たしていることをチェック operator(hanoi,center_to_left(Disk), [A, [Disk|RestB], C], [[Disk|A], RestB, C]) :- con2(Disk, A). operator(hanoi, center_to_right(Disk), [A, [Disk|RestB], C], [A, RestB, [Disk|C]]) :- con2(Disk, C). %-- 制約2 % 一番上にあるディスクよりも、小さいことを検査 /* ?- con2(2, [1,3]). ?- con2(1, [2,3]). */ コレを完成させるにはどうすればいいのでしょうか?
487 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 02:52:13 ] pc12.2ch.net/test/read.cgi/tech/1247438792/157 # [1] 授業単元: C++ # [2] 問題文(含コード&リンク): # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9762.txt # # 正数による正方行列のうち、全ての行、列、斜め列の合計が同じであり、 # かつ2回以上使用される数字が存在しないものを魔方陣という。 # 下図に示すa,bに数値を設定したときに、1〜9の整数によって構成される魔方陣を # 出力するプログラムを作成せよ。 # 但し、魔方陣が作成不可能な(a,b)の組み合わせが設定された場合は、「Impossible」 # と出力するとする。 # # la_lb_l__l # l__l__l__l # l__l__l__l #
488 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 02:53:14 ] pc12.2ch.net/test/read.cgi/tech/1247438792/160 # [1]プログラミング # [2] 課題 # 言語: C もしくは C++ 言語 # # (1)以下のプログラムを作成しなさい(数当てゲーム) # # *画面上に「好きな数字を入力してください」と表示して、キーボードからの入力を # 待つ。 # 変数aを定義して、10までの乱数を発生させて変数aに代入する。 # キーボードからの入力があれば、先に発生させた乱数と一致しているならば # 「あたり!!」と表示する。 # 一致していなければ「残念乱数はxxです」と表示する(xxには変数aの中身を # 表示する)
489 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 03:28:41 ] >>488 % Prolog 数当てゲーム :- repeat, _a is ramdom mod 10 + 1, write('好きな数字を入力してください '), get_line(Line), atom_to_term(Line,N,_), 数当てゲーム診断(_a,N), Line = end_of_file. 数当てゲーム診断(A,A) :- write('あたり!!\n'). 数当てゲーム診断(_,B) :- not(integer(B)), write('入力されたのは整数ではありません\n'). 数当てゲーム診断(A,N) :- not(A == N), write_formatted('残念乱数は%tです\n',[A]).
490 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 07:27:53 ] >>487 % Prolog nojiriko.asia/prolog/t487.html
491 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 10:30:13 ] >>486 ハノイの塔の課題をその仕様通り自然に定義していったらどうなるか? 興味がありますが、私が何か書き込めるまでにはもう少し時間が必要なので、 最小サンプルで確認することによって、ディスクの大小順序問題を スキップしてしまっている最もよく知られたアルゴリズムによる プログラム例を nojiriko.asia/prolog/hanoi.html に示します。 問題を直感的に理解するには 「Prologプログラミング入門」安部憲広著 共立出版刊 の29頁 図3.3 がよいと思います。
492 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 12:40:40 ] pc12.2ch.net/test/read.cgi/tech/1232627790/970 # 配列に関する基本問題 # フィールド int型の配列numberのみ # コンストラクタ 引数で与えられたScannerから整数を順次読み取る、 # 最初に読み取った整数を配列サイズとみなし、int型の配列を生成し # numberで参照する # その後整数を読み取ってnumber[0],number[1]、・・・・と順に代入していき、 # 配列サイズ分だけ読み取る # number中の全要素,最大値、最小値を表示
493 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 12:46:04 ] >>492 % Prolog こういう手続き的なのも可能。 t492 :- get_integer(N), length(L,N), for(1,M,N), get_integer(I), list_nth(M,L,I), M = N, max(L,Max), min(L,Min), write_formatted('全要素 = %t\n最大値 = %t\n最小値 = %t\n',[L,Max,Min]). get_integer(N) :- repeat, get_line(Line), atom_to_term(Line,N,_), integer(N).
494 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 14:33:32 ] pc12.2ch.net/test/read.cgi/tech/1153585095/900 # 3つの自然数の合計が10になるような組み合わせを # すべて列挙するプログラムを書け # 1+1+8と1+8+1のように並び順が異なるだけのものは # 同一と考え、重複して出力しないようにすることが望ましい
495 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 14:37:18 ] >>494 % Prolog t494 :- 重複組合せ([1,2,3,4,5,6,7,8,9],3,[A,B,C]), 10 is A + B + C, write_formatted('%t + %t + %t\n',[A,B,C]), fail. t494. 重複組合せ(X,1,[A]) :- member(A,X). 重複組合せ([A|Y],N,[A|X]) :- N > 1, M is N - 1, 重複組合せ([A|Y],M,X). 重複組合せ([_|Y],N,A) :- N > 1, 重複組合せ(Y,N,A).
496 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 14:59:38 ] pc12.2ch.net/test/read.cgi/tech/1153585095/902 # 個数Nが与えられたとき # N個の自然数の合計が10になるような組み合わせをすべて列挙する # プログラムを書け
497 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 15:05:56 ] >>496 % Prolog t496(N) :- 重複組合せ([1,2,3,4,5,6,7,8,9,10],N,L), sum(L,10), concat_atom(L,' + ',S), write_formatted('%t\n',[S]), fail. t496(_). sum([],0) :- !. sum([A|R],X) :- sum(R,Y),X is A + Y.
498 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 15:07:10 ] >>496 書き直し。 % Prolog t496(N) :- 重複組合せ([1,2,3,4,5,6,7,8,9,10],N,L), sum(L,10), concat_atom(L,' + ',S), write_formatted('%t\n',[S]), fail. t496(_). sum([],0) :- !. sum([A|R],X) :- sum(R,Y),X is A + Y.
499 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 21:28:54 ] >>488 import System.Random (getStdRandom, randomR) import qualified System.IO.UTF8 as U main = do a <- getStdRandom $ randomR (0,10) :: IO Int c <- getLine U.putStrLn $ if (read c) == a then "あたり!!" else "残念乱数は" ++ show a ++ "です"
500 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 22:02:58 ] >>487 import Control.Monad (guard) import Data.List (permutations) t487 :: Int -> Int -> [[Int]] t487 a b = do xs@[c,d,e,f,g,h,i] <- permutations $ filter (\x -> and [x /= a, x /= b]) [1..9] let n = a+b+c guard $ and [d+e+f == n, g+h+i == n, a+d+g == n, b+e+h == n, c+f+i == n, a+e+i == n, c+e+g == n] return (a:b:xs) main = let a = t487 8 1 in if null a then putStrLn "Impossible" else mapM_ printer a where printer :: [Int] -> IO () printer [] = return () printer (a:b:c:xs) = print [a,b,c] >> printer xs
501 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 22:26:05 ] >>492 import Control.Monad (foldM) t492 :: Int -> IO (Int,Int) t492 n = foldM f (maxBound :: Int,minBound :: Int) [1..n] where f (a,b) _ = do s <- getLine let n = read s return (min a n, max b n) main = getLine >>= t492 . read >>= print
502 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 22:53:38 ] pc12.2ch.net/test/read.cgi/tech/1247438792/175 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # # 下に示すように,キーボードから二つの文字列を読み込み,どちらの文字列が # 何文字長いか # を表示するプログラムを作成せよ.なお,二つの文字列が同じ長さならば, # 「二つの文字列は同じ長さです.」と表示させること. # # 文字列A : Good # 文字列B : Morning # 文字列B の方が3 文字長いです.
503 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 22:55:55 ] >>502 % Prolog nojiriko.asia/prolog/t502.html 入力文字列長の比較 :- write('文字列A ? '), get_line(A), write('文字列B ? '), get_line(B), 名前付き文字列長さの診断(文字列A,A,文字列B,B,_診断), write_formatted('%t\n',[_診断). 名前付き文字列長の診断(_名前1,_文字列1,_名前2,_文字列2,_診断) :- atom_chars(_文字列1,L1), atom_chars(_文字列2,L2), length(L1,_長さ1), length(L2,_長さ2), _長さの差 is _長さ1 - _長さ2 名前付き文字列長の診断の二(_名前1,_名前2,_長さの差,_診断),!. 名前付き文字列長の診断の二(_,_,0,'二つの文字列は同じです。') :- !. 名前付き文字列長の診断の二(_名前1,_名前2,_長さの差,_診断) :- _長さの差 > 0, concat_atom([_名前1,の方が,_長さの差,文字長いです。],_診断),!. 名前付き文字列長の診断の二(_名前1,_名前2,_長さの差,_診断) :- _長さの差 < 0, _長さの差1 is abs(_長さの差), concat_atom([_名前2,の方が,_長さの差1,文字長いです。],_診断).
504 名前:503 mailto:sage [2009/07/17(金) 23:01:55 ] >>503 訂正 名前付き文字列長さの診断(文字列A,A,文字列B,B,_診断), -> 名前付き文字列長の診断(文字列A,A,文字列B,B,_診断),
505 名前:503 mailto:sage [2009/07/17(金) 23:32:27 ] pc12.2ch.net/test/read.cgi/tech/1232627790/973 # 課題 ttp://uploaders.ddo.jp/upload/1mb/count.cgi?1up6511.zip # # 【 形態 】1. Javaアプリケーション(main()で開始) # 【 GUI 】制限なし # 【 期限 】7月21日 # 【 Ver 】1.6.0_11 # # zipフォルダに詳細ファイルを入れました
506 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:35:14 ] >>505 % Prolog nojiriko.asia/prolog/t505.html rev_str(X,Y) :- reverse_atom(X,Y). reverse_atom(X,Y) :- atom_chars(X,L), reverse(L,L2), atom_chars(Y,L2).
507 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:49:23 ] >>494 >>496 import Data.List (sort) h :: (Ord a) => Int -> [a] -> [[a]] h 1 xs = map (\ls -> [ls]) xs h n xs = concat $ map (\x -> map (\ys -> x:ys) (h (n-1) (filter (>= x) xs))) xs t496 :: Int -> [[Int]] t496 n = filter ((==10) . sum) $ h n [1..9] main = print $ t496 3
508 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:05:10 ] >>502 import System.IO (hFlush, stdout) import qualified System.IO.UTF8 as U main = do U.putStr "文字列A: " >> hFlush stdout a <- getLine U.putStr "文字列B: " >> hFlush stdout b <- getLine let n = length a let m = length b U.putStrLn $ case compare n m of GT -> "文字列Aの方が" ++ show (n-m) ++ "文字長いです" LT -> "文字列Bの方が" ++ show (m-n) ++ "文字長いです" EQ -> "二つの文字列は同じ長さです"
509 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:21:54 ] pc12.2ch.net/test/read.cgi/tech/1153585095/904 # [課題] # ・23本のマッチ棒からなる山があり,2人のプレーヤが山から交互にマッチ棒を # 取り除く # ・一度に取ることのできるマッチ棒は1から3本 # ・山を空にしたプレーヤが勝ち # 人間2人でこのゲームを行なうプログラムを作成せよ. # # プログラムでは各プレーヤの手がルールに反していないかどうかのチェックと, # 勝負がついたかどうかのチェックを行なうこと。 # また,最初に山にある本数と,各回に取ることができる最大の本数をプログラムの # 最初に変数にセットしておき,そこを変えるだけで本数の変化に対応できるような # プログラムにすること。
510 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:24:37 ] >>509 % Prolog nojiriko.asia/prolog/t509.html
511 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:42:42 ] >>491 さん 暇になったらお願いします
512 名前:493 mailto:sage [2009/07/18(土) 05:40:06 ] >>493 大間違い! これではリストに整数が貯まらない。再帰はしかたない。 t492 :- get_integer(N), length(L,N), t492(L), max(L,Max), min(L,Min), write_formatted('全要素 = %t\n最大値 = %t\n最小値 = %t\n',[L,Max,Min]). t492([]) :- !. t492([I|R]) :- get_integer(I), t492(R). get_integer(N) :- repeat, get_line(Line), atom_to_term(Line,N,_), integer(N). % バックトラックすると値の束縛は解かれてしまうから。
513 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 17:34:59 ] これまでの Prolog による回答の索引を作りました。 nojiriko.asia/prolog/index.html
514 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 18:08:40 ] Prologで盛り上がっているのは、あんた一人だけだよ
515 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 18:11:20 ] prolog恐ろしす・・・
516 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 19:08:20 ] pc12.2ch.net/test/read.cgi/tech/1247438792/196 # [1] 授業単元:プログラミング論 # [2] 問題文:入力ストリームから読み込んだ文字列を、データベースに格納する前に # スタックに一時的に格納するプログラムを作成する # このときデータをまとめたデータ文字列を一つずつスタックへプッシュしたり # ポップしたりする過程が分かるプログラムを作成する。 # なおスタックを実現するライブラリはスタックのための別のヘッダにまとめる # # [プログラムの例] # 入力ストリームから読み込んだデータ文字列をスタックへプッシュしたり # ポップしたりするたびにデータベースに格納された全データを表示する。
517 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 05:02:52 ] >>516 % Prolog nojiriko.asia/prolog/t516.html t516(Instream,Stack1,Stack2) :- get_code(Instream,Code), t516(Instream,Code,Stack1,Stack2). t516(Instream,-1,Stack1,Stack2) :- t516_popall(Stack1,Stack3,[],L), atom_codes(Atom,L), assertz(database(Atom)),!. t516(Instream,10,Stack1,Stack2) :- t516_popall(Stack1,Stack3,[],Codes), atom_codes(Atom,Codes), assertz(database(Atom)), get_code(Instream,Code), t516(Instream,Code,Stack3),!. t516(Insteam,A,Stack1,Stack2) :- push(A,stack1,Stack3), get_code(Instream,B), t516(Instream,B,Stack3,Stack2). t516_popall(Stack,Stack,X,X) :- empty(Stack),!. t516_popall(Stack1,Stack2,Y,X) :- pop(A,Stack1,Stack3), t516_popall(Stack3,Stack2,[A|Y],X). empty([]) :- write('stack empty :: []\n\n'). push(A,Stack,[A|Stack]) :- write_formatted('push:%t :: %t --> %t\n',[A,Stack,[A|Stack]]). pop(A,[A|Stack],Stack) :- write_formatted('pop:Pop :: %t --> %t Pop=%t\n',[[A|Stack],Stack,A]).
518 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 06:25:56 ] >>514 チュートリアルの題材を求めるのが狙いなので、他の言語の人の 書き込みを待たずに進めてしまってちょっと申し訳けない。 Prologの場合は、低水準のコードにサイト上でなかなか出会えないと いうことがあって、そこが初心者にとって辛いところです。 そこらあたりの欠落を些かでも埋められればと書き込んでいます。 繰り返し、いろんな表記法で、できれば螺旋状に発展していければ おもしろいと思うのですが、間違いの訂正に数レスとられることが 多くて、1000スレまでの間では貧弱なものにしかなりそうもない。 それにしても、「C/C++の宿題片付けます 12*代目」の方々には感謝です。
519 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 13:34:31 ] pc12.2ch.net/test/read.cgi/tech/1247438792/213 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # 下に示すように,キーボードから文字列を読み込み,その文字列が # 回文(前から読んでも後ろから読んでも同じ)かどうかを判定するプログラムを # 作成せよ.なお,入力する文字列は半角の英数字および記号のみと仮定してよい. # # 文字列を入力してください: abcba # 回文です.
520 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 13:41:43 ] >>519 % Prolog 回文読み込み :- get_char(C), 回文読み込み(C,[],X,X), write('回文です\n'). 回文読み込み('\n',X,X,[]). 回文読み込み(C,Y,X,[C|R]) :- get_char(C2), 回文読み込み(C2,[C|Y],X,R).
521 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 03:00:05 ] 連休見なかったらC/C++の宿題片付けますスレが60も進んでしまった トホホ
522 名前:デフォルトの名無しさん [2009/07/21(火) 09:30:44 ] (labels ((str-input nil (format t "文字列を入力してください: ") (read-line))) (do ((l (str-input) (str-input))) ((= (length l) 0)) (if (equal l (reverse l)) (format t "回文です~%") (format t "回文ではありません~%")))) こんな感じです
523 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 12:23:09 ] pc12.2ch.net/test/read.cgi/tech/1247438792/292 # [1] 授業単元:プログラミングI # [2] 問題文(含コード&リンク): # typedef struct node *Tree; # typedef struct node{ # int data; # Tree left_subtree; # Tree right_subtree; # }Node; # # 2分木の大きさ(節点の個数)を調べて返す関数 # int size(Tree t)を定義せよ
524 名前:デフォルトの名無しさん [2009/07/21(火) 12:26:07 ] pc12.2ch.net/test/read.cgi/tech/1247438792/291 # [1] 授業単元:コンピュータリテラシー # [2] 問題文(含コード&リンク):問題文と参考は以下です # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9806.txt # ・試験の過程を記録 # 1,番号、得点を入力したあと平均点を計算 # 2,番号順と得点順に並べ替え(ifを使いどちらか選択できるようにする) # 3,番号、得点、平均との差を出力 # 以上のプログラムを作成
525 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 12:32:04 ] >>523 (define (nodenum t) (cond ((not (pair? t)) 0) ((or (not (pair? (cdr t))) (not (pair? (cddr t)))) "error:not a binary tree") (else (+ 1 (nodenum (cadr t)) (nodenum (caddr t)))))) (nodenum '(1 leaf leaf)) ;1 (nodenum '(1 'leaf)) ;error (nodenum '(1 (2 leaf leaf) (3 leaf (4 leaf leaf)))) ;4
526 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 12:44:29 ] >>524 (define bt '((1 60) (3 75) (4 100) (2 80))) (define (average bt) (exact->inexact (/ (fold + 0 (map cadr bt)) (length bt)))) (define (sorter kind bt) (cond ((eq? kind 'bangou) (sort bt (lambda (x y) (< (car x) (car y))))) ((eq? kind 'tokuten) (sort bt (lambda (x y) (> (cadr x) (cadr y))))) (else "designate sort kind"))) (define (output bt) ((lambda (ave) (map (lambda (x) (print "bangou:" (car x)) (print "tokuten:" (cadr x)) (print "heikin_diff:" (- (cadr x) ave)) (newline)) bt)) (average bt))) (average bt) (sorter 'bangou bt) (sorter 'tokuten bt) (output bt)
527 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 12:57:44 ] pc12.2ch.net/test/read.cgi/tech/1247438792/256 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # ファイルの1行目に2行目以降の各行に含まれる文字列の数が記述され, # 2行目以降はその数の不定長文字列が空白で区切られているような入力 # ファイルを読み込み,各行を以下に示す構造体の単方向連結リストに # 保存するプログラムを作成せよ.ここでは,attributes が1行分のデータ # を保持する. # struct t_list { # char **attributes; # struct t_list *next; # }; # またにはソースファイルには,生成した単方向連結リストの内容を # 標準出力に出力する関数 print_tlist を含むものとしprint_tlist により各行 # に含まれる文字列を出力するものとする.動作確認には,以下のテキストを用いよ. # なお,入力ファイル名はコマンドライン # 引数で指定するものとし,入力ファイルがオープンできなかった場合の処理も # 含めること.また,プログラム自身を除く引数の数が0個, # もしくは2個以上の場合は,何もせず適切なメッセージを出力して終了するものとする # 入力ファイル:www.uploda.tv/v/uptv0033032.txt
528 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 14:47:09 ] >>523 % Prolog 二分木の総節数([],0). 二分木の総節数(_節,_節の大きさ) :- 節(_節,_左枝,_右枝), 二分木の総節数(_左枝,_左枝の大きさ), 二分木の総節数(_右枝,_右枝の大きさ), _節の大きさ is _左枝の大きさ + _右枝の大きさ + 1.
529 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 15:36:10 ] >>524 % Prolog nojiriko.asia/prolog/t524.html
530 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 16:53:46 ] >>527 % Prolog nojiriko.asia/prolog/t527.html
531 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 16:58:18 ] >>523 -- Haskell data BTree a = Node (BTree a) a (BTree a) | Nil size :: BTree a -> Int size Nil = 0 size (Node tl _ tr) = 1 + (size tl) + (size tr) main = print $ size node where node = Node (Node (Node Nil 2 Nil) 4 Nil) 0 (Node Nil 2 Nil)
532 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:35:39 ] >>524 import System.IO (hFlush, stdout) import qualified System.IO.UTF8 as U import Control.Monad.Writer import Data.Function (on) import Data.List (sortBy) main = do U.putStrLn "終了の際は0を二回押す" grades <- execWriterT t524 U.putStr "(1)学籍番号順 (2)成績順: " >> hFlush stdout s <- getLine let cmp = case (read s) of 1 -> compare `on` fst 2 -> compare `on` snd let av = average $ map snd grades mapM_ (printer av) $ sortBy cmp grades where printer av (g,s) = U.putStrLn $ "学籍番号" ++ (show g) ++ " 成績" ++ (show s) ++ " 平均との差" ++ (show ((fromIntegral s) - av)) t524 :: WriterT [(Int,Int)] IO () t524 = do liftIO $ U.putStr "学籍番号: " >> hFlush stdout gakuseki <- liftIO getLine liftIO $ U.putStr "成績: " >> hFlush stdout seiseki <- liftIO getLine let g = read gakuseki let s = read seiseki unless (g == 0 && s == 0) $ tell [(g,s)] >> t524 average :: [Int] -> Double average = uncurry ((/) `on` fromIntegral) . foldl (\(s,l) x -> (s+x, l+1)) (0,0)
533 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:57:16 ] >>527 main = do _ <- getLine -- just ignore conn <- getContents print $ map words $ lines conn
534 名前:デフォルトの名無しさん [2009/07/21(火) 19:25:20 ] 全くの初心者で、全然わからないんですがよろしくお願いします。アセンブラらしいです。 [課題] キーボードから10進数表示で2桁以下の正の整数を二つ受け取り,これらの積を求めGR1に保存するプログラムを作成しなさい。 ただし,以下の仕様を満たすこと。 掛け算は(上の例の方法ではなく)以下の(参考)の方法で行い,さらに副プログラム内で行うこと キーボードから受け取った文字列を数値に変換する部分も副プログラムを用いて作成すること キーボードからは10進数表示で2桁以下の正の整数が必ず入力されると仮定してよい(それ以外の文字列が入力された場合の対応を考えなくてよい)。 (参考) 二つの数の掛け算は,それぞれの2進数表現を考え,加算とシフトを用いることによって実現できる。たとえば,13x3 を計算するとき,13,3の2進数表現 1101,11 に対して通常の掛け算を筆算で行うように と計算できる。すなわち,この例では 掛ける数の最下位(一番右)のビットが1なので,1101 を(0 ビットシフトして)(0に)加える。 掛ける数の右から2番目のビットが1なので,1101 を 1 ビットシフトして 11010 として1の結果に加える。 という手順により,二つの数の積を計算することができる。 掛ける数を1ビットずつ右にシフトしたとき,最下位ビットが1であればオーバーフローが発生する。 オーバーフローの発生はJOV命令でチェックできる(7/7の演習内容参照)ので,掛ける数の2進数表現においてどのビットが1であるかは直ちにわかる。 また右シフトを繰り返して0になるとZFフラグが1になるので,右シフトを停止するためにはJZE命令を使用すれば良い。
535 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 07:32:01 ] pc12.2ch.net/test/read.cgi/tech/1247438792/303 # [1] 授業単元: # インタラクティブッコミュニケーション # [2] 問題文(含コード&リンク): # 外部変数を使用せずに、main()から関数を呼び出し、円をドルとユーロに換算し、 # main()内のprintf()で結果を出力するプログラムを作成せよ。 # 但し、1ドル = 118円, 1ユーロ = 160円とする。また、プログラムは # 負の値が入力されるまで繰り返されるものとする。 # # www.ncc-1701.jp/kakei/InteractiveComm/Class10/InteractiveComm_10.html # の一番下の演習。 # 最終的にはこの形に # www.ncc-1701.jp/kakei/InteractiveComm/Class10/exercise10.gif
536 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 07:59:46 ] >>535 % Prolog 題意とは違いますが為替レートはリアルタイムに取得しています。 nojiriko.asia/prolog/t535.html
537 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 11:29:25 ] pc12.2ch.net/test/read.cgi/tech/1247438792/300 # [1] 授業単元:プログラミング基礎 # [2] 繰り返しをwhileもしくはdo\uff5ewhile文を使って作成しなさい。 # # 任意の数字を入力し、その数字分まで1つずつ加算して表示する。 # 入力した数字までいったら逆に1になるまで表示する。 # # 例 # 8 # # * # ** # *** # **** # ***** # ****** # ******* # ******** # ******* # ****** # ***** # **** # *** # ** # *
538 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 11:50:49 ] >>537 % Prolog ちょっと捻ってみた(コウイウコトヲシテハイケナイ)。 t537(N) :- M is N - 1,length(Z,M),t537([*],Z). t537(L,Z) :- append(L,_,Z),t537_w(L),t537([*|L],Z). t537(L,Z) :- t537_w(L),fail. t537([*],_) :- !. t537_w(L) :- concat_atom(L,S),write_formatted('%t\n',[S]).
539 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 11:57:44 ] >>537 一部変更。 % Prolog t537(N) :- length(L,N),L=[_|Z],t537([*],Z). t537(L,Z) :- append(L,_,Z),t537_w(L),t537([*|L],Z). t537(L,Z) :- t537_w(L),fail. t537([*],_) :- !. t537_w(L) :- concat_atom(L,S),write_formatted('%t\n',[S]).
540 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 12:41:10 ] pc12.2ch.net/test/read.cgi/tech/1247438792/297 # [1] 授業単元: 数値解析プログラミング # [2] 問題文(含コード&リンク): ∫\u20801/1+xx の積分を # 方形公式、台形公式、シンプソン公式を用いて数値計算するプログラムを作成せよ
541 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 14:30:31 ] >>540 (1) % Prolog f(X,Y) :- Y is 1 / (1 + x ^ 2). シンプソンの公式(A,B,M,X) :- D is (B - A) / (2 * M), f(A,S), N is 2 * M - 1, シンプソン公式の二(1,N,A,D,S,S2), f(B,Z), X is (S2 + Z) * D / 3. シンプソンの公式の二(M,N,_,_,X,X) :- M > N,!. シンプソンの公式の二(M,N,A,D,Y,X) :- U is A + M * D, Mod is M mod 2, シンプソンの公式の三(Mod,U,Y,Z), M2 is M + 1, シンプソンの公式の二(M2,N,A,D,Z,X). シンプソンの公式の三(0,X,S,S2) :- f(X,Y),S2 is S + 2 * Y. シンプソンの公式の三(1,X,S,S2) :- f(X,Y),S2 is S + 4 * Y.
542 名前:541 mailto:sage [2009/07/22(水) 14:42:49 ] >>541 訂正 X が x になっていた。 f(X,Y) :- Y is 1 / (1 + X ^ 2).
543 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:01:58 ] pc12.2ch.net/test/read.cgi/tech/1247438792/431 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク):下記 # [3] 環境 # [3.1] OS:WindowsVista SP1 # [3.2] Visual stdio2008 # [3.3] 言語:C # [4] 期限:2009年7月23日午前7時まで # [5] その他の制限:できるだけ簡単に # # 倍精度浮動小数点型変数で数値を入力し, # 小数点以下を切り捨て・切り上げ・四捨五入するプログラムを作成せよ. # ただし, 条件式は使用せず, 型変換を必ず使用すること.
544 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 08:23:13 ] >>537 (define (f x) (dotimes (i x) (dotimes (j (+ i 1)) (display "*"))(newline)) (dotimes (i x) (dotimes (j (- x i 1)) (display "*"))(newline))) (port-for-each f read)
545 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 09:08:46 ] pc12.2ch.net/test/read.cgi/tech/1247438792/448 # [1] 授業単元:数値情報解析 # [2] 問題文:ニュートン法により代数方程式を解くプログラムを作りなさい。 # 適当な初期値を自分で設定し、3つの真解すべてを求めなさい。 # ただし、結果画面には(1)収束解(2)初期値(3)反復回数が表示されている こと。 # このとき、1回の実行で3つの真解すべてを求める必要はない。 # 初期値を与え直しながら実行した結果画面が3枚示されていれば # よいものとする。 # ・ 解くべき代数方程式 : x^3 - 6x^2 + 7x +2 = 0 # ・収束条件 : ε < 10^-10 # ・微分は自分で計算した結果(3x^2 - 12x + 7 = 0)をソースファイルに # 直接入力してよいものとする。
546 名前:デフォルトの名無しさん [2009/07/23(木) 12:39:50 ] >>545 (defun f (x) (let* ((xx (* x x)) (xxx (* xx x))) (+ xxx (* -6l0 xx) (* 7l0 x) 2l0))) (defun d (x) (let ((xx (* x x))) (+ (* 3l0 xx) (* -12l0 x) 7l0))) (defconstant err 1.0l-10) (defun solv (x0) (do ((n 0) (x x0) xtmp (endf nil)) (endf (format t "x = ~A x0=~A n=~A ~%" x x0 n)) (setf xtmp (- x (/ (f x) (d x)))) (if (< (abs (- x xtmp)) err) (setf endf t)) (setf x xtmp n (1+ n)))) (defun input (s) (format t s) (read)) (do ((x (input "初期値 x0? ") (input "初期値 x0? "))) ((not (numberp x))) (solv x)) こんな感じ?
547 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 16:00:08 ] >>545 % Prolog nojiriko.asia/prolog/t545.html
548 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 17:06:20 ] pc12.2ch.net/test/read.cgi/tech/1247438792/450 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # 下に示す2 行3 列の行列a, b の差を求めて表示するプログラムを作成せよ. # # a = # ( # 6 3 4 # 5 1 2 # ) # b = # ( # 1 2 3 # 4 5 6 # )
549 名前:デフォルトの名無しさん [2009/07/23(木) 17:10:15 ] >>548 % Prolog a([[6,3,4],[5,1,2]]). b([[1,2,3],[4,5,6]]). t548 :- a(A),b(B),行列の差(A,B,C), write_formatted('%t\n',[C]). 行列の差([],[],[]) :- ! . 行列の差([A|R1],[B|R2],[C|R3]) :- 行列の差の一(A,B,C),行列の差(R1,R2,R3),!. 行列の差の一([],[],[]) :- !. 行列の差の一([A|R1],[B|R2],[C|R3]) :- C is A - B,行列の差の一(R1,R2,R3),!.