いろんな言語で宿題ス ..
[2ch|▼Menu]
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,日曜).

477:デフォルトの名無しさん
09/07/15 07:09:47
>>476 まちがえた!
% Prolog URLリンク(nojiriko.asia)

曜日を表す値(0,日曜).
曜日を表す値(1,月曜).
曜日を表す値(2,火曜).
曜日を表す値(3,水曜).
曜日を表す値(4,木曜).
曜日を表す値(5,金曜).
曜日を表す値(6,土曜).

478:デフォルトの名無しさん
09/07/15 10:54:19
スレリンク(tech板:107番)
# [1] 授業単元: デジタル信号処理
# [2] 問題文(含コード&リンク): 2つのテキストファイル(double型)を読み込み、
# 畳み込み和を計算し、別のファイルに出力せよ。

479:デフォルトの名無しさん
09/07/15 11:02:01
>>478
% Prolog URLリンク(nojiriko.asia)

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:デフォルトの名無しさん
09/07/15 18:41:51
OSでSoundBlaster16のリセットをしたいのだが、どうもなかなかリセットが上手くいかない。
できればアセンブラのサンプルコード欲しいのだが誰か頼む

・SB16の詳細
URLリンク(faculty.petra.ac.id)

・ここにもサンプルコードがあるけど、どうも何をやっているのか良く分からない・・
URLリンク(www.nondot.org)

481:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/16 17:29:23
>>469
% Prolog これは遊びです。フラットな単位節でなくこのような形式で定義する積極的な理由は見つかりません。
URLリンク(prolog.asia)

484:483
09/07/16 17:31:06
>>483 間違えました。
URLリンク(nojiriko.asia)

でした。

485:デフォルトの名無しさん
09/07/16 17:39:20
>>475
% Prolog (1)-(4) まで全て定義おわりました。
URLリンク(nojiriko.asia)

486:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/17 02:52:13
スレリンク(tech板:157番)
# [1] 授業単元: C++
# [2] 問題文(含コード&リンク):
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
#
# 正数による正方行列のうち、全ての行、列、斜め列の合計が同じであり、
# かつ2回以上使用される数字が存在しないものを魔方陣という。
# 下図に示すa,bに数値を設定したときに、1〜9の整数によって構成される魔方陣を
# 出力するプログラムを作成せよ。
# 但し、魔方陣が作成不可能な(a,b)の組み合わせが設定された場合は、「Impossible」
# と出力するとする。
#
# la_lb_l__l
# l__l__l__l
# l__l__l__l
#


488:デフォルトの名無しさん
09/07/17 02:53:14
スレリンク(tech板:160番)
# [1]プログラミング
# [2] 課題
# 言語: C もしくは C++ 言語
#
# (1)以下のプログラムを作成しなさい(数当てゲーム)
#
# *画面上に「好きな数字を入力してください」と表示して、キーボードからの入力を
# 待つ。
# 変数aを定義して、10までの乱数を発生させて変数aに代入する。
# キーボードからの入力があれば、先に発生させた乱数と一致しているならば
# 「あたり!!」と表示する。
# 一致していなければ「残念乱数はxxです」と表示する(xxには変数aの中身を
# 表示する)

489:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/17 07:27:53
>>487
% Prolog
URLリンク(nojiriko.asia)

491:デフォルトの名無しさん
09/07/17 10:30:13
>>486
ハノイの塔の課題をその仕様通り自然に定義していったらどうなるか?
興味がありますが、私が何か書き込めるまでにはもう少し時間が必要なので、
最小サンプルで確認することによって、ディスクの大小順序問題を
スキップしてしまっている最もよく知られたアルゴリズムによる
プログラム例を URLリンク(nojiriko.asia) に示します。

問題を直感的に理解するには
「Prologプログラミング入門」安部憲広著 共立出版刊 の29頁 図3.3
がよいと思います。

492:デフォルトの名無しさん
09/07/17 12:40:40
スレリンク(tech板:970番)
# 配列に関する基本問題
# フィールド int型の配列numberのみ
# コンストラクタ 引数で与えられたScannerから整数を順次読み取る、
# 最初に読み取った整数を配列サイズとみなし、int型の配列を生成し
# numberで参照する
# その後整数を読み取ってnumber[0],number[1]、・・・・と順に代入していき、
# 配列サイズ分だけ読み取る
# number中の全要素,最大値、最小値を表示

493:デフォルトの名無しさん
09/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).



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4631日前に更新/314 KB
担当:undef