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/
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),!.
550 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 18:38:58 ] なんかこのスレ コードばっかで良スレっぽいな
551 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 19:47:08 ] >>537 main = do n <- getLine >>= return . read mapM_ (putStrLn . flip replicate '*') [1..n] mapM_ (putStrLn . flip replicate '*') $ reverse [1..n-1]
552 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 20:11:31 ] >>548 msub :: (Num a) => [[a]] -> [[a]] -> [[a]] msub = zipWith (zipWith (-)) main = do mapM_ print $ a `msub` b where a = [[6, 3, 4], [5, 1, 2]] b = [[1, 2, 3], [4, 5, 6]]
553 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 21:22:33 ] >>543 % Prolog 条件式(Prologの場合,節の選択)なしで切り上げ、思いつきません! 切り下げ(_浮動小数点数,_切り下げられた整数) :- _切り下げられた整数 is truncate(float_integer_part(_浮動少数点数)). 四捨五入(_浮動小数点数,_四捨五入された整数) :- _四捨五入された整数 is truncate(0.5 + float_integer_part(_浮動少数点数)).
554 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 22:04:05 ] pc12.2ch.net/test/read.cgi/tech/1247438792/457 # [1] 授業単元 C++ # # [2] 問題文(含コード&リンク) # テキストファイルの中のタブコードをそれぞれ、空白N個に置き換えて、 # 新たなファイルに書き出しなさい。ただし、N≧0とする。 # コマンドパラメーター:入力ファイル名、出力ファイル名、N # # <解答例> # Hello( )Bye←入力ファイル # N=3の場合 # Hello( )Bye←出力ファイル
555 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 22:26:34 ] >>554 % Prolog (1/2) t554(_入力ファイル,_出力ファイル,_空白文字数) :- length(L,_空白文字数), all(L,' '), get_chars(_入力ファイル,Chars), replace_chars(Chars,['\t'],L,Chars2), put_chars(_出力ファイル,Chars2). replace_chars([],_,_,[]) :- !. replace_chars(L1,L2,L3,L4) :- append(L2,R1,L1), replace_chars(R1,L2,L3,L5), append(L3,L5,L4),!. replace_chars([A|R1],L2,L3,[A|R4]) :- replace_chars(R1,L2,L3,R4).
556 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 22:28:55 ] >>554 % Prolog (2/2) ユーティリティ get_chars(File,L) :- open(File,read,Input), get_char(Input,X), get_chars(Input,X,L), close(Input),!. get_chars(Input,end_of_file,[]) :- !. get_chars(Input,X,[X|R]) :- get_char(Input,Y), get_chars(Input,Y,R) . put_chars(F,L) :- open(F,write,Output), stream_put_chars(Output,L), close(Output),!. stream_put_chars(_,[]) :- !. stream_put_chars(Stream,[Char|R]) :- put_char(Stream,Char), stream_put_chars(Stream,R),!. all([],_). all([V|R],V) :- all(R,V).
557 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 22:30:45 ] >>554 書き直し % Prolog (2/2) ユーティリティ get_chars(File,L) :- open(File,read,Input), get_char(Input,X), get_chars(Input,X,L), close(Input),!. get_chars(Input,end_of_file,[]) :- !. get_chars(Input,X,[X|R]) :- get_char(Input,Y), get_chars(Input,Y,R) . put_chars(F,L) :- open(F,write,Output), stream_put_chars(Output,L), close(Output),!. stream_put_chars(_,[]) :- !. stream_put_chars(Stream,[Char|R]) :- put_char(Stream,Char), stream_put_chars(Stream,R),!. all([],_). all([V|R],V) :- all(R,V).
558 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 22:38:53 ] >>543 Haskell では RealFrac クラスに floor, ceil, round が定義されている main = do v <- getLine >>= return . read mapM_ (print . ($ v)) [floor, ceiling, round]
559 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 23:01:29 ] >>554 import System.Environment (getArgs) import System.IO import Control.Exception (bracket) main = do [infile, outfile, n] <- getArgs h <- openFile infile ReadMode conn <- hGetContents h let s = t554 (read n) conn bracket (openFile outfile WriteMode) hClose $ flip hPutStr s hClose h t554 :: Int -> String -> String t554 _ [] = [] t554 n ('\t':xs) = replicate n ' ' ++ t554 n xs t554 n (x:xs) = x : t554 n xs
560 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 08:19:20 ] pc12.2ch.net/test/read.cgi/tech/1153585095/910 # コンピュータと人間か対戦する形で実行する3目並べのプログラムを作成せよ # # *先攻、後攻はゲーム毎に乱数で決定する # *人間が手を打った場合、コマを置ける場所かどうかのチェックを行うこと # *勝ち負けの判定を行うこと # *コンピュータ側の手はランダムでも良いが、可能な範囲で工夫してみよ
561 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 16:59:03 ] pc12.2ch.net/test/read.cgi/tech/1247438792/473 # [1] 授業単元:プログラミング論 # [2] 問題文:入力ストリームから読み込んだデータ文字列を、 # データベースに格納する前にキューに一時的に格納するプログラムを # 作成する。このとき、データをまとめたデータ文字列を一つずつ、キューへ # エンキューしたり、デキューしたりする過程が分かるプログラムを作成する。 # なお、キューを実現するライブラリは、キューのための別のヘッダにまとめる。 # [そのほか] # ・入力ストリームから読み込んだデータ文字列を、キューにエンキューしたり、 # デキューしたりするたびにデータベースに格納された全データを表示する。 # ・構造体オブジェクトは動的な記憶域に生成する。 # ・生徒の名前、試験の点数を構造体オブジェクトに格納することとする。 # ・関数の処理にコメントをつけて、キューをどのように実現しているか、 # そのプログラムの処理内容が分かるようにする。 # [このプログラムの流れ] # (1)ファイルやキーボードなどの入力ストリームから # データをデータ文字列として読み込む # (2)このデータ文字列をキューに一時的に蓄える # (3)キューからデータ文字列を取り出す # (4)このデータ文字列からそれぞれデータを取り出して # 文字列や数値データに変換する # (5)変換したデータをデータベース(構造体の配列など)に格納してまとめて管理する # (6)このデータベースからデータを参照し、ディスプレイに出力する
562 名前:デフォルトの名無しさん mailto:sage [2009/07/24(金) 17:50:28 ] >>561 % Prolog % 仕様通りだと面白くないので、要素を読み込む毎にキューに追加、 % 改行が来るとキューからすべて読み出すように変更した。 nojiriko.asia/prolog/t561.html
563 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 04:17:39 ] >>562 すみません。二ヶ所、述語名の付け違いがありました。 書き直しました。
564 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:25:17 ] pc12.2ch.net/test/read.cgi/tech/1247438792/535 # [1] C++ # [2] 問題文(含コード&リンク): # (1) 演算子+,-,*,/と整数と浮動小数点数からなる計算式の文字列から # 計算木を作成せよ。計算木は次のようなc_tree構造体を使うとする。 # # struct c_tree # { # int type; # union { int n_value; double d_value; }; # c_tree *left, *right; # }; # typeは、'+', '-', '*', '/', 'n', 'd'のいずれか。 # # (2) 優先順位に注意してc_tree構造体からなる計算木から # 計算式の文字列を作成せよ。
565 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 13:48:46 ] >>564 ちょっと長くなったので codepad で Parsec はすばらしい Haskell codepad.org/0JybDotF
566 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 14:23:08 ] (quote exp)
567 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 04:34:19 ] # [1] 授業単元: プログラミング # [2]問題文:以下の2つの構造体を用い,sample_data2.txt を単方向連結リストに保存す るプログラム extra8 を作成せよ.item_list 中の item は各行中の数値を保持し,t_li st 中の itemset は1行分のデータを保持するものとする. # struct item_list { # int item; # struct item_list *next; # }; # struct t_list { # struct item_list itemset; # struct t_list *next # }; # ソースファイルの名前は extra8.c とする.また,extra8.c には, # 生成した単方向連結リストの内容を標準出力に出力する関数 print_tlist を # 含むものとし,以下の実行例のように print_tlist により各行の内容を出力 # するものとする. # なお,入力ファイル名はコマンドライン引数で指定するものとし,入力ファイルが # オープンできなかった場合の処理も含めること.また,プログラム自身を除く # 引数の数が0個,もしくは2個以上の場合は,何もせず適切なメッセージを出力して # 終了するものとする. # (実行例1) # > .\extra8 sample_data2.txt # Itemset: 1,3,9,13,23,25,34,36 # Itemset: 2,3,9,14,23,26,34,36,39,40,52,55,59
568 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 07:42:02 ] >>567 % Prolog extra8 :- user_parameters([File]), get_lines(File,Lines), findall(Item_list,(member(Line,Lines),split(Line,[','],Item_list)),T_list), assertz(t_list(T_list)). print_tlist :- t_list(T_list), member(Item_list,T_list), print_tlist_format(Item_list,Format), write_formatted(Format,Item_list), fail. print_tlist. print_tlist_format(Item_list,Format) :- length(Item_list,Len), length(L,Len), all(L,'%t'), concat_atom(L,',',S), concat_atom(['Items : ,S,'\n'],Format),!.
569 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 20:03:33 ] pc12.2ch.net/test/read.cgi/tech/1247438792/574 # [1] 授業単元:プログラミング序論演習 # [2] 問題文(含コード&リンク): CUI上で動くメーラーを作れ
570 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 20:08:29 ] pc12.2ch.net/test/read.cgi/tech/1247438792/559 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9844.txt # 電流I[A]: 0.3 0.4 0.5 0.6 0.7 0.8 # 電圧V[V]: 11.6 12.3 12.8 13.4 23.7 14.8 # # この電流Iと電圧Vとの関係を最小二乗法によって、 # 以下に示す1次関数で近似したい # # V=a0+a1I # # この時の係数a0とa1 また相関係数を求めなさい。
571 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 20:12:00 ] pc12.2ch.net/test/read.cgi/tech/1248012902/53 # 【 課題 】 # 以下のURLから正規表現を用いてキーワードの部分のみ抽出する # プログラムを作成せよ。 # # www.google.co.jp/search?q= キーワード&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
572 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:08:42 ] pc12.2ch.net/test/read.cgi/tech/1200175247/580 # [1] 授業単元: 論理学 # [2] 問題文: 整数からなる配列を受け取り、その最大値を除いた配列を # 出力するメソッドを定義せよ。 # ただし、配列の長さが3未満のときはnilを出力する。
573 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:13:29 ] >>572 % Prolog t572(L,X) :- length(L,Len),Len < 3,!,write('nil\n'). t572(L,X) :- max(L,Max), ならびから削除(Max,L,X). ならびから削除(_,[],[]) :- !. ならびから削除(_削除する要素,[_削除する要素|_残り対象ならび],_削除されたならび) :- ならびから削除(_削除する要素,_残り対象ならび,_削除されたならび),!. ならびから削除(_削除する要素,[_要素|_残り対象ならび],[_要素|_残り削除ならび]) :- ならびから削除(_削除する要素,_残り対象ならび,_残り削除ならび),!.
574 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:59:08 ] >>571 -- Haskell import Text.Regex import qualified System.IO.UTF8 as U main = let Just [_,keyword] = matchRegex reg str in U.putStrLn keyword where reg = mkRegex "(\\?|&)q=([^&]+)" str = "www.google.co.jp/search?q= キーワード&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a"
575 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:32:46 ] >>572 nil は [] で代用した -- Haskell import Data.List (delete) t572 :: (Ord a) => [a] -> [a] t572 xs | length xs < 3 = [] | otherwise = delete (maximum xs) xs main = print $ t572 [1,3,2]
576 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 01:03:39 ] >>570 -- Haskell leastSquares :: (Fractional a) => [a] -> [a] -> (a,a) leastSquares xs ys = ((n*sxy-sx*sy)/(n*sxx-sx*sx), (sxx*sy-sxy*sx)/(n*sxx-sx*sx)) where n = fromIntegral $ length xs sx = sum xs sy = sum ys sxy = sum $ zipWith (*) xs ys sxx = sum $ map (^2) xs pearson :: (Floating a) => [a] -> [a] -> a pearson xs ys = a / (sqrt b) * (sqrt c) where mx = (sum xs) / (fromIntegral (length xs)) my = (sum ys) / (fromIntegral (length ys)) a = sum $ zipWith (\x y -> (x-mx)*(y-my)) xs ys b = sum $ map (\x -> (x-mx)^2) xs c = sum $ map (\y -> (y-my)^2) ys main = do let (a,b) = leastSquares is vs putStrLn $ "a0=" ++ show b ++ ", a1=" ++ show a print $ pearson is vs where is = [0.3, 0.4, 0.5, 0.6, 0.7, 0.8] vs = [11.6, 12.3, 12.8, 13.4, 13.7, 14.8]
577 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 04:54:25 ] pc12.2ch.net/test/read.cgi/tech/1247438792/604 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9849.txt # 配列を引数とする再帰呼び出しによるマージソート # # 入出力配列を引数とする再帰的手続きを作成し、マージソートを実現せよ。 # ただし、各入力要素X[i]は整数値をとるものとする。関数として、 # 長さnの配列Xをマージソートによって小さい順に並べ替えた配列Yを求める # msort(int X[],int n,int Y[]),すでに並べ替えられている長さn1の配列Y1と長さn2の # 配列Y2を併合した配列Yを求めるmerge(int Y1[],int n1,int Y2[],int n2,intY[]), # 長さnの配列Xの各要素のアドレス、ならびに内容を表示するshow_addr(int X[],int n)を用意する。
578 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 05:04:17 ] >>577 % Prolog debug(off). msort([],[]). msort([X],[X]). msort(_ならび,_sortされたならび) :- ならびを分割(_ならび,_ならび1,_ならび2),show_list(分割,[_ならび,_ならび1,_ならび2]), msort(_ならび1,_整列されたならび1),show_list(msort,[ならび1,_整列されたならび1]), msort(_ならび2,_整列されたならび2),show_list(msort,[ならび2,_整列されたならび2]), merge(_整列されたならび1,_整列されたならび2,_整列されたならび),show_list(merge,[_整列されたならび1,_整列されたならび2,_整列されたならび]). ならびを分割([],[],[]). ならびを分割([X],[X],[]). ならびを分割([A,B|R1],[A|R2],[B|R3]) :- ならびを分割(R1,R2,R3). merge([],X,X) :- !. merge(X,[],X) :- !. merge([A|R1],[B|R2],[A|R3]) :- A @< B,merge(R1,[B|R2],R3). merge([A|R1],[B|R2],[B|R3]) :- A @>= B,merge([A|R1],R2,R3). show_list(_,_) :- debug(off). show_list(_述語,_ならびのならび) :- debug(on),write_formatted('%t: %t\n',[_述語,_ならびのならび]).
579 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 06:15:55 ] >>571 % Prolog は正規表現をサポートしないのでここでは汎用検索述語sub_atom/10を % 使ってみる。 % sub_atom/10の定義はprolog.asia/prolog/t264_u.html 参照。 t571(URL,_キーワード) :- sub_atom(URL,_,_,_,_,'?q=',G,_,_,_), sub_atom(G,_,_,_,_キーワード,'&',_,_,_,_),!.
580 名前:579 mailto:sage [2009/07/28(火) 06:32:16 ] >>571 >>579 sub_atom/10のリンクを間違えました。再掲。 % Prolog は正規表現をサポートしないのでここでは汎用検索述語sub_atom/10を % 使ってみる。 % sub_atom/10の定義はnojiriko.asia/prolog/t264_u.html 参照。 t571(URL,_キーワード) :- sub_atom(URL,_,_,_,_,'?q=',G,_,_,_), sub_atom(G,_,_,_,_キーワード,'&',_,_,_,_),!.
581 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 13:18:26 ] >>577 -- Haskell import Data.Function (on) merge :: (Ord a) => [a] -> [a] -> [a] merge xs [] = xs merge [] ys = ys merge a@(x:xs) b@(y:ys) | x < y = x : merge xs b | otherwise = y : merge a ys msort :: (Ord a) => [a] -> [a] msort [] = [] msort [x] = [x] msort xs = uncurry (merge `on` msort) $ splitAt ((length xs) `div` 2) xs main = print $ msort [4,1,2,7,5]
582 名前:デフォルトの名無しさん [2009/07/29(水) 01:53:48 ] >>570 相関係数ってどう定義されてんの?
583 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 04:41:04 ] pc12.2ch.net/test/read.cgi/tech/1247438792/659 # [1] C言語 # [2] 入力された英字文字列(a~z,A-Z)に、どの文字がいくつ入っているかを # 調べるプログラムcount_char.cを作成せよ。 # # 実行例 # String: cbbbAcAccZ # A: ** # Z: * # b: *** # c: **** # %
584 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 04:43:43 ] pc12.2ch.net/test/read.cgi/tech/1247438792/660 # [1] C言語 # [2] 2つのファイルを比較し,内容が異なっている最初の行の行番号と内容を # 標準出力に表示するプログラムを作成せよ。 # ファイル名はコマンドライン入力により受け取ることとする。 # [3] 環境 # [3.1] OS:Windows # [3.2] コンパイラ:gcc 3.4 # [3.3] 言語:C # [4] 期限:2009年7月31(金) # [5] その他の制限:ポインタ履修済みです
585 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 05:00:03 ] >>584 % Prolog t584 :- user_parameters([File1,File2]), get_lines(File2,L1), get_lines(File2,L2), append(L,[A|_],L1), append(L,[B|_],L2), \+(A=B), length(L,Len), _行番号 is Len + 1, write_formatted('行番号=%t %t=%t %t=%t\n',[_行番号,File1,A,File2,B]).
586 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 06:08:46 ] >>583 % Prolog t583(_文字列) :- atom_chars(_文字列,Chars), t583_1(Chars,[],QL), member([U,Q-[]],QL), concat_atom(Q,S), write_formatted('%t: %t\n',[U,S]), fail. t583(_). t583_1([],X,X). t583_1([A|R],QL,X) :- t583_2(A,QL,QL2), t583_1(R,QL2,X). t583_2(A,[],[[A,QA]]) :- 新しいキューを作る(Q), キューに要素を追加する('*',Q,QA),!. t583_2(A,[[A,QA]|R],[[A,QB],R]) :- キューに要素を追加する('*',QA,QB),!. t583_2(A,[U|R1],[U|R2]) :- t583_2(A,R1,R2). 新しいキューを作る(X-X). キューに要素を追加する(_要素,X-[_要素|Y],X-Y).
587 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 11:18:28 ] >>583 -- Haskell import Data.Char (isAlpha) import Data.Map (Map, fromListWith, toList) countChar :: String -> Map Char Int countChar = fromListWith (+) . flip zip (repeat 1) . filter isAlpha main = getContents >>= mapM_ putStrLn . prettify . countChar where prettify :: Map Char Int -> [String] prettify = map (\(k,v) -> k : ": " ++ (replicate v '*')) . toList
588 名前:585 mailto:sage [2009/07/30(木) 12:54:13 ] >>584 >>585 訂正 get_lines(File2,L1), get_lines(File2,L2), とありますが、上の行は get_lines(File1,L1), です。
589 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 07:42:41 ] pc12.2ch.net/test/read.cgi/tech/1247438792/688 # [1] 授業単元: プログラミング # [2] 問題文(含コード&リンク):本文が長すぎて書き込めないので下に # 分けて書き込みます pc12.2ch.net/test/read.cgi/tech/1247438792/689 pc12.2ch.net/test/read.cgi/tech/1247438792/690 pc12.2ch.net/test/read.cgi/tech/1247438792/691
590 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 07:46:16 ] pc12.2ch.net/test/read.cgi/tech/1247438792/704 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9863.txt # リストを用いた成績処理 # リストを用いて個人データを格納する表を作成 # 処理番号を入力して処理の切り替えを行う # 1.成績一覧表示, 2.個人成績表示, # 3.個人平均点表示,4.科目平均点表示, # 0.終了 # リストに新たにデータを追加する時は学生番号順に並ぶように追加する. # リスト構成する要素(セル)はmalloc関数でヒープ領域から確保するものとする. # # 入力する成績データ(この順番で入れる) # 学番名前英語数学化学物理 # 106 tada 65 80 90 100 # 101 kouda 50 85 70 65 # 103 hanako 70 75 65 80 # 104 akane 60 95 80 75 # 102 tarou 90 80 85 65 # 105 nara 80 70 50 95
591 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 08:29:12 ] pc12.2ch.net/test/read.cgi/tech/1248012902/76 # 【 課題 】タートルグラフィックスを描写するプログラムを作成する。 # rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/775.zip # 【 形態 】1. Javaアプリケーション(main()で開始) # 【 期限 】8/2 # 【 Ver 】 java version 1.6.0_14 # 【 補足 】どう手を付けたらいいのか分からない状態です… # 実装するのはright left forwardの3つだけでいいみたいです。 # よろしくお願いします。 nojiriko.asia/jpeg/IMG_0001.jpg
592 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 17:29:53 ] >>589 % Prolog (第1ステップ) nojiriko.asia/prolog/t589.html
593 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 21:02:07 ] >>590 % Prolog nojiriko.asia/prolog/t590.html
594 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 22:59:25 ] pc12.2ch.net/test/read.cgi/tech/1247636661/364 # 質問です。 # # 入退室の時間を自分で打ち込んで、それをデータとして貯めるというシステムを作り たいんですが、こういうシステムを # 作る場合はPHPとMySQLで作れるんでしょうか。よろしくお願いします。 #
595 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 23:39:15 ] >>594 % Prolog (1/2) 入退室 :- 入退室管理ディレクトリ(Dir), concat_atom(['ls -N ',Dir,'listing.*.pro'],S), shs(S,L), max(L,File), reconsult(File). 入室(_氏名) :- A is time, localtime(A,B,_月,_日,_,_,_時,_分,_秒), assertz(入退室(入室,_氏名,_年,_月,_日,_時,_分,_秒)), 入退室保存ファイル(_入退室保存ファイル), tell(_入退室保存ファイル), listing(入退室), told,!. 退室(_氏名) :- A is time, localtime(A,B,_月,_日,_,_,_時,_分,_秒), assertz(入退室(退室,_氏名,_年,_月,_日,_時,_分,_秒)), 入退室保存ファイル(_入退室保存ファイル), tell(_入退室保存ファイル), listing(入退室), told,!.
596 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 23:42:55 ] >>594 % Prolog (2/2) % システム運用の最初に/var/nyutaishitsu/listing.100000.proを生成して置きます 入退室管理ディレクトリ('/var/nyutsishitsu/'). 入退室保存ファイル(F) :- 入退室管理ディレクトリ(Dir), concat_atom(['ls -N ',Dir,'listing.*.pro'],S), shs(S,L), max(L,File), sub_atom(File,_,6,4,A), atom_to_term(A,N,_), N2 is N + 1, concat_atom(['/var/nyutaishitsu/listing.',N2,'.pro'],F),!.
597 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 23:58:20 ] >>594 >>595 >>596 不適切なところが少々ありました。訂正はこれらで。 nojiriko.asia/prolog/t594.html
598 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 09:56:28 ] pc12.2ch.net/test/read.cgi/tech/1247438792/743 # [1] 授業単元:プログラミング基礎 # [2] 問題文(含コード&リンク): # 2つの整数をキーボードから入力し、それらの最大公約数を表示する # プログラムを作成せよ。 # 最大公約数と、2つの数字を割り切る最大の整数のことである。 # 例えば12と18の最大公約数は6,24と48の最大公約数は24である。
599 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 10:01:52 ] >>598 % Prolog t598 :- write('最大公約数を求めます。一行にひとつ整数を入力してください : '), get_line(Line1),atom_to_terms(Line1,N1,_), get_line(Line2),atom_to_terms(Line2,N2,_), appendを使って最大公約数を求める(N1,N2,X), write_formatted('%tと%tの最大公約数は%tです\n',[N1,N2,X]). appendを使って最大公約数を求める(N1,N2,X) :- length(L1,N1), length(L2,N2), 最大公約数(L1,L2,[_],[_],LX), length(LX,X). appendを使って最大公約数を求める(L1,L2,L,X,X) :- not((append(L,_,L1),append(L,_,L2))),!. appendを使って最大公約数を求める(L1,L2,L,_,X) :- 割り切れる(L1,L), 割り切れる(L2,L), appendを使って最大公約数を求める(L1,L2,[_|L],L,X). appendを使って最大公約数を求める(L1,L2,L,Y,X) :- appendを使って最大公約数を求める(L1,L2,[_|L],Y,X). 割り切れる([],_) :- !. 割り切れる(L,DL) :- append(DL,L3,L), 割り切れる(L3,DL).
600 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 12:05:02 ] >>598 -- Haskell では Prelude に gcd が含まれている import Control.Monad (replicateM) main = replicateM 2 readLn >>= print . foldl1 gcd
601 名前:599 mailto:sage [2009/08/02(日) 15:07:41 ] >>598 >>599 間違っていました。 途中、'最大公約数'/5 という述語が副目標として登場しますが、 これは、'appendを使って最大公約数を求める'/5 の間違えです。 nojiriko.asia/prolog/t598.html の方を見て下さい。
602 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 18:47:48 ] pc12.2ch.net/test/read.cgi/tech/1153585095/918 # 所謂覆面算で # 英字一文字が一桁の数字(0-9)で表されるとき # one # + nine # + twenty # + fifty # = eighty # となる組み合わせを検索してください # 各行の先頭の文字は0以外です
603 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 18:50:25 ] >>602 % Prolog nojiriko.asia/prolog/t602.html
604 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 20:28:36 ] pc12.2ch.net/test/read.cgi/tech/1247438792/759 # [1] 授業単元:工学実験 # [2] 問題文(含コード&リンク): # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9870.txt # # 課題内容: 組クラスを作成しなさい。組クラスは教員と学生からなる。 # 教員は1人で学生は最大40人とする。学籍番号で検索する機能をつけること。 # 学生には名前、住所、学籍番号(文字列型)という属性があり、教員には # 名前、住所、教員番号(文字列型)という属性があるとする。 # 教員と学生の共通部分をまとめたクラスを定義し、それを継承する形で # 教員クラスと学生クラスを定義せよ。 # それぞれの属性にはgetter、setter、表示関数を定義せよ。 # 継承した教員クラスで、名前を表示する関数では、「○○教授」、「○○助教授」 # などのように役職名を添えて表示する関数として、上書き定義せよ。 # これらの機能が正しく動作することを確認するmain関数(適当なサンプル)も # あわせて作ること。
605 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 06:36:08 ] pc12.2ch.net/test/read.cgi/tech/1247438792/777 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # ttp://dl1.getuploader.com/g/4a7538af-eda0-4179-9e58-2a304038400b/komekome1221/4/%E5%95%8F%E9%A1%8C%E5%88%86.txt
606 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 07:11:34 ] pc12.2ch.net/test/read.cgi/tech/1247438792/776 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # 以下の機能を持った関数を含むプログラムを作成せよ. # 1.正の整数n,rを読み込み,その組み合わせnCrを計算する関数を再帰呼び出しを用いて作成せよ. # 2.正の整数n,rを読み込み,その組み合わせnCrを計算する関数を再帰呼び出しを用いないで作成せよ.
607 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 07:20:42 ] >>606 [2] % Prolog 見かけ再帰を含みませんが、実はfor/3やconcat_atom/3は再帰なしには書けない・・・ t606_2(N,R,X) :- findall(N1,for(N,N1,R+1),L1), findall(N2,for(R,N2,1),L2), concat_atom(L1,'*',S1), concat_atom(L2,'*',S2), atom_to_term(S1,Term1,_), atom_to_term(S2,Term2,_), X is Term1 / Term2.
608 名前:607 mailto:sage [2009/08/03(月) 08:05:18 ] >>606 >>607 また違っていたようです。 t606_2(N,R,X) :- Y is N-R+1, findall(N1,for(N,N1,Y),L1), findall(N2,for(R,N2,1),L2), concat_atom(L1,'*',S1), concat_atom(L2,'*',S2), atom_to_term(S1,Term1,_), atom_to_term(S2,Term2,_), X is Term1 // Term2.
609 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:40:06 ] pc12.2ch.net/test/read.cgi/tech/1247438792/786 # [1] 授業単元: プログラミング実習 # [2] 問題文(含コード&リンク):台形公式により関数y=x^2とx軸によって # 挟まれる部分のx=0〜x=8までの範囲の面積を求めよ。 # 分割は4で計算せよ。
610 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:47:56 ] >>609 % Prolog nojiriko.asia/prolog/t609.html
611 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:56:19 ] >>602 -- Haskell で.総当たり import Data.List (permutations) t602 = [xs | xs@[e,f,g,h,i,n,o,t,w,y] <- permutations [0..9], o /= 0, n /= 0, t /= 0, f /= 0, e /= 0, a [o,n,e] + a [n,i,n,e] + a [t,w,e,n,t,y] + a [f,i,f,t,y] == a [e,i,g,h,t,y]] where a xs = foldl (\s i -> 10*s + i) 0 xs main = print $ head $ t602
612 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 21:18:14 ] >>606 -- Haskell で.foldl1 は末尾再帰だから許して comb n r | r == 0 = 1 | n == r = 1 | otherwise = comb (n-1) r + comb (n-1) (r-1) fact n = foldl1 (*) [1..n] comb' n r = fact n `div` (fact r * fact (n-r)) main = print $ comb' 4 2
613 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 08:59:20 ] pc12.2ch.net/test/read.cgi/tech/1247438792/794 # 【質問テンプレ】 # [1] 授業単元:アルゴリズムとデータ構造 # [2] 問題文(含コード&リンク):ハッシュ(チェイン法)を使ってkeyを検索し、 # 該当するものがあればそのdataを表示する。 # (実際には検索してkeyとdataを返すまでです) # 詳しくはこちらで ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9879.txt # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9881.txt
614 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:02:27 ] >>613 % Prolog でハッシュといえば述語のこと。 t613(Key,Data) :- 'KeyAndData'(Key,Data).
615 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 12:35:12 ] pc12.2ch.net/test/read.cgi/tech/1247438792/812 # 続けて申し訳ありません # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # # 引数に度(degree)をとるsin_degree関数を作成しなさい。 # math.hで宣言されているsin関数を使用せずに自作すること。
616 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 12:52:14 ] >>615 % Prolog sin_degree(_角度,X) :- R is (_角度 / 180) * 3.14159, sin_degree(1,20,R,1.0,0.0,X). sin_degree(M,N,_,_,X,X) :- M > N,!. sin_degree(M,N,R,K,Y,X) :- sin_degree(M,R,1,U), Y2 is Y + U * K, K2 is K * (-1), M2 is M + 2, sin_degree(M2,N,R,K2,Y2,X). sin_degree(0,R,X,X) :- !. sin_degree(N,R,Y,X) :- Y2 is (Y * R) / N, N2 is N - 1, sin_degree(N2,R,Y2,X).