いろんな言語で宿題ス ..
413:デフォルトの名無しさん
10/01/25 05:35:28
スレリンク(tech板:103番)
# [1] 授業単元:Cプログラミング演習2
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
# (2) 2 つの4×4 行列を2 次元配列に格納し,それらの積を求めるプログラムを作成せよ.以下の関数を
# 利用すること.
# void mult_array(int a0[4][4], int a1[4][4], int result[4][4])
# a0,a1 入力された行列の値が格納された2 次元配列のポインタ
# result 演算結果の行列の値が格納された2 次元配列のポインタ
# 戻り値 なし
# 入力に関して
# キーボードからまず,1 つめの行列の1 行目の4 つの整数をスペース1 つ開けて1 行で入力し,
# 改行する.以下同様に1 つめの行列の2 行目,3 行目,4 行目,2 つめの行列の1・・・4 行目
# を入力する.この一連の入力時,入力を促す文字等は決して表示しないこと.
# 出力に関して
# 1行目に結果の行列の1 行目をスペース1 つあけて特に整形せず数値のみ出力(+改行),以下同
# 様に2 行目,3 行目,4 行目を特に整形せず数値のみ出力する.指定した数値・改行以外の文
# 字等の出力は一切行わないこと.
414:デフォルトの名無しさん
10/01/25 05:37:43
スレリンク(tech板:103番)
# [1] 授業単元:Cプログラミング演習2
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
#
# (3) 平均値と中央値を求める関数を作成し,その関数を使用して平均値と中央値を出力するプログラム
# を作成せよ.関数は下記の通りとする.
# int median(int *in, int num)
# in 複数の整数値が格納された配列の(先頭)ポインタ
# num 入力値の数
# 戻り値 中央値
# int avg (int *in, int num)
# in 複数の整数値が格納された配列の(先頭)ポインタ
# num 入力値の数
# 戻り値 平均値(四捨五入した整数値, 負の場合丸め方は任意)
# 入力に関して
# キーボードから入力する整数の個数を入力し(最大で128 に対応すること)改行する.次に指
# 定した数の整数をスペース1つずつ開けて1行で入力し,改行する.この一連の入力時,例題
# や解答例のような入力を促す文字等は決して表示しないこと.
# 出力に関して
# 中央値 平均値(+改行)のみ出力.中央値と平均値の間はスペースを1 つ入れること.指定した
# 数値・改行以外の文字等の出力は一切行わないこと.
415:デフォルトの名無しさん
10/01/25 06:03:31
スレリンク(tech板:104番)
#
# 課題1 20 桁までの自然数の足し算と掛け算を浮動小数点演算を用いないで実施するプログラムlongcomp.c を
# 作成し、C のソースコードを提出しなさい。足し算は必須課題、掛け算はオプション課題です。
# 実行形式をlongcomp とした動作仕様は以下である1
# >./longcomp 12345678901234567890 + 12345678901234567890
# >12345678901234567890 + 12345678901234567890 = 24691357802469135780
# >./longcomp 1234567890 * 1234567890
# >1234567890 * 1234567890 = 1524157875019052100
416:デフォルトの名無しさん
10/01/25 06:05:44
スレリンク(tech板:105番)
#
# 課題2 b01, b001 のように二進数をb で始まるように表記する。二進数の集合を、できるだけ少ないノード数
# の二分木に分類するためには、二分木のノードに蓄積する二進数の桁数を可変にすることが有効である。
# こうすることで二進数表記した値(たとえばキーワードとか、位置とか、日付とか)に紐づけられたデータを少ない検索で見つけることができる。
# 扱う二進数の集合を、たとえば
# b00, b001, b0011, b00111, b1000, b11100, b0
# として、これらを図1に示すようにニ分木に分類して、帰りがけ(ポストオーダ)で次のように出力するプログラム(tree) を作成し、C のソースコードを提出しなさい。
# >./tree
# >1 1 1 0 0 000 1100 1 b
#
417:デフォルトの名無しさん
10/01/25 06:14:47
スレリンク(tech板:124番)
# [1] 授業単元: Cプログラミング入門
# [2] 問題文(含コード&リンク): 入力された2つの文字列(日本語その他バイト文字は不可)
# を比較するプログラムを作成せよ。ただし、大文字小文字の違いは無視。単語間に連続して
# スペース・タブが複数入っていても単独のスペースとしない。
#
# [5] その他の制限: 文字列とポインタまでやってます。
# 入力に関して、キーボードから1つ目の文字列を1行で入力し、改行する。
# この時、入力を促す文字は一切表示しない。入力文字数は128文字まで。
# 出力に関して、一致すれば何も表示しない。不一致の場合は最初に不一致となる
# 入力1の文字と入力2の文字(1文字+スペース+1文字+改行)を表示する。
# どちらかが末端の場合は代わりにスペースで埋める。
418:デフォルトの名無しさん
10/01/25 06:22:12
スレリンク(tech板:135番)
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
#
# (1)複数の整数を平均値に近い順にソートするプログラムを作成せよ。
# 平均値は切り捨てして整数値で求めるものとし、平均値との距離が等しい
# 場合は値の小さな整数が優先されるものとする。
#
# 入力に関して
# キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行。
# 次に指定した数の整数をスペース1つ開けて1行で入力し、改行する。
# この時、入力を促す文字は一切表示しないこと。
# 出力に関して
# ソートした整数をスペース1つのみあけて1行で出力する(+改行)。指定した数改行
# 以外の出力は一切行わないこと。
419:デフォルトの名無しさん
10/01/25 07:12:24
スレリンク(tech板:137番)
# [1] 授業単元: プログラミング概論
# [2] 問題文:"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいると仮定した上で、
# この入力ファイルの中のデータを1行に5個ずつきれいに並べて"out_file"という名前のファイルに
# 出力するCプログラムを作成せよ。
# 入力ファイルの内容が
# -1111111111 2222222 333333 4444 55 6 7 8 9 0 1 2 3 4
# 5 6 7890123
# -5666
# の時には、例えば次のような内容を"out_file"に書き出す
# _-1111111111_____2222222______333333________4444__________55
# _________________6_______________7______________8_____________9___________0
# ________________ 1_______________2______________3_____________4___________5
# _________________6_____7890123________-5666
#
420:デフォルトの名無しさん
10/01/25 07:23:27
>>418
;; Common Lisp
(defun sort-ave (lst)
(let ((abs-ave (floor (abs (/ (reduce #'+ lst) (length lst))))))
(sort lst
#'(lambda (a b)
(let ((ax (abs (- (abs a) abs-ave))) (bx (abs (- (abs b) abs-ave))))
(if (= ax bx)
(< a b)
(< ax bx)))))))
(defun main ()
(let ((num (read)) lst)
(cond ((<= num 100)
(dotimes (i num)
(push (read) lst))
(format t "~{~A ~}~%" (sort-ave lst))))))
421:デフォルトの名無しさん
10/01/25 12:56:07
>>418
使用言語:J
f=:monad def '}.|:/:~|:y,:~|y-<.(+/%#)y'
f 0 7 8 9 2 2 5 5 5 3
3 5 5 5 2 2 7 0 8 9
422:デフォルトの名無しさん
10/01/25 15:28:46
スレリンク(tech板:143番)
# [1] データ構造とプログラミング
# [2]
# 演習問題4.5 逆ポーランド記法による入力文字列(空白で区切られている)に対して
、
# 16進数と10進数で答えを返すプログラムrpnを作りなさい。
# (入力例)rpn 5 2 + 7 *
# (出力例)0x31, 49(decimal)
#
423:デフォルトの名無しさん
10/01/25 17:57:56
スレリンク(tech板:147番)
# [1] 授業単元: C++
# [2] 問題文(含コード&リンク):
# 2.
# URLリンク(ime.nu)
# URLリンク(ime.nu)
# URLリンク(ime.nu)
# URLリンク(ime.nu)
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
↑pm1.txt
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
# ↑pm2.txt
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
# ↑pm3.txt
# というファイルがある。
# plus で始まる行の数値を足し,minus で始まる行の数値を引く。
# ファイルの最後まで計算した結果を表示するプログラムを作成せよ。
# データの数は実行前にはわからないものとする。
424:デフォルトの名無しさん
10/01/25 18:07:11
スレリンク(tech板:154番)
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
# 等しい合計点
#
# 太郎と花子はそれぞれカードを何枚か持っている.
# 各カードには点数が書かれている.太郎のカードと花子のカードを 1 枚ずつ交換して,
# それぞれの持つカードの合計点数が等しくなるようにしたい.
# どのカードとどのカードを交換したらよいか.
#
# ただし,カードを交換しなくても合計点数が等しい場合でも,必ずカードの交換を行うものとする.
# Input
# 入力は,いくつかのデータセットからなる.各データセットは次の形式で与えられ
# n m
# s1
# s2
# ...
# 各データセットの最初の行は空白ひとつで区切られたふたつの数 n と m を含み,
# n は太郎のカードの枚数,m は花子のカードの枚数を表す.続く n+m 行には,
# 各カードの点数が 1 行にひとつずつ並ぶ.
# 最初の n 個の点数 (s1 から sn まで) は太郎のカードの点数,
# 残りの m 個の点数 (sn+1 から sn+m まで) は花子のカードの点数を表す.
# n および m は 100 以下の正の整数とし,カードの点数は 0 以上 100 以下の整数値とする.
# 入力の終わりは,空白ひとつで区切られたふたつの 0 を含む 1 行で示される.
425:デフォルトの名無しさん
10/01/25 19:04:37
>>423
使用言語:J
plus =:+
minus=:-
f=:monad def '+/".;._2(1!:1)y'
f <'pm3.txt'
_316
426:デフォルトの名無しさん
10/01/25 20:18:00
スレリンク(tech板:161番)
# [1] 授業単元: プログラミング演習(木構造と数式処理)
# [2] 問題文(含コード&リンク):
#
# 累乗の計算の逆を行うプログラムを作ってください。
#
# 例
# x*x*xと入力されればx^3と画面に出力する。
#
# x*x*x*aなどの場合はx^3*aと出力されればよい。
#
427:デフォルトの名無しさん
10/01/25 20:42:02
>>413
使用言語:J
mult_array=: +/ .*
]A=:i.4 4
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
A mult_array A
56 62 68 74
152 174 196 218
248 286 324 362
344 398 452 506
428:デフォルトの名無しさん
10/01/26 00:00:16
>>419
使用言語:J
read=: 1!:1
wrire=: 1!:2
format=: 8!:2
a=: read <'in_file'
b=: '13.0'format ".each _5,\cutopen,,;._2 a
(,b,.LF)write<'out_file'
429:デフォルトの名無しさん
10/01/26 01:18:57
スレリンク(tech板:167番)
# 上の105ですが、もう一度質問させて頂きます。
# なぜなら、課題2対しての回答がないからです。
# 皆様よろしくお願いします。
#
# [1] データ構造とプログラミング
# [2]b01, b001 のように二進数をb で始まるように表記する。二進数の集合を、できるだけ少ないノード数
# の二分木に分類するためには、二分木のノードに蓄積する二進数の桁数を可変にすることが有効である。こう
# することで二進数表記した値(たとえばキーワードとか、位置とか、日付とか)に紐づけられたデータを少な
# い検索で見つけることができる。
# 扱う二進数の集合を、たとえば
# b00, b001, b0011, b00111, b1000, b11100, b0
# として、これらを図1に示すようにニ分木に分類して、帰りがけ(ポストオーダ)で次のように出力するプロ
# グラム(tree) を作成し、C のソースコードを提出しなさい。
# >./tree
# >1 1 1 0 0 000 1100 0 1 b
#
430:デフォルトの名無しさん
10/01/26 01:21:28
>>429
ごめんなさい。>>416に既出でした。
431:デフォルトの名無しさん
10/01/26 01:39:43
スレリンク(tech板:174番)
# [1] データ構造とプログラミング
# [2]
# リングバッファを使って、9個のキューを作り、データを追加したり、
# データを取り出すプログラムを完成させなさい。
# 以下の添付にあるプログラムを完成させろという課題です。
# URLリンク(ime.nu)
# 演習問題5.2 リングバッファを使って、9 個のキュー(配列は10 元)を作り、
# データを追加したり(EnQue), データを取り出す(DeQue) プログラムを
# 完成させなさい29。プログラムの動作仕様は以下のようである。
# 1. 数字を入力するとキューが伸びる
# 2. d(deque) を入力するとfront を標準出力に出力
# 3. s(show) を入力するとキューを表示
# 4. キューがいっぱいだったらエラーメッセージを出す
# 5. q で終了
432:デフォルトの名無しさん
10/01/26 06:00:35
>>419
% Prolog ここまでするか、とお思いでしょうが・・
'入力ファイルの中のデータを1行に5個ずつきれいに並べて"out_file"という名前のファイルに出力する'(_整数ならび) :-
入力ファイルの中のデータ(_整数ならび),
最大桁数(_整数ならび,_最大桁数),
_整数表示桁 is _最大桁数 + 2,
concat_atom(['%',_整数表示桁,d],_表示フォーマット),
'1行に5個ずつきれいに並べて'(_整数ならび,_5個組整数ならび),
tell('out_file),
出力する(_5個組整数ならび,_表示フォーマット),
told.
入力ファイルの中のデータ(_整数ならび) :- '"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいる'(_整数ならび),!.
'"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいる'(_整数ならび) :-
get_lines('infile',Lines),
concat_atom(Lines,' ',S),
split(S,[' '],_整数ならび),
length(_整数ならび,18),!.
'1行に5個ずつきれいに並べて'(_整数ならび,_5個組整数ならび) :- 'N個組'(5,_整数ならび,_5個組整数ならび),!.
出力する([],_) :- !.
出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット),出力する(R,_整数表示桁).
出力する([L|R],_表示フォーマット) :-
'1行出力する'(L,_表示フォーマット),
出力する(R,_整数表示桁).
'1行出力する'([],_) :- write('\n'),!.
'1行出力する'([N|R],_表示フォーマット) :- write_formatted(_表示フォーマット,[N]),'1行出力する'(R,_表示フォーマット).
433:デフォルトの名無しさん
10/01/26 06:04:00
>>433 (>>432) 訂正
% Prolog 訂正するのを忘れていた。
出力する([],_) :- !.
出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット),出力する(R,_表示フォーマット).
434:デフォルトの名無しさん
10/01/26 07:16:12
>>374
使用言語:J
rev_string=: ,~/
rev_string 'SEC'
CES
|. 'SEC'
CES
435:デフォルトの名無しさん
10/01/26 07:28:11
>>418
% Prolog (その一) >>421の短さに唖然!
複数の整数を平均値に近い順にソートする(_整数ならび,_平均値に近い順に整列された
整数ならび) :-
'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_
入力する整数の個数),
指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数
ならび),
相加平均(_整数ならび,_平均値の一),
_平均値 is truncate(_平均値の一),
平均値からの隔たりによる整列(_平均値からの隔たりのならび,_平均値からの隔た
りを鍵として付加して整列された整数ならび),
整列した整数をスペース1つのみあけて1行で出力する(_平均値からの隔たりを鍵と
して付加して整列された整数ならび).
'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力
する整数の個数) :-
repeat,
get_integer(_入力する整数の個数),
_入力する整数の個数 =< 100,!.
指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数なら
び) :-
length(_整数ならび,_入力する整数の個数),
get_split_line([' '],_整数ならび).
436:デフォルトの名無しさん
10/01/26 07:31:28
>>418
% Prolog (その二) >>435は改行位置を間違えた行が数行あります。
平均値からの隔たりによる整列([X|Xs],_平均値,Ys) :-
U is X - _平均値,
平均値からの隔たりにより分割する(Xs,U,_平均値,Littles,Bigs),
平均値からの隔たりによる整列(Littles,_平均値,Ls),
平均値からの隔たりによる整列(Bigs,_平均値,Bs),
append(Ls,[X|Bs],Ys) .
平均値からの隔たりによる整列([],_,[]).
平均値からの隔たりにより分割する([X|Xs],Y,_平均値,[[U,X]|Ls],Bs) :-
U is X - _平均値,
U =< Y,
平均値からの隔たりにより分割する(Xs,Y,_平均値,Ls,Bs),!.
平均値からの隔たりにより分割する([X|Xs],Y,_平均値,Ls,[[U,X]|Bs]) :-
U is X - _平均値,
U > Y,
平均値からの隔たりにより分割する(Xs,Y,_平均値,Ls,Bs) .
平均値からの隔たりにより分割する([],Y,_,[],[]).
整列した整数をスペース1つのみあけて1行で出力する([]) :- !.
整列した整数をスペース1つのみあけて1行で出力する([[A,B]]) :- write_formatted('%t\n',[A]) :- !.
整列した整数をスペース1つのみあけて1行で出力する([[B,A]|R]) :-
write_formatted('%t ',[A]),
整列した整数をスペース1つのみあけて1行で出力する(R)
437:デフォルトの名無しさん
10/01/26 08:14:42
>>436
# 平均値との距離が等しい場合は値の小さな整数が優先されるものとする。
この判断が漏れている。
438:デフォルトの名無しさん
10/01/26 10:34:26
>>418 間違いが多いようなので書き直し(申し訳ない)
% Prolog (その一)
複数の整数を平均値に近い順にソートする(_整数ならび,_平均値に近い順に整列された
整数ならび) :-
'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_
入力する整数の個数),
指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数
ならび),
相加平均(_整数ならび,_平均値の一),
_平均値 is truncate(_平均値の一),
平均値からの隔たりによる整列(_平均値からの隔たりのならび,_平均値,_平均値か
らの隔たりを鍵として付加して整列された整数ならび),
整列した整数をスペース1つのみあけて1行で出力する(_平均値からの隔たりを鍵と
して付加して整列された整数ならび).
'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力
する整数の個数) :-
repeat,
get_integer(_入力する整数の個数),
_入力する整数の個数 =< 100,!.
指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数なら
び) :-
length(_整数ならび,_入力する整数の個数),
get_split_line([' '],_整数ならび).
439:デフォルトの名無しさん
10/01/26 10:39:03
>>418
% Prolog (その二) >>438はやはり改行がうまくいかなかった。
平均値からの隔たりによる整列([X|Xs],_平均値,Ys) :-
U is X - _平均値,
平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Littles,Bigs),
平均値からの隔たりによる整列(Littles,_平均値,Ls),
平均値からの隔たりによる整列(Bigs,_平均値,Bs),
append(Ls,[X|Bs],Ys) .
平均値からの隔たりによる整列([],_,[]).
平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :-
V is X - _平均値,
V < U,
平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!.
平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :-
U is X - _平均値,
X < Y,
平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!.
平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,Ls,[[U,X]|Bs]) :-
平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs) .
平均値からの隔たりにより分割する([],Y,_,[],[]).
整列した整数をスペース1つのみあけて1行で出力する([]) :- !.
整列した整数をスペース1つのみあけて1行で出力する([[A,B]]) :- write_formatted('%
t\n',[A]),!.
整列した整数をスペース1つのみあけて1行で出力する([[B,A]|R]) :-
write_formatted('%t ',[A]),
整列した整数をスペース1つのみあけて1行で出力する(R).
440:デフォルトの名無しさん
10/01/26 10:43:20
すみません。行末あたりに一文字何かが入ってしまったようで改行の制御が
正しくできませんでした。
URLリンク(nojiriko.asia)
に仕上げて書いておきます。
441:デフォルトの名無しさん
10/01/26 11:06:53
スレリンク(tech板:189番)
# [1] データ構造とプログラミング
# [2]
# ツリーにノードを追加するプログラムを完成させなさい。またプログラム中 に使われている要素 mitsugi, emura, satou, yonemura, murai, nakamura, kwkt がツリー上でどのように配置され ているか書きなさい。
# 以下の添付にあるプログラムを完成させろという課題です。
# URLリンク(ime.nu)
442:デフォルトの名無しさん
10/01/26 16:43:14
スレリンク(tech板:193番)
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク):[3〜6]∫x^2 dx(これだと正解は63)を計算するプログラムを作成せよ。
# 尚、積分本体(始点と終点)と関数本体f(x)に分けること。dx=1/N N=(10,1000…10000)誤差評価を行う事。積分範囲を変更すること。x^2の関数を変更すること。
#
443:デフォルトの名無しさん
10/01/26 16:44:31
スレリンク(tech板:197番)
# [1] 計算機概論
# [2] 8bit整数が8つ与えられている。これをunsigned char配列と
# みなしa[]と名付ける。
# unsigned char 整数のor,not演算だけを用いて1<=n<=8からa[n]を
# 計算するC計算式を出力するプログラム
# 例:a[]={1,2,3,4,5,6,7,8}; 出力 return n;
# a[]={1,0,1,0,1,0,1,0}; 出力 return !(!n or 11111110b);
444:デフォルトの名無しさん
10/01/26 17:33:48
スレリンク(tech板:200番)
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):
# A組、B組、C組にそれぞれn人の生徒がいて、
# A組の生徒が一列に並んでいる。
# このとき、B組の生徒をA組の生徒の隣に並ばせたいが
# なるべく隣同士で身長に差がないようにしたい。
# どうやって計算すればいいでしょう?
# 加えて、C組の生徒もB組の隣に並ばせたい場合はどうすれば?
# (身長の配列) double height_a[n], height_b[n], height_c[n];
445:デフォルトの名無しさん
10/01/26 18:07:57
>>444
% Prolog
なるべく隣同士で身長に差のない並び方(La,Lb,N,LbX) :-
findmin([S,L],ならび候補(La,Lb,N,L,S),Min),
Min = [_,LbX],!.
ならび候補(La,Lb,N,L,S) :-
順列(Lb,N,L),
findsum(U,(for(1,M,N),list_nth(M,La,A),list_nth(M,L,B),U is (B-A) ^ 2),S).
446:デフォルトの名無しさん
10/01/26 19:24:07
スレリンク(tech板:406番)
# 下のような2つのファイルから
# 平均を出したいんですがどのようにすればいいのでしょうか?
# ---file A---
# 1 87
# 2 89
# 3 40
# 4 90
# 5 33
#
# ---file B---
# 1 45
# 2 22
# 3 78
# 4 60
# 5 19
#
# ほしい結果は
# ---file C---
# 1 (87+45)/2
# 2 (89+22)/2
# 3 (49+78)/2
# 4 (90+60)/2
# 5 (33+19)/2
# です。
447:デフォルトの名無しさん
10/01/26 19:50:16
>>444
使用言語:J
よくわかりませんが、こんなふうではだめでしょうか?
A組のならびから身長の順位表をつくる。
B組をこの「A組順」でソートする。
]a=:145+?10#40
178 155 176 179 169 146 161 179 177 153
]b=:140+?10#50
178 167 186 142 165 166 172 173 181 181
a,:(/:~b)/:/:a
178 155 176 179 169 146 161 179 177 153
181 166 173 181 172 142 167 186 178 165
448:デフォルトの名無しさん
10/01/26 20:23:36
>>446
% Prolog
'2つのファイルから平均を出す'('fileA','fileB','fileC') :-
'2つのファイルから2つのならびを取り出す'('fileA','fileB',L1,L2),
fileAのデータを基礎に平均を計算してfileCに出力する('fileC',L1,L2),!.
'2つのファイルから2つのならびを取り出す'('fileA','fileB',L1,L2) :-
get_split_lines('fileA',[' '],L1),
get_split_lines('fileB',[' '],L2),!.
fileAのデータを基礎に平均を計算してfileCに出力する('fileC',L1,L2) :-
tell('fileC'),
fileAのデータを基礎に平均を計算して出力する(L1,L2),
told.
fileAのデータを基礎に平均を計算して出力する([],_) :- !.
fileAのデータを基礎に平均を計算して出力する([[N,A]|R1],L2) :-
member([N,B],L2),
C is (A + B) / 2,
write_formatted('%t (%t+%t)/2=%t',[M,A,B,C]),
fileAのデータを基礎に平均を計算して出力する(R1,L2).
449:デフォルトの名無しさん
10/01/27 02:28:09
スレリンク(tech板:233番)
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク): 入力された数字が偶数なら、trueを返す関数。それ以外ならfalse
450:デフォルトの名無しさん
10/01/27 02:30:31
スレリンク(tech板:232番)
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク): 得点を入力して以下のルールに従った成績を返す関数を実装せよ。
# 90点以上 S
# 80点以上 A
# 60点以上 B
# それ未満 C
451:デフォルトの名無しさん
10/01/27 02:41:54
>>449
% Prolog
入力された数字が偶数なら、trueを返す :-
get_integer(N),
入力された数字が偶数なら、trueを返す(N).
入力された数字が偶数なら、trueを返す(N) :- 0 is N mod 2.
452:デフォルトの名無しさん
10/01/27 02:46:26
>>449
% Prolog
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(_診断) :-
get_integer(N),
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,_診断).
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,true) :- 0 is N mod 2.
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,false).
453:デフォルトの名無しさん
10/01/27 02:48:11
>>452 (>>449) 訂正
% Prolog
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(_診断) :-
get_integer(N),
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,_診断).
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,true) :- 0 is N mod 2,!.
'入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,false).
454:デフォルトの名無しさん
10/01/27 02:58:21
>>450
% Prolog
得点を入力して以下のルールに従った成績を返す(_成績) :-
get_integer(_得点),
得点を入力して以下のルールに従った成績を返す(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :-
以下のルール(_得点,_,_成績).
以下のルール(_得点,'90点以上','S') :- _得点 >= 90,!.
以下のルール(_得点,'80点以上','A') :- _得点 >= 80,!.
以下のルール(_得点,'60点以上','B') :- _得点 >= 60,!.
以下のルール(_得点,'それ未満','C') :- _得点 < 60,!.
455:デフォルトの名無しさん
10/01/27 03:10:28
>>450
% Prolog 少し模索
得点を入力して以下のルールに従った成績を返す(_成績) :-
get_integer(_得点),
得点を入力して以下のルールに従った成績を返す(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が90点以上'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が80点以上'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点以上'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点未満'(_得点,_成績).
'得点が90点以上'(_得点,'S') :- _得点 >= 90,!.
'得点が80点以上'(_得点,'A') :- _得点 >= 80,_得点<90,!.
'得点が60点以上'(_得点,'B') :- _得点 >= 60,_得点<80,!.
'得点がそれ未満'(_得点,'C') :- _得点 < 60,!.
456:デフォルトの名無しさん
10/01/27 06:26:04
>>450
% Prolog
得点を入力して以下のルールに従った成績を返す(_成績) :-
get_integer(_得点),
得点を入力して以下のルールに従った成績を返す(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が90点以上の成績はS'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が80点以上の成績はA'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点以上の成績はB'(_得点,_成績).
得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点がそれ未満のはC'(_得点,_成績).
'得点が90点以上の成績はS'(_得点,'S') :- _得点 >= 90,!.
'得点が80点以上の成績はA'(_得点,'A') :- _得点 >= 80,_得点<90,!.
'得点が60点以上の成績はB'(_得点,'B') :- _得点 >= 60,_得点<80,!.
'得点がそれ未満の成績はC'(_得点,'C') :- _得点 < 60,!.
457:デフォルトの名無しさん
10/01/27 06:29:40
>>456 訂正 成績がひとつ落ちた
'得点がそれ未満のはC' -> '得点がそれ未満の成績はC'
458:デフォルトの名無しさん
10/01/27 13:39:12
>>449
使用言語:Io
Number even:=method(self % 2 == 0)
Io> 23 even
==> false
Io> 24 even
==> true
459:デフォルトの名無しさん
10/01/27 17:24:57
>>450
使用言語:J
f=: monad def 'y{''CBAS''#~2-~/\0 60 80 90 101'
f 0
C
f 59
C
f 60
B
f 79
B
f 80
A
f 89
A
f 90
S
f 100
S
460:デフォルトの名無しさん
10/01/27 17:34:13
>>449
使用言語:J
even=: 0=2&|
even 23
0
even 24
1
461:デフォルトの名無しさん
10/01/27 17:37:51
>>449
使用言語:Scilab
-->deff('r = even(n)', 'r = modulo(n, 2) == 0')
-->even(23)
ans =
F
-->even(24)
ans =
T
462:デフォルトの名無しさん
10/01/27 17:56:26
スレリンク(tech板:245番)
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):
# キーボードから正の整数nを入力し、n!を計算して画面表示するプログラムを
# 作成せよ。ただし、階乗を計算する関数のプロトタイプを「void kaiyo(int , int *)」
# とし、第1引数にnを、第2引数に計算結果を格納する変数のポインタを指定すること。
#
463:デフォルトの名無しさん
10/01/27 19:42:34
>>449
使用言語:Arc
arc> (even 5)
nil
arc> (even 4)
t
arc> (def even? (n) (is (mod n 2) 0))
#<procedure: even?>
arc> (even? 23)
nil
arc> (even? 24)
t
464:デフォルトの名無しさん
10/01/27 20:12:02
>>449
使用言語:
(%i26) even(n):=is(mod(n,2)=0);
(%i27) even(23);
(%o27) false
(%i28) even(24);
(%o28) true
(%i29) f(n):=mod(n,2)=0;
(%i30) f(23);
(%o30) 1 = 0
(%i31) f(24);
(%o31) 0 = 0
(%i32) if f(4) then "even" else "odd";
(%o32) even
isがないとtrue,falseの表示にならないようだ。
465:デフォルトの名無しさん
10/01/27 20:16:34
>>464
書き忘れましたが、使用言語は maxima です。
466:デフォルトの名無しさん
10/01/27 21:03:29
>>449
使用言語:scheme(Gauche)
gosh> (even? 23)
#f
gosh> (even? 24)
#t
gosh> (define (even n) (= (modulo n 2) 0))
even
gosh> (even 23)
#f
gosh> (even 24)
#t
467:デフォルトの名無しさん
10/01/27 21:12:54
>>449
使用言語:Common Lisp(xyzzy)
(evenp 23)
nil
(evenp 24)
t
(defun even (n) (= (mod n 2) 0))
even
(even 23)
nil
(even 24)
t
468:デフォルトの名無しさん
10/01/28 00:53:54
>>449
使用言語:十進BASIC
論理式は制御構文でしか使えないので真偽値を受け渡しすることはできないようだ。
なので、真偽値を返す関数は、真のときの値、偽のときの値を適当にきめてやりとりするしかないみたい。
ここでは、真のとき1を偽のとき0を返すようにした。
FUNCTION even(n)
IF MOD(n,2)=0 THEN
LET even=1
ELSE
LET even=0
END IF
END FUNCTION
PRINT even(23)
PRINT even(24)
END
実行結果
0
1
469:デフォルトの名無しさん
10/01/28 05:13:18
>>431
% Prolog Prologでリングバッファは表現できるが無意味。究竟Prologのキューはスタック操作。
'New'(X-X).
'Enque'(_要素,X-[_要素|Y],X-Y).
'Deque'(_要素,[_要素|X]-Y,X-Y).
'Empty'(X-Y) :- X == Y.
キュー操作 :- 'New'(Q1),キュー操作機能選択(Q1).
キュー操作.
キュー操作機能選択(Q1) :-
get_line(_機能選択),
キュー操作機能選択(_機能選択,Q1,Q2),
キュー操作機能選択(Q2),!.
キュー操作機能選択(q,_,_) :- !,fail.
キュー操作機能選択(d,Q1,Q2) :- 'Deque'(_要素,Q1,Q2), write_formatted('%t\n',[_要素]),!.
キュー操作機能選択(s,Q1,Q1) :- キュー表示(Q1),!.
キュー操作機能選択(A,Q1,Q2) :- atom_to_term(A,N,_),'Enque'(N,Q1,Q2),!.
キュー表示(X-X) :- !.
キュー表示(X-Y) :- \+(var(X),var(Y),キュー表示(X-[Y]),!.
キュー表示(X-Y) :- \+(var(Y)),
append(U,Y,X),
concat_atom(U,' ',S),
write_formatted('%t\n',[S]),!.
470:469
10/01/28 05:16:26
ついでに言うとこれは説明不能ww ということは、
重リストを使ったキュー操作はあまり推奨できるプログラムではないのかも。
471:デフォルトの名無しさん
10/01/28 05:40:10
>>462
% Prolog 関数名kaiyoはたぶんミスパンチと思うので
kaijo(0,1) :- !.
kaijo(N,X) :- N1 is N - 1,kaijo(N1,Y),X is N * Y.
472:デフォルトの名無しさん
10/01/28 06:00:53
>>462
% Prolog
'キーボードから正の整数nを入力し、n!を計算して画面表示する' :-
repeat,
催促付き整数入力('正の整数を入れてください :',N),
N >= 0,
kaijo(N,X),
write_formatted('%tの階乗は%tです。\n',[N,X]),!.
kaijo(0,1) :- !.
kaijo(N,X) :- N1 is N - 1,kaijo(N1,Y),X is N * Y.
473:デフォルトの名無しさん
10/01/28 06:27:18
>>426
% Prolog もっと複雑な問題らしい。一応基礎部分ということで。
累乗の計算の逆を行うプログラムの基礎部分(A,A ^ 1) :- atomic(A),!.
累乗の計算の逆を行うプログラムの基礎部分((A * A),A ^ 2) :- atomic(A),!.
累乗の計算の逆を行うプログラムの基礎部分((B * A) * A,A ^ N) :-
累乗の計算の逆を行うプログラムの基礎部分((B * A),A ^ N1),
N is N1 + 1,!.
474:デフォルトの名無しさん
10/01/28 07:38:10
>>426
% Prolog >>473は利用しないことになってしまった。
累乗の計算の逆を行うプログラム(_乗算項,X) :-
乗算項をならびに変換(_乗算項,L1),
quicksort(L1,L2),
累乗の計算の逆を行うプログラム項構成(L2,X).
乗算項をならびに変換(A,[A]) :- atomic(A),!.
乗算項をならびに変換((B*A),[A|R]) :-
atomic(A),
乗算項をならびに変換(B,R).
累乗の計算の逆を行うプログラム項構成([A],A) :- !.
累乗の計算の逆を行うプログラム項構成([A,A|R1],A ^ N) :-
累乗の計算の逆を行うプログラム項部分構成([A,A|R1],[],A ^ N),!.
累乗の計算の逆を行うプログラム項構成([A,A|R1],A ^ N * Y) :-
累乗の計算の逆を行うプログラム項部分構成([A,A|R1],R,A ^ N),!.
累乗の計算の逆を行うプログラム項構成(R,Y),!.
累乗の計算の逆を行うプログラム項構成([A,B|R1],A * Y) :-
累乗の計算の逆を行うプログラム項構成([B|R1],Y),!.
累乗の計算の逆を行うプログラム項部分構成([A],[],A ^ 1) :- !.
累乗の計算の逆を行うプログラム項部分構成([A,A|R1],R,A ^ N) :-
累乗の計算の逆を行うプログラム項部分構成([A|R1],R,A ^ N1),
N is N1 + 1,!.
累乗の計算の逆を行うプログラム項部分構成([A,B|R],[B|R],A ^ 1) :- !.
475:デフォルトの名無しさん
10/01/28 15:26:00
>>449
使用言語:tcl
% proc even {n} {expr $n%2==0}
% even 23
0
% even 24
1
476:デフォルトの名無しさん
10/01/28 15:28:48
>>449
使用言語:Xtal
ix:004>even:fun(n) n%2==0;
ix:005>even(23).p;
false
ix:006>even(24).p;
true
477:デフォルトの名無しさん
10/01/28 15:59:40
>>449
使用言語:Scala
scala> def even(n:Int):Boolean={n%2==0}
even: (Int)Boolean
scala> even(23)
res3: Boolean = false
scala> even(24)
res4: Boolean = true
478:デフォルトの名無しさん
10/01/28 16:17:01
>>449
使用言語:Clojure
user=> (even? 23)
false
user=> (even? 24)
true
user=> (defn even [n] (= (mod n 2) 0))
#'user/even
user=> (even 23)
false
user=> (even 24)
true
479:デフォルトの名無しさん
10/01/28 18:09:44
>>449
使用言語:R
> even <- function(n){n%%2==0}
> even(23)
[1] FALSE
> even(24)
[1] TRUE
480:デフォルトの名無しさん
10/01/28 18:29:39
>>453
問題がfalseとなっているから仕方ないのかも知れないが、
failにしておいた方が無難。call(fail)で真偽値に戻せるから。falseだと、
K-Prolog Compiler version 6.0.4 (C) KLS Research, Inc.
15: ?- fail.
no
16: ?- false.
existence_error: "procedure" found at "false"
Culprit: "false/0"
17: ?-
のようなことになる。
481:デフォルトの名無しさん
10/01/28 22:51:35
スレリンク(tech板:296番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 10個の要素を持つ動的な整数配列を作るプログラムを作成しなさい。
# 動的な配列へのポインタを整数ポインタに代入しなさい。
# 次に、ポインタ算術または配列の添字を使って、1から10までの値を配列を構成する整数に代入しなさい。
# 最後に、代入した値を表示し、メモリを解放しなさい。
#
482:デフォルトの名無しさん
10/01/28 22:53:22
スレリンク(tech板:299番)
# [1] 授業単元:コンピュータリテラシー
# [2] 問題文(含コード&リンク):
# あるファイルの名簿を呼びだし、名前もしくは名字で検索しその結果を新しいファイルに保存する。あるファイルの名簿は特に決められていない。
# URLリンク(ime.nu)
483:デフォルトの名無しさん
10/01/28 22:57:40
スレリンク(tech板:307番)
# [1] Cプログラミング入門:
# [2] URLリンク(ime.nu)
# 次のプログラムを作成し二つのファイルを提出せよ。
# 1:0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に
# 格納せよ.(乱数使用:学籍番号で初期化)学籍番号:200
# 2:次に異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納せよ.
# 3:ソート方法 A を用いて配列 COM,MAN の要素をそれぞれ小さい
# 順に並べよ.
# 4:配列 COM に含まれる配列 MAN の数字の個数 count を求めよ.
# 5:最後に,配列 COM,MAN の全要素,変数 count を
# result.out に書き込め.
# 6:出力形式は自由とするが,main 関数内は 10 行以内にすること.
# ソート方法A
# 1 :作業用の配列として、要素が 100 個の int 型の配列 Work を用意
# する.
# 2 :配列 Work の各要素は、0 に初期化する.
# 3 :ソートしたい配列 x の要素を順番に読んで、Work[ その値 ] を +1
# する.
# 4 :作業3を全ての x の要素について行った後、Work の要素を小さい
# ほうから順番に読んで、Work の値が 0 でなければ、x に書き戻し
# ます。
484:デフォルトの名無しさん
10/01/28 22:59:38
スレリンク(tech板:309番)
# [1] C言語プログラミング演習(大学任意科目)
# [2] コマンドラインで指定された各テキストファイルに対して個別に以下の処理を行うCプログラムを作成
# ☆テキストファイルを通読し、各行のインデント深度の最大値を求める(それをNとおく)
# ☆テキストファイルの先頭から再度読み出し、それぞれの行についてインデント深度がnなら
# ば、インデント深度をN-nに変更したものを標準出力する。
# ☆新しいテキストファイルのNが判明した時点で、その改行とファイル名、改行を標準出力する。
# ここでインデント深度とは、行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合
# 深度=nとする。
485:デフォルトの名無しさん
10/01/28 23:04:35
スレリンク(tech板:315番)
# [1] 授業単元:プログラミング応用
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
#
# ■問題1
# pnm(pbm, pgm, ppm)フォーマット画像ファイルを読み込み、
# 左右を反転させた画像をpnmフォーマット画像ファイルとして
# 保存するプログラムを作成せよ.
#
# ■問題2
# 256(横)×256(縦)の画素数をもつpgmフォーマット画像の階調度を
# 7段階(128階調,64階調,32階調,16階調,8階調,4階調,2階調)で変換し,
# 各階調に変換したときの画像(7枚)をpgmフォーマット画像として
# 保存するプログラムを作成せよ.
#
# ※問題1,2共に、アスキー形式とバイナリー形式のpnmフォーマット画像を
# 処理できるプログラムとすること
486:デフォルトの名無しさん
10/01/28 23:38:02
>>481
% Prolog 例によって配列はリスト(ならび)とします。
'10個の要素を持つ動的な整数配列(ならび)を作り、1から10までの整数を代入し、値を表示し、メモリを解放する' :-
length(L,10),
ならびに値を設定する(L),
write_formatted('%t\n',[L]),
fail.
'10個の要素を持つ動的な整数配列(ならび)を作り、1から10までの整数を代入し、値を表示し、メモリを解放する'.
ならびに値を設定する(L) :-
ならびに値を設定する(1,L).
ならびに値を設定する(10,[10]) :- !.
ならびに値を設定する(N,[N|R]) :- N2 is N + 1,ならびに値を設定する(N2,R).
487:デフォルトの名無しさん
10/01/29 04:46:44
>>482
% Prolog
名簿を呼びだし、名前で検索しその結果を新しいファイルに保存する(_名簿ファイル,_出力ファイル,_検索する名前) :-
名簿を呼び出し(_名簿ファイル,L),
名前で検索しその結果を新しいファイルに保存する(_出力ファイル,L,_名前),!.
名簿を呼び出し(_名簿ファイル,L) :-
get_split_lines(_名簿ファイル,[' ',','],L),!.
名前で検索しその結果を新しいファイルに保存する(_出力ファイル,L,_名前) :-
tell(_出力ファイル),
名前で検索しその結果を新しいファイルに保存する(L,_名前),
told.
名前で検索しその結果を新しいファイルに保存する([],_) :- !.
名前で検索しその結果を新しいファイルに保存する([[_名字,_名前,_住所,_電話番号]|R],_名前) :-
write_formatted('%t,%t,%t,%t\n',[_名字,_名前,_住所,_電話番号]),
名前で検索しその結果を新しいファイルに保存する(R,_名前),!.
名前で検索しその結果を新しいファイルに保存する([_|R],_名前) :-
名前で検索しその結果を新しいファイルに保存する(R,_名前),!.
488:デフォルトの名無しさん
10/01/29 05:29:08
>>483
% Prolog 1:
'1:0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(COM) :-
'COMを確保する'(COM),
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'([],COM).
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(COM,COM) :- !.
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(L1,COM) :-
'0〜99の数字'(N),
\+(member(N,L1)),
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'([N|L1],COM),!.
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(L1,COM) :-
'0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(L1,COM),!.
'COMを確保する'(COM) :- length(COM,30).
'0〜99の数字'(N) :- N is random mod 100.
489:デフォルトの名無しさん
10/01/29 06:03:17
>>483
% Prolog 2:
'2:次に異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納せよ'(MAN) :-
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN) :-
'MANを確保'(MAN,6),
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'([],MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN,MAN) :- !.
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN) :-
get_integer(N),
\+(member(N,L1)),
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'([N|L1],MAN) :- !.
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN).
490:デフォルトの名無しさん
10/01/29 06:08:59
>>483 訂正
% Prolog 2: 順番にという以上入力と逆順になってはマズイ。
'2:次に異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納せよ'(MAN) :-
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN) :-
'MANを確保'(MAN,6),
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'([],MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN,MAN) :- !.
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN) :-
get_integer(N),
\+(member(N,L1)),
append(L1,[N],L2),
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L2,MAN) :- !.
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN).
'異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN).
491:デフォルトの名無しさん
10/01/29 07:58:33
>>483
% Prolog 3: ソート方法AはPrologのリスト(ならび)仕様に書き換えました。効率は大変悪い。
'ソート方法 A を用いて配列 COM,MAN の要素をそれぞれ小さい順に並べる'(L1,L2) :-
ソート方法A(L1,L2).
ソート方法A(L1,L2) :-
'作業用のならびとして、要素が100 個の変数であるならびWorkを用意する'(Work),
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'(L1,Work),
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(L1,L2).
'作業用のならびとして、要素が100 個の変数であるならびWorkを用意する'(Work) :-
length(Work,100).
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'([],Work) :- !.
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'([N|R1],Work) :-
list_nth(N,Work,1),
'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'(R1,Work),!.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([],[]) :- !.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([A|R1],[A|R2]) :-
\+(var(A)),
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(R1,R2),!.
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([V|R1],L2) :-
var(V),
'全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(R1,L2).
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4399日前に更新/462 KB
担当:undef