いろんな言語で宿題ス ..
384:デフォルトの名無しさん
09/07/07 15:03:39
# スレリンク(tech板:904番)
# ・課題の内容
# TCP/IPプロトコルを用い、通信するプログラムを作成せよ。
# ・条件
# キーボードから文字列を1行入力し、それを送信するプログラム(tcp_snd1)と、
# それを受信するプログラム(tpc_rec1)の2つを作成せよ。
# tcp_snd1では、送信先の計算機の名前をプログラムの引数で指定できるようにせよ。
# tcp_rec1では、コネクションの要求あったら、コネクションを張り、
# 要求した計算機のIPアドレスを表示せよ。
# メッセージを受信するたびに、通信回数を[]で括って表示し、
# その後にメッセージを表示せよ。
# 空行が入力されたら、tcp_snd1もtcp_rec1の双方が終了するようにせよ。
# ポートとして、9000を利用せよ。
385:デフォルトの名無しさん
09/07/07 16:08:17
>>384
% Prolog
URLリンク(nojiriko.asia)
386:デフォルトの名無しさん
09/07/07 17:29:44
スレリンク(tech板:732番)
# [1] 授業単元: プログラミングC
# [2] 問題文(含コード&リンク):
# キーボードから半角英数で文字列を入力し、英字については大文字を小文字に、小文字
を大文字にするプログラムを作成せよ。
#
# 実行例 文字列入力 :AbCdEfG123
# 変換文字列 :aBcDeFg123
387:デフォルトの名無しさん
09/07/07 17:49:22
>>386
% Prolog
t386 :-
get_line(Line),
atom_chars(Line,Chars),
大文字小文字変換(Chars,Chars2),
atom_chars(Line2,Chars2),
write_formatted('%t\n',[Line2]).
大文字小文字変換([],[]) :- !.
大文字小文字変換([A|R1],[B|R2]) :-
A @>= 'A',
A @=< 'Z',!,
to_lower(A,B),
大文字小文字変換(R1,R2).
大文字小文字変換([A|R1],[B|R2]) :-
A @>= a,
A @=< z,!,
to_upper(A,B),
大文字小文字変換(R1,R2).
大文字小文字変換([A|R1],[A|R2]) :-
大文字小文字変換(R1,R2).
388:デフォルトの名無しさん
09/07/07 18:08:35
スレリンク(tech板:733番)
# [1] 授業単元: プログラミングC
# [2] 問題文(含コード&リンク):
# キーボードから半角英数で文字列を入力し、これを数字(0→9)、
# 大文字(A→Z)、
# 小文字(a→z)の順に並べ替えるプログラムを作成せよ。
# ヒント:並べ替えアルゴリズムは、バブルソート(隣接交換法)を
# 使うと簡単だろう。
# 文字列長はstrlen命令を使うとよい。みたいです。
389:デフォルトの名無しさん
09/07/07 18:11:42
>>388
% Prolog
t388 :-
get_line(Line),
atom_chars(Line,Chars),
バブルソート(Chars,_整列した文字ならび),
atom_chars(Line2,_整列した文字ならび),
write_formatted('%t\n',[Line2]).
バブルソート(L,X) :-
整順が崩れるまで(L,L2),
バブルソート(L2,X),!.
バブルソート(L,L).
整順が崩れるまで([A],[A]) :- !,fail.
整順が崩れるまで([A,B|R1],[A|R2]) :-
A @=< B,
整順が崩れるまで([B|R1],R2).
整順が崩れるまで([A,B|R1],[B,A|R1]) :-
A @> B.
390:デフォルトの名無しさん
09/07/07 18:28:46
>>377さん
誤植でした;;
無事出来ました
ちなみに述語がmemberだけで出来ると
聞いたのですが出来るのでしょうか?
出来るとしたらどんな感じに
なるのでしょうか?
391:デフォルトの名無しさん
09/07/07 20:35:12
>>390
member/2だけではうまくいかなかった。
member(A,B,L,[A,B]) :- member((A,B),L).
member(A,B,L,[A|R1]) :- member((A,C),L),member(C,B,L,R1).
?- member(a,f,[(a,b),(b,c),(b,d),(c,e),(e,d),(d,f),(d,e)],S).
ならうまくいくかな。
392:デフォルトの名無しさん
09/07/07 23:30:00
>>391さん
ヒントとしては
?- \+(member(a, [b,c])).
yes
となり
rev2(L, R) :-
rev2(L, [], R).
rev2([], R, R).
rev2([H|T], L, R) :-
rev2(T, [H|L], R).
みたいに
rev1([], []).
rev1([H|T], R) :-
rev1(T, R1),
append(R1, [H], R).
appendを使わないようにしようって事です
どうなんでしょうか?
393:デフォルトの名無しさん
09/07/08 04:01:54
スレリンク(tech板:762番)
# [1] 授業単元: 情報処理\u2160
# [2] 問題文: 乗算合同法で整数乱数を生成.。
# 区間(0.1)の一様にして、1以上、ある特定の整数の乱数を生成する。
394:デフォルトの名無しさん
09/07/08 04:06:06
>>393
% Prolog
乗算合同法による乱数発生(_初期値,Y,X) :-
乗算合同法(16087,_初期値,65535,Y,X).
乗算合同法(A,N,_法,N,X) :-
X is N / _法.
乗算合同法(A,N,_法,Y,X) :-
乗算合同法演算(A,N,_法,M),
乗算合同法(A,M,_法,Y,X).
乗算合同法演算(A,N,_法,M) :-
M is (A * N) mod _法.
395:デフォルトの名無しさん
09/07/08 04:11:39
>>392
>>367 がそれに当たるつもりなのですが。
ただLogが逆順に生成されますね。
396:デフォルトの名無しさん
09/07/08 06:38:43
>>395さん
成る程、丁寧にありがとうございました
397:デフォルトの名無しさん
09/07/08 07:57:55
スレリンク(tech板:764番)
# [1] 授業単元:プログラミング入門
# [2] 問題文(含コード&リンク):
# 問3:1週間の売り上げ一覧を表示するプログラムを作成せよ。
# 実行例 野菜の1週間の売り上げた合計数量と合計金額
# 合計 合計
# 種類 単価 月 火 水 木 金 土 日 数量 金額
# レタス 150 50 55 60 65 70 75 80 455 68250
# トマト 50 20 25 30 35 40 45 50 245 12250
# もやし 20 10 15 20 25 30 35 40 175 3500
# ナスビ 40 5 10 15 20 25 30 35 140 5600
398:デフォルトの名無しさん
09/07/08 11:24:22
>>397
% Prolog
URLリンク(nojiriko.asia)
399:デフォルトの名無しさん
09/07/08 12:51:07
スレリンク(tech板:757番)
# 【質問テンプレ】
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク): 二次元配列を使って以下のファイルを読み込み、
# 同じように表示しなさい。
# 【test.dat】
# ** ** **
# ** ** **
# ** ** **
400:デフォルトの名無しさん
09/07/08 13:00:02
>>399
% Prolog
t399 :-
二次元構造の読み込み('test.dat',_二次元構造),
member(A,_二次元構造),
concat_atom(L,' ',S),
write_formatted('%t\n',[S]),
fail;
true.
二次元構造の読み込み(File,_二次元構造) :-
open(File,Input),
findall(L,(repeat,get_line(Input,X),(X=end_of_file,!,fail;
split(X,[' '],L))),_二次元構造),
close(Input),!.
401:デフォルトの名無しさん
09/07/08 13:04:19
>>399 訂正。
% Prolog
t399 :-
二次元構造の読み込み('test.dat',_二次元構造),
member(L,_二次元構造),
concat_atom(L,' ',S),
write_formatted('%t\n',[S]),
fail;
true.
二次元構造の読み込み(File,_二次元構造) :-
open(File,Input),
findall(L,(repeat,get_line(Input,X),(X=end_of_file,!,fail;
split(X,[' '],L))),_二次元構造),
close(Input),!.
402:デフォルトの名無しさん
09/07/08 13:46:35
>>399 もうひとつ違っていた。
open(File,read,Input), ですね。
403:デフォルトの名無しさん
09/07/08 19:00:09
スレリンク(tech板:786番)
# [1] 授業単元: C言語
# [2] 問題文(含コード&リンク):
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
# [3] 環境
# 問題1
# テキストファイルからバイナリファイルの作成
# テキストファイルの内容は {14,17,18,21,23,25,31}と
# {10, 12, 15, 16, 19, 27, 28}の二つ。
# これが書かれているテキストファイルをバイナリファイルにする。
#
# 問題2
# 1で作ったバイナリファイルをあわせて
# {10, 12, 14, 15, 16 17, 18, 19 21, 23, 25 27, 28, 31} の
# バイナリファイルの作成
404:デフォルトの名無しさん
09/07/08 19:16:21
>>403 問題1
% Prolog
t403_1(TextFile1,TextFile2,BinaryFile1,BinaryFile2) :-
t403_1_1(TextFile1,BinaryFile1),
t403_1_1(TextFile2,BinaryFile2).
t403_1_1(TextFile1,BinaryFile1) :-
open(TextFile1,read,Input),
open(BinaryFile1,write,Output,[type(binary)]),
get_line(Input,Line),
split(Line,['{',',','}'],L),
t403_1_2(Output,L),
close(Input),
close(Output).
t403_1_2(Output,L) :-
member(N,L),
put_byte(Output,N),
fail.
t403_1_2(_,_).
405:デフォルトの名無しさん
09/07/08 19:18:55
>>403 問題1 書き直し
% Prolog
t403_1(TextFile1,TextFile2,BinaryFile1,BinaryFile2) :-
t403_1_1(TextFile1,BinaryFile1),
t403_1_1(TextFile2,BinaryFile2).
t403_1_1(TextFile1,BinaryFile1) :-
open(TextFile1,read,Input),
open(BinaryFile1,write,Output,[type(binary)]),
get_line(Input,Line),
split(Line,['{',',','}'],L),
t403_1_2(Output,L),
close(Input),
close(Output).
t403_1_2(Output,L) :-
member(N,L),
put_byte(Output,N),
fail.
t403_1_2(_,_).
406:デフォルトの名無しさん
09/07/08 20:42:25
>>403
IO ばかりで正直あまり Haskell では書く気がしないな…
import System.IO
import Control.Exception (bracket)
import qualified Data.ByteString as B
t403_1 :: String -> IO ()
t403_1 fname = do
b <- bracket (openFile fname ReadMode) hClose parse
bracket (openFile fname WriteMode) hClose (flip B.hPut b)
where
parse :: Handle -> IO B.ByteString
parse h = hGetLine h >>= \s -> return $ B.pack $ read ("["++s++"]")
t403_2 :: String -> String -> String -> IO ()
t403_2 fname1 fname2 fname3 = do
b1 <- bracket (openFile fname1 ReadMode) hClose B.hGetContents
b2 <- bracket (openFile fname2 ReadMode) hClose B.hGetContents
bracket (openFile fname3 WriteMode) hClose (flip B.hPut (B.sort (B.concat [b1,b2])))
main = t403_1 "input1" >> t403_1 "input2" >> t403_2 "input1" "input2" "output"
407:デフォルトの名無しさん
09/07/09 04:03:35
スレリンク(tech板:921番)
# 正の数を入力し、入力した整数の1と
# その数を除く約数の和を求めて表示するプログラムを作成しなさい。
# 15の約数は、1,3,5,15なので、1と15を除く約数の和は8となる。
#
# お願いします。
408:デフォルトの名無しさん
09/07/09 04:07:49
>>407
% Prolog
t407(N,X) :- N1 is N-1,t407(N1,N,X).
t407(1,_,0) :- !.
t407(N1,N,X) :- 0 is N mod N1,!,N2 is N1-1,t407(N2,N,Y),X is N+Y.
t407(N1,N,X) :- N2 is N1-1,t407(N2,N,X).
409:デフォルトの名無しさん
09/07/09 07:15:43
スレリンク(tech板:797番)
# [1] C言語を使って計算を簡略化する:
# [2] XY平面上の3点P1(x1,y1)P2(x2,y2)P3(x3,y3)の座標を順に入力した時、
# 3点が同一直線上にあるかどうかを調べて
# 結果を表示するプログラムを作成せよ。
410:デフォルトの名無しさん
09/07/09 07:28:11
>>409
% Prolog
'3点が同一直線上にある'((X1,Y1),(X2,Y2),(X3,Y3)) :-
U is (X3-X1) * (Y2-Y1),
U is (X2-X1) * (Y3-Y1).
411:デフォルトの名無しさん
09/07/09 09:11:18
>>407
(defun s (n)
(do ((x 2 (1+ x)) (sum 0))
((>= x n) sum)
(if (= 0 (mod n x))
(setf sum (+ sum x)))))
412:デフォルトの名無しさん
09/07/09 18:52:46
スレリンク(tech板:822番)
# 何人かの学生の3教科(数学、国語、英語)の得点を2次元配列を用いて
# 処理するプログラムを作る。
#
# (1)科目別の最高点、最低点を表示する。
# (2)各学生の3教科の平均点を表示する。
# (3)各教科の平均点を表示する。
#
# ただし Ctrl+zが押されるまで次々と整数値を読み込んでいくものとする。
413:デフォルトの名無しさん
09/07/09 19:32:25
>>412
-- Haskell
import Data.List (transpose)
main = do
conn <- getContents
let grades = map (map read . words) $ lines conn :: [[Int]]
-- (1)
print $ map maximum $ transpose grades
print $ map minimum $ transpose grades
-- (2)
let sums = map sum $ grades
print sums
-- (3)
print $ map ((/ 3) . fromIntegral) sums
414:デフォルトの名無しさん
09/07/09 19:36:57
>>412
% Prolog
% テーマ findallを使った集約処理
t412(_各科目の最高点,_各科目の最低点,_各学生の3教科の平均点,_各科目の平均点) :-
findall([A,B,C],(repeat,read(A),(A=end_of_file,!,fail;read(B),read(C))),Y),
findall(AVG,(member(L,Y),findavg(A,member(A,L),AVG)),_各学生の3教科の平均点),
行列の転置(Y,Y2),
findall((Max,Min),(member(L1,Y2),max(L1,Max),min(L1,Min)),_各科目の最高点と最低点),
findall(AVG3,(member(L3,Y2),findavg(A,member(A,L3),AVG3)),_各科目の平均点).
415:デフォルトの名無しさん
09/07/09 19:42:53
>>414 訂正
% Prolog
% テーマ findallを使った集約処理
t412(_各科目の最高点と最低点,_各学生の3教科の平均点,_各科目の平均点) :-
findall([A,B,C],(repeat,read(A),(A=end_of_file,!,fail;read(B),read(C))),Y),
findall(AVG,(member(L,Y),findavg(A,member(A,L),AVG)),_各学生の3教科の平均点),
行列の転置(Y,Y2),
findall((Max,Min),(member(L1,Y2),max(L1,Max),min(L1,Min)),_各科目の最高点と最低点),
findall(AVG3,(member(L3,Y2),findavg(A,member(A,L3),AVG3)),_各科目の平均点).
416:デフォルトの名無しさん
09/07/09 21:48:12
スレリンク(tech板:826番)
# [1] 授業単元: 宿題
# [2] 問題文(含コード&リンク): 整数を入力し、奇数か偶数かを判断するプログラム
417:デフォルトの名無しさん
09/07/09 21:58:45
>>416
% Prolog
t416 :-
read(N),
奇数・偶数判定(N,X),
write_formatted('入力されたのは%tです\n',[X]).
奇数・偶数判定(N,奇数) :- 1 is N mod 2.
奇数・偶数判定(N,偶数) :- 0 is N mod 2.
418:デフォルトの名無しさん
09/07/09 22:03:10
>>417
% 仕様の中に「整数」を入力し、とありますからinteger/1で検査する必要は
% ありそうですね。
t416 :-
read(N),
integer(N),
奇数・偶数判定(N,X),
write_formatted('入力されたのは%tです\n',[X]),!.
t416 :- write('正しい整数が得られませんでした\n').
奇数・偶数判定(N,奇数) :- 1 is N mod 2.
奇数・偶数判定(N,偶数) :- 0 is N mod 2.
419:デフォルトの名無しさん
09/07/10 03:09:03
スレリンク(tech板:825番)
# 〔1〕授業単元:C言語
# 〔2〕問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
# 課題 I
# コマンド引数に自分の姓と名を与え,そのまま表示するプログラムを作成せよ.
# コマンド引数の数が少なかったり多かった場合は,標準エラー出力にエラー分を表示させること.
# 課題 II
# コマンド引数に任意の個数の整数を与え,その和を表示するプログラムを作成せよ.
# コマンド引数の数が少なかった場合は,標準エラー出力にエラー分を表示させること.
# また,コマンド引数に整数以外が与えられた場合にも,標準エラー出力にエラー分を表示させること.
420:デフォルトの名無しさん
09/07/10 03:33:50
>>419
% Prolog
t419_1 :- user_parameters(L),split(L,[','],L1),length(L1,2),write_formatted('%t %t\n',L1),!.
t419_1 :- tell(user_error),write(引数エラー),told.
t419_2 :-
user_parameters(L),
split(L,[','],L1),
length(L1,Len),
引数長さ検査(Len),
引数のすべてが整数(L1),
sum(L1,Sum),
write_formatted('引数に与えられた整数の合計は%tです\n',[Sum]).
引数の長さ検査(Len) :- Len > 0,!.
引数の長さ検査(Len) :- Len < 1,tell(user_error),write('引数がありません\n'),told,!,fail.
引数のすべてが整数([]) :- !.
引数のすべてが整数([N|R]) :- integer(N),引数のすべてが整数(R).
引数のすべてが整数([A|R]) :- tell(user_error),write('引数に整数でない%tがあります\n',[A]),told,!,fail.
sum([],0).
sum([N|R],X) :- sum(R,Y),X is N + Y.
421:デフォルトの名無しさん
09/07/10 03:42:18
スレリンク(tech板:878番)
# [1] 授業単元:プログラミング言語
# [2] 問題文(含コード&リンク):
# char型配列xに格納された文字列を一文字ごとに空白を開けて逆順に出力する関数
# reverse_array(char[])を以下のように出力されるよう作成せよ。
#
# 処理前:Tokyo
# 関数reverse_array()を呼び出しました
# 処理後:"o y k o T"
422:デフォルトの名無しさん
09/07/10 03:49:35
>>421
% Prolog
t421(_文字ならび,_一文字ごとに空白を開けた逆順ならび) :-
t421(_文字ならび,[],_一文字ごとに空白を開けた逆順ならび).
t421([A],X,[A|X]) :- !.
t421([A|R1],L,X) :- t421(R1,[A,' '|R1],X).
423:デフォルトの名無しさん
09/07/10 07:47:05
スレリンク(tech板:932番)
# 【 課題 】ボウリングのスコアを付けるプログラムを作成せよ。
# 各投球ごとの倒れたピン数を入力し、スコア一覧を出力。
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 GUI 】4. 制限なし
# 【 期限 】本日、7/10 15:00
# 【 Ver 】Eclipse Version: 3.4.2
# 【 補足 】1つのメソッド10行以内、引数・戻り値を持つメソッド最低3つ作成のこと。
424:デフォルトの名無しさん
09/07/10 07:51:05
>>423 (バッチ処理版)
% Prolog
URLリンク(nojiriko.asia)
425:デフォルトの名無しさん
09/07/10 11:40:09
スレリンク(tech板:825番)
# 〔1〕授業単元:C言語
# 〔2〕問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
# 課題V
# n から m までの整数の和を求めるプログラムを作成せよ.(n ≦ m)
# 再帰呼び出しを行う関数 sum を作成して問題を解くこと.
# 関数 sum は,引数を n, m とし,n から m までの和を返すもとのとする.
426:デフォルトの名無しさん
09/07/10 11:44:01
>>425
% Prolog
'n から m までの整数の和を求める'(N,N,N) :- !.
'n から m までの整数の和を求める'(N,M,_和) :-
N < M,
N2 is N + 1,
'n から m までの整数の和を求める'(N2,M,_和_2),
_和 is N + _和_2.
427:デフォルトの名無しさん
09/07/10 12:13:08
(defun sum (n m) (if (= n m) n (+ n (sum (1+ n) m))))
428:デフォルトの名無しさん
09/07/10 12:36:25
>>425
sum(N,M,Sum) :-
integer_to_varlist(N,L1),
integer_to_varlist(M,L2),
integer_to_varlist(Sum,L3),
sum_1(L1,L2,L3),
integer_to_varlist(N,L1),
integer_to_varlist(M,L2),
integer_to_varlist(Sum,L3).
sum_l(L,L,L) :- not(var(L)).
sum_l(L1,L2,X) :- append(L1,Z,X),sum_l([_|L1],L2,Z).
integer_to_varlist(N,L) :- integer(N),list(L),length(L,N).
integer_to_varlist(N,L) :- integer(N),var(L),length(L,N).
integer_to_varlist(N,L) :- var(N),list(L),length(L,N).
integer_to_varlist(N,L) :- var(N),var(L).
429:デフォルトの名無しさん
09/07/10 12:43:22
>>426 さすがに冗長かな。
sum(N,M,Sum) :-
integer_to_varlist(N,L1),
integer_to_varlist(M,L2),
integer_to_varlist(Sum,L3),
sum_1(L1,L2,L3),
integer_to_varlist(N,L1),
integer_to_varlist(M,L2),
integer_to_varlist(Sum,L3).
sum_l(L,L,L) :- not(var(L)).
sum_l(L1,L2,X) :- append(L1,Z,X),sum_l([_|L1],L2,Z).
integer_to_varlist(N,L) :- var(N),var(L).
integer_to_varlist(N,L) :- not((var(N),var(L))),length(L,N).
430:デフォルトの名無しさん
09/07/10 13:00:37
>>429
integer_to_varlist(N,L) :- var(N),var(L).
integer_to_varlist(A,A) :- not(var(A)),A=[].
integer_to_varlist(L1,L2) :-
not(var(L1)),
not(var(L2)),
L1=[N|R1],
L2=[L|R2],
integer_to_varlist(N,L),
integer_to_varlist(R1,R2).
integer_to_varlist(N,L) :- not((var(N),var(L))),length(L,N).
integer_to_varlist/2は複雑になったがこれはユーティリティだから
構わない。これで
sum(N,M,Sum) :-
integer_to_varlist([N,M,Sum],[L1,L2,L3]),
sum_l(L1,L2,L3),
integer_to_varlist([N,M,Sum],[L1,L2,L3]).
とすっきりする。
431:デフォルトの名無しさん
09/07/10 15:45:54
>>430
?- sum(N,M,55).
N = 55,
M = 55;
N = 1,
M = 10;
N = 9,
M = 13;
N = 27,
M = 28;
no.
?-
432:デフォルトの名無しさん
09/07/11 03:58:23
スレリンク(tech板:901番)
# [1] 授業単元: C言語プログラミング演習
# [2] 問題文(含コード&リンク): プログラムを実行すると
# 行列1:
# 1,2,3
# 4,5,6
# 7,8,9
# 行列2:
# 3,4,5
# 6,7,8
# 9,10,11
# と表示する。最後に行列1と行列2の積を計算し、以下のように表示
# するプログラム。
# [行列1と行列2の積は
# ?,?,?
# ?,?,?
# ?,?,?]
433:デフォルトの名無しさん
09/07/11 04:24:30
>>432
% Prolog
t432 :-
_行列1 = [[1,2,3],[4,5,6],[7,8,9]],
_行列2 = [[3,4,5],[6,7,8],[9,10,11]],
write('行列1:\n'),行列表示(_行列1),
write('行列2:\n'),行列表示(_行列2),
行列の積(_行列1,_行列2,_行列3),
write('行列1と行列2の積は\n'),行列表示(_行列3).
行列表示([]).
行列表示([_行|R]) :- concat_atom(_行,',',[_表示文字列]),write_formatted('%t\n',[_表示文字列]),行列表示(R).
行列の積(L1,L2,X) :- 行列の転置(L2,L3),行列の積の一(L1,L3,X).
行列の積の一([],_,[]) :- !.
行列の積の一([A|R1],L,[S1|R3]) :- 行列の積の二(A,L,S1),行列の積の一(R1,L,R3).
行列の積の二(_,[],[]) :- !.
行列の積の二(A,[B|R2],[C|R3]) :- 行列の積の三(A,B,C),行列の積の二(A,R2,R3).
行列の積の三([],[],0) :- !.
行列の積の三([A|R1],[B|R2],S) :- S1 is A * B,行列の積の三(R1,R2,S2),S is S1 + S2 .
行列の転置([],[],[]) :- !.
行列の転置([[A|R]|R1],[A|R2],[R|R3]) :- 行列の転置(R1,R2,R3) .
行列の転置([[]|_],[]) :- !.
行列の転置(L,[B|R1]) :- 行列の転置(L,B,R2),行列の転置(R2,R1),!.
434:デフォルトの名無しさん
09/07/11 17:14:27
スレリンク(tech板:916番)
# 【質問テンプレ】
# [1] 授業単元:情報基礎B
# [2] 問題文(含コード&リンク):(1) 平均、標準偏差
# (2) 得点の高い順の点数のリスト
435:デフォルトの名無しさん
09/07/11 17:19:44
>>434
% Prolog
t434 :-
'10人分の試験の点数を読み取る'(L),
平均(L,_平均),標準偏差(L,_標準偏差),
write_formatted('平均 : %t\n標準偏差 : %t\n',[_平均,_標準偏差]).
平均(L,M) :- length(L,N),平均(L,N,0.0,M).
平均([],N,S,M) :- M is S / N,!.
平均([A|R],N,S,M) :- S1 is S + A,平均(R,N,S1,M).
標準偏差(L,V) :- length(L,N),平均(L,M),標準偏差(L,N,M,0.0,V).
標準偏差([],N,M,S,V) :- V is sqrt(S / (N - 1)),!.
標準偏差([A|R],N,M,S,V) :- S1 is (A - M) ^ 2,S2 is S + S1,標準偏差(R,N,M,S2,V).
'10人分の試験の点数を読み取る'(L) :- '10人分の試験の点数を読み取る'(1,L). !.
'10人分の試験の点数を読み取る'(11,[]) :- !.
'10人分の試験の点数を読み取る'(M,[I|R]) :-
write_formatted(' %t: ',[M]),
get_line(Atom),
atom_to_term(Atom,I,_),
M2 is M + 1,
'10人分の試験の点数を読み取る'(M2,R).
436:デフォルトの名無しさん
09/07/11 19:20:14
スレリンク(tech板:922番)
# [1] 授業単元:プログラミング入門
# [2] 問題文(含コード&リンク):
# if文を使って、月数に応じてコメントを表示するプログラム(1月ならばwinter、
# 3月ならspringといった具合に)を作る。
# 月は1月\uff5e12月までなので、13月以上の数値を打ち込んだ場合はerrorと表示させること。
437:デフォルトの名無しさん
09/07/11 20:47:08
# [1] 授業単元:プログラミング入門
# [2] 問題文(含コード&リンク):
たとえば
3481
という数字(4桁/0含む)が与えられたとき
0 = 3 + 4 - 8 + 1
1 = 3 + 4 - 8 * -1
2 = -(3 + 4 - 8 - 1)
3 = 3 * 4 - 8 - 1
4 = (3 / (4 + 8))^-1
...
のように加減乗除のみで整数を順に造っていってください
438:デフォルトの名無しさん
09/07/11 20:54:33
x^y は加減乗算ではないよ。
439:デフォルトの名無しさん
09/07/11 21:09:05
4 = (4 + 8) / (3 * 1)
440:デフォルトの名無しさん
09/07/12 04:14:13
スレリンク(tech板:929番)
# [1] 授業単元: C言語
# [2] 問題文(含コード&リンク):
# 主語、目的語、述部が入ったデータファイルを読み込み、それらをランダムに
# 組み合わせて生成した短文を20個ファイルに出力するプログラムの作成。
# 短文の構文は必ず、「(主語)は、(目的語)(述部)。」となるようにする。
#
# 出力例:俺は、カレーが大好きだ。
#
# データファイルは以下を使用すること。
# 主語: 俺 私 あなた 彼 彼女 先生 犬のポチ 猫のタマ ライオン
# その人 政治家 ネズミ の12個
# 目的語: カレー ご飯 肉 授業 男 女 すごいもの アレ アンパン
# お金 の10個
# 述部: が大好きだ が大嫌いだ を作った をなくした が欲しい
# に全力を尽くす を新しいものに交換した ?なにそれ美味いの?
# について深く考えた を捨てた に塩をふりかけた の11個
441:デフォルトの名無しさん
09/07/12 06:02:07
>>440
% Prolog (1/2)
t440 :-
get_lines('t440_1.txt',Lines),
構造定義(Lines),
findall(_文,文(_文,[]),_文集),
'20文を選択して表示'(_文集).
'20文を選択して表示'(_文集) :-
length(_文集,Len),
Div is Len // 20,
tell('t440_2.txt'),
for(1,N,20),
Nth is N * Div,
list_nth(Nth,_文集,_選択文),
write_formatted('%t%t%t%t%t\n',[_選択文]),
N = 20,
told.
442:デフォルトの名無しさん
09/07/12 06:03:56
>>440
% Prolog (2/2)
文(_文,R) :- 主語(_文,R1),後置部(R2,R3),目的語(R2,R3),述部(R3,R4),句点(R4,R).
後置部(L,R) :- 後置詞(L,R1),読点(R1,R).
後置詞(['は'|R],R).
読点(['、'|R],R).
句点(['。'|R],R).
構造定義(Lines) :-
member(_行,Lines),
split(_行,[':',':',' ',' '],[F|L2]),
append(L3,[_],L2),
要素定義(F,L3),
fail;
true.
要素定義(F,L) :-
member(A,L),
P =.. [F,[A|R],R],
assertz(P),
fail;
true.
443:440
09/07/12 06:11:44
>>440 訂正 write_formattedの表現に誤りがありました。
'20文を選択して表示'(_文集) :-
length(_文集,Len),
Div is Len // 20,
tell('t440_2.txt'),
for(1,N,20),
Nth is N * Div,
list_nth(Nth,_文集,_選択文),
concat_atom(_選択文,_選択文文字列),
write_formatted('%t\n',[_選択文文字列]),
N = 20,
told.
444:443
09/07/12 06:12:58
>>440 ではなくて >>442 の訂正でした。
445:デフォルトの名無しさん
09/07/12 06:20:53
>>440
% Prolog ここに書き直しました。
URLリンク(nojiriko.asia)
446:デフォルトの名無しさん
09/07/12 10:36:30
>>436
% Prolog
URLリンク(nojiriko.asia)
447:デフォルトの名無しさん
09/07/12 13:52:15
スレリンク(tech板:923番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):下に示すように,最初に整数を読み込み,
# その後,その個数だけ整数を読み込んでいき,そ
# の合計と平均を表示するプログラムを作成せよ。
# 整数は何個ですか: 6
# No.1 : 65
# No.2 : 23
# No.3 : 47
# No.4 : 9
# No.5 : 153
# No.6 : 777
# 合計値: 1074
# 平均値: 179.00
448:デフォルトの名無しさん
09/07/12 14:06:09
>>447
% Prolog
t447 :-
write('整数は何個ですか: '),
get_line(Line),
atom_to_term(Line,N,_),
整数をn個読み込む(1,N,L),
sum(L,Sum),
avg(L,Avg),
write('合計値: %t\n平均値: %t\n',[Sum,Avg]).
整数をn個読み込む(M,N,[]) :- M > N,!.
整数をn個読み込む(M,N,[_整数|R]) :-
write_formatted('No.%t: ',[M]),
get_line(Line),
atom_to_term(Line,_整数,_),
M2 is M + 1,
整数をn個読み込む(M2,N,R).
sum([],0).
sum([A|R],X) :- sum(R,Y),X is A + Y.
avg(L,X) :- length(L,Len),Len > 0,sum(L,Sum),X is Sum / Len.
449:デフォルトの名無しさん
09/07/12 15:56:25
スレリンク(tech板:946番)
# 【質問テンプレ】
# [1] 授業単元 C言語
# [2] 問題文(含コード&リンク):
# 二つのバイナリファイルの中身を比較して等しいか、等しくないかを
# 比較して結果を返す関数を作る
450:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/12 18:03:48
スレリンク(tech板:424番)
# URLリンク(kansai2channeler.hp.infoseek.co.jp)にある
# 50コのデータを利用して
# 最大値と最小値を取り出すプログラムを以下の1,2の関数を用いて2つ作れ
# 1 return文を用いたケース
# 2 グローバル変数を用いたケース
# URLリンク(kansai2channeler.hp.infoseek.co.jp)の
# ポインタは使用不可です
#ファイル名は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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/12 18:36:57
>>452 また間違い。
整数要素ファイルの最小値・最大値(_ファイル,_最小値,_最大値) :-
get_chars(_ファイル,Chars),
concat_atom(Chars,Atom),
split(Atom,['\n',' '],[A|L]),
ならびの中の最小値・最大値(L,A,A,_最小値,_最大値).
454:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/12 21:08:36
スレリンク(tech板: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:デフォルトの名無しさん
09/07/12 21:14:39
>>455
% Prolog
% ここでは定義された単位節の一引数だけソートして差し替えると問題としてみよう。
URLリンク(nojiriko.asia)
457:デフォルトの名無しさん
09/07/12 23:05:14
スレリンク(tech板:957番)
# [1] 授業単元: C言語
# [2] 問題文(含コード&リンク):
# 100個の乱数を発生させ最大値、最小値、平均を求める
# また最大値、最小値それぞれ何番目にあるか答えよ
458:デフォルトの名無しさん
09/07/12 23:31:59
>>457
% Prolog
URLリンク(nojiriko.asia)
459:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/13 05:00:41
スレリンク(tech板:960番)
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):
# 下に示すように,要素数が5 でint 型の配列に、5 人の学生の身長を読み込んで、その
平均
# 身長を求めるプログラムを作成せよ。
# 身長を入力してください
# 1 番: 178
# 2 番: 175
# 3 番: 165
# 4 番: 179
# 5 番: 172
# 平均身長: 173.8
461:デフォルトの名無しさん
09/07/13 05:16:24
>>460
% Prolog
% URLリンク(nojiriko.asia)
'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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/13 05:43:49
>>463
コピペの際に誤って改行してしまいましたが、Prologでは
write_formatted('%tは身長として適切な数値ではありませんでした。再入力が必要
です\n',[_身長]),fail.
のように文字列のなかで改行すると構文エラーとなります。
465:デフォルトの名無しさん
09/07/13 09:32:01
スレリンク(tech板:949番)
# 【質問テンプレ】
# [1] 授業単元: C言語
# [2] 問題文(含コード&リンク):
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
# 課題:
# ・キーボードから正整数を入力し、その逆数を正確に計算し、ディスプレイに
# 表示させる。(循環小数である場合には、循環部分が分かるように表示を工夫する。)
# 内容:
# n(nは任意の正整数)の逆数を正確に計算し、計算過程で出た商、余りを逐次
# 配列に入れていく。計算途中で同じ商、余りが出たら循環小数と判定でき、
# 0が出たら割り切れると判定できる。
466:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/13 13:25:57
>>465
% Prolog
URLリンク(nojiriko.asia)
468:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/13 17:49:03
スレリンク(tech板:550番)
# [1] 授業単元: Ruby演習 [2] 問題文、URLリンク(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:デフォルトの名無しさん
09/07/14 16:41:33
スレリンク(tech板:958番)
# 【 課題 】テキストファイルから文字列5行を読み込み、別のテキストへ縦書きで書き出す
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 期限 】7/14 am6:00
# 【 Ver 】Eclipse Version: 3.4.2
# 【 補足 】
# あいう
# かきく
# さしす
# 上記のようなテキストファイルを読み込み、
# あかさ
# いきし
# うくす
# のように別のテキストファイルに書き出す感じです。
471:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/14 17:08:27
>>470 書き直し
% Prolog URLリンク(nojiriko.asia)
テキストファイルから文字列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:デフォルトの名無しさん
09/07/14 17:31:04
スレリンク(tech板:954番)
# pascal pcpad
# 1個の自然数nを適当決めて、nチームが参加する
# リーグ戦の全試合を表示するプログラムを書きなさい。
474:デフォルトの名無しさん
09/07/14 17:33:35
>>473
% Prolog URLリンク(nojiriko.asia)
リーグ戦の全試合を表示するプログラム(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:デフォルトの名無しさん
09/07/15 04:06:15
スレリンク(tech板:103番)
# 【質問テンプレ】
# [1] 授業単元: C言語演習
# [2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
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:デフォルトの名無しさん
09/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,日曜).
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4631日前に更新/314 KB
担当:undef