いろんな言語で宿題スレ 第三編
at TECH
[1からを表示]
50:デフォルトの名無しさん
09/12/24 16:13:16
>>49
% Prolog
:- op(500,xfx,…).
賞味期限(16…予約はじまる).
賞味期限(22…予約最盛期).
賞味期限(23…我慢できない).
賞味期限(24…最盛期).
賞味期限(25…ロスタイム).
賞味期限(26…半額).
賞味期限(27…更に半額).
賞味期限(28…返品).
賞味期限(29…廃棄処分).
賞味期限(30…廃棄処分逃れてもカビ).
51:デフォルトの名無しさん
09/12/24 16:50:47
>>49
% Prolog
賞味期限(16,予約はじまる).
賞味期限(22,予約最盛期).
賞味期限(23,我慢できない).
賞味期限(24,最盛期).
賞味期限(25,ロスタイム).
賞味期限(26,半額).
賞味期限(27,更に半額).
賞味期限(28,返品).
賞味期限(29,廃棄処分).
賞味期限(30,廃棄処分逃れてもカビ).
52:デフォルトの名無しさん
09/12/24 17:11:44
>>22
% Prolog こんなところから。
重層的な対象(待つ,人).
重層的な対象(待つ,風).
重層的な対象(焼く,身).
重層的な対象(焼く,藻).
形態的近似(松,帆).
形態的近似(帆,松).
音通(待つ,松).
音通(松,待つ).
音通(裏,占).
音通(占,裏).
音通(裏,浦).
音通(浦,裏).
音通(占,浦).
音通(浦,占).
連想(X,Y) :- 音通(X,Y).
連想(X,Y) :- 形態的近似(X,Y).
連想(X,Y) :- 連想(X,Z),連想(Z,Y).
53:デフォルトの名無しさん
09/12/24 18:12:47
>>30
% Prolog
'50人のクラス(男子35人)から5人の委員をランダムに選ぶ。このとき選ばれた委員の中に男3人、女2人が入る確率'(_確率) :-
A is 50 * 49 * 48 * 47 * 46,
B is 35 * 34 * 33 * 15 * 14,
階乗(5,C),
階乗(3,D),
階乗(2,E),
F is C / ( D * E),
_確率 is (B * F) / A.
54:デフォルトの名無しさん
09/12/24 18:29:49
スレリンク(tech板:652番)
# 【 課題 】キーボードから文字入力し、":"で文字列分割をし、結果を表示する。
# 文字列分割の際にはsplitメソッドを利用すること。
55:デフォルトの名無しさん
09/12/24 18:52:34
>>54
% Prolog
'キーボードから文字入力し、":"で文字列分割をし、結果を表示する' :-
get_line(Line),
split(Line,[':'],L),
write_formatted('%t\n',[L]).
56:デフォルトの名無しさん
09/12/24 21:44:44
スレリンク(tech板:431番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 20000〜40000までの自然数のうち、数字の9を2個含む素数の個数を調べよ
#
57:デフォルトの名無しさん
09/12/24 22:41:59
>>56
% Prolog
'20000〜40000までの自然数のうち、数字の9を2個含む素数の個数'(_個) :-
素数生成(40000,_素数ならび),
count((member(N1,_素数ならび),N1>=20000,数字の9を2個含む(N1)),_個).
数字の9を2個含む(N) :-
number_chars(N,L),
count(member('9',L),2),!.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
素数生成(N,X) :-
findall(M,for(2,M,N),L),
エラトステネスの篩(L,X).
エラトステネスの篩([],[]) :- !.
エラトステネスの篩([A|R1],[A|R2]) :-
エラトステネスの篩(A,R1,L),
エラトステネスの篩(L,R2).
エラトステネスの篩(_,[],[]) :- !.
エラトステネスの篩(N,[A|R1],R2) :-
0 is A mod N,
エラトステネスの篩(N,R1,R2),!.
エラトステネスの篩(N,[A|R1],[A|R2]) :-
エラトステネスの篩(N,R1,R2).
58:デフォルトの名無しさん
09/12/25 03:29:44
スレリンク(tech板:439番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
#
# 三角形の「底辺」「高さ」「面積」を表現するために,整数型の2つの変数teihenとtakasaと浮動小数点型(double型)の1つの変数mensekiの,計3つの変数をメンバとしてもつ構造体型sankakuを宣言しよう.
#
# main関数の中で,構造体変数triangle1とtriangle2が次のように定義されているとする.
#
# struct sankaku triangle1 = {2, 8, 0.0};
#
# struct sankaku triangle2 = {3, 6, 0.0};
#
# このとき,以下の式で三角形の面積を計算し,それぞれのメンバ変数mensekiに求めた値を格納しよう.(整数同士の計算結果は必ず整数型の値になってしまうため,「2.0」という小数点付の数で割る計算をすること.そうすると,小数点以下の値まで求められる)
#
# (面積) = (底辺) × (高さ) / 2.0
#
# さらに,格納されたそれぞれの面積の値(triangle1のmensekiとtriangle2のmenseki)を表示するプログラムを作成せよ.(表示の際にはdouble型の値を表示することになるので,printfの" "の中の書き方に注意すること)
59:デフォルトの名無しさん
09/12/25 06:58:36
>>12
使用言語: J
f=:|.&.":
f 56789
98765
1 + f 56789
98766
60:デフォルトの名無しさん
09/12/25 07:00:36
>>30
% Prolog 一般解を試みる。あまりすっきりしない。
'メンバーが男Mn人女Fn人で構成される時、男M人女N人をランダムに取り出す確率'(Mn,Fn,M,N,_確率) :-
メンバー全員は(Mn,Fn,Sn),
Sm is Sn - M - N + 1,
Mm is Mn - M + 1,
Nm is Nn - N + 1,
'男M人女N人の取り出し順序は何通りか'(M,N,_何通り),
'分母はSn*S(n-1)*..*S(m+1)*Smである'(Sn,Sm,_分母),
'分子はMm*M(m-1)*..M(n+1)*M(n)*Fm*F(m-1)..*F(n+1)*Fnに取り出し順序の何通りかを掛けたものである'(Mn,Mm,Fn,Fm,_何通り,_分子),
_確率 is _分子 / _分母.
'分母はSn*S(n-1)*..*S(m+1)*Smである'(Sn,Sm,_分母) :- 階乗(Sn,Sm,_分母),!.
'分子はMm*M(m-1)*..M(n+1)*M(n)*Fm*F(m-1)..*F(n+1)*Fnに取り出し順序の何通りかを掛けたものである'(Mn,Mm,Fn,Fm,_何通り,_分子) :-
階乗(Mn,Mm,A),
階乗(Fn,Fm,B),
_分子 is A * B * _何通り,!.
'男M人女N人の取り出し順序は何通りか'(M,N,_何通り) :-
S is M + N,
階乗(M,M1),
階乗(N,N1),
階乗(S,S1),
_何通り is S1 / ( M1 * N1 ).
61:デフォルトの名無しさん
09/12/25 07:05:28
>>30 つづき。
% Prolog
メンバー全員は(Mn,Fn,Sn) :- Sn is Mn + Fn.
階乗(0,_,1) :- !.
階乗(1,_,1) :- !.
階乗(M1,M,1) :- M1 < M,!.
階乗(N,M,X) :-
N1 is N - 1,
階乗(N1,M,Y),
X is N * Y,
asserta((階乗(N,M,X) :- (!))),!.
62:デフォルトの名無しさん
09/12/25 07:55:10
>>56
PHP
URLリンク(codepad.org)
63:デフォルトの名無しさん
09/12/25 07:58:46
>>56
使用言語: J
+/2=+/"1'9'=":,.p:a+i.(_1&p:40000)-(a=._1&p:20000)
141
64:デフォルトの名無しさん
09/12/25 11:27:52
>>12
使用言語: maxima
(%i36) f(n):=(r:0,while(n>0)do (r:r*10+mod(n,10),n:fix(n/10)),r);
(%i37) f(987654321);
(%o37) 123456789
65:デフォルトの名無しさん
09/12/25 11:57:00
スレリンク(tech板:442番)
# [1] 授業単元: プログラミング実習
# [2] 問題文(含コード&リンク): URLリンク(ime.nu)
#
# ★演習問題3*
# "izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の
# 文字列の長さを求めて表示しなさい.ただし,ポインタのボインタを用いること.
#
# (実行結果)
# 6 :izumi
# 5 : kanto
# 4 : Kudo
# 4 : Sato
# 8 : Sugawara
# 6 : Matuda
# 4 : Wada
66:デフォルトの名無しさん
09/12/25 12:04:17
>>65
% Prolog
指定された文字列('"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"').
'"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示する' :-
指定された文字列(_指定された文字列),
atom_to_term(_指定された文字列,_文字コードならびのならび),
member(Codes,_文字コードならびのならび),
length(Codes,_長さ),
atom_codes(_表示文字列,Codes),
write_formatted('%t:%t\n',[_長さ,_表示文字列]),
fail.
'"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示する'.
67:デフォルトの名無しさん
09/12/25 12:09:16
>>65
% Prolog
指定された文字列('"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"').
'"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示する' :-
指定された文字列(_指定された文字列),
split(_指定された文字列,[',','"'],_文字ならびのならび),
member(Chars,_文字ならびのならび),
length(Chars,_長さ),
atom_chars(_表示文字列,Chars),
write_formatted('%t:%t\n',[_長さ,_表示文字列]),
fail.
'"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示する'.
68:デフォルトの名無しさん
09/12/25 12:15:11
>>65
% Prolog
指定された文字列('"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"').
'"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示する' :-
指定された文字列(_指定された文字列),
split(_指定された文字列,[',','"'],_文字ならびのならび),
文字列を長さと共に表示する(_文字ならびのならび).
文字列を長さと共に表示する([]) :- !.
文字列を長さと共に表示する([Chars|R]) :-
length(Chars,_長さ),
atom_chars(_表示文字列,Chars),
write_formatted('%t:%t\n',[_長さ,_表示文字列]),
文字列を長さと共に表示する(R).
69:デフォルトの名無しさん
09/12/25 12:17:10
>>68
splitの下の行のインデントが狂いました。
70:デフォルトの名無しさん
09/12/25 12:20:47
そうそう。
インデントはPrologの実行にはまったく関係ありません。
これを習慣にしている人には見易いかなという程度の問題です。
冬休みに入って課題が出ない日がしばらくは続くでしょうね。
71:デフォルトの名無しさん
09/12/25 13:54:28
スレリンク(tech板:442番)
# [1] 授業単元: プログラミング実習
# [2] 問題文(含コード&リンク): URLリンク(ime.nu)
#
# 演習問題1
# 入力されたデーク数に応じた配列を確保し,入力されたデータをその配列に保存し,
それらの和を求めよ.
# (実行結果例)
# データの数は?10
# 1番目のデータを人力してください:1
# 2番目のデータを入力してください:2
# 3番目のデータを入力してください:3
# 4番目のデータを入力してください:4
# 5番目のデータを入力してください:5
# 6番目のデータを人力してください:6
# 7番目のデータを入力してください:7
# 8番目のデータを入力してください:8
# 9番目のデータを入力してください:9
# 10番目のデータを入力してください:10
# 和=55
72:デフォルトの名無しさん
09/12/25 14:00:34
>>71
% Prolog
入力されたデーク数に応じた配列を確保し,入力されたデータをその配列に保存し,それらの和を求める :-
催促付き整数入力('データの数は?',N),
findsum(X,(for(1,M,N),催促付き整数入力('%t番目のデータを入力してください:',[M],X)),_和),
write_formatted('和=%t\n',[_和]).
73:デフォルトの名無しさん
09/12/25 14:40:46
>>71
% Prolog >>72はズルしてるのでもうひとつ。配列はリストと読み替えてください。
入力されたデーク数に応じた配列を確保し,入力されたデータをその配列に保存し,それらの和を求める :-
催促付き整数入力('データの数は?',N),
入力されたデーク数に応じた配列を確保し(N,L),
入力されたデータをその配列に保存し、([_],L),
それらの和を求める(L,_和),
write_formatted('%\n',[_和]).
入力されたデーク数に応じた配列を確保し(N,L) :- length(L,N).
入力されたデータをその配列に保存し、(_,[]) :- !.
入力されたデータをその配列に保存し、(L,[N|R]) :-
length(L,M),
催促付き整数入力('%t番目のデータを入力してください:',[M],N),
入力されたデータをその配列に保存し、([_|L],R).
それらの和を求める([],0).
それらの和を求める([N|R],X) :- それらの和を求める(R,Y),X is N + Y.
74:デフォルトの名無しさん
09/12/25 15:26:57
>>65
使用言語: J
(,.~#&.>)'izumi';'Kanto';'Kudo';'Sato';'Sugawara';'Matuda';'Wada'
+-+--------+
|5|izumi |
+-+--------+
|5|Kanto |
+-+--------+
|4|Kudo |
+-+--------+
|4|Sato |
+-+--------+
|8|Sugawara|
+-+--------+
|6|Matuda |
+-+--------+
|4|Wada |
+-+--------+
75:デフォルトの名無しさん
09/12/25 16:11:50
スレリンク(tech板:314番)
# [1] 授業単元: プログラミング
#
# [2] 問題文(含コード&リンク):
# 遺伝的アルゴリズムを基にTSP(巡回セールスマン問題)の近似解法のプログラムを書け。
# ただし都市数の数は5〜6個程度で、都市間の距離は自由に決めてよいとする。
#
76:デフォルトの名無しさん
09/12/25 16:12:52
# [1] 授業単元: C言語
# [2] 問題文(含コード&リンク):
# 巡回セールスマン問題をNearest Addition法で解くプログラムを作成せよ。
# Nearest Addition法とは
# (1)1つの都市からなる長さ0の部分閉路Tをひとつ作成する
# (2)現在の部分閉路Tが全ての都市を含むならば、それが解
# (3)そうでないならば、Tに含まれる都市jとTに含まれない都市kの組み合わせで、
# jとkの間の距離Cjk(jkはCの右下)を最小にするようなものを求める
# (4)(i,j)をTに含まれるパスとするとき、これを2つのパス(i,k)と(k,j)で置き換える
# (5)以上の(2)〜(4)を繰り返す
77:デフォルトの名無しさん
09/12/25 16:19:25
スレリンク(tech板:157番)
# 【 課題 】URLリンク(rg550.hp.infoseek.co.jp)
# 行列や固有値を扱う数値計算の課題です。
#
# 逆反復法(逆べき乗法)とLU分解を用いて、固有値問題を解く。
# 与える行列Aはn*n行列で、4*4や5*5でも、自由に数値を定めて良い。
# 1)一番小さい固有値に対応する固有ベクトルsVを求める。
# 2)二番目に小さい固有値に対応する固有ベクトルVを求める。
# double [] gauss(double[][] A , double[] b)
# のような形を作り、
# LU分解のメソッドを逆べき乗法のメソッドでコールするようにする。
# (あらかじめAをLU分解しておき、連立一次方程式を解いて反復するため)
# 解はdouble[]の形のベクトルで、for文の中でSystem.out.printを回して出力。
# ここまでが最低ライン。可能ならば
# ベクトル集合V=(v1,v2,....vn)において、
# Vi < 0 のときは-1のラベルを、
# Vi >=0 のときは 1のラベルをつける。
78:デフォルトの名無しさん
09/12/25 16:29:29
URLリンク(chomework.sakura.ne.jp) (レス番号194)
# [1] 授業単元: 情報処理
# [2] 問題文(含コード&リンク):ファイルからデータ(迷路空間)を読み込む処理と構造体・リストを用いた、
# 迷路空間を作成せよ。
# 読み込むデータは右図のような形式であり、 ******
# 各記号は次の意味を持つものとする。 *8000*
# * : 壁 ****0*
# 0 : 通路 **000*
# 8 : 通路 & スタート *90*0*
# 9 : 通路 & ゴール ******
# 迷路空間は、必ず長方形であることを前提とする。
# そして、再帰を用いた迷路空間の探索プログラムも作成せよ。
# 最短経路と後戻りした記録付き経路のどちらを表示しても構わないが両方表示した方がポイント高し
79:デフォルトの名無しさん
09/12/25 16:51:53
スレリンク(tech板:384番)
# [1] 授業単元:ヒューマンインターフェイス
# [2] 問題文(含コード&リンク):少なくとも以下の英文を日本語分に翻訳できるプログラムを作成せよ
# 1.The boy beats a dog with a stick.
# 2.Every boy loves a dog .
# 3.The dog is loved by every boy.
# 4.The boy saw a girl with a telescope.
# 5.The boy saw a girl with a dog.
# 6.The boy cut a stick with a saw.
80:デフォルトの名無しさん
09/12/25 17:16:22
スレリンク(tech板:389番)
# [1] 授業単元:C言語実習
# [2] 問題文(含コード&リンク): URLリンク(ime.nu)
# ■問題1
# 任意の画素数をもつ画像をアフィン変換(移動,拡大縮小,回転,せん断)するプログラムを作成せよ.
# 変換後の画像は画像ファイルとして保存すること.
#
# ■問題2
# 問題1で作成したプログラムに,逆アフィン変換を行う機能を追加せよ。
# そして,アフィン変換,逆アフィン変換(最近傍法),逆アフィン変換(線形補間法)での結果に違いがあることを確認せよ.
#
# ※逆アフィン変換とは,出力画像の座標値(X, Y)に対して逆変換を行うことで,入力画像の座標値(x, y)を求めるものである.
#
# (注意)
# 変換後の座標値が,配列のサイズ(縦と横)を越えるかどうかを確認し,超える場合は適切な例外処理を行うこと.
81:デフォルトの名無しさん
09/12/25 17:25:52
スレリンク(tech板:81番)
# [1] 授業単元: C++
# [2] 問題文(含コード&リンク):公開鍵と秘密鍵を作り、これらを使い暗号化と復号化を行うプログラムを書け。(RSA暗号)
# [4] 期限: 2009/11/17朝まで
# 暗号化と復号化の手順は
# URLリンク(ime.nu)
#
82:デフォルトの名無しさん
09/12/25 17:55:57
宿題スレ難問集の様相を呈してきました。
HaskellやOCamlそして、Scalaなどの使い手がバッサバッサとプログラミングして
くれるといいんだがな。
83:デフォルトの名無しさん
09/12/25 19:22:44
>>38 問1
使用言語: 十進BASIC
LET st= TIME
LET r=0
FOR a=1 TO 1000
LET aa=a*a
FOR b=a TO 1000
LET bb=b*b
FOR c=1 TO 1000-a-b
IF aa+bb=c*c THEN LET r=r+1
NEXT C
NEXT B
NEXT A
PRINT r
PRINT TIME-st;" sec (CeleronM 1.46GHz)"
END
実行結果
325
10.5 sec (CeleronM 1.46GHz)
84:デフォルトの名無しさん
09/12/25 19:59:17
>>38 問2
使用言語: 十進BASIC
LET st= TIME
LET maxs=0
LET maxa=0
LET maxb=0
LET maxc=0
FOR a=1 TO 1000
LET aa=a*a
FOR b=a TO 1000
LET ab=aa+b*b
FOR c=1 TO 1000-a-b
IF ab=c*c THEN
LET ab2=a*b/2
IF ab2>maxs THEN
LET maxs=ab2
LET maxa=a
LET maxb=b
LET maxc=c
END IF
END IF
NEXT C
NEXT B
NEXT A
PRINT maxa;maxb;maxc
PRINT TIME-st;" sec (CeleronM 1.46GHz)"
END
実行結果
264 315 411
8.89999999999418 sec (CeleronM 1.46GHz)
85:デフォルトの名無しさん
09/12/25 21:49:13
スレリンク(tech板:442番)
# [1] 授業単元: プログラミング実習
# [2] 問題文(含コード&リンク): URLリンク(ime.nu)
#
# ★演習問題5
# 人力されたクラスの人数と科目の数に応じた配列を確保し,入力されたデータをその配列に保存し,科目ごとの和を求めよ。
# 例として,人数を3とし,科目数を3とした場合,それぞれの科日数に対する点数を読み込み,結果が正しく出力されるかを確認せよ。
# (時間があれば,人数や科日数を適当に変えて,動作を確認せよ)
# (実行結果例)
# クラスの人数は?4
# 科目の数は?3
# 1番目の学生
# 85
# 74
# 63
# < 中略>
# 各科目の和は以下の通りです
# 222
# 213
# 269
86:デフォルトの名無しさん
09/12/25 22:26:12
>>85
% Prolog ここでも配列はリストと読み替えてください
'人力されたクラスの人数と科目の数に応じた配列を確保し,入力されたデータをその配列に保存し,科目ごとの和を求めよ' :-
人力されたクラスの人数と科目の数に(_クラスの人数,_科目の数),
応じた配列を確保し(_クラスの人数,_科目の数,L),
データを入力する([_],L),
科目ごとの和を求める(_和ならび),
和ならびを表示する(_和ならび).
人力されたクラスの人数と科目の数に(_クラスの人数,_科目の数) :- 催促付き整数入力('クラスの人数は ?',_クラスの人数),催促付き整数入力('科目の数は ?',_科目の数),!.
応じた配列を確保し(_クラスの人数,_科目の数,L) :- length(L,_クラスの人数),findall(L1,(member(L1,L),length(L1,_科目の数)),L).
データを入力する(_,[]) :- !.
データを入力する(NL,[L|R]) :-
length(NL,N),write_formatted('%t番目の学生は ?',[N]),
findall(A,(member(A,L),get_integer(A)),L),
データを入力する([_|NL],R).
科目ごとの合計を求める(L,_和ならび) :- 行列の転置(L,L1),findall(S,(member(L2,L1),sum(L2,S)),_和ならび).
和ならびを表示する([]) :- !.
和ならびを表示する([_和|R]) :- write_formatted('%t\n',[_和]),和ならびを表示する(R).
87:デフォルトの名無しさん
09/12/26 00:00:33
>>12 使用言語: 十進BASIC 計算だけで反転するのと文字列に変換して反転するのを比べてみた。
FUNCTION f1(n)
LET r=0
DO WHILE n>0
LET r=r*10+MOD(n,10)
LET n=INT(n/10)
LOOP
LET f1=r
END FUNCTION
FUNCTION f2(n)
LET s1$=STR$(n)
LET s2$=s1$
LET b=LEN(s1$)
FOR i=1 TO b
LET s2$(b-i+1:b-i+1)=s1$(i:i)
NEXT I
LET f2=VAL(s2$)
END FUNCTION
LET st=TIME
FOR i=1 TO 1000000
LET a=f1(123456789)
NEXT I
PRINT "f1";TIME -st;"sec"
LET st=TIME
FOR j=1 TO 1000000
LET a=f2(123456789)
NEXT J
PRINT "f2";TIME -st;"sec"
END
f1 3.63000000000466 sec
f2 24.5599999999977 sec
88:デフォルトの名無しさん
09/12/26 05:18:54
スレリンク(tech板:464番)
# 1:単元名 C言語
# 2:問題文
# 元金、単利と複利の利率に対して、次のものを求めるプログラムを作成しなさい。
#
# 30年後の残高。
# 30年以内に複利の残高は単利の残高を上回るか。
# 上回るならば何年後か。
89:デフォルトの名無しさん
09/12/26 06:17:05
>>56 使用言語: 十進BASIC
FUNCTION isprime(n)
LET isprime=0
IF MOD(n,2)=0 THEN
IF n=2 THEN LET isprime=1
ELSE
FOR i=3 TO SQR(n) STEP 2
IF MOD(n,i)=0 THEN EXIT FOR
NEXT i
IF i>SQR(n) THEN LET isprime=1
END IF
END FUNCTION
FUNCTION is99(n)
LET is99=0
LET r=0
DO WHILE n>0
IF MOD(n,10)=9 THEN
LET r=r+1
IF r>2 THEN EXIT DO
END IF
LET n=INT(n/10)
LOOP
IF r=2 THEN LET is99=1
END FUNCTION
LET s=0
FOR j=20000 TO 40000
IF isprime(j)=1 AND is99(j)=1 THEN LET s=s+1
NEXT J
PRINT s
END ! 実行結果 141
90:デフォルトの名無しさん
09/12/26 06:36:52
'30年後の残高'(_単利か福利か,_元金,_利息,_30年後の残高) :-
findall(_残高1,残高(_単利か複利か,30,_元金,_利率,_,_,_残高1),_残高ならび),
last(_残高ならび,_30年後の残高).
残高(_単利か複利か,_期間,_元金,_利率,_年目,_利息,_残高) :-
length(L,_期間),
残高(_単利か複利か,L,[_],_元金,_元金,_利率,_年目,_利息,_残高).
残高(単利,[_|R1],L1,_元金,_残高1,_利率,_年目,_利息,_残高) :-
_利息 は 切り捨て(_元金 * _利率),
_残高 is _残高1 + _利息,
length(L1,_年目),
write_formatted('%t年目 利息=%t 残高=%t\n',[_年目,_利息,_残高]).
残高(複利,[_|R1],L1,_元金,_残高1,_利率,_年目,_利息,_残高) :-
_利息 は 切り捨て(_残高1 * _利率),
_残高 is _残高1 + _利息,
length(L1,_年目),
write_formatted('%t年目 利息=%t 残高=%t\n',[_年目,_利息,_残高]).
残高(単利,[_|R1],L1,_元金,_残高1,_利率,_年目,_利息,_残高) :-
_利息1 は 切り捨て(_元金 * _利率),
_残高2 is _残高1 + _利息1,
残高(単利,R1,[_|L1],_元金,_残高2,_利率,_年目,_利息,_残高).
残高(複利,[_|R1],L1,_元金,_残高1,_利率,_年目,_利息,_残高) :-
_利息1 は 切り捨て(_残高1 * _利率),
_残高2 is _残高1 + _利息1,
残高(複利,R1,[_|L1],_元金,_残高2,_利率,_年目,_利息,_残高).
91:デフォルトの名無しさん
09/12/26 06:38:57
>>90 訂正
% Prolog www
福利 -> 複利
92:デフォルトの名無しさん
09/12/26 06:45:46
>>90
残高という述語名は好ましくないだろう。
93:デフォルトの名無しさん
09/12/26 07:07:39
>>90
% Prolog
'30年以内に複利の残高は単利の残高を上回るか。'(_元金,_複利の利率,_単利の利率) :
findall(_残高1,残高(複利,30,_元金,_複利の利率,_,_残高1),L1),
findall(_残高1,残高(単利,30,_元金,_単利の利率,_,_残高2),L2),
行列の転置([L1,L2],L3),
member([A,B],L3),
A > B.
94:デフォルトの名無しさん
09/12/26 07:13:12
>>93 一ヶ所書き直し。さてどこでしょう?
>>90
% Prolog
'30年以内に複利の残高は単利の残高を上回るか。'(_元金,_複利の利率,_単利の利率) :-
findall(_残高1,残高(複利,30,_元金,_複利の利率,_,_残高1),L1),
findall(_残高1,残高(単利,30,_元金,_単利の利率,_,_残高2),L2),
行列の転置([L1,L2],L3),
member([A,B],L3),
A > B.
95:デフォルトの名無しさん
09/12/26 07:21:38
>>93 >>94
リンクを>>90 としてあるけどこれは>>88です。
さて、>>90の残高の中で表示をしているので、>>94の課題でも、
客年の何年目、利息、残高が煩く表示されてしまう。
?- tell('/dev/null'),'30年以内に複利の残高は単利の残高を上回るか。'(1000,0.045,0.031),told.
とでもやればよいか。
これでも、上回らないと中の副目標がfailになって、toldが実行されないままとなる。
96:デフォルトの名無しさん
09/12/26 07:28:12
それもそうだけど、
複利の利率の方が大きいのでは1年目で片がついてしまうw
97:デフォルトの名無しさん
09/12/26 07:41:11
>>88
% Prolog
'30年以内に複利の残高は単利の残高を上回るか。上回るならば何年後か。'(_元金,_複
利の利率,_単利の利率,_何年後) :-
findall(_残高1,残高(複利,30,_元金,_複利の利率,_,_残高1),L1),
findall(_残高1,残高(単利,30,_元金,_単利の利率,_,_残高2),L2),
行列の転置([L1,L2],L3),
append(L0,[[A,B]|_],L3),
A > B,
length([_|L0],_何年後).
98:デフォルトの名無しさん
09/12/26 07:42:40
>>97 (>>88) 再表示。
% Prolog
'30年以内に複利の残高は単利の残高を上回るか。上回るならば何年後か。'(_元金,_複利の利率,_単利の利率,_何年後) :-
findall(_残高1,残高(複利,30,_元金,_複利の利率,_,_残高1),L1),
findall(_残高1,残高(単利,30,_元金,_単利の利率,_,_残高2),L2),
行列の転置([L1,L2],L3),
append(L0,[[A,B]|_],L3),
A > B,
length([_|L0],_何年後).
99:デフォルトの名無しさん
09/12/26 07:55:00
>>98 すみません。間違い発見。またまた書き直し。
% Prolog
'30年以内に複利の残高は単利の残高を上回るか。上回るならば何年後か。'(_元金,_複利の利率,_単利の利率,_何年後) :-
findall(_残高1,残高(複利,30,_元金,_複利の利率,_,_残高1),L1),
findall(_残高2,残高(単利,30,_元金,_単利の利率,_,_残高2),L2),
行列の転置([L1,L2],L3),
append(L0,[[A,B]|_],L3),
A > B,
length([_|L0],_何年後).
100:デフォルトの名無しさん
09/12/26 07:57:58
どこが間違ってるのか、コメントしてよ。
間違いの部分を読むのは勉強になるから。
101:デフォルトの名無しさん
09/12/26 08:06:03
>>100
焦ってしまって、精神的にコメントを入れてる余裕がなくなるw
人に見られないうちに書き換えようって。
ところで、findall/3は奇妙な仕様になっていて、
findall(_残高,残高(複利,30,_元金,_複利の利率,_,_残高),L1),
findall(_残高,残高(単利,30,_元金,_単利の利率,_,_残高),L2),
でも通ってしまう。
この目標が終了する時にこの中で使われている変数の束縛を解いてしまう。
好ましい表現ではないと思うから、避けるようにしているけど。
102:デフォルトの名無しさん
09/12/26 08:24:51
# [1] 授業単元:Prolog基礎
# [2] 問題文(含コード&リンク):カラムとして、電話番号と氏名を持つ
# 電話帳テーブルがある。この中で同姓同名が最も多い氏名を探せ。
103:デフォルトの名無しさん
09/12/26 09:17:55
>>102
% Prolog
'カラムとして、電話番号と氏名を持つ電話帳テーブルがある。この中で同姓同名が最も多い氏名'(_氏名ならび) :-
findall(_氏名,clause(電話帳(_,_氏名),_),_氏名ならび),
quicksort(_氏名ならび,_整列された氏名ならび),
同姓同名が最も多いもの(_整列された氏名ならび,0,[],_氏名ならび).
同姓同名が最も多いもの(_整列された氏名ならび,_これまでの最大数,_氏名ならび1,_氏名ならび).
整列された氏名ならび=[A|R1],
要素の連続数(1,A,R1,X,R2),
最大値は(A,X,_これまでの最大値,_更新された最大値,_氏名ならび1,_氏名ならび2),
同姓同名が最も多いもの(R2,_更新された最大値,_氏名ならび2,_氏名ならび),!.
同姓同名が最も多いもの(_,_,_氏名ならび,_氏名ならび).
最大値は(_氏名,X,_これまでの最大値,X,_氏名ならび,[_氏名]) :- X @> _これまでの最大値,!.
最大値は(_氏名,X,_これまでの最大値,X,_氏名ならび,[_氏名|_氏名ならび]) :- X = _これまでの最大値,!.
最大値は(_,_,_これまでの最大値,_これまでの最大値,_氏名ならび,_氏名ならび).
要素の連続数(X,A,[],X,[]) :- !.
要素の連続数(X,A,[B|R],X,[B|R]) :- \+(A==B),!.
要素の連続数(M,A,[A|R1],X,R) :- M2 is M + 1,要素の連続数(M2,A,R1,X,R).
104:デフォルトの名無しさん
09/12/26 09:20:30
>>102 書き直し。
% Prolog
'カラムとして、電話番号と氏名を持つ電話帳テーブルがある。この中で同姓同名が最も多い氏名'(_氏名ならび) :-
findall(_氏名,clause(電話帳(_,_氏名),_),_氏名ならび),
quicksort(_氏名ならび,_整列された氏名ならび),
同姓同名が最も多いもの(_整列された氏名ならび,0,[],_氏名ならび).
同姓同名が最も多いもの(_整列された氏名ならび,_これまでの最大数,_氏名ならび1,_氏名ならび).
整列された氏名ならび=[A|R1],
要素の連続数(1,A,R1,X,R2),
最大値は(A,X,_これまでの最大値,_更新された最大値,_氏名ならび1,_氏名ならび2),
同姓同名が最も多いもの(R2,_更新された最大値,_氏名ならび2,_氏名ならび),!.
同姓同名が最も多いもの(_,_,_氏名ならび,_氏名ならび).
最大値は(_氏名,X,_これまでの最大値,X,_氏名ならび,[_氏名]) :- X @> _これまでの最大値,!.
最大値は(_氏名,X,_これまでの最大値,X,_氏名ならび,[_氏名|_氏名ならび]) :- X = _これまでの最大値,!.
最大値は(_,_,_これまでの最大値,_これまでの最大値,_氏名ならび,_氏名ならび).
要素の連続数(X,A,[],X,[]) :- !.
要素の連続数(X,A,[B|R],X,[B|R]) :- \+(A==B),!.
要素の連続数(M,A,[A|R1],X,R) :- M2 is M + 1,要素の連続数(M2,A,R1,X,R).
105:デフォルトの名無しさん
09/12/26 09:32:12
>>104
ふたつ気になることがあります。
一つは、テーブルからの取得をclause/2で行っていること。本体(条件)を
殺しているのですが、電話番号による種別の判定など意味のあるケースも
想定できると思います。
二つめは、同一人が複数の回線を持つのは普通のことだから、カラムに
住所まで加えて、それも氏名+住所をキーにしなくてはいけないのではないか。
これは問題の不備ということになります。
106:デフォルトの名無しさん
09/12/26 09:43:09
>>105
問題がテーブルとありますから、やはり単位節のみと考えるべきなんでしょうね。
いきなり、条件部の記述によって自動発信してしまうケースなどを懼れました。
それから時刻を調べて週末だけはこの電話とか。
107:デフォルトの名無しさん
09/12/26 11:46:20
>>35 使用言語: 十進BASIC
FOR o=1 TO 9
FOR s=0 TO 9
IF o<>s THEN
FOR a=0 TO 9
IF o<>a AND s<>a THEN
FOR k=0 TO 9
IF o<>k AND s<>k AND a<>k THEN
FOR y=0 TO 9
IF o<>y AND s<>y AND a<>y AND k<>y THEN
FOR t=0 TO 9
IF o<>t AND s<>t AND a<>t AND k<>t AND y<>t THEN
IF (o+k)*10000+(s+y)*1000+(a+o)*100+(k+t)*10+a+o=t*10000+o*1000+k*100+y*10+o THEN
PRINT USING "# # # # # + # # # # # = # # # # #":o,s,a,k,a,k,y,o,t,o,t,o,k,y,o
END IF
END IF
NEXT T
END IF
NEXT Y
END IF
NEXT K
END IF
NEXT A
END IF
NEXT S
NEXT O
END
実行結果
3 2 0 4 0 + 4 1 3 7 3 = 7 3 4 1 3
108:デフォルトの名無しさん
09/12/26 12:06:26
>>37 (>>35) 訂正追加。
% Prolog 定義を一節増やします。
加算表の一(A,B,1,D) :- 加算表(1,A,1,E),加算表(E,B,_,D).
加算表の一(A,B,C,D) :- 加算表(1,A,0,E),加算表(E,B,C,D).
109:デフォルトの名無しさん
09/12/26 14:40:16
# [1] 授業単元:Prolog基礎
# A社の組織として営業部、総務部があります。営業部は営業一課、営業二課にわかれています。
# 総務部も人事課と経理課にわかれています。管理情報として所属テーブル、給与テーブルがあります。
# [所属テーブル]
# 部, 課, ,社員名
# 営業部,営業一課,岡部
# 営業部,営業二課,小野
# 営業部,営業二課,鹿戸
# 営業部,営業二課,小泉
# 総務部,人事課,大崎
# 総務部,経理課,嶋田
# 総務部,経理課,宮田
# [給与テーブル]
# 社員名,給与
# 岡部,300000
# 小野,250000
# 鹿戸,280000
# 小泉,350000
# 大崎,200000
# 嶋田,400000
# 宮田,200000
# [問題] 部・課、部をそれぞれキーとして給与額を集約して合計した
# 部・課集約テーブル、部集約テーブルを作り出す述語を定義しなさい。
110:デフォルトの名無しさん
09/12/26 16:42:37
>>109
% Prolog (その一) 一般化できる部分のみ。集約データの収集/3,_述語/_アリティに対応する述語定義
% データベースの項目に関する情報述語と集約項目に関する述語が別に必要。
集約述語の生成(_述語/_アリティ,_集約述語ならび) :-
findall(_集約キー,集約キーの生成(_述語/_アリティ,_集約キー),_集約キーならび),
集約述語の生成(_述語/_アリティ,_集約キーならび,_集約述語ならび).
集約述語の生成(_述語/_アリティ,[],[]) :- !.
集約述語の生成(_述語/_アリティ,[_集約キー|R1],[_集約述語名/_アリティ2|R2]) :-
concat_atom(_集約キー,'・',_集約述語名),
length([_|_集約キー],_アリティ2),
集約データの収集(_述語/_アリティ,_集約キー,_集約データならび),
集約データの定義(_集約述語名,_集約データならび),
集約述語の生成(_述語/_アリティ,R1,R2).
集約データの定義(_,[]) :- !.
集約データの定義(_集約述語名,[_集約データ|R]) :-
P =.. [_集約述語名|_集約データ],
assertz(P),
集約データの定義(_集約述語名,R).
集約キーの生成(_述語/_アリティ,_集約キー) :-
集約項目(_述語/_アリティ,L),
append(L1,_,L),
\+(L1=[]).
111:デフォルトの名無しさん
09/12/26 17:04:52
>>102 使用言語: J
data=:noun define
0123456789 山田一郎
1234567890 鈴木二郎
2345678901 伊藤三郎
3456789012 山田一郎
4567890123 伊藤一郎
5678901234 山田一郎
)
]a=:cutopen<;._2 data
+----------+------------+
|0123456789|山田一郎|
+----------+------------+
|1234567890|鈴木二郎|
+----------+------------+
|2345678901|伊藤三郎|
+----------+------------+
|3456789012|山田一郎|
+----------+------------+
|4567890123|伊藤一郎|
+----------+------------+
|5678901234|山田一郎|
+----------+------------+
f=:0{(~.\:#/.~)
f 1{"1 a
+------------+
|山田一郎|
+------------+
f >1{"1 a
山田一郎
112:デフォルトの名無しさん
09/12/26 18:08:14
>>110 (>>109)
% Prolog (その二) 具体的なテーブルを。あと、集約データの収集述語定義をすればよい。
所属(営業部,営業一課,岡部).
所属(営業部,営業二課,小野).
所属(営業部,営業二課,鹿戸).
所属(営業部,営業二課,小泉).
所属(総務部,人事課,大崎).
所属(総務部,経理課,嶋田).
所属(総務部,経理課,宮田).
給与(岡部,300000).
給与(小野,250000).
給与(鹿戸,280000).
給与(小泉,350000).
給与(大崎,200000).
給与(嶋田,400000).
給与(宮田,200000).
集約項目(所属/3,[部,課]).
述語構造(所属/3,1,部).
述語構造(所属/3,2,課).
述語構造(所属/3,3,社員名).
述語構造(給与/2,1,社員名).
述語構造(給与/2,2,給与).
113:デフォルトの名無しさん
09/12/27 17:08:07
>>19
使用言語: J
f=:monad def'((":y),'' = '',":@{.,'' * '',":@}.)"1~./:~"1|:(,:y&%)>:I.0=y|~>:i.y'
f 120
120 = 1 * 120
120 = 2 * 60
120 = 3 * 40
120 = 4 * 30
120 = 5 * 24
120 = 6 * 20
120 = 8 * 15
120 = 10 * 12
114:デフォルトの名無しさん
09/12/27 21:03:04
パズルでもやってみる?
2,0,1,0 の4個の数字をこの順番で1回だけ使い、0から99の数字を作れ。
演算子、関数の使用は自由。
例
201^0 -> 1
115:デフォルトの名無しさん
09/12/28 04:34:04
スレリンク(tech板:486番)
# [1] 授業単元:C言語プログラミング
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
# ソケットを用いて,課題1のプログラムを以下のように改良する.
#
# サーバとクライアントに分割し,ユーザーはクライアントを用いて操作内容を入力し,その内容をサーバに送信する.
# それを受信したサーバは,その内容を基にファイルを操作する.必要であれば,サーバは結果をクライアントに送信し,クライアントはそれを受信して表示する.
# 機能ルーチンはサーバ側に実装し,課題1で作成した関数を改良し用いること
#
116:デフォルトの名無しさん
09/12/28 04:45:07
スレリンク(tech板:487番)
# [1] 授業単元:計算機入門及び演習
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
#
以下の問題を解くプログラムをC言語を用いて作成しなさい.
AさんとBさんは点数が書かれたカードを何枚か持っている. AさんのカードとBさんのカ
ードを1枚ずつ交換して,Aさんの持つカードの合計点数とBさんの持つカード合計点数が
等しくなるようにしたい.
このときどのカードとどのカードを交換したらよいか.ただし,カードを交換しなくても合計点数が等しい場合でも,必ずカードの交換を行うものとする.
入力は,いくつかのデータセットからなる.各データセットは次の形式で与えられる.
n m
s1
s2
...
sn
sn+1
sn+2
...
sn+m
各データセットの最初の行は空白ひとつで区切られたふたつの数 n と m を含み, n はAさんのカードの枚数,m はBさんのカードの枚数を表す.続く n+m 行には,各カードの
点数が 1 行にひとつずつ並ぶ.最初の n 個の点数 (s1 から sn まで) はAさんのカードの点数,残りの m 個の点数 (sn+1 から sn+m まで) はBさんのカードの点数を表す.
n および m は 100 以下の正の整数とし,カードの点数は 0 以上 100 以下の整数値とする.入力の終わりは,空白ひとつで区切られたふたつの 0 を含む 1 行で示される.
各データセットに対し,Aさん,Bさんの交換前のすべてのカードと交換すべき2つのカードを出力すること.形式は特に問わない(実行例を参考にすること).
なお,合計を等しくするようなカードの交換の方法が複数ある場合は,交換するカードの点数の和が最小となるもののみを出力すること.
また,カードの点数の合計を等しくするような交換が存在しない場合はその旨を出力すること.
117:デフォルトの名無しさん
09/12/28 11:41:33
>>114
使用言語: maxima
15までできたけど、結構、大変。
0 201*0;
1 2-0-1-0;
2 20/10;
3 2+0+1+0;
4 fix(sqrt(20.10));
5 ceiling(sqrt(20.10));
6 fix(sqrt(20.10));
7 fix(exp(2.010));
8 ceiling(exp(2.010));
9 ceiling(exp(2.0)+1.0);
10 fix(exp(2.0)+exp(1.0));
11 ceiling(exp(2.0)+exp(1.0));
12 2+0+10;
13 ceiling(exp(sin(2.0))+10);
14 fix(sqrt(201.0));
15 ceiling(sqrt(201.0));
118:デフォルトの名無しさん
09/12/28 15:12:17
スレリンク(tech板:489番)
# [1] 授業単元:
# 画像解析
# [2] 問題文(含コード&リンク):
# 画像を、好きな倍率で大きくしたり小さくしたりするプログラムを作成してください
119:デフォルトの名無しさん
09/12/28 18:18:38
>>30 使用言語: 十進BASIC
FUNCTION 組合せの数(n,r)
LET a=1
LET b=n
FOR i=2 TO r
LET a=a*i
LET b=b*(n-i+1)
NEXT I
LET 組合せの数=b/a
END FUNCTION
PRINT 組合せの数(35,3)*組合せの数(15,2)/組合せの数(50,5)
PRINT 組合せの数(35,4)*組合せの数(15,1)/組合せの数(50,5)
PRINT 組合せの数(35,2)*組合せの数(15,3)/組合せの数(50,5)
PRINT "組み込み関数combを使った場合"
PRINT comb(35,3)*comb(15,2)/comb(50,5)
PRINT comb(35,4)*comb(15,1)/comb(50,5)
PRINT comb(35,2)*comb(15,3)/comb(50,5)
END
実行結果
.324352451433858
.370688515924409
.127775208140611
組み込み関数combを使った場合
.324352451433858
.370688515924409
.127775208140611
120:デフォルトの名無しさん
09/12/28 21:28:47
>>114
使用言語: maxima
(%i182) makelist(i,i,fix(sin(%pi)),fix(apply("^",reverse([2.0,10]))+cos(%pi)));
(%o182) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99]
121:デフォルトの名無しさん
09/12/28 22:03:28
>>114
使用言語: 十進BASIC
DEF f(n)=n*n-n/n
FOR i=z TO f(20-10)
PRINT i
NEXT I
END
122:デフォルトの名無しさん
09/12/29 01:44:55
>>114
使用言語: Arc
arc> (apply range (map [-(* _ _)(/ _ _)] (list(expt 2 0) 10)))
(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99)
123:デフォルトの名無しさん
09/12/29 02:02:20
>>114
使用言語: J
i. ,~ 20 - 10
0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
124:デフォルトの名無しさん
09/12/29 08:55:53
>>114
使用言語: Haskell
Prelude> init $ (\[a,b]->[a..b]) $ map(^2)[0,10]
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,
29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,
55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99]
125:デフォルトの名無しさん
09/12/29 11:03:55
スレリンク(tech板:79番)
# Windows XP上で、
# まず 同じディレクトリにあるsetting.iniを読み込んで
# その1行目, 2行目, 3行目を
# 文字列p, regex, aftに格納する。
# pをパスとして調べ、
# 1.実在するディレクトリだったらそのディレクトリの名前とサブディレクトリの名前と、
# それらの中にあるファイルの名前、およびファイルの中身に以下の置換作業を実行する。
# > 前からみて順に正規表現regexにマッチする文字列を全てaftに置換する。
# 2.実在しないディレクトリでなかったらエラーメッセージを標準出力に出力する。
126:デフォルトの名無しさん
09/12/29 11:25:43
>>114
使用言語: Scilab
-->a=2;[0:(10^a-a/a)]
127:デフォルトの名無しさん
09/12/29 16:48:55
>>125
% Prolog では正規表現は使わないので、その代わり以下のような述語を作っておく。
探索目標を真とする副文字列を置換文字列に置換(_文字列,_対象文字ならび,_探索目標,_置換文字列,X) :-
findall(S,探索目標を真とする副文字列を置換文字列に置換の一(_文字列,_対象文字ならび,_探索目標,_置換文字列,S),X).
探索目標を真とする副文字列を置換文字列に置換の一(_文字列,_対象文字ならび,_探索目標,_置換文字列,S) :-
atom_chars(_文字列,Chars),
探索目標を真とする文字ならびを得る(Chars,L1,_対象文字ならび,_探索目標,L3),
atom_chars(A1,L1),
atom_chars(A3,L3),
concat_atom([A1,_置換文字列,A3],S).
探索目標を真とする文字ならびを得る([],L1,L2,_探索目標,L3) :- !,fail.
探索目標を真とする文字ならびを得る(L,L1,L2,_探索目標,L3) :-
append(L1,L2,L3,L),
_探索目標.
探索目標を真とする文字ならびを得る(L,L1,L2,_探索目標,X) :-
変数指定項複写(_探索目標,_探索目標2,[L2],[L4]),
append(L11,L2,31,L),
_探索目標,
探索目標を真とする文字ならびを得る(L31,L1,L4,_探索目標2,X).
128:デフォルトの名無しさん
09/12/30 00:29:25
>>114
使用言語: Io
Io> list(2-0,10)reduce(a,b,b**a)repeat(v, v println)
129:デフォルトの名無しさん
09/12/30 01:18:56
>>114
使用言語: Io
Io> (20-10)squared repeat(v, v println)
130:デフォルトの名無しさん
09/12/30 06:12:33
>>127 (>>125) かなりの大間違い。訂正。
% Prolog では正規表現は使わないので、その代わり以下のような述語を作っておく。L1,L3が加わり、益々意味不明になってきた。
探索目標を真とする副文字列を置換文字列に置換(_文字列,L1,_対象文字ならび,L3,_探索目標,_置換文字列,X) :-
findall(S,探索目標を真とする副文字列を置換文字列に置換の一(_文字列,L1,_対象文字ならび,L3,_探索目標,_置換文字列,S),X).
探索目標を真とする副文字列を置換文字列に置換の一(_文字列,L1,_対象文字ならび,L3,_探索目標,_置換文字列,S) :-
atom_chars(_文字列,Chars),
探索目標を真とする文字ならびを得る(Chars,L1,_対象文字ならび,_探索目標,L3),
atom_chars(A1,L1),
atom_chars(A3,L3),
concat_atom([A1,_置換文字列,A3],S).
探索目標を真とする文字ならびを得る(L,L1,L2,_探索目標,L3) :-
append(L1,L2,L3,L),
_探索目標.
131:デフォルトの名無しさん
09/12/30 06:32:32
>>130 使い方の例。
% 行頭に「私は」を挿入。
?- 探索目標を真とする副文字列を置換文字列に置換(嘘を申しません,[],[],L3,true,私は,X).
L3 = _141192,
X = ['私は嘘を申しません']
% "d.f" を"aaa"に置換
?- 探索目標を真とする副文字列を置換文字列に置換(abcdefgdufz,_,[d,_,f],_,true,aaa,X).
_ = _141192,
_ = _141193,
_ = _141200,
X = [abcaaagdufz,abcdefgaaaz]
% "b"と"f"の間にありその中に"d"を2つ含む文字列をaaaに置換
?- 探索目標を真とする副文字列を置換文字列に置換(abcdefgdufz,_,L2,_,(append([b],LY,[f],L2),count(member(d,LY),2)),baaaf,X).
_ = _141192,
L2 = _141193,
_ = _141194,
LY = _141197,
X = [abaaafz]
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4398日前に更新/462 KB
担当:undef