[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 06/19 21:59 / Filesize : 314 KB / Number-of Response : 617
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

いろんな言語で宿題スレ



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/

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).






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<314KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef