いろんな言語で宿題スレ 第三編

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
第二編も512Kbyte越えで終了しました。
前スレで未解決な課題は順次このスレにコピーします。
2デフォルトの名無しさん:2009/12/22(火) 10:15:16
http://pc12.2ch.net/test/read.cgi/tech/1260532772/309
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10297.txt
# ●基本課題 2a(数式の読み込みと表示)
#
# 課題 2a と 2b では,算術式を読み,表示し,値を求めるプログラムを作る.
#
# 限られた時間内で数式処理の本質部分を効率よく学ぶために,
# 入力できる算術式の構文を,次の BNF で定めるものに限る.
#
# 定数 ::= 0 | 1 | … | 9
# 変数 ::= a | b | … | z | A | B | … | Z
# 算術式 ::= 定数
# | 変数
# | (算術式+算術式)
# | (算術式*算術式)
#
# つまり,1桁の定数や1文字の変数の和や積からなる式が入力である.
#
# 入力された算術式を読み込み,2分木データとして格納し,そのデータをもとに
# 入力と同じ算術式を表示する,という処理(下図)を繰り返すプログラムを作れ.
#
3デフォルトの名無しさん:2009/12/22(火) 10:18:27
>>2
% Prolog
算術式解析(_文,_残りの文,_初期節番号,_終了節番号,_式) :-
  atom_chars(_文,Chars),
  算術式(_初期節番号,_終了節番号,Chars,R,_式),
  atom_chars(_残りの文,R),!.

定数(A) :- member(A,['0','1','2','3','4','5','6','7','8','9']),!.
変数(A) :- member(A,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]),!.
変数(A) :- member(A,['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']),!.
算術式(N1,N2,[A|R],R,B) :-
  定数(A),
  atom_to_term(A,B,_),
  assertz(算術式構文木(N1,[],[],B)),
  N2 is N1 + 1,!.
算術式(N1,N2,[A|R],R,A) :-
  変数(A),
  assertz(算術式構文木(N1,[],[],A)),
  N2 is N1 + 1,!.
算術式(N1,N2,L,R,'+'(S1,S2)) :-
  append(['('|L1],[')'|R],L),append(L2,['+'|L3],L1),
  N3 is N1 + 1,
  算術式(N3,N4,L2,_,S1),算術式(N4,N2,L3,_,S2),
  assertz(算術式構文木(N1,N3,N4,'+')),!.
算術式(N1,N2,L,R,'*'(S1,S2)) :-
  append(['('|L1],[')'|R],L),append(L2,['*'|L3],L1),
  N3 is N1 + 1,
  算術式(N3,N4,L2,_,S1),算術式(N4,N2,L3,_,S2),
  assertz(算術式構文木(N1,N3,N4,'*')),!.
4デフォルトの名無しさん:2009/12/22(火) 10:23:44
http://pc12.2ch.net/test/read.cgi/tech/1260532772/309
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10297.txt
# ●基本課題 2b(数式の値の計算)
#
# 課題 2a のプログラムに,算術式の値を計算して表示する機能を追加せよ.
# ただし,変数の値は全て1であるとして,式の値を求めること.
#
# 例えば,入力が (2*3) と (x+(y+z)) の場合,次のような出力をすればよい.
# show: に続いて入力された算術式を,eval: に続いて算術式の値を表示している.
#
# (2*3) ←入力
# show: (2*3)
# eval: 6
#
# (x+(y+z)) ←入力
# show: (x+(y+z))
# eval: 3
#
# まず,算術式の値を求める関数 eval_exp()(exp.c にある)を完成させる.
# 十分な数の検査データを使って動作の正しさを確かめよ.
#
5デフォルトの名無しさん:2009/12/22(火) 10:24:43
http://pc12.2ch.net/test/read.cgi/tech/1260532772/309
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10297.txt
# ●基本課題 2c(数式データの基本操作)
# 算術式の値を変えずに括弧をくくり直す簡単な式変形を考える.例えば,式
# (1+(2+3))
# (a*(b*c))
# ((i*x)+((j*y)+(k*z)))
# の括弧を左にくくり直すと,それぞれ,次の式になる.
# ((1+2)+3)
# ((a*b)*c)
# (((i*x)+(j*y))+(k*z))
# 括弧を左にくくり直せる (A+(B+C)) や (A*(B*C)) の形の算術式を
# ((A+B)+C) や ((A*B)*C) の形にする式変形は,式に対応する木を
# 「左に転回」する変形と捉えられる(下図).
#
# http://www.cs.info.mie-u.ac.jp/~toshi/lectures/tree/exp012.png → http://www.cs.info.mie-u.ac.jp/~toshi/lectures/tree/exp013.png
#
# この操作を実行する関数 rotate_left_exp()(exp.c にある)を完成させよ.
# この関数を使い,可能な場合にだけ算術式の括弧を左にくくり直す関数
# assoc_left() を ex2.c に作って動作確認せよ.
6デフォルトの名無しさん:2009/12/22(火) 11:00:48
http://pc12.2ch.net/test/read.cgi/tech/1136994325/977
# ターミナル上でテキストを編集するプログラムを作成せよ
# 以下のコマンドも使えるようにする事
#
# i =テキスト挿入
# p =単語の手前にポインタ移動
# d =入力した数だけポインタの後ろの文字を消す
# c =入力した文字列をポインタの後の文字列に置き換える
# s =ポインタの後に空白挿入
# q =終了
#
7デフォルトの名無しさん:2009/12/22(火) 11:03:24
http://pc12.2ch.net/test/read.cgi/tech/1260532772/112
# 授業単元:アルゴリズムとデータ構造
# [2] 問題文(含コード&リンク):
#  ポーカーゲーム(の一部)をC言語にて作成する。
#
#  ポーカーゲーム(の一部)は以下の条件を満足させてください。
#
#    カードのシャッフルを行い、プレイヤ、ディーラにそれぞれ5枚ずつカードを配る。
#    プレイヤは配られたカードの中から交換するものを選択できるようにする。
#    ディーラ側の選択ルーチンはダミーの関数(たとえば全部交換、交換しない等)を用意すれば十分です。
#    プレイヤ、ディーラそれぞれの役を判定して勝敗を表示する。
#
#  表示、カードの選択は標準入出力を利用してください。
#
8デフォルトの名無しさん:2009/12/22(火) 12:09:23
>>6
% Prolog (その一) VT100のエスケープシーケンスの一部。前スレに書いたものだけど、これがないとエディタは作れないと思うので再掲。

カーソルをPl行上へ移動(Pl) :- put_code(27),write_formatted('[%tA',[Pl]).
カーソルをPl行下へ移動(Pl) :- put_code(27),write_formatted('[%tB',[Pl]).
カーソルをPc桁右へ移動(Pc) :- put_code(27),write_formatted('[%tC',[Pc]).
カーソルをPc桁左へ移動(Pc) :- put_code(27),write_formatted('[%tD',[Pc]).
カーソルを移動(Pl,Pc) :- put_code(27),write_formatted('[%t;%tH',[Pl,Pc]).
カーソルから画面の終わりまでを消去 :- put_code(27),write('[J').
画面の始めからカーソルまでを消去 :- put_code(27),write('[1J').
画面全体を消去 :- put_code(27),write('[2J').
カーソルから行の終わりまでを消去 :- put_code(27),write('[K').
行全体を消去 :- put_code(27),write('[2K').
行の始めからカーソルまでを消去 :- put_code(27),write('[1K').
9デフォルトの名無しさん:2009/12/22(火) 12:38:54
http://pc12.2ch.net/test/read.cgi/tech/1248012902/509
# 【 課題 】http://prolog.asia/img/841.jpg
# 図の有向グラフの最短経路を求めよ。
# 初期値がMAXでアルゴリズムを作れ。
10デフォルトの名無しさん:2009/12/22(火) 14:08:52
>>4
% Prolog

算術式の値を計算して表示 :-
  get_line(Line),
  算術式解析(Line,_,1,_,_式),
  write_formatted('show:%t\n',[_式]),
  X is _式,
  write_formatted('eval:%t\n',[X]).

% 算術式解析/5 他の定義は http://pc12.2ch.net/test/read.cgi/tech/1261443439/3 参照
11デフォルトの名無しさん:2009/12/22(火) 14:16:58
http://pc12.2ch.net/test/read.cgi/tech/1260532772/365
# [1] 授業単元:初級プログラミング
# [2] 問題文(含コード&リンク):マインスイーパーを作ってください。
# ・縦の列はABC...で、横の列は123...で表示し、座標を繰り返し入力する
# ・枡の大きさは自由である(難易度ごとに大きさを選べる等要工夫)
# ・地雷の位置は毎回ランダムであること
# ・指定(入力)した座標には周囲の地雷の数を表示させる
# ・地雷のある座標を入力するか、全ての安置を入力することでクリアとする
# ・その他、工夫等が見られると加点
12デフォルトの名無しさん:2009/12/22(火) 14:44:32
http://pc12.2ch.net/test/read.cgi/tech/1260532772/353
# [1] 授業単元:基礎プログラミング講義
# [2] 問題文(含コード&リンク):以下の処理はサブ関数で作成する。数値(n)を反転した値を表示せよ。123→321
#
13デフォルトの名無しさん:2009/12/22(火) 14:49:40
>>12
% Prolog

'数値(n)を反転した値を表示' :-
  get_integer(N),
  '数値(n)を反転する'(N,N2),
  write_formatted('%t\n',[M]).

'数値(n)を反転する'(N,N1) :-
  number_chars(N,Chars1),
  reverse(Chars1,Chars2),
  number_chars(N1,Chars2).
14デフォルトの名無しさん:2009/12/22(火) 15:57:49
>>9
% Prolog 一番基本的なもの。

有向グラフ(1,2,50).
有向グラフ(1,3,80).
有向グラフ(2,4,15).
有向グラフ(2,3,20).
有向グラフ(4,5,30).
有向グラフ(3,4,10).
有向グラフ(3,5,15).

有向グラフの最短経路(_頂点1,_頂点2,_最短距離,_最短経路) :-
  findmin([_距離,_経路],有向グラフの距離と経路(_出発点,_終点,_距離,_経路),[_
最短距離,_最短経路]).

有向グラフの距離と経路(_頂点,_頂点,0,[_頂点]) :- !.
有向グラフの距離と経路(_頂点1,_頂点2,_距離,[_頂点1|R]) :-
  有向グラフ(_頂点1,_頂点3,_距離1),
  有向グラフの距離と経路(_頂点3,_頂点2,_距離2,R),
  _距離 is _距離2 + _距離1.
15デフォルトの名無しさん:2009/12/23(水) 02:04:11
16デフォルトの名無しさん:2009/12/23(水) 03:34:55
>>15
% Prolog
入力したデータセットを一枚交換して合計が一致する組をすべて示す(AL,BL,A,B) :-
  データセットの入力(N,M,AL,BL),
  一枚ずつ全てを交換してみる(N,M,AL,BL,A,B).

データセットの入力(N,M,AL,BL) :- get_split_line([' '],[N,M]),\+((N=0,M=0)),'Aの入力'(N,AL),'Bの入力'(M,BL),!.

'Aの入力'(N,AL) :- findall(A,(for(1,_,N),get_integer(A)),AL).
'Bの入力'(M,AL) :- findall(B,(for(1,_,M),get_integer(B)),BL).

一枚ずつ全てを交換してみる(0,M,AL,BL,_,_) :- !,fail.
一枚ずつ全てを交換してみる(N,M,AL,BL,A,B) :-
  ならびの回転(左方向,1,AL,[A|R1]),
  交換して合計が一致する(M,BL,A,B).
一枚ずつ全てを交換してみる(N,M,AL,BL,A,B) :-
  ならびの回転(左方向,1,AL,AL2),
  N1 is N - 1,
  一枚ずつ全てを交換してみる(N1,M,AL2,BL,A,B).

交換して合計が一致する(0,[A|R1],[B|R2],A,B) :- !,fail.
交換して合計が一致する(M,[A|R1],[B|R2],A,B) :- sum([B|R1],Sum), sum([A|R2],Sum).
交換して合計が一致する(M,[A|R1],[B|R2],A,B) :-
  ならびの回転(左方向,1,BL,BL2),
  M1 is M - 1,
  交換して合計が一致する(M1,[A|R1],BL2,A,B).
17デフォルトの名無しさん:2009/12/23(水) 03:39:42
>>6
% Prolog (その二) Prolog-KABA風にやってみる。まだまだ続く。
e_do(11,P1,P2,B1,B2,K1,K2,no) :- e_kill(B1,B2,K1,K2),P2 is P1 - 1,e_disp(P2,B2),!.
e_do(1,P1,Tol,B1,B1,K1,K1,no) :- e_tol(P1,Tol),e_jump(Tol),e_disp(Tol,B1),!.
e_do(5,P1,Eol,B1,B1,K1,K1,no) :- e_eol(P1,Eol),e_jump(Eol),e_disp(Eol,B1),!.
e_do(4,P1,P2,B1,B2,K1,K1,no) :- e_delete(1,P1,B1,B2),e_disp(P2,B1),!.
e_do(8,P1,P2,B1,B2,K1,K1,no) :- P2 is P-1,e_jump(P2),e_delete(1,P2,B1,B2),e_disp(P2),!.
e_do(6,P1,P2,B1,B1,K1,K2,no) :- P2 is P+1,e_disp(P2,B1),!.
1817:2009/12/23(水) 04:08:35
>>6 は行エディタを指定しているらしいけれど、どうせやるなら、Emacs風にいきたいw
19デフォルトの名無しさん:2009/12/23(水) 04:11:57
http://pc12.2ch.net/test/read.cgi/tech/1248012902/635
# 【 課題 】コマンドラインから数値を受け取り、その数値の因数を全て表示するプログラムを完成させなさい。
# 【 形態 】1. Javaアプリケーション(main()で開始)
20デフォルトの名無しさん:2009/12/23(水) 04:23:00
>>19
% Prolog

program :-
  user_parameters([A]),
  atom_to_term(A,N,_),
  N2 is N // 2,
  findall([M,D],(for(1,M,N2),0 is N mod M,D is N // M),L),
  因数の表示(N,L),
  halt.

因数の表示(_,[]).
因数の表示(N,[[M,D]|R]) :-
  write_formatted('%t = %t * %t\n',[N,M,D]),
  因数の表示(N,R).
21デフォルトの名無しさん:2009/12/23(水) 05:18:44
このスレのPrologの回答アーカイブ http://nojiriko.asia/prolog/
落雷事故以来停止していますが、来週に復旧する予定です。今は雪が
積もってしまって、少々ラッセルしないとたどり着けないので一週間先
に延ばしました。
22デフォルトの名無しさん:2009/12/23(水) 05:25:12
http://pc12.2ch.net/test/read.cgi/tech/1258320456/52
# 【 課題 】和歌について考察する問題。
# 歌 ... こぬ人を待つほの浦の夕凪にやくやもしほの身もこがれつつ (定家)
# これはかなり複雑なうたです。
# 人をまつとは「待つ」であり、「松」です。まつ帆だからです。松の姿に似た帆です。
# もちろん松は浦の背景でもあります。浦は夕凪ですから心は風を「待って」もいます。
# 風はありませんから、待ってもこぬ人なのです。風があの人なのかそれとも帆船なのか
# 微妙です。浦は「浦」であると同時に心の「裏」であり、あの人(風)の気持ちを「占」なふ、
# うらでもあります。
# 「焼くや」(やいているのだろうか)とは、恋に焦がれて身を焼いているのであり、
# やくやもしほとは藻塩(自分)が陽にあぶられ、渇き、焼かれ、煙でいぶされ、さらに
# 煮られ、再び乾かされというような、製塩法の愛の地獄絵であり、身もこがれという
# 言葉には「藻」がここでも含まれています。製塩の煙は夕凪の浦に実際に漂って
# いるのかもしれません。
# 以上のような、この歌に含まれる語とそれからくる連想をプログラムで表現しなさい。
23デフォルトの名無しさん:2009/12/23(水) 05:30:37
http://pc12.2ch.net/test/read.cgi/tech/1260532772/177
# [1] 授業単元: コンピュータプログラミング
# [2] 問題文(含コード&リンク)
# 1)f(x,y)=dy/dx=-4(x-1)y,y(0)=e^-2の一階微分方程式についてオイラーの方法で数値解を求めるプログラムを作成せよ。
# 2)dy/dx=f(x,y)=1-y,y(0)=0
#   dy/dx=f(x,y)=y(1-y),y(0)=0.01
#   dy/dx=f(x,y)=2yx,y(0)=1
# の数値解をオイラー法によって求めよ。
#
24デフォルトの名無しさん:2009/12/23(水) 05:32:24
http://pc12.2ch.net/test/read.cgi/tech/1260532772/112
# 授業単元:アルゴリズムとデータ構造
# [2] 問題文(含コード&リンク):
#  ポーカーゲーム(の一部)をC言語にて作成する。
#
#  ポーカーゲーム(の一部)は以下の条件を満足させてください。
#
#    カードのシャッフルを行い、プレイヤ、ディーラにそれぞれ5枚ずつカードを配る。
#    プレイヤは配られたカードの中から交換するものを選択できるようにする。
#    ディーラ側の選択ルーチンはダミーの関数(たとえば全部交換、交換しない等)を用意すれば十分です。
#    プレイヤ、ディーラそれぞれの役を判定して勝敗を表示する。
#
#  表示、カードの選択は標準入出力を利用してください。
#

25デフォルトの名無しさん:2009/12/23(水) 05:37:08
http://sum2cha.blogpico.com/archives/2017 レス番号606
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
# 3.以下のプログラムを作成
# 3x3マスのマルバツゲームのボードを作成
# ○側と×側が交互に2次元座標上の位置を入力
# 入力後、毎回ボードを表示する
# たて、よこ、斜めのいずれかに○か×が3つ並んだ
# 時点でプログラムを終了
26デフォルトの名無しさん:2009/12/23(水) 05:38:27
http://pc12.2ch.net/test/read.cgi/tech/1255709298/596
# [1] 授業単元:
# アルゴリズムとプログラミング
# [2] 問題文(含コード&リンク):
# 下のアドレスのプログラムに追加して、ダイクストラ法のプログラムを完成させてください
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10070.txt
# プログラムに使用するデータファイル↓
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10071.txt
# 次のプログラムに、以下の2〜6の処理を追加してダイクストラのプログラムを完成させてください。
# 2、送信ノードに接続されている全てのノードについて、接続リンクの長さを送信ノードからの距離とする。
# 3、送信ノードに接続されている全てのノードのうち、最短の距離を持つノードを確定とする
# 4、確定したノードに接続されている全てのノードについて、送信ノードからこの確定ノードを経由して到達する経路の距離を計算し、これまでの距離より短ければ更新する
# 5、まだ確定していないノードのうち、送信ノードからの距離が最短のノードを確定とする
# 6、全てのノードが確定するまで4,5の処理を繰り返す。
27デフォルトの名無しさん:2009/12/23(水) 05:44:54
http://pc12.2ch.net/test/read.cgi/tech/1260532772/209
# [1] 授業単元:Cプログラミング入門
# [2] 問題文(含コード&リンク):
# 五目並べの作成
# 主に終了判定関数、コンピューターによる着手の生成関数の作成
# サンプルプログラム:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10289.txt
#
28デフォルトの名無しさん:2009/12/23(水) 05:46:32
#【 課題 】
#「0.2+0.4+0.6+・・・・・+10.0の計算を行うプログラムを作成せよ。」と
# いう課題文が与えられたとする。
# この文を、公差数列 0.2,0.4,0.6...10.0の和を計算する課題であると認識する
# ことができる最小限のプログラムを示せ。
29デフォルトの名無しさん:2009/12/23(水) 05:51:43
http://pc12.2ch.net/test/read.cgi/tech/1245017721/12
# 実際の問題を簡単にした問題例です。
#
# 流れ:
# キャラクタがバイトをして財布がいっぱいになったら銀行へ行く
# ということを目標金額まで繰り返し、到達したらその金がなくなるまで
# 家でごろ寝し、なくなったらまた働く
#
# キャラクタは
#   ・バイトをする : 手持ちが1増える
#   ・銀行で貯金をする : 手持ちを0にし、貯金が1増える
#   ・家で寝る : 貯金が1減る
# の状態を取ります。
# 財布の許容量は3、目標貯金額は5とします。
#
30デフォルトの名無しさん:2009/12/23(水) 05:56:02
http://pc12.2ch.net/test/read.cgi/tech/1136788500/434
# 50人のクラス(男子35人)から5人の委員をランダムに選ぶ。このとき選ばれた委員の中に男3人、女2人が入る確率をBASICで求めよ。
#
31デフォルトの名無しさん:2009/12/23(水) 06:01:59
# <<課題>
http://pc12.2ch.net/test/read.cgi/tech/1244449887/364
# [1] 授業単元: プログラミング実験
# [2] 問題文(含コード&リンク): 
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9455.txt
#【課題1】
#
# 完全列挙法(力ずく法)を用いて巡回セールスマン問題(TSP) を解くプログラムを作成せよ。
# (※1 : 適当に出発点を設定し、そこから出発するすべての閉路を求めその中で最短のものを選択、出力する)
# (※2 : 都市数は外部から入力するものとする)
# (注意 : プログラムを動かすとき決して大きな都市数を与えてはならない)
32デフォルトの名無しさん:2009/12/23(水) 06:03:02
#【課題2】
#
# 順次生成・比較法により、閉路を順次生成し、これまでの最短経路長をもった閉路と閉路長を比較することによってTPSを解くプログラムを作成せよ。
# (※1 : 適当に出発点を定め、そこを出発点とする閉路をひとつ生成し、それをとりあえず最短閉路とする)
# (※2 : 新たに経色を生成し、その閉路長をその時点での最短閉路長と比較し、短い方を最短閉路とする)
# (※3 : 上記のことを全ての閉路について繰り返し、最短閉路を求める)
33デフォルトの名無しさん:2009/12/23(水) 07:04:58
http://pc12.2ch.net/test/read.cgi/tech/1250204272/923
# [1] 授業単元: プログラミング
# [2] 問題文:ナップサック問題のプログラムを利用し、グラフ彩色問題に当てはめる(色は4色で)
34デフォルトの名無しさん:2009/12/23(水) 07:09:09
http://pc12.2ch.net/test/read.cgi/tech/1260532772/400
# [1]授業単元:プログラミング
# [2] 課題:いわゆる15パズル。
# 01 02 03 04
# 05 06 07 08
# 09 10 11 12
# 13 14 15
# のように配置された4x4のパネルを乱数を用いてシャフルする。シャフル時のパネルの動かし方は
# ゲーム進行中のパネルを動かすやり方と同じルールが適用される。
# パネル座標値(R,C) を入力させ (Rは行 Cは列 それぞれ1から4の値を取る)
# 対応するパネルが空白でないパネルで空白と隣接する場合はそこに移動させる方法で
# ゲームを進行させ、最初の状態に戻った場合(完成)は「暇人さんご苦労様」と出力して終了。
# 完成するまで入力と移動を繰り返す。無効なマスの指定は「そんなパネル動かせへん」と警告を表示すること。
# 盤面状況はコンソール出力とし、動かした回数と共に入力の直前に随時、及びゲーム
終了前に表示すること。
35デフォルトの名無しさん:2009/12/23(水) 17:44:52
http://pc12.2ch.net/test/read.cgi/tech/1260532772/405
# [1]授業単元:プログラミング
# [2] 課題:覆面算
# ttp://www.iba.k.u-tokyo.ac.jp/~iba/C/lesson1.html
#
# osaka + kyoto = tokyo
#
# 覆面算を解く。
# 同じ文字は同じ数字を、違う文字は異なる数字を表す。
# 先頭の文字が0にならないことに注意する。
36デフォルトの名無しさん:2009/12/23(水) 18:35:26
>>35 Haskellで
import Control.Monad.State
import qualified Data.Set as S
import qualified Data.Map as M

type Proc = StateT (M.Map Char Int, S.Set Int) []

solve :: [String]
solve = flip evalStateT (M.empty, S.fromList [0..9]) $ do
  osaka <- int "osaka"
  kyoto <- int "kyoto"
  tokyo <- int "tokyo"
  guard $ osaka + kyoto == tokyo
  return $ show osaka ++ " + " ++ show kyoto ++ " = " ++ show tokyo

main = putStr $ unlines solve

int :: String -> Proc Int
int xs = do
  (d:ds) <- mapM digit xs
  guard $ d /= 0
  return $ foldl (\n c -> n * 10 + c) 0 (d:ds)

digit :: Char -> Proc Int
digit c = do
  (m, s) <- get
  case M.lookup c m of
    Just d -> return d
    Nothing -> do
      d <- lift $ S.toList s
      put (M.insert c d m, S.delete d s)
      return d
37デフォルトの名無しさん:2009/12/24(木) 00:30:41
>>35
% Prolog 汎用性の全くない定義。
覆面算_35(O,S,A,K,Y,T) :-
  加算表(A,O,K1,O),
  (K1=0,加算表(K,T,K2,Y);K1=1,加算表の一(K,T,K2,Y)),
  (K2=0,加算表(A,O,K3,K);K2=1,加算表の一(A,O,K3,K)),
  (K3=0,加算表(S,Y,K4,O);K3=1,加算表の一(S,Y,K4,O)),
  (K4=0,加算表(O,K,0,T);K4=1,加算表の一(O,K,0,T)),
  \+(O=S),\+(O=A),\+(O=K),\+(O=Y),\+(O=T),
  \+(S=A),\+(S=K),\+(S=Y),\+(S=T),
  \+(A=K),\+(A=Y),\+(A=T),
  \+(K=Y),\+(K=T),
  \+(Y=T).

加算表の一(A,B,C,D) :- 加算表(1,A,K,E),加算表(E,B,C,D).

加算表定義 :-
  for(0,M,9),
  for(0,N,9),
  D is (M+N) // 10,
  Mod is (M+N) mod 10,
  P=加算表(M,N,D,Mod),
  assertz(P),
  N=9,
  M=9.

:- 加算表定義.
38デフォルトの名無しさん:2009/12/24(木) 04:47:02
http://pc12.2ch.net/test/read.cgi/tech/1260532772/421
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 問1 辺の和が3以上1000以下の直角三角形の個数を求めよ。
# 各辺の長さは自然数で、ある直角三角形の各辺を定数倍したものもカウントすることとする。
# 問2 問1 で検索した直角三角形のうち、最も面積の大きい直角三角形の3辺の長さ
#
39デフォルトの名無しさん:2009/12/24(木) 04:58:45
http://pc12.2ch.net/test/read.cgi/tech/1245853701/273
# [1] 授業単元: 数理計画法
# [2] 問題文(含コード&リンク): シンプレックス法のプログラムを作成せよ。
40デフォルトの名無しさん:2009/12/24(木) 06:56:20
辺の和が3以上1000以下の直角三角形の個数を求める(_個数) :-
  Max1 is truncate(sqrt(1000)),
  findall(N2,(for(1,N,Max1),N2 is truncate(N*N)),L1),
  count((組み合わせ(L1,3,[A,B,C]),C is A+B,C>=3,C=<1000),_個数).

辺の和が3以上1000以下の直角三角形のうち、最も面積の大きい直角三角形の3辺の長さ(_短辺1,_短辺2,_長辺) :-
  Max1 is truncate(sqrt(1000)),
  findall(N2,(for(1,N,Max1),N2 is truncate(N*N)),L1),
  findmax([C,A,B],(組み合わせ(L1,3,[A,B,C]),C is A+B,C>=3,C=<1000),[_短辺1,_短辺2,_長辺]).
4140:2009/12/24(木) 07:17:15
>>38
% Prolog
42デフォルトの名無しさん:2009/12/24(木) 09:07:33
>>40 間違い。これは辺の二乗だったね。
% Prolog

辺の和が3以上1000以下の直角三角形のうち、最も面積の大きい直角三角形の3辺の長さを求める(_辺1,_辺2,_辺3) :-
  Max1 is truncate(sqrt(1000)),
  findall(N2,(for(1,N,Max1),N2 is truncate(N*N)),L1),
  findmax([C,A,B],(組み合わせ(L1,3,[A,B,C]),C is A+B,C>=3,C=<1000),[A,B,C]),
  _辺1 is truncate(sqrt(A)),
  _辺2 is truncate(sqrt(B)),
  _辺3 is truncate(sqrt(C)),!.
43デフォルトの名無しさん:2009/12/24(木) 09:17:34
>>40 益々、間違えた。というより最初から問題を読み違えてる。
% Prolog
辺の和が3以上1000以下の直角三角形のうち、最も面積の大きい直角三角形の3辺の長さを求める(_辺1,_辺2,_辺3) :-
  Max1 is truncate(sqrt(1000)),
  findall(N2,(for(1,N,Max1),N2 is truncate(N*N)),L1),
  findmax([S,A1,B1,C1],(組み合わせ(L1,3,[A,B,C]),C is A+B,C>=3,C=<1000,A1 is truncate(sqrt(A)),B1 is truncate(sqrt(B)),C1 is trucate(sqrt(C)),S is A1 * B1 / 2)),[S1,_辺1,_辺2,_辺3]),!.
4440,41,42,43:2009/12/24(木) 10:09:01
辺の和が3以上1000以下の直角三角形という最初の部分が正しく書けていなかったので
後で両方とも書き直します。
45デフォルトの名無しさん:2009/12/24(木) 11:01:39
>>40
の方針でやると、半日経っても答えは返らないのでは。Prologではね
46デフォルトの名無しさん:2009/12/24(木) 15:14:15
>>38
% Prolog これで動くか?

辺の和が3以上1000以下の直角三角形の個数を求める(Min,Max,_個数) :-
  辺の和がMin以上Max以下の直角三角形の個数を求める(3,1000,_個数).

辺の和がMin以上Max以下の直角三角形の個数を求める(Min,Max,_個数) :-
  findall(N2,(for(1,N,Max),N2 is truncate(N*N)),L1),
  count((for(1,N1,Max),辺の和がM以下の直角三角形(N1,Min,Max,L1,Sum)),_個数).

辺の和がM以下の直角三角形(N,Min,Max,L1,Sum) :-
  N2 is N * N,
  member(A,L1),
  U is truncate(A + N2),
  member(U,L1),
  Sum is truncate(sqrt(A) + sqrt(U) + N),
  Sum >= Min,
  Sum =< Max.
47デフォルトの名無しさん:2009/12/24(木) 15:19:58
>>46

述語名とそれへの副目標を

辺の和がM以下の直角三角形 -> 辺の和がMin以上Max以下の直角三角形

に変更してください。
48デフォルトの名無しさん:2009/12/24(木) 15:59:46
>>38
% Prolog

辺の和が3以上1000以下の直角三角形のうち、最も面積の大きい直角三角形の3辺の長さを求める(Min,Max,_辺1,_辺2,_辺3) :-
  辺の和がMin以上Max以下の直角三角形のうち、最も面積の大きい直角三角形の3辺の長さを求める(3,1000,_辺1,_辺2,_辺3).

辺の和がMin以上Max以下の直角三角形のうち、最も面積の大きい直角三角形の3辺の長さを求める(Min,Max,_辺1,_辺2,_辺3) :-
  findall(N2,(for(1,N,Max),N2 is truncate(N*N)),L1),
  findmax([_面積,A,B,C],(for(1,N1,Max),辺の和がMin以上Max以下の直角三角形の面積(N1,Min,Max,L1,_面積,A,B,C)),[_,_辺1,_辺2,_辺3]).

辺の和がMin以上Max以下の直角三角形の面積(N,Min,Max,L1,_面積,A1,N,B1) :-
  N2 is N * N,
  member(A,L1),
  U is truncate(A + N2),
  member(U,L1),
  A1 is sqrt(A),
  C is sqrt(U),
  Sum is truncate(A1 + N + C),
  Sum >= Min,
  Sum =< Max,
  _面積 is A1 * N / 2.
49デフォルトの名無しさん:2009/12/24(木) 16:07:40
# [1] 授業単元:Prolog初歩
# [2] 課題:以下の情報を述語として定義しなさい。
#
# 賞味期限
# 16…予約はじまる
# 22…予約最盛期
# 23…我慢できない
# 24…最盛期
# 25…ロスタイム
# 26…半額
# 27…更に半額
# 28…返品
# 29…廃棄処分
# 30…廃棄処分逃れてもカビ
#
50デフォルトの名無しさん:2009/12/24(木) 16:13:16
>>49
% Prolog

:- op(500,xfx,…).

賞味期限(16…予約はじまる).
賞味期限(22…予約最盛期).
賞味期限(23…我慢できない).
賞味期限(24…最盛期).
賞味期限(25…ロスタイム).
賞味期限(26…半額).
賞味期限(27…更に半額).
賞味期限(28…返品).
賞味期限(29…廃棄処分).
賞味期限(30…廃棄処分逃れてもカビ).
51デフォルトの名無しさん:2009/12/24(木) 16:50:47
>>49
% Prolog

賞味期限(16,予約はじまる).
賞味期限(22,予約最盛期).
賞味期限(23,我慢できない).
賞味期限(24,最盛期).
賞味期限(25,ロスタイム).
賞味期限(26,半額).
賞味期限(27,更に半額).
賞味期限(28,返品).
賞味期限(29,廃棄処分).
賞味期限(30,廃棄処分逃れてもカビ).
52デフォルトの名無しさん:2009/12/24(木) 17:11:44
>>22
% Prolog こんなところから。

重層的な対象(待つ,人).
重層的な対象(待つ,風).
重層的な対象(焼く,身).
重層的な対象(焼く,藻).

形態的近似(松,帆).
形態的近似(帆,松).

音通(待つ,松).
音通(松,待つ).
音通(裏,占).
音通(占,裏).
音通(裏,浦).
音通(浦,裏).
音通(占,浦).
音通(浦,占).

連想(X,Y) :- 音通(X,Y).
連想(X,Y) :- 形態的近似(X,Y).
連想(X,Y) :- 連想(X,Z),連想(Z,Y).
53デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/24(木) 18:29:49
http://pc12.2ch.net/test/read.cgi/tech/1248012902/652
# 【 課題 】キーボードから文字入力し、":"で文字列分割をし、結果を表示する。
# 文字列分割の際にはsplitメソッドを利用すること。
55デフォルトの名無しさん:2009/12/24(木) 18:52:34
>>54
% Prolog

'キーボードから文字入力し、":"で文字列分割をし、結果を表示する' :-
  get_line(Line),
  split(Line,[':'],L),
  write_formatted('%t\n',[L]).
56デフォルトの名無しさん:2009/12/24(木) 21:44:44
http://pc12.2ch.net/test/read.cgi/tech/1260532772/431
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 20000〜40000までの自然数のうち、数字の9を2個含む素数の個数を調べよ
#

57デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/25(金) 03:29:44
http://pc12.2ch.net/test/read.cgi/tech/1260532772/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デフォルトの名無しさん:2009/12/25(金) 06:58:36
>>12
使用言語: J

f=:|.&.":

f 56789
98765
1 + f 56789
98766
60デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/25(金) 07:55:10
63デフォルトの名無しさん:2009/12/25(金) 07:58:46
>>56
使用言語: J

+/2=+/"1'9'=":,.p:a+i.(_1&p:40000)-(a=._1&p:20000)
141
64デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/25(金) 11:57:00
http://pc12.2ch.net/test/read.cgi/tech/1260532772/442
# [1] 授業単元: プログラミング実習
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10305.txt
#
# ★演習問題3*
# "izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の
# 文字列の長さを求めて表示しなさい.ただし,ポインタのボインタを用いること.
#
# (実行結果)
# 6 :izumi
# 5 : kanto
# 4 : Kudo
# 4 : Sato
# 8 : Sugawara
# 6 : Matuda
# 4 : Wada
66デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/25(金) 12:17:10
>>68
splitの下の行のインデントが狂いました。
70デフォルトの名無しさん:2009/12/25(金) 12:20:47
そうそう。
インデントはPrologの実行にはまったく関係ありません。
これを習慣にしている人には見易いかなという程度の問題です。

冬休みに入って課題が出ない日がしばらくは続くでしょうね。
71デフォルトの名無しさん:2009/12/25(金) 13:54:28
http://pc12.2ch.net/test/read.cgi/tech/1260532772/442
# [1] 授業単元: プログラミング実習
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10305.txt
#
# 演習問題1
# 入力されたデーク数に応じた配列を確保し,入力されたデータをその配列に保存し,
それらの和を求めよ.
# (実行結果例)
# データの数は?10
# 1番目のデータを人力してください:1
# 2番目のデータを入力してください:2
# 3番目のデータを入力してください:3
# 4番目のデータを入力してください:4
# 5番目のデータを入力してください:5
# 6番目のデータを人力してください:6
# 7番目のデータを入力してください:7
# 8番目のデータを入力してください:8
# 9番目のデータを入力してください:9
# 10番目のデータを入力してください:10
# 和=55
72デフォルトの名無しさん:2009/12/25(金) 14:00:34
>>71
% Prolog

入力されたデーク数に応じた配列を確保し,入力されたデータをその配列に保存し,それらの和を求める :-
  催促付き整数入力('データの数は?',N),
  findsum(X,(for(1,M,N),催促付き整数入力('%t番目のデータを入力してください:',[M],X)),_和),
  write_formatted('和=%t\n',[_和]).
73デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/25(金) 16:11:50
http://pc12.2ch.net/test/read.cgi/tech/1258158172/314
# [1] 授業単元: プログラミング
#
# [2] 問題文(含コード&リンク):
# 遺伝的アルゴリズムを基にTSP(巡回セールスマン問題)の近似解法のプログラムを書け。
# ただし都市数の数は5〜6個程度で、都市間の距離は自由に決めてよいとする。
#
76デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/25(金) 16:19:25
http://pc12.2ch.net/test/read.cgi/tech/1248012902/157
# 【 課題 】ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/787.txt
# 行列や固有値を扱う数値計算の課題です。
#
# 逆反復法(逆べき乗法)と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デフォルトの名無しさん:2009/12/25(金) 16:29:29
http://chomework.sakura.ne.jp/log1/1135125328_02.html (レス番号194)
# [1] 授業単元: 情報処理
# [2] 問題文(含コード&リンク):ファイルからデータ(迷路空間)を読み込む処理と構造体・リストを用いた、
# 迷路空間を作成せよ。
# 読み込むデータは右図のような形式であり、    ******
# 各記号は次の意味を持つものとする。       *8000*
# * : 壁                     ****0*
# 0 : 通路                    **000*
# 8 : 通路 & スタート               *90*0*
# 9 : 通路 & ゴール                ******
# 迷路空間は、必ず長方形であることを前提とする。
# そして、再帰を用いた迷路空間の探索プログラムも作成せよ。
# 最短経路と後戻りした記録付き経路のどちらを表示しても構わないが両方表示した方がポイント高し
79デフォルトの名無しさん:2009/12/25(金) 16:51:53
http://pc12.2ch.net/test/read.cgi/tech/1258158172/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デフォルトの名無しさん:2009/12/25(金) 17:16:22
http://pc12.2ch.net/test/read.cgi/tech/1258158172/389
# [1] 授業単元:C言語実習
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10187.txt
# ■問題1
#  任意の画素数をもつ画像をアフィン変換(移動,拡大縮小,回転,せん断)するプログラムを作成せよ.
#  変換後の画像は画像ファイルとして保存すること.
#
# ■問題2
#  問題1で作成したプログラムに,逆アフィン変換を行う機能を追加せよ。
#  そして,アフィン変換,逆アフィン変換(最近傍法),逆アフィン変換(線形補間法)での結果に違いがあることを確認せよ.
#
#  ※逆アフィン変換とは,出力画像の座標値(X, Y)に対して逆変換を行うことで,入力画像の座標値(x, y)を求めるものである.
#
# (注意)
#  変換後の座標値が,配列のサイズ(縦と横)を越えるかどうかを確認し,超える場合は適切な例外処理を行うこと.
81デフォルトの名無しさん:2009/12/25(金) 17:25:52
http://pc12.2ch.net/test/read.cgi/tech/1258158172/81
# [1] 授業単元: C++
# [2] 問題文(含コード&リンク):公開鍵と秘密鍵を作り、これらを使い暗号化と復号化を行うプログラムを書け。(RSA暗号)
# [4] 期限: 2009/11/17朝まで
# 暗号化と復号化の手順は
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10129.txt
#
82デフォルトの名無しさん:2009/12/25(金) 17:55:57
宿題スレ難問集の様相を呈してきました。
HaskellやOCamlそして、Scalaなどの使い手がバッサバッサとプログラミングして
くれるといいんだがな。
83デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/25(金) 21:49:13
http://pc12.2ch.net/test/read.cgi/tech/1260532772/442
# [1] 授業単元: プログラミング実習
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10305.txt
#
# ★演習問題5
# 人力されたクラスの人数と科目の数に応じた配列を確保し,入力されたデータをその配列に保存し,科目ごとの和を求めよ。
# 例として,人数を3とし,科目数を3とした場合,それぞれの科日数に対する点数を読み込み,結果が正しく出力されるかを確認せよ。
# (時間があれば,人数や科日数を適当に変えて,動作を確認せよ)
# (実行結果例)
# クラスの人数は?4
# 科目の数は?3
# 1番目の学生
# 85
# 74
# 63
# < 中略>
# 各科目の和は以下の通りです
# 222
# 213
# 269
86デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/26(土) 05:18:54
http://pc12.2ch.net/test/read.cgi/tech/1260532772/464
# 1:単元名 C言語
# 2:問題文
# 元金、単利と複利の利率に対して、次のものを求めるプログラムを作成しなさい。
#
# 30年後の残高。
# 30年以内に複利の残高は単利の残高を上回るか。
# 上回るならば何年後か。
89デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/26(土) 06:38:57
>>90 訂正
% Prolog www

福利 -> 複利
92デフォルトの名無しさん:2009/12/26(土) 06:45:46
>>90
残高という述語名は好ましくないだろう。
93デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/26(土) 07:21:38
>>93 >>94
リンクを>>90 としてあるけどこれは>>88です。
さて、>>90の残高の中で表示をしているので、>>94の課題でも、
客年の何年目、利息、残高が煩く表示されてしまう。
?- tell('/dev/null'),'30年以内に複利の残高は単利の残高を上回るか。'(1000,0.045,0.031),told.
とでもやればよいか。
これでも、上回らないと中の副目標がfailになって、toldが実行されないままとなる。
96デフォルトの名無しさん:2009/12/26(土) 07:28:12
それもそうだけど、
複利の利率の方が大きいのでは1年目で片がついてしまうw
97デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/26(土) 07:57:58
どこが間違ってるのか、コメントしてよ。
間違いの部分を読むのは勉強になるから。
101デフォルトの名無しさん:2009/12/26(土) 08:06:03
>>100
焦ってしまって、精神的にコメントを入れてる余裕がなくなるw
人に見られないうちに書き換えようって。
ところで、findall/3は奇妙な仕様になっていて、
  findall(_残高,残高(複利,30,_元金,_複利の利率,_,_残高),L1),
  findall(_残高,残高(単利,30,_元金,_単利の利率,_,_残高),L2),
でも通ってしまう。
この目標が終了する時にこの中で使われている変数の束縛を解いてしまう。
好ましい表現ではないと思うから、避けるようにしているけど。
102デフォルトの名無しさん:2009/12/26(土) 08:24:51
# [1] 授業単元:Prolog基礎
# [2] 問題文(含コード&リンク):カラムとして、電話番号と氏名を持つ
# 電話帳テーブルがある。この中で同姓同名が最も多い氏名を探せ。
103デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/26(土) 09:32:12
>>104
ふたつ気になることがあります。
一つは、テーブルからの取得をclause/2で行っていること。本体(条件)を
殺しているのですが、電話番号による種別の判定など意味のあるケースも
想定できると思います。
二つめは、同一人が複数の回線を持つのは普通のことだから、カラムに
住所まで加えて、それも氏名+住所をキーにしなくてはいけないのではないか。
これは問題の不備ということになります。
106デフォルトの名無しさん:2009/12/26(土) 09:43:09
>>105
問題がテーブルとありますから、やはり単位節のみと考えるべきなんでしょうね。
いきなり、条件部の記述によって自動発信してしまうケースなどを懼れました。
それから時刻を調べて週末だけはこの電話とか。
107デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/26(土) 14:40:16
# [1] 授業単元:Prolog基礎
# A社の組織として営業部、総務部があります。営業部は営業一課、営業二課にわかれています。
# 総務部も人事課と経理課にわかれています。管理情報として所属テーブル、給与テーブルがあります。
# [所属テーブル]
# 部,  課,   ,社員名
# 営業部,営業一課,岡部
# 営業部,営業二課,小野
# 営業部,営業二課,鹿戸
# 営業部,営業二課,小泉
# 総務部,人事課,大崎
# 総務部,経理課,嶋田
# 総務部,経理課,宮田
# [給与テーブル]
# 社員名,給与
# 岡部,300000
# 小野,250000
# 鹿戸,280000
# 小泉,350000
# 大崎,200000
# 嶋田,400000
# 宮田,200000
# [問題] 部・課、部をそれぞれキーとして給与額を集約して合計した
# 部・課集約テーブル、部集約テーブルを作り出す述語を定義しなさい。
110デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/27(日) 21:03:04
パズルでもやってみる?

2,0,1,0 の4個の数字をこの順番で1回だけ使い、0から99の数字を作れ。
演算子、関数の使用は自由。



201^0 -> 1
115デフォルトの名無しさん:2009/12/28(月) 04:34:04
http://pc12.2ch.net/test/read.cgi/tech/1260532772/486
# [1] 授業単元:C言語プログラミング
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10312.txt
# ソケットを用いて,課題1のプログラムを以下のように改良する.
#
# サーバとクライアントに分割し,ユーザーはクライアントを用いて操作内容を入力し,その内容をサーバに送信する.
# それを受信したサーバは,その内容を基にファイルを操作する.必要であれば,サーバは結果をクライアントに送信し,クライアントはそれを受信して表示する.
# 機能ルーチンはサーバ側に実装し,課題1で作成した関数を改良し用いること
#
116デフォルトの名無しさん:2009/12/28(月) 04:45:07
http://pc12.2ch.net/test/read.cgi/tech/1260532772/487
# [1] 授業単元:計算機入門及び演習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10311.txt
#
以下の問題を解くプログラムを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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/28(月) 15:12:17
http://pc12.2ch.net/test/read.cgi/tech/1260532772/489
# [1] 授業単元:
# 画像解析
# [2] 問題文(含コード&リンク):
# 画像を、好きな倍率で大きくしたり小さくしたりするプログラムを作成してください
119デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/29(火) 11:03:55
http://pc12.2ch.net/test/read.cgi/tech/1258320456/79
# Windows XP上で、
# まず 同じディレクトリにあるsetting.iniを読み込んで
# その1行目, 2行目, 3行目を
# 文字列p, regex, aftに格納する。
# pをパスとして調べ、
# 1.実在するディレクトリだったらそのディレクトリの名前とサブディレクトリの名前と、
# それらの中にあるファイルの名前、およびファイルの中身に以下の置換作業を実行する。
# > 前からみて順に正規表現regexにマッチする文字列を全てaftに置換する。
# 2.実在しないディレクトリでなかったらエラーメッセージを標準出力に出力する。
126デフォルトの名無しさん:2009/12/29(火) 11:25:43
>>114
使用言語: Scilab

-->a=2;[0:(10^a-a/a)]
127デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/12/30(水) 00:29:25
>>114
使用言語: Io

Io> list(2-0,10)reduce(a,b,b**a)repeat(v, v println)
129デフォルトの名無しさん:2009/12/30(水) 01:18:56
>>114
使用言語: Io

Io> (20-10)squared repeat(v, v println)
130デフォルトの名無しさん:2009/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デフォルトの名無しさん:2009/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]
132デフォルトの名無しさん:2009/12/30(水) 08:22:02
>>131
Prologでは実際にこんな述語を呼び出して検索や置換を行うものですか?
133デフォルトの名無しさん:2009/12/30(水) 08:57:48
>>132
一般にどうかはわからない。私の場合はcall/1を使って汎用述語を作ることは
絶対と言っていいほどしない。したがってここでは課題として書いてみたが、
>>130のような定義述語を利用することはない。少々煩わしくても、検索が必要に
なった時に一つ述語を定義する。
このスレでは、一度に書き込める行数に制限があるので、何度も使用された
述語を「汎用」のものとみなして定義なしに、呼び出している場合も多い。
これはやむを得ずそうしているのであって、それが模倣すべきプログラムスタイルだ
などと考えないでほしい。
134デフォルトの名無しさん:2009/12/30(水) 10:15:59
http://pc12.2ch.net/test/read.cgi/tech/1260532772/496
# [1] 授業単元: C++実習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10313.txt
# 問題2
# 個々のオブジェクトにint型の識別番号を与える(全オブジェクトに異なる整数値を与える)ように以下のクラスを書き換えよ。
# また書き換えたクラスがテストできる適切なmain関数も作成せよ。
# class Account {
# string name; //口座名義
# string no; //口座番号
# long balance; //預金額
# Date open; //口座開設日
#
# public:
# Account(string n, string num, long z, Date op);
#
# void Deposit(long k); //預ける
# void Withdraw(long k); //おろす
#     string GetName() const { return name; } //口座名義を調べる
# string GetNo() const { return no; } //口座番号を調べる
# long CheckBalance() const { return balance; } //預金額を調べる
#     Date OpeningDate() const { return open; } //口座開設日を調べる
# }
135デフォルトの名無しさん:2009/12/31(木) 04:05:03
http://pc12.2ch.net/test/read.cgi/tech/1235561034/679
# [授業単元] : Prolog
# 知恵を貸してください。
# 今宿題で嫉妬深い恋人たちの問題をやっていて
# 初期状態とゴール状態をそれぞれ
# initial_state(jealousy, jealousy(left,[1,2,3],[1,2,3],[ ],[ ])).
# final_state(jealousy(right,[ ],[ ],[1,2,3],[1,2,3])).
# と作って指し手の移動と状態変化についてはかけたのですが
# 状態変化したときの合法性のチェックでつまっています。
# legal(jealousy(right,[[1],[1,2]], [[2,3],[3]]) ×
# legal(jealousy(left,[[2,3],[2,3]], [[1],[1]])  ○
# としたいのですがどうしたらいいのでしょうか?
136デフォルトの名無しさん:2009/12/31(木) 04:26:43
http://pc12.2ch.net/test/read.cgi/tech/1260532772/536
# [1] 授業単元: C++
# [2] 問題文(含コード&リンク):
#   課題1資料 http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10318.txt
#   課題1    http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10319.txt
#   課題1応用 http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10320.txt
# 京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されているデータ(http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10318.txt)がある。
# 区の名前,人口,面積のデータを格納しなさい。
# 人口についてソートした結果,面積についてソートした結果を出力する。
#
# 区の名前,人口,面積のてデータを格納し,格納したデータを調べて以下の情報を出力するプログラムを作成しなさい。
# 人口が最大の区と最小の区の、名前と人口。
# 面積が最大の区と最小の区の、名前と面積。
# 人口密度が最大の区と最小の区の、名前と人口密度。
# Kita 124306 94.92
# Kamigyo 83082 7.11
# Sakyo 168133 246.88
# Nakagyo 100145 7.38
# Higashiyama 41659 7.46
# Yamashina 136769 28.78
# Shimogyo 74897 6.82
# Minami 97877 15.78
# Ukyo 201819 291.95
# Nishikyo 155973 59.20
# Fushimi 284812 61.62
137デフォルトの名無しさん:2009/12/31(木) 06:56:21
>>136
% Prolog
'京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されているデータがある'('http://ime.nu/ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10318.txt').

区の名前,人口,面積のデータを格納する :-
  '京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されているデータがある'(_ウェブサイト),
  get_split_lines(_ウェブサイト,[' '],Lines),
  member([_区の名前,_人口,_面積],Lines),
  assertz('京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積)),
  fail.
区の名前,人口,面積のデータを格納する.

人口についてソートする(_整列されたデータならび) :-
  findall([_人口,_区の名前,_人口,_面積],'京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積),L),
  sort(L,L1),
  降順に並べ直しながら鍵項目の削除する(L1,[],_整列されたデータならび).

面積についてソートする(_整列されたデータならび) :-
  findall([_面積,_区の名前,_人口,_面積],'京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積),L),
  sort(L,L1),
  降順に並べ直しながら鍵項目の削除する(L1,[],_整列されたデータならび).

降順に並べ直しながら鍵項目を削除する([],X,X) :- !.
降順に並べ直しながら鍵項目を削除する([[_|L]|R],Y,X) :-
  降順に並べ直しながら鍵項目を削除する(R,[L|Y],X).
138デフォルトの名無しさん:2009/12/31(木) 06:58:38
>>137 (>>136) 改行してはいけないところで折り返してしまった。
% Prolog

'京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されているデータがある'('http://ime.nu/ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10318.txt').
139デフォルトの名無しさん:2009/12/31(木) 07:00:53
>>138
どうしても、ダメだね。勝手に改行が入ってしまう。"ある"の後の改行は
ないことにして下さい。
140デフォルトの名無しさん:2009/12/31(木) 07:14:48
>>137 訂正
% Prolog Lines -> _区の名前・人口・面積ならび

区の名前,人口,面積のデータを格納する :-
  '京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されているデータがある'(_ウェブサイト),
  get_split_lines(_ウェブサイト,[' '],_区の名前・人口・面積ならび),
  member([_区の名前,_人口,_面積],_区の名前・人口・面積ならび),
  assertz('京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積)),
  fail.
区の名前,人口,面積のデータを格納する.
141デフォルトの名無しさん:2009/12/31(木) 08:14:28
>>136
% Prolog

人口が最大の区と最小の区の、名前と人口(_人口が最大の区の名前,_人口が最大の区の人口,_人口が最小の区の名前,_人口が最小の区の人口) :-
  findmax([_人口,_区の名前],京都市の区ごとの人口と面積のデータ(_区の名前,_人口,_),[_人口が最大の区の人口,_人口が最大の区の名前),
  findmin([_人口,_区の名前],京都市の区ごとの人口と面積のデータ(_区の名前,_人口,_),[_人口が最小の区の人口,_人口が最小の区の名前).

面積が最大の区と最小の区の、名前と面積(_面積が最大の区の名前,_面積が最大の区の面積,_面積が最小の区の名前,_面積が最小の区の面積) :-
  findmax([_面積,_区の名前],京都市の区ごとの人口と面積のデータ(_区の名前,_,_面積),[_面積が最大の区の面積,_面積が最大の区の名前),
  findmin([_面積,_区の名前],京都市の区ごとの人口と面積のデータ(_区の名前,_,_面積),[_面積が最小の区の面積,_面積が最小の区の名前).

人口密度が最大の区と最小の区の、名前と人口密度(_人口密度が最大の区の名前,_人口密度が最大の区の人口密度,_人口密度が最小の区の名前,_人口密度が最小の区の人口密度) :-
  findmax([_人口密度,_区の名前],(京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積),_人口密度 is _人口 / _面積),[_人口密度が最大の区の人口密度,_人口密度が最大の区の名前),
  findmin([_人口密度,_区の名前],(京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積),_人口密度 is _人口 / _面積),[_人口密度が最小の区の人口密度,_人口密度が最小の区の名前).
142デフォルトの名無しさん:2009/12/31(木) 08:38:12
>>141
ほとんどの場合これで済ませてしまいますが、本当は正しくない。
これだと、同一の人口、面積、人口密度が生じた時、名前の小さいまたは大きいもの
が採られてしまいます。正しい処理は、

人口が最大の区と最小の区の、名前と人口(_人口が最大の区の名前,_人口が最大の区の人口,_人口が最小の区の名前,_人口が最小の区の人口) :-
  findmax(_人口,京都市の区ごとの人口と面積のデータ(_,_人口,_),_最大の人口),
  findall([_区の名前,_最大の人口],京都市の区ごとの人口と面積のデータ(_区の名前,_最大の人口,_),L1),
  findmin(_人口,京都市の区ごとの人口と面積のデータ(_,_人口,_),_最小の人口),
  findall([_区の名前,_最小の人口],京都市の区ごとの人口と面積のデータ(_区の名前,_最小の人口,_),L2),
  member([_人口が最大の区の名前,_人口が最大の区の人口],L1),
  member([_人口が最小の区の名前,_人口が最小の区の人口],L2).

% なら、人口が同一の区があっても正しく解が得られます。


143デフォルトの名無しさん:2010/01/02(土) 13:54:46
http://pc12.2ch.net/test/read.cgi/tech/1197620454/553
# (問題)
# 社員データを一元管理するためのサーバークライアントシステムを作れ
# 要求仕様)
# 管理するデータは社員番号、氏名、所属、入社年月日
# クライアントから追加、削除、修正が行えること
# 管理データはCSV形式で保存すること
144デフォルトの名無しさん:2010/01/02(土) 22:13:02
http://pc12.2ch.net/test/read.cgi/tech/1260532772/557
# [1] 授業単元: 情報数学
# [2] 問題文(含コード&リンク):
# オイラー級数を用いて、πの近似値を求めよ。
145デフォルトの名無しさん:2010/01/02(土) 22:21:57
http://pc12.2ch.net/test/read.cgi/tech/1260532772/545
# [1] 授業単元:基礎プログラミング実習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.j
p/cgi-bin/joyful/img/10325.txt
# Step 3. 不偏分散を求める次の関数を定義する.
# float variance(float data[], int n) .この関数は,data[]配列に入っている
# n個のデータの不偏分散を求め,関数値としてその不偏分散値を返す.
# なお,不偏分散の計算に必要な平均値は,関数average()を呼び出して求めること.
146デフォルトの名無しさん:2010/01/02(土) 22:24:19
http://pc12.2ch.net/test/read.cgi/tech/1260532772/546
# [1] 授業単元: プログラミング応用
# [2] 問題文(含コード&リンク):
# 任意の奇数n(nは15以下)を入力しn×nの魔方陣を出力する。
# そして、作成した魔方陣の縦、横、斜めの合計値も同時に出力せよ。
# ただし、1は必ず一番左の列の真ん中に置くこと。
# (例)
# n=3の時
#           15
#   6  7  2 15
#   1  5  9 15
#   8  3  4 15
#  15 15 15 15

147デフォルトの名無しさん:2010/01/03(日) 06:34:05
http://pc12.2ch.net/test/read.cgi/tech/1260532772/547
# [1] 授業単元: 情報数学
# [2] 問題文(含コード&リンク):
#
# 問)同時整数関係を見つけるプログラムを考えなさい。
# 整数の解を求めるプログラムと、複素数の解を求めるプログラムを考え、
#  それを組み合わせることで両方の解を同時に求め示すプログラムについて考えなさい。
148デフォルトの名無しさん:2010/01/03(日) 06:39:51
http://pc12.2ch.net/test/read.cgi/tech/1260532772/545
# [1] 授業単元:基礎プログラミング実習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10325.txt
# 一問目
#
# Step 1. scanf()を用いてfloat型の値を入力し,それを順番にdata[]配列に格納する.
# このdata[]配列は関数の呼び出し側で宣言するものとし,宣言した配列の要素数(入力可能なデータの最大個数)をmaxとして関数を呼び出すものとする.
# また,この関数は,データ入力数が最大のmax個に達するか,負値が入力されるまでデータ入力を繰り返すものとする.
149デフォルトの名無しさん:2010/01/03(日) 06:43:39
http://pc12.2ch.net/test/read.cgi/tech/1260532772/545
# [1] 授業単元:基礎プログラミング実習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10325.txt
# Step 2. 平均値を求める次の関数を定義する. float average(float data[], int n)
# この関数は, data[]配列に入っているn個のデータの平均値を求め,関数値としてその平均値を返す.
150デフォルトの名無しさん:2010/01/03(日) 07:01:06
http://pc12.2ch.net/test/read.cgi/tech/1248012902/692
# 【 課題 】キーワードからクロスワードを完成させる
# ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/867.zip
# 【 形態 】Javaアプリケーション(main()で開始
# <template>
#
# ■2□■■
# 1■□□□
# □□□■■
# 4■□□■
# ■□□3□
#
# <縦のかぎワード>
# コオリ
# ニホンカミ
# モモ
#
# <横のかぎワード>
# ウニ
# オデン
# ホクロ
# アミモノ
# カモ
151デフォルトの名無しさん:2010/01/03(日) 07:45:45
http://pc11.2ch.net/test/read.cgi/db/1252492296/381
# 弁護士の名前(name)とその人の所属法律事務所の名称(ofic)から成るテーブルがあるとして、
# 法律事務所は弁護士がひとりしかいないところから300人以上いるところまでさまざまなので、
# 「所属する弁護士の数が多い事務所トップ10」 の事務所名と人数を select一発で表示させるには
# どうすればいい?
#
152デフォルトの名無しさん:2010/01/03(日) 19:57:09
>>151
% Prolog は集約は得意としない。その場でこの述語を考えるのは負担が大きいので、
% 以下のような準備が必要だろう。SQLのcount(*)を解決する処理だが。

集約_数_逆順ならび([],L,L) :- !.
集約_数_逆順ならび([A|R1],L1,L) :-
  \+(member([_,A],L1)),
  集約_数_計測(A,R1,L2,1,Count),
  逆順整列([Count,A],L1,L3),
  集約_数_逆順ならび(L2,L3,L),!.

集約_数_計測(_,[],[],Count,Count) :- !.
集約_数_計測(A,[A|R1],L2,Count1,Count) :-
  Count2 is Count1 + 1,
  集約_数_計測(A,R1,L2,Count2,Count),!.
集約_数_計測(A,[B|R1],[B|R2],Count1,Count) :-
  \+(A = B),
  集約_数_計測(A,R1,R2,Count1,Count),!.

逆順整列(L,[],[L]) :- !.
逆順整列(L,[L1|R1],[L,L1|R1]) :-
  L @>= L1,!.
逆順整列(L,[L1|R1],[L1|R2]) :-
  逆順整列(L,R1,R2).
153デフォルトの名無しさん:2010/01/03(日) 23:45:33
>>151
使用言語:J
ofic=:;:'b a b b a a c d g h c x r t a d c g j u y w q'
]ofic=:ofic,;:'g v c f g v a d e x n u y t y r t a s w'
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|b|a|b|b|a|a|c|d|g|h|c|x|r|t|a|d|c|g|j|u|y|w|q|g|v|c|f|g|v|a|d|e|x|n|u|y|t|y|r|t|a|s|w|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
10{.\:~(~.,.~<@#/.~)ofic
+-+-+
|6|a|
+-+-+
|4|g|
+-+-+
|4|c|
+-+-+
|3|y|
+-+-+
|3|t|
+-+-+
|3|d|
+-+-+
|3|b|
+-+-+
|2|x|
+-+-+
|2|w|
+-+-+
|2|v|
+-+-+
154デフォルトの名無しさん:2010/01/04(月) 05:15:18
>>152 (>>151)
% Prolog 逆順ではなかった。降順だね。

集約_数_降順ならび([],L,L) :- !.
集約_数_降順ならび([A|R1],L1,L) :-
  \+(member([_,A],L1)),
  集約_数_計測(A,R1,L2,1,Count),
  降順整列([Count,A],L1,L3),
  集約_数_降順ならび(L2,L3,L),!.

集約_数_計測(_,[],[],Count,Count) :- !.
集約_数_計測(A,[A|R1],L2,Count1,Count) :-
  Count2 is Count1 + 1,
  集約_数_計測(A,R1,L2,Count2,Count),!.
集約_数_計測(A,[B|R1],[B|R2],Count1,Count) :-
  \+(A = B),
  集約_数_計測(A,R1,R2,Count1,Count),!.

降順整列(L,[],[L]) :- !.
降順整列(L,[L1|R1],[L,L1|R1]) :-
  L @>= L1,!.
降順整列(L,[L1|R1],[L1|R2]) :-
  降順整列(L,R1,R2).
155デフォルトの名無しさん:2010/01/04(月) 05:37:34
>>151
% Prolog

所属する弁護士の数が多い事務所トップ10(L) :-
  findall(_所属法律事務所,弁護士所属(_弁護士の名前,_所属法律事務所),L1),
  集約_数_降順ならび(L1,[],L2),
  length(L,10),
  append(L,_,L2).
156デフォルトの名無しさん:2010/01/04(月) 07:10:58
>>147
同時整数関係 -> 同次整数関係

であるとの訂正が出題スレに載っていました。
157デフォルトの名無しさん:2010/01/04(月) 07:18:35
>>151
使用言語:Io

Io> ofic:="b a b b a a c d g h c x r t a d c g j u y w q"
Io> ofic=ofic .. "g v c f g v a d e x n u y t y r t a s w"
Io> ofic=ofic split

Io> ofic uniqueCount sortBy(block(x,y,x at(1)>y at(1)))slice(0,10)
==> list(list("a", 6), list("c", 4), list("b", 3), list("d", 3), list("g", 3),
list("y", 3), list("t", 3), list("v", 2), list("r", 2), list("w", 2))
158デフォルトの名無しさん:2010/01/04(月) 07:28:00
>>109
% Prolog 出題から離れますが、2次元のリストの指定された列を取り出すユーティリティは

全ての行に対して位置指定により列を選択する(_,[],[]) :- !.
全ての行に対して位置指定により列を選択する(_選択する列位置ならび,[_行|R1],[L|R2
]) :-
  列の選択(_選択する列位置ならび,_行,L),
  全ての行に対して位置指定により列を選択する(_選択する列位置ならび,R1,R2).

列の選択([],_,[]) :- !.
列の選択([_列位置|R1],_行,[A|R2]) :-
  integer(_列位置),
  list_nth(_列位置,_行,A),
  列の選択(R1,_行,R2),!.
列の選択([A|R1],_行,R2) :-
  \+(integer(A)),
  B は A,
  integer(B),
  列の選択([B|R1],_行,R2),!.
列の選択([A|R1],_行,[B|R2]) :-
  \+(integer(A)),
  B は A,
  \+(integer(B)),
  列の選択(R1,_行,R2),!.
159デフォルトの名無しさん:2010/01/04(月) 08:04:41
>>158
list_nthは使わないで、第一引数を先にソートしてからやった方がいいと思う。
160デフォルトの名無しさん:2010/01/04(月) 08:08:27
>>159
列の選択の第二・三節で変な事をやっているので、ソートできないw
161デフォルトの名無しさん:2010/01/04(月) 08:13:24
そういうことか。それにしても危なっかしい仕様だな。
162デフォルトの名無しさん:2010/01/04(月) 09:34:39
>>12
使用言語:Scala

scala> def f1(n:Int):Int={var r=0;var a=n;while(a>0){r=10*r+a%10;a/=10};r}
f1: (Int)Int

scala> f1(987654321)
res72: Int = 123456789

scala> def f2(n:Int):Int={n.toString.reverse.toInt}
f2: (Int)Int

scala> f2(987654321)
res73: Int = 123456789
163デフォルトの名無しさん:2010/01/04(月) 11:40:11
>>144
使用言語:J

%:6*+/%2^~>:i.1000000
3.14159
164デフォルトの名無しさん:2010/01/04(月) 12:24:50
>>144
使用言語:Io

Io> r:=0;for(i,1,1000000,r=r+1/(i*i));(r*6)sqrt
==> 3.1415916986605086
165デフォルトの名無しさん:2010/01/04(月) 16:24:30
>>159
>>160 のような呑気なレスをつけてしまったが、取り出す順序が勝手に変わって
しまっては、後でmember/2などで取り出す時どうすればいいのかな?
166デフォルトの名無しさん:2010/01/04(月) 17:10:15
http://pc11.2ch.net/test/read.cgi/db/1252492296/377
#
# Aテーブル
# aaa|ddd
#
# Bテーブル
# aaa|bbb
#
# Cテーブル
# bbb|ccc
#
# Aテーブルに対して、カラムaaaでBテーブルが紐づき、
# Bテーブルに対して、カラムbbbでCテーブルが紐づくとします。
# (つまり、Aテーブルのレコード1件は、Bテーブルを経由してCテーブルのレコード1件と紐づく)
# ここで、A.ddd = 'X'のとき、C.ccc = 'Y'に更新したいのですが
# 下記の文であってますでしょうか?
# また、もっと効率のいい方法はありますでしょうか?
#
# update C set C.ccc = 'Y' where C.bbb in
# ( select B.bbb from B where B.aaa in
#  ( select A.aaa from A where A.ddd = 'X')
#  ( select A.aaa from A where A.ddd = 'X')
# )
167デフォルトの名無しさん:2010/01/04(月) 17:17:02
>>166
% Prolog

?- 'A'(A,'X'),'B'(A,B),(retract('C'(B,_)),fail;assertz('C'(B,'Y'))).
168デフォルトの名無しさん:2010/01/04(月) 18:03:23
>>167 (>>166)
% prolog (retract('C'(B,_)),fail;assertz('C'(B,'Y'))) の部分を

update(P,Q) :-
  functor(P,F,A),
  functor(Q,F,A),
  ( retract(P),fail;assertz(Q)).

が定義されているとして、

?- 'A'(A,'X'),'B'(A,B),update('C'(B,_),'C'(B,'Y')).
169デフォルトの名無しさん:2010/01/04(月) 19:30:52
http://pc12.2ch.net/test/read.cgi/tech/1248012902/695
# http://ime.nu/www1.axfc.net/uploader/Img/so/69253.jpg
# http://ime.nu/www1.axfc.net/uploader/Img/so/69254jpg
# 問題
# 次の画面のように、サーバとクライアントでの間で文字列を送り合う
# プログラムを作れ(サーバとクライアント両方とも)
#
# 【クライアント】      【サーバ】
# サーバのアドレスは     ポートは
# 202.48.53.27        12345
# ポートは          名前は
# 12345            syou
# 名前は           aikawa>Hello
# aikawa           syou>Hello
# aikawa>Hello
# syou>Hello
# aikawa>
#
# ただし、以下の条件を満たすようにすること
# クライアントでquitが入力された場合、クライアントは接続を切りプログラムを
# 終了し、サーバは接続が切れたら、次のクライアントの接続を待つ。
# サーバでquitが入力された場合、サーバは接続を切り、次のクライアントの
# 接続を待ち、クライアントは接続が切られたらプログラムを終了する
# エンターキーのみが入力された場合は、文字列を送らずもう一度文字列を
# 入力させて、その文字列を送るようにする
170デフォルトの名無しさん:2010/01/05(火) 00:05:28
>>144
使用言語:Scilab

-->sqrt(6*sum(1.0 ./((1:1000000)^2)))
ans =

3.1415917
171デフォルトの名無しさん:2010/01/05(火) 07:52:32
>>144
使用言語:Haskell

Prelude> sqrt $ 6*(sum[1/(x*x)|x<-[1..1000000]])
*** Exception: stack overflow

Prelude> sqrt $ 6*(sum[1/(x*x)|x<-[1..500000]])
3.141590743731832
172デフォルトの名無しさん:2010/01/05(火) 11:56:40
>>151
使用言語:R

> ofic <- "b a b b a a c d g h c x r t a d c g j u y w q"
> ofic <- paste(ofic,"g v c f g v a d e x n u y t y r t a s w")
> ofic <- unlist(strsplit(ofic," "))

> head(sort(table(ofic),T),10)
ofic
a c g b d t y r u v
6 4 4 3 3 3 3 2 2 2
173デフォルトの名無しさん:2010/01/06(水) 10:09:29
>>116
% Prolog データ入力部分は省略

カードの合計が一致するまででたらめにN回以内交換する(0,_,_,_,_,[]) :- !,fail.
カードの合計が一致するまででたらめにN回以内交換する(N,AL,BL,AL,BL,[]) :-
  加算(AL,Sum1),
  加算(BL,Sum2),
  Sum1 = Sum2.
カードの合計が一致するまででたらめにN回以内交換する(N,AL,BL,X,Y,[[A,B,AL,BL]|Z]) :-
  RA is (random mod 3) + 1,
  RB is (random mod 3) + 1,
  ならびの回転(左方向,RA,AL,[A|R1]),
  ならびの回転(左方向,RB,BL,[B|R2]),
  N1 is N - 1,
  カードの合計が一致するまででたらめにN回以内交換する(N1,[B|R1],[A|R2],X,Y,Z).
174デフォルトの名無しさん:2010/01/06(水) 15:52:03
http://pc12.2ch.net/test/read.cgi/tech/1260532772/572
# [1] 授業単元: 5元:プログラミング演習III
# 問題(5)
# 実行するとカラーダイヤログを表示し、選択したカラーをクリップボードに
# 送る処理を記述せよ
175デフォルトの名無しさん:2010/01/06(水) 20:05:10
>>174
使用言語:なでしこ

「#{HEX(色選択)}」をコピー
176デフォルトの名無しさん:2010/01/06(水) 20:33:14
>>174
使用言語:J

wd 'clipcopy "',(":3{.". wd 'mbcolor'),'"'
177デフォルトの名無しさん:2010/01/07(木) 07:18:22
http://pc12.2ch.net/test/read.cgi/tech/1260532772/575
# [1]C言語入門
# [2]2つの複素数の和と積を計算して表示するプログラムを作成せよ。
# 構造体complexを定義し、和の複素数を返すadd関数、積の複素数を返すmul関数、複素数を表示するprint関数をそれぞれ作成し
# mainでは2つの複素数をキーボードから読み込み、関数を呼ぶ。
# 虚数部にはiを付加せよ。
178デフォルトの名無しさん:2010/01/07(木) 07:29:05
http://pc11.2ch.net/test/read.cgi/db/1252492296/393
# SELECT文について質問です。
# テストデータ
# 名前 |1回目点数|2回目点数|
# ----+--------+--------|
# 田中 | 100    | 90     |
# 鈴木 | 80      | 80     |
#
# 成績マスタ
# 成績 | 点数 |
# ----+-------|
# A   | 100   |
# B   |  90   |
# C   |  80   |
# ・欲しい結果
# 名前 |成績(1回目)|成績(2回目)|
# ----+---------+---------|
# 田中 | A     | B     |
# 鈴木 | C     | C     |
# ・説明 2TABLEを連結してSELECTしたいのですが、テストデータの点数を
# 下に、成績マスタから(1回目)と(2回目)の値をひっぱってくるには
# どう書けばよいでしょうか。
179デフォルトの名無しさん:2010/01/07(木) 07:41:15
>>178
% Prolog 引数を順に処理する場合、それぞれ副目標を明示的に立てる。

テストデータ(田中,100,90).
テストデータ(鈴木,80,80).

成績マスタ('A',100).
成績マスタ('B',90).
成績マスタ('C',80).

欲しい結果(_欲しい結果) :-
  findall([_氏名,_一回目成績,_二回目成績],欲しい結果(_氏名,_一回目成績,_二回目成績),_欲しい結果).

欲しい結果(_氏名,_一回目成績,_二回目成績) :-
  テストデータ(_氏名,_一回目点数,_二回目点数),
  成績マスタ(_一回目成績,_一回目点数),
  成績マスタ(_二回目成績,_二回目点数).
180デフォルトの名無しさん:2010/01/07(木) 09:43:07
>>178
% Prolog 元スレでhttp://pc11.2ch.net/test/read.cgi/db/1252492296/393の
% 成績マスタは以下のような範囲型にしたかったのではないか、との指摘があった。

テストデータ(田中,100,90).
テストデータ(鈴木,80,80).

成績マスタ('A',91,100).
成績マスタ('B',81,90).
成績マスタ('C',71,80).

欲しい結果(_欲しい結果) :-
  findall([_氏名,_一回目成績,_二回目成績],欲しい結果(_氏名,_一回目成績,_二回
目成績),_欲しい結果).

欲しい結果(_氏名,_一回目成績,_二回目成績) :-
  テストデータ(_氏名,_一回目点数,_二回目点数),
  成績マスタ(_一回目成績,_点数下限1,_点数上限1),
  _一回目成績 >= _点数下限1,
  _一回目成績 =< _点数上限1,
  成績マスタ(_二回目成績,_点数下限2,_点数上限2),
  _二回目成績 >= _点数下限2,
  _二回目成績 =< _点数上限2.
181デフォルトの名無しさん:2010/01/07(木) 09:49:26
>>180 (>>178)
% Prolog このような場合、RDBからは遠くなるが、

テストデータ(田中,100,90).
テストデータ(鈴木,80,80).

成績マスタ('A',_点数) :- _点数 >= 91,_点数 =< 100.
成績マスタ('B',_点数) :- _点数 >= 81,_点数 =< 90.
成績マスタ('C',_点数) :- _点数 >= 71,_点数 =< 80.

欲しい結果(_欲しい結果) :-
  findall([_氏名,_一回目成績,_二回目成績],欲しい結果(_氏名,_一回目成績,_二回目成績),_欲しい結果).

欲しい結果(_氏名,_一回目成績,_二回目成績) :-
  テストデータ(_氏名,_一回目点数,_二回目点数),
  成績マスタ(_一回目成績,_一回目点数),
  成績マスタ(_二回目成績,_二回目点数).

% の方がPrologの特性を生かしたコードといえるだろう。
182デフォルトの名無しさん:2010/01/07(木) 13:10:38
>>177
使用言語:J

add=:dyad def 'x+y'
mul=:dyad def '(-/x*y),+/y*|.x'
print=:monad def 'smoutput (":y),''i'' '

a=: 1 2
b=: 3 4

print a add b
4 6i
print a mul b
_5 10i

NB.標準サポートの複素数の場合
datatype 1j2
complex
1j2 + 3j4
4j6
1j2 * 3j4
_5j10
183デフォルトの名無しさん:2010/01/07(木) 16:55:46
http://pc12.2ch.net/test/read.cgi/tech/1260532772/582
# 【質問テンプレ】
# [1] 授業単元:セミナー
# [2] 問題文(含コード&リンク):∫(x=0,4)∫(y=0,3)∫(x=0,2) 4*x^3 + x*y^2 + 5*y + y*z + 6*z dz dy dx
#  を解くプログラムを書け
184デフォルトの名無しさん:2010/01/07(木) 18:27:21
>>183
使用言語:maxima

(%i1) integrate(integrate(integrate(4*x^3+x*y^2+5*y+y*z+6*z,z,0,2),y,0,3),x,0,4);
(%o1) 2040

x= が2回出てきますが、2回目のx= は勝手にz= と解釈しました。
185デフォルトの名無しさん:2010/01/07(木) 20:30:55
http://pc12.2ch.net/test/read.cgi/tech/1260532772/588
# [1] 授業単元: 情報プログラム
#
# [2] 問題文(含コード&リンク):
#   次の関数の積分を、台形公式を使って求めたい。
#   ただし、積分区間は(0,2)きざみ幅はh=0.01とする。
#   f(x)=(4-x2)1/2
#
#  ※台形公式は積分区間を(a,b)とすると n=(b-a)/h
# S=h*{1/2(f(a))+f(b))+f(a+h)+f(a+2h)+…+f(a+(n-1)h}となる。
#
186デフォルトの名無しさん:2010/01/08(金) 05:28:41
http://pc12.2ch.net/test/read.cgi/tech/1260532772/604
# [1] 授業単元: 演習チャレンジ問題
# [2] 問題文(含コード&リンク):
# あるint型配列array[256]の中身をランダムシャッフルしたい。
# 0〜127の範囲の値を被らずに出す乱数関数randEx(Seed, i)を作成せよ。(iは0〜127)
# ※Seedを変えることにより、異なるパターンのランダム列が出るようにする。
# ※array[i]とarray[128+randEx(Seed, i)]をスワップすることで並列計算において一気にシャッフルするのが目的です。
# ※「スワップするかしないか」の部分は別なので考えなくて良いです。
187デフォルトの名無しさん:2010/01/08(金) 07:53:39
http://pc11.2ch.net/test/read.cgi/db/1252492296/397
# 基本的なことで申し訳ないんですけど、
# あるテーブルから特定のデータが1件でも存在するかどうかの判断をしたいのですが 、
# COUNT()はテーブル内の全部のレコードを検索してしまうので、もっと高速でスマー トな方法は無いか存じないでしょうか。
#

188デフォルトの名無しさん:2010/01/08(金) 08:03:41
>>187
% Prolog (!)に意味があります。

あるテーブルから特定のデータが1件でも存在するかどうかの判断する(Q) :- call(Q),!.
189デフォルトの名無しさん:2010/01/08(金) 08:08:37
>>187
% Prolog テーブル名,引数ならびとして与えられたら、

あるテーブルから特定のデータが1件でも存在するかどうかの判断する(_テーブル名,_引数ならび) :-
  Q =.. [_テーブル名|_引数ならび],
  call(Q),!.
190デフォルトの名無しさん:2010/01/08(金) 08:14:23
>>187
% Prolog >>189は単位節データベースの自然なコードだが、条件が付加されていて、
% そこに副作用を生じる目標が記述されている懸念がある場合は、clause/2を使う。

あるテーブルから特定のデータが1件でも存在するかどうかの判断する(_テーブル名,_引数ならび) :-
  Q =.. [_テーブル名|_引数ならび],
  clause(Q,_),!.
191デフォルトの名無しさん:2010/01/08(金) 08:31:47
>>187
% Prolog >>190にさらに条件を付加したい場合は、_条件として引数の条件、あるいは
% 引数と引数の関係を記述します。

あるテーブルから特定のデータが1件でも存在するかどうかの判断する(_テーブル名,_引数ならび,_条件) :-
  Q =.. [_テーブル名|_引数ならび],
  clause(Q,_),
  call(_条件),!.
192デフォルトの名無しさん:2010/01/08(金) 10:54:08
http://pc12.2ch.net/test/read.cgi/tech/1260532772/606
# プログラミングの問題なんですが、if文と繰り返し(for,whileのいずれか)を利用して次の問題を作成します。
#
# 米ドル紙幣としては次のような紙幣とコインがある。
# 100ドル、50ドル、20ドル、10ドル、5ドル、2ドル、1ドル
# 50セント、25セント、10セント、5セント、1セント
#
# 問題は、キーボードから日本円を入力し、まずドルに変換した後ドルを最適な紙幣とコインに振り分けるプログラムを作成しなさい。但し1ドルを92.69円として換算しなさい。そして、日本円が0円の時にプログラムを終了する。
193デフォルトの名無しさん:2010/01/08(金) 11:02:14
>>186
使用言語:J

randEx=:dyad def 'y{?~128[(9!:1)x'
123 randEx 0
126
123 randEx 1
57
8 16 $ 123 randEx i.128
126 57 86 113 124 79 46 115 67 27 101 54 70 4 30 5
62 98 31 121 11 9 119 50 75 89 71 117 68 74 108 81
22 47 34 102 55 3 48 105 96 122 52 110 85 88 14 58
116 84 1 82 118 20 39 44 19 41 28 93 16 78 92 87
17 104 6 123 109 23 40 100 91 73 24 111 106 38 80 94
83 56 60 33 42 15 66 13 72 64 32 8 103 77 29 112
18 76 25 10 125 127 65 51 37 43 97 0 35 36 120 45
2 90 26 12 99 114 21 63 7 95 59 69 61 107 49 53
321 randEx 0
116
321 randEx 1
46
8 16 $ 321 randEx i.128
116 46 112 67 45 53 9 7 106 114 82 3 20 86 77 110
113 42 1 29 117 18 93 58 38 52 90 15 79 97 25 50
99 49 27 51 126 89 111 16 115 119 4 39 19 76 54 118
0 108 65 125 47 55 63 14 88 103 73 48 30 23 59 87
5 33 101 36 91 12 22 95 24 43 74 37 69 26 28 57
68 94 11 32 122 92 100 66 104 34 123 17 75 13 40 2
60 56 70 98 64 62 84 80 109 35 85 121 105 61 102 44
8 71 96 124 107 41 83 21 127 10 120 78 6 31 72 81
194デフォルトの名無しさん:2010/01/08(金) 16:35:48
http://pc12.2ch.net/test/read.cgi/tech/1260532772/620
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):掃き出し法。
#   0,1のみを成分にもつn次正方行列Aが2重リストとしてある。Aにmod2の行基本変形を施して、階段行列に変形するプログラム
195デフォルトの名無しさん:2010/01/08(金) 17:20:51
>>183
使用言語:Yacas

In> Integrate(x,0,4)Integrate(y,0,3)Integrate(z,0,2)4*x^3+x*y^2+5*y+y*z+6*z
Out> 2040
196デフォルトの名無しさん:2010/01/08(金) 18:26:58
>>183
使用言語:Axiom

(8) -> integrate(integrate(integrate(4*x^3+x*y^2+5*y+y*z+6*z,z=0..2),y=0..3),x=0..4)

(8) 2040
197デフォルトの名無しさん:2010/01/08(金) 23:10:58
>>192
使用言語:J

a=:10000 50000 20000 1000 500 200 100 50 25 10 5 1
b=:<;._1' 100$ 50$ 20$ 10$ 5$ 2$ 1$ 50C 25C 10C 5C 1C'
f=:}:@;@(((}:@>@{.,(0,{.@>@}.)#:{:@>@{.);}.@>@{:)^:(#@>@}.))
g=:3 :'((b#~*),.;/@-.&0)f a;~<.y%0.9269'

g 1980
+---+-+
|10$|2|
+---+-+
|1$ |1|
+---+-+
|25C|1|
+---+-+
|10C|1|
+---+-+
|1C |1|
+---+-+
198デフォルトの名無しさん:2010/01/08(金) 23:18:24
>>197
テーブルのデータ間違えました。訂正します。

> a=:10000 50000 20000 1000 500 200 100 50 25 10 5 1

a=:10000 5000 2000 1000 500 200 100 50 25 10 5 1
199デフォルトの名無しさん:2010/01/08(金) 23:36:00
>>171
foldl' 使えば

Prelude> :m +Data.List
Prelude Data.List> sqrt $ 6*(foldl' (+) 0 [1/(x*x)|x<-[1..1000000]])
3.14159169866051
200デフォルトの名無しさん:2010/01/09(土) 08:09:47
>>199

foldl' というは知らなかったので、調べてみたら、

第9回 Haskellはなぜ遅いと思われているのか - 本物のプログラマはHaskellを使う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070403/267180/?ST=develop&P=1

に sum でスタックオーバーフローする例がのっていました。
正直、まだよくわかっていません。
どうして sum の定義にこの foldl' の方を使わないのかな。
なんか他に問題がでてくるのかな。
201デフォルトの名無しさん:2010/01/09(土) 21:09:52
http://pc12.2ch.net/test/read.cgi/tech/1260532772/633
# [1]授業単元:プログラミング2
# [2]問題文:2つの最大50桁の実数を入力し、その和・差・積を求めるプログラム
202デフォルトの名無しさん:2010/01/10(日) 04:48:39
http://pc12.2ch.net/test/read.cgi/tech/1260532772/636
# [1] 授業単元:数値計算
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10342.txt
#
# 3元連立非線形方程式
#
# x_1^2 + x_2^2 + x_3^2 - 4 = 0
# x_1^2 - 2x_1 + x_2^2 + x_3 - 2 = 0
# x_1^2 + sin^2x_2 + x_3^2 - 3 = 0
#
# を解くNewton法のC++のプログラムをつくり、領域 0 < x_1,x_2,x_3 < 2 にある解を求めよ
# ただし、Jacobianの計算に必要となる偏導関数は数値微分により計算し、連立1次方程式の解法には
# Gaussの消去法あるいはLU分解法を用いること
203デフォルトの名無しさん:2010/01/10(日) 04:54:14
http://pc12.2ch.net/test/read.cgi/tech/1260532772/637
# [1] 授業単元:コンピュターグラフィック
# [2] 問題文(含コード&リンク):
# 1次元配列を2次元配列に・2次元配列を1次元配列に変換する二つのモジュール
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10343.txt
#
# int Conv_1Dto2D(unsigned char *src, unsigned char dest[][X_SIZE])
# /*機能 : src を dest に格納する。戻り値は格納した要素数
# src: ソースとなる 1 次元配列
# dest: 格納先となる 2 次元配列
# */
#
# int Conv_2Dto1D(unsigned char src[][X_SIZE], unsigned char *dest)
# /*機能 : src を dest に格納する。戻り値は格納した要素数
# src: ソースとなる 2 次元配列
# dest: 格納先となる 1 次元配列
# */

204デフォルトの名無しさん:2010/01/10(日) 04:55:40
http://pc12.2ch.net/test/read.cgi/tech/1260532772/639
# [1] アルゴリズム
#
# [2] 自然数の数列を入力し
# 数列内にあるnよりも大きい数と小さい数が
# nの前後にそれぞれ一つ以上ある場合、そのnを出力する。
#
# フローチャートは以下です。
#
#     順数列の入力
#     ↓      ↓
# 数列数が5以上 4以下→終了(4以下のときどれも除外できないので)
#     ↓
# 数列の中で最大最小の値と
# 最初と最後に入力した値は除外できる。
#     ↓
# 残りの数値に前後に大小の値が一つ以上あれば除外
#     ↓
# 残った値を表示して終了
205デフォルトの名無しさん:2010/01/10(日) 04:59:12
http://pc12.2ch.net/test/read.cgi/tech/1260532772/644
# [1]授業単元:プログラミング2
# [2]問題文:次のような10×10の半角文字+を碁盤の目として、一対コンピュータで五目並べ
#      をするプログラムを作成せよ。碁石を表す文字は、半角の@,0を用いよ。
#
#    abcdefghij
# a++++++++++
# b++++++++++
# c+++++@++++
# d++++++0+++
# e++++++++++
# f++++++++++
# g++++++++++
# h++++++++++
# i++++++++++
# j++++++++++
# @の場所は、cf , 0の場所は、dg とあらわす
#
# ・人とコンピュータのどちらかが先手になるか選択できる
# ・先手の33を禁止する
# ・勝敗の判定ができる。(置く場所がなくなったら引き分けとする)
# ・コンピュータは人が3と4を作った場合、それを止める場所におく
# ・すでに石がおいてある場所に人が石を置こうとした場合、再入力を促す。
206デフォルトの名無しさん:2010/01/10(日) 05:04:02
http://pc12.2ch.net/test/read.cgi/tech/1260532772/645
# [1] 授業単元:プログラミング実習a
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10346.txt
#
# 実行例のとおりに,自分で五つの問題文を入力して練習するタイピング練習ソフトを
# 作成せよ.ただし,問題文は入力した五つの中から10題がランダムに出題されるものと
# し,最後に正解数を表示すること.
#
# 実行例 (下線部はユーザーの入力)
#
# 20文字までの問題文を五つ入れてください
#
# 1つ目の問題文:abcdefghijkl
#
# 2つ目の問題文:January
#
# 3つ目の問題文:xxyyzz0368GST
#
# 4つ目の問題文:MondayFriday
#
# 5つ目の問題文:qwerty.uiop,RTYU

207デフォルトの名無しさん:2010/01/10(日) 05:08:37
http://pc12.2ch.net/test/read.cgi/tech/1260532772/640
# [1] 授業単元:Cプログラミング
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10344.txt
#   2つの名前を入力してステータス(ランダム)を決定し 途中経過を表示し
#               攻撃が当たった時は文字色を変える
#
# 24行程度に纏められないため、問題文のリンクを直接参照してください
208デフォルトの名無しさん:2010/01/10(日) 05:11:10
http://pc12.2ch.net/test/read.cgi/tech/1260532772/642
# [1] 初級C言語実習
# [2] 次の関数copyStringを同じ動作をするように書き換えよ。ただし変数の追加、削除(未使用を含む)
# if文(三項演算子を含む)while,do while,for文 goto文を使用してはならない。
# char *copyString(char *s){
# char *p=s,*t=s,tmp;
# if(s==NULL)return NULL;
# while(*p++); p--;while(!*p)p--;
# while(p>s){tmp=*p;*p--=*s;*s++=tmp;}
# return t;
# }
209デフォルトの名無しさん:2010/01/10(日) 12:25:56
http://pc12.2ch.net/test/read.cgi/tech/1260532772/659
# [1] 授業単元: オペレーティングシステム
# [2] 問題文(含コード&リンク):
# fork,exec*システムコールを用いて簡単なコマンドインタープリタ
# (mysh)を作成せよ。但し、作成するコマンドインタープリタは以下の
# 機能をサポートすること。
# ・設定ファイル(.path)にコマンドサーチパスを指定することが出来る。
# なお、ファイル内のパスの指定方法は、各自が考え定義すること。
# (パスにないコマンドを入力した場合には、見つからない旨のエラー
# メッセージを出力すること。)
# ・パイプを利用して複数(可変個)のコマンドの入出力を結合する
# ことができる。
# ・リダイレクションを使用してコマンドへの入力をファイルから得たり、
# ファイルへ出力したりすることができる
# ・コマンド実行中にCtrl-Cを入力すると、現在のコマンドの実行を
# 中断する
# ・exitを入力すると、myshを終了する。
#
210デフォルトの名無しさん:2010/01/11(月) 05:10:41
http://pc12.2ch.net/test/read.cgi/tech/1260532772/676
# [1] 授業単元:データ構造とアルゴリズム
# [2] 問題文(含コード&リンク):http://prolog.asia/img/shinryoshitsu.pdf
#
211デフォルトの名無しさん:2010/01/11(月) 05:15:57
http://pc12.2ch.net/test/read.cgi/tech/1260532772/678
# [1] 授業単元: 基礎プログラミングおよび演習
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10352.txt
#
# あるWebページに対する24時間分の閲覧者の名前、閲覧開始時刻および閲覧継続時間を表す「閲覧データ」があるとしよう。
# 1名以上の閲覧データから、閲覧している人数がもっとも多い30分刻みでの時間帯を求め、そのときの閲覧者名を印字する
# プログラムを作成せよ。状況によっては日をまたぐこともあるが、ここではどの時間帯に閲覧が多いのかを知りたいので
# 日の違いは考えなくてよい。各閲覧データは標準入力から、
#
# 閲覧者名
# 閲覧開始時刻 閲覧継続時間
#
# の2行で与えられる。ここで閲覧者名は英小文字2文字の後に4桁の数字が続く。閲覧開始時刻は24時間制での時を100倍し、
# 分を加えた数を表す4桁の数字、閲覧継続時間は分を表す高々3桁の数字である。時刻および時間は30分刻み(つまり0分か30分)
# である。たとえば、
#
# ku7535
# 0130 60
#
# は、名前がku7535、開始時刻が1時30分、継続時間が60分、つまり1時30分から2時30分直前まで閲覧していたことを表す。
#  まず閲覧データに対する構造体 user を定義し、それを要素とする大きさNの大域的な配列 users を用意せよ(Nはマクロ
# である)。次に、N人分のデータを読み込むか、閲覧者名としてアスタリスク(*)が与えられるまで、標準入力から閲覧データを
# 読み込み、配列 users にセットするとともに閲覧データを返す関数 int read_users(void) を作成せよ。最後に配列 users の
# 先頭からn個の閲覧データを対象に、24時間中で最大人数が閲覧している30分刻みでの時間帯と、そのときの閲覧者名を印字
# する関数 void print_prime_time(int n) を定義せよ。ただし最大閲覧者数となる時間帯は一般に複数あることに注意すること。
# さらに以下のmain関数と組み合わせてプログラムを作成せよ。
212デフォルトの名無しさん:2010/01/11(月) 05:24:23
http://pc12.2ch.net/test/read.cgi/tech/1260532772/685
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):2つの名前を入力しステータス(ランダム)を決定し 勝敗表示する。
#

213デフォルトの名無しさん:2010/01/11(月) 19:56:43
http://pc12.2ch.net/test/read.cgi/tech/1260532772/703
# [1] 授業単元: C
# [2] 問題文(含コード&リンク):
#   100以下の素数をすべて出力するプログラムを作りたい。
# 自然数xに対して2以上で√x以下の素数で割り切れない数が素数である。ただし1は素数でも合成数でもない。
214デフォルトの名無しさん:2010/01/11(月) 19:58:48
http://pc12.2ch.net/test/read.cgi/tech/1260532772/710
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): 数値には初期値が与えられている。
#                この配列を昇順に並べ替えるプログラムを作成しなさい。
#
# 表示結果: 数値[00]=80
# 数値[01]=40
# 数値[02]=23
# 数値[03]=69
# 数値[04]=10
#
#  ソート後
# 数値[01]=10
# 数値[02]=23
# 数値[03]=40
# 数値[04]=69
# 数値[03]=80
215デフォルトの名無しさん:2010/01/12(火) 08:12:02
http://pc12.2ch.net/test/read.cgi/tech/1260532772/714
# 1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10353.txt
#
# 連立1次方程式の一般的な数値解法にはGaussの単純消去法がある。
# この方法についてアルゴリズムを調べ下記の連立1次方程式を例に解法手順をC言語で表示せよ。
#
# 方程式
# x1 + 5x2 + x3 =2
# 3x1 + 4x2 = 2
# 9x1 + 10x2 +4x3 = 8
216デフォルトの名無しさん:2010/01/12(火) 08:13:26
http://pc12.2ch.net/test/read.cgi/tech/1260532772/715
# [1] 授業単元:プログラミング実習
# [2] 問題文(含コード&リンク):
# 文字列text[]と文字列pat[]が与えられたとき、文字列text中に文字列patが含まれるときは最初に現れるその文字列の先頭の位置(0〜)を返し、含まれないときは-1を返す関数searchを作成せよ。
# また、その関数を用いて、2つの文字列text[]とpat[](空白は含まない)を入力すると関数searchの値を返すプログラムを作成せよ。ここでtextとpatには長さ1以上の文字列が入っているものとする。
# (例:text[]="thisisatesttextdata"の中に、pat[]="this"は0の位置に、pat[]="test"は7の位置に現れる。)
#
217デフォルトの名無しさん:2010/01/12(火) 08:14:57
http://pc12.2ch.net/test/read.cgi/tech/1260532772/718
# [1] 授業単元: C言語演習
# [2] 問題文(含コード&リンク): 再帰を使って自然対数の底eを求めるプログラムを作成しなさい
# 下記のようにnを0から30まで増加させながら
# n=0のときe=1/0! n=30のときe=1/0!+1/1!+1/2!+1/3!+……1/30! の計算を行い下 のように表示しなさい
#
# n=0:e=1.000000000000000
# n=1:e=2.000000000000000
# ・
# ・
# n=30:e=2.718281828459046
#

218デフォルトの名無しさん:2010/01/12(火) 08:17:00
http://pc12.2ch.net/test/read.cgi/tech/1260532772/722
# [1]授業単元:プログラミング2
# [2]問題文:以下の機能を備えた対コンピュータの五目並べを作成せよ
#  ・置く場所を縦と横の数字で指定する
# ・人とコンピュータのどちらかが先手になるか選択できる
# ・先手の33を禁じる
# ・勝敗の判定ができる(置く場所がなくなったら引き分け)
# ・コンピュータは人が3と4を作った場合、それを止める場所に石を置く
# ・すでに石がおいてある場所に人が石を置こうとした場合、再入力を促す

219デフォルトの名無しさん:2010/01/12(火) 08:21:25
http://pc12.2ch.net/test/read.cgi/tech/1248012902/705
# 【 課題 】自然言語処理、構文解析のCYK法のプログラム
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 期限 】2010/01/18
# 【 Ver  】java version "1.6.0_17"
# 【 用語 】CYK法  http://ime.nu/ja.wikipedia.org/wiki/CKY%E6%B3%95
220デフォルトの名無しさん:2010/01/12(火) 08:48:39
http://pc12.2ch.net/test/read.cgi/tech/1024024666/548
# このスレにあった10行囲碁ソースを元に作ってみようかな。
# 展開して調べたら、あれに入ってる評価関数は
#
# 石数に比例するもの
# ・石が取れる
# ・アタリにいける
# ・囲いにいける
# ・隣接させる
221デフォルトの名無しさん:2010/01/12(火) 20:38:24
http://pc12.2ch.net/test/read.cgi/tech/1260532772/739
# [1] 授業単元: プログラミング
# [2]問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyf0355.txt
# ★演習問題1*
# 次の仕様に従って,生徒の科目得点から平均点と評価を求め,出力フォームのように両面表示するプログラムを作成せよ
# (仕様)
# (a)プログラムに組み込むデータについては,構造体の初期値として与え,
# メンバは,生徒番号,各科目点数,平均点,評価で,次のとおりとすること。
# (b)処理手順は,次のとおりとすること,
# 生徒番号 国語 数学 理科 社会
# 1001    85  74  63  90
# 1002    78  65  70  62
# 1003    89  92  88  76
# 1004    32  48  66  25
# 1005    92  76  81  98
# 各人の4科目の平均点を求め,構造体に格納すること
# 各人の評価を求め,構造体に格納すること,尚,4段階の評価基準は,次のとおとすること
# 平均点       評価
# 80点以上       A
# 70点以上80点未満   B
# 60点以上70点未満 C
# 60点未満 D
222デフォルトの名無しさん:2010/01/12(火) 22:05:13
http://pc12.2ch.net/test/read.cgi/tech/1260532772/739
# [1] 授業単元: プログラミング
# [2]問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyf0355.txt
# ★演習問題2*
# 構造体を用いて,2個の複素数(x=1.0十2.0i,x=2.0十1.0i)の和と積
# を求めるプログラムを構造体を用いて作成せよ.
#  (出力結果例)
#
# X=1.0+2.0i
# y=2.0+1.0i
# x+y=3.0+3.0i
# x+y=0.0+5.0i
223デフォルトの名無しさん:2010/01/12(火) 22:08:32
http://pc12.2ch.net/test/read.cgi/tech/1260532772/739
# [1] 授業単元: プログラミング
# [2]問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyfmg/10355.txt
# ★演習問題3
# 次の手順に従ってプログラムを作成せよ.
#  (a)mainO関数の処理
# (a.l)以下の11個の点数を配列として持つ.ただし,最後の-1はストッ
# パーとする.(a.2)この配列を「成績データ取得関数」にアドレス渡しする。
#  78 86 56 77 47 63 94 37 50 74 -1
# (a,3)成績データ取得関数」より,次の構造体を返却値にして,最高点,最低点均点を得る。
# (a.4)最高点、最低点、平均点を表示する。
#  (a)成績データ取得関数の処理
# (b.1)引数で渡された点数が-1になるまでループし,最高点,最低点,合
#    計点,点数総数を求める.
# (b.2)合計点と点数総数から平均点を求める.
# (b.3)最高点、最低点、平均点を上記(a.3)と同じ型の構造体にセットし
#    て返却する.
# (出力結果例)
# 最高点=94
# 最低点=37
# 平均点=66.2
224デフォルトの名無しさん:2010/01/12(火) 22:11:53
http://pc12.2ch.net/test/read.cgi/tech/1260532772/741
# [1] 授業単元: プログラミング2
# [2]問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyfmg/10356.txt
# 下図(A)のテキストファイルは、ある実験を行ったときのメモであり、
# 実験の年月日と使用した材料及びその使用量が記載されている(スペースは全て半角スペース)。
# そこでこのファイルを読み込んで、最も多くの量を使用した材料の記号とその合計量、及び1回当たりの平均使用量を、
# 図(B)に示すような別のテキストファイルに書き出すプログラムを作成せよ。なおこの実験で使用する材料はA、B、Cの3種類のみである。
#
# プログラム作成に際しては、次の条件を満たすものとする。
# ・入力用のファイル名はJikkenMemo.txtで固定とし、一々キーボードからは指定しない。
# ・出力用のファイル名はキーボードから任意の名前で指定する。
# ・JikkenMemo.txtでは今回は13回分の実験が書き込まれているが、今後の実験の追加にも対応できるようにすること(即ち13行に限定しないこと)。
# ・出力ファイルにおける使用量の単位gは数値の後につける。
# ・出力ファイルにおける数値の表示はいずれも小数点以下1桁までとする。
#
# (補足)
#  キーボードから入力した1文字がAという文字であるとき「Aです」と表示させるには、
#   char cc;
#   scanf("%c",&cc);
#   if(cc=='A') printf("Aです\n");
# とすればよい。
225デフォルトの名無しさん:2010/01/13(水) 05:20:50
http://pc12.2ch.net/test/read.cgi/tech/1260532772/744
# [1] プログラミング
# [2] 0から10の中からランダムに整数の2組を決める。それを平面上の座標と、座標を10個つくる。
# ユーザに座標を入力させ、その点から最も遠い点と近い点を求める。
# 最も近い点がユーザが入力した点と重なったら◎を出力する。
# 結果は下記のように出力。
# △
#                 △
#      △
#                       × ○
#
#
#
# ●
#
# ×:ユーザが入力した点
# ○:最も近い点
# ●:最も遠い点
# △:それ以外の点
#
226デフォルトの名無しさん:2010/01/13(水) 06:30:13
>>224 (補足)
#  キーボードから入力した1文字がAという文字であるとき「Aです」と表示させるには、
#   char cc;
#   scanf("%c",&cc);
#   if(cc=='A') printf("Aです\n");
# とすればよい。
# 図(A) 読み込み用ファイルの内容
# 実験メモ
# 年 月 日 材料 使用量[g]
# 2007 9 28 C 289.1
# 2007 10 4 A 254.3
# 2007 10 8 B 187.4
# 2007 10 15 A 211.3
# 2007 10 16 C 400.8
# 2007 10 18 B 34.2
# 2007 10 25 C 343.6
# 2007 10 31 A 102.6
# 2007 11 6 A 155.2
# 2007 11 12 B 87.5
# 2007 11 20 C 98.7
# 2007 11 27 A 177.8
# 2007 11 28 C 44.7
# 図(B) 出力ファイルの内容例
# (仮に、最も多く使用した材用がAで、合計使用量が100.0g、1回の平均使用量が10.0gであった場合)
# 最多使用材料A
# 合計使用量 100.0g
# 平均使用量 100.g
227デフォルトの名無しさん:2010/01/13(水) 18:17:53
http://pc12.2ch.net/test/read.cgi/tech/1260532772/750
# [1] 授業単元: 情報科学(C言語)
# [2]問題文:http://ime.nu/www.f.csce.kyushu-u.ac.jp/~ogi/kougi/10.pdf
# 課題10
# 関数sasho は第1引数と第2引数の数値(実数)の差と商を計算し,差を
# 第3引数で与えられる場所に,商を第4引数で与える場所に格納し,第2
# 引数が0 の場合は0,その他の場合は1 を返す関数である(第2引数が
# 0 の場合は,商の計算はしない).関数sasho を定義し,main 関数で
# は,2つの実数を入力して,sasho を利用して,2数の差と商を表示する
# (sasho の帰り値が0 の場合は差のみを表示)プログラムを作成せよ.
228デフォルトの名無しさん:2010/01/13(水) 18:20:47
http://pc12.2ch.net/test/read.cgi/tech/1260532772/752
# 1] 授業単元: プログラミング
# [2]問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyfmg/10358.txt
#
# ★演習問題1
# 構造体を用いて,2個の複素数(x=1.0十2.0i,x=2.0十1.0i)の和と積
# を求めるプログラムを構造体を用いて作成せよ.
#  (出力結果例)
#
# X=1.0+2.0i
# y=2.0+1.0i
# x+y=3.0+3.0i
# x+y=0.0+5.0i
229デフォルトの名無しさん:2010/01/13(水) 18:22:30
http://pc12.2ch.net/test/read.cgi/tech/1260532772/752
# 1] 授業単元: プログラミング
# [2]問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyfmg/10358.txt
#
# ★演習問題2
# fgetc関数とfputc関数を使って,テキストファイルの内容を,別のテキ
# ストファイルにコピーするプログラムを作成しなさい.確認のため,元の
# ファイルとコピーされたテキストファイルの中身の内容を画面にそれぞれ
# 出力せよ.
230デフォルトの名無しさん:2010/01/13(水) 18:24:44
http://pc12.2ch.net/test/read.cgi/tech/1260532772/752
# 1] 授業単元: プログラミング
# [2]問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyfmg/10358.txt
# ★演習問題3
# 氏名,年齢,性別が5人分書かれた次のようなテキストファイルを読み
# 込んで、両面に表示するプログラムを作成せよ.このとき,構造体を利用
# せよ.
#  (入力ファイル:test.txtの中身)
#
# Tanaka 31 Man
# Kawai 24 Man
# Suzuki 22 Woman
# ltoh 40 Woman
# Sugita 37 Man
231デフォルトの名無しさん:2010/01/13(水) 18:26:54
http://pc12.2ch.net/test/read.cgi/tech/1260532772/752
# [1] 授業単元: プログラミング
# [2]問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyfmg/10358.txt
# ★演習問題4
# 九九表を作り,テキストファイルに書き出すプログラムを作成せよ
#  (出力ファイル:test.txtの中身)
#
# 1 2 3 4 5 6 7 8 9
# 2 4 6 8 10 12 14 16 18
# 3・・・・・・・・・・・
# 4・・・・・・・・・・・
# 5・・・・・・・・・・・
# 6・・・・・・・・・・・
# 7・・・・・・・・・・・
# 8・・・・・・・・・・・
# 9・・・・・・・・・・・
#
#
232デフォルトの名無しさん:2010/01/13(水) 18:27:52
http://pc12.2ch.net/test/read.cgi/tech/1260532772/753
# [1] 授業単元: プログラミング
# [2]問題文:
# モンテカルロ法による円周率の近似値の計算を行うプログラムを書け。
# 生成する点の個数はキーボードから受け取るようにせよ。
# 乱数の生成にはMersenne twisterを用いよ。
#
233デフォルトの名無しさん:2010/01/13(水) 21:56:15
rubyで
>>231
f=File.open("out.txt","w")
for i in 1..9 do
for j in 1..9 do
f.printf("%3d"%[i*j])
end
f.puts()
end
f.close

>>232
N=10000
num=0
for i in 1..N
if rand()**2+rand()**2<=1 then num+=1 end
end
puts(4.0*num/N)
#print("PI=",4.0*num/N)

234デフォルトの名無しさん:2010/01/14(木) 03:21:43
http://pc12.2ch.net/test/read.cgi/tech/1248012902/709
# 【 課題 】 http://prolog.asia/html/prolog/872.html (仮にコピーさせていきました)
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 期限 】1月22日
# 【 補足 】Eclipseを使用しています。
# 内容は前向き推論のプログラムです。
# このプログラムを実行したら、「gyouzaは作ることができる。」と表示させたい# 「nikuudouは作ることができる。」は表示させない。
# またRecipe.txtの中身を修正してもよい。
235デフォルトの名無しさん:2010/01/14(木) 03:23:46
http://pc12.2ch.net/test/read.cgi/tech/1260532772/760
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):
#
# 非線形方程式の解を求めるアルゴリズムのひとつに、ニュートン法と呼ばれる方ある。
# この方法ではf(x)=0の解の近似値を次の漸化式から求める。
# x_(i+1) =x_i - f(x_i)/f'(x_i)
#
# x_i の初期値を x_0 としたとき i=1から i=5すなわちx_1からx_5までをC言語で計算して示せ。
236デフォルトの名無しさん:2010/01/14(木) 03:25:53
http://pc12.2ch.net/test/read.cgi/tech/1260532772/770
#
# [1] 授業単元:C言語
# [2]問題文:
# 下記の機能を備えた極めて単純なデータベースシステムであるカード型データベシステムの構築を考える。
# 新しい科目を登録する機能
# すでに登録されている科目を修正(更新)する機能
# 登録科目のソート(並び替え)を行う機能
# 登録科目の一部分のみを検索して取り出し、表示する機能
# 登録科目から、卒業までに必要な単位を計算し、表示する機能
# 卒業要件を簡略化しても良い.
237デフォルトの名無しさん:2010/01/14(木) 03:28:42
>>760 の訂正
http://pc12.2ch.net/test/read.cgi/tech/1260532772/771
# 問題分が足りてなかったので再投稿させてもらいます。
#
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):
#
# 非線形方程式の解を求めるアルゴリズムのひとつに、ニュートン法と呼ばれる方ある。
# この方法ではf(x)=0の解の近似値を次の漸化式から求める。
# ただしf'(x)はxによる微分を表す。
# x_(i+1) =x_i - f(x_i)/f'(x_i)
#
# f(x)=2^2-e^x-2=0
#
# x_i の初期値を x_0 としたとき i=1から i=5すなわちx_1からx_5までをC言語で計算して示せ。
238デフォルトの名無しさん:2010/01/14(木) 03:29:53
http://pc12.2ch.net/test/read.cgi/tech/1260532772/772
# [1] 授業単元: プログラミング
# [2]問題文:氏名,年齢,性別が5人分書かれた次のようなテキストファイルを
# 込んで、両面に表示するプログラムを作成せよ.このとき,構造体を利用
# せよ.
#  (入力ファイル:test.txtの中身)
#
# Tanaka 31 Man
# Kawai 24 Man
# Suzuki 22 Woman
# ltoh 40 Woman
# Sugita 37 Man
239デフォルトの名無しさん:2010/01/14(木) 03:37:48
http://pc12.2ch.net/test/read.cgi/tech/1260532772/773
# [1] 授業単元:
# 画像処理
# [2] 問題文(含コード&リンク):
# http://ime.nu/ux.getuploader.com/pyonpyon2009/download/6/%E8%AA%B2%E9%A1zip
# 以下のプログラムを参考にして、画像を指定倍率で拡大・縮小するプログラムを してください。
# ・最低限、pgm形式のモノクロ画像を入出力可能とすること
# ・コマンドラインインタフェースの仕様は各自で定めること
# ・拡大・縮小の倍率をプログラム中に埋め込んで、再コンパイルしなければ倍率 更できないような仕様は不可
# ・補間の手法、縮小時のローパスフィルタリングの手法、順方向変換を用いるか 向変換を用いるか等、
#  変換の手法は各自で工夫すること。
#
# 変換の手法、工夫した点、苦労した点などをテキストに記述し、ソースプログラ 2倍拡大画像、1/2倍縮小画像を添付すること。
240デフォルトの名無しさん:2010/01/14(木) 03:51:17
>>238
Luaで
f=io.open("test.txt","r")
t={}
line = f:read()
while line do
tmp={}
for s in string.gmatch(line,"[%w]+") do
table.insert(tmp,s);
end
table.insert(t,{["氏名"]=tmp[1],["年齢"]=tmp[2],["性別"]=tmp[3]});
line = f:read()
end
f:close()
for i=1,#t do
print(t[i]["氏名"].." "..t[i]["年齢"].." "..t[i]["性別"])
end
241デフォルトの名無しさん:2010/01/14(木) 06:04:25
http://pc12.2ch.net/test/read.cgi/tech/1260532772/775
# [1] 授業単元:C言語
# [2]問題文:
# 二次関数 f(x) = x2 について、x=0から3までの定積分を求めたい。
# 区分求積法により、この積分の近似値を求めよ。
# x軸方向の刻み幅Δxを0.1とする。
242デフォルトの名無しさん:2010/01/14(木) 07:42:54
>>234 はプログラムを解読して書き直さないと出題にならないですね。
面白そうな問題なのでやってみます。

あっという間に問題ばかり溜まってしまいました。中に骨のある問題も多いようです。
私は、1月を過ぎると余裕ができるので一気に解決していきたいなと思っています。
243デフォルトの名無しさん:2010/01/14(木) 10:34:15
http://pc11.2ch.net/test/read.cgi/db/1252492296/425
# SELECT * FROM tableA WHERE code = 7
# というSQLで以下のように表示されるのですが、
#
# id , code , name , date , 売上
# 1 , 7 , りんご , 2010-01-12 , 350
# 1 , 7 , りんご , 2010-01-07 , 250
# 2 , 7 , みかん , 2010-01-12 , 450
# 2 , 7 , みかん , 2009-05-05 , 550
#
# それを、売上があった日の1営業日後と3営業日後のそれぞれのidの価格も取得 いと考えております。
#
# id , code , name , date , 売上 , 1営業日後売上 , 3営業日後売上
# 1 , 7 , りんご , 2010-01-12 , 350 , 400 , 500
# 1 , 7 , りんご , 2010-01-07 , 250 , 200 , 250
# 2 , 7 , みかん , 2010-01-10 , 450 , 500 , 300
# 2 , 7 , みかん , 2009-05-05 , 550 , 220 , 350
# (ちなみに実際のdateはUNIXTIMEで格納しています。)
# 1営業日後にしているのは、休日の関係で1日後とできないからです。
# ここまでやるのは厳しいでしょうか?
244デフォルトの名無しさん:2010/01/14(木) 11:36:31
>>243
% Prolog (1/2) 祝日がわからないと1営業日後がわからないので、
% 足掛かりとして、以下の定義をしておきましょう。今後祝日に関しては第二引数を解読しましょう。
国民の祝日に関する法律('第1条','自由と平和を求めてやまない日本国民は、美しい風習を育てつつ、よりよき社会、より豊かな生活を築きあげるために、ここに国民こぞって祝い、感謝し、又は記念する日を定め、これを「国民の祝日」と名づける。').
国民の祝日に関する法律('第2条','自由と平和を求めてやまない日本国民は、美しい風習を育てつつ、よりよき社会、より豊かな生活を築きあげるために、ここに国民こぞって祝い、感謝し、又は記念する日を定め、これを「国民の祝日」と名づける。').

国民の祝日に関する法律(第2条,'「国民の祝日」を次のように定める。').
国民の祝日に関する法律(第2条,元日,1月1日,'年のはじめを祝う。').
国民の祝日に関する法律(第2条,成人の日,1月の第2月曜日,'おとなになったことを自覚し、みずから生き抜こうとする青年を祝いはげます。').
国民の祝日に関する法律(第2条,建国記念の日,政令で定める日,'建国をしのび、国を愛する心を養う。').
国民の祝日に関する法律(第2条,春分の日 春分日 自然をたたえ、生物をいつくしむ。
国民の祝日に関する法律(第2条,昭和の日,4月29日,'激動の日々を経て、復興を遂げた昭和の時代を顧み、国の将来に思いをいたす。').
国民の祝日に関する法律(第2条,憲法記念日,5月3日,'日本国憲法の施行を記念し、国の成長を期する。').
国民の祝日に関する法律(第2条,みどりの日,5月4日,'自然に親しむとともにその恩恵に感謝し、豊かな心をはぐくむ。').
国民の祝日に関する法律(第2条,こどもの日,5月5日,'こどもの人格を重んじ、こどもの幸福をはかるとともに、母に感謝する。).
245デフォルトの名無しさん:2010/01/14(木) 11:37:21
>>243
% Prolog (2/2) つづき
国民の祝日に関する法律(第2条,海の日,7月の第3月曜日,海の恩恵に感謝するとともに、海洋国日本の繁栄を願う。).
国民の祝日に関する法律(第2条,敬老の日,9月の第3月曜日,多年にわたり社会につくしてきた老人を敬愛し、長寿を祝う。).
国民の祝日に関する法律(第2条,秋分の日,秋分日,'祖先をうやまい、なくなった人々をしのぶ。').
国民の祝日に関する法律(第2条,体育の日,'10月の第2月曜日,スポーツにしたしみ、健康な心身をつちかう。').
国民の祝日に関する法律(第2条,文化の日,11月3日,'自由と平和を愛し、文化をすすめる。').
国民の祝日に関する法律(第2条,勤労感謝の日,11月23日,'勤労をたっとび、生産を祝い、国民たがいに感謝しあう。').
国民の祝日に関する法律(第2条,天皇誕生日,12月23日,'天皇の誕生日を祝う。').

国民の祝日に関する法律(第3条,'「国民の祝日」は、休日とする。').
国民の祝日に関する法律(第3条,'2 「国民の祝日」が日曜日に当たるときは、その日後においてその日に最も近い「国民の祝日」でない日を休日とする。').
国民の祝日に関する法律(第3条,'3 その前日及び翌日が「国民の祝日」である日(「国民の祝日」でない日に限る。)は、休日とする。').
246デフォルトの名無しさん:2010/01/14(木) 12:01:20
http://pc12.2ch.net/test/read.cgi/tech/1260532772/776
# [1]オペレーティングシステム
# [2]問題文(含コード&リンク):
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1036t
# fork とexec 族のシステムコールを用いて,簡単なコマンドインタープリタ(mysを作成せよ.
# ただし,作成するコマンドインタープリタは以下の機能をサポートすること.
# ・設定ファイル(.path)にコマンドサーチパスを指定することが出来る.なお,イル内のパスの指定方法は,各自が考えて定義すること.(パスにないコマンドを した場合には,
# 見つからない旨のエラーメッセージを出力すること.)
# ・パイプを利用して複数(可変個)のコマンドの入出力を結合することができる # ・コマンド実行中にCtrl-C を入力すると,現在のコマンドの実行を中断して, 次マンドを
# 入力するためにプロンプトを出力する.
# ・リダイレクション(“<” と “>”)を使用してコマンドへの入力をファイルから得たり,ファイルへ出力したりすることが出来る.
# ・exit を入力すると,mysh を終了する.
247デフォルトの名無しさん:2010/01/14(木) 16:10:07
>>243
% Prolog 一営業日後の定義に祝日と曜日の定義が必要になる。
一営業日後(_今日,_一営業日後) :-
  曜日(_今日,_曜日),
  \+(member(_曜日,[土曜,日曜])),
  \+(祝日(_今日)),
  翌日(_今日,_翌日),
  次の営業日(_翌日,_一営業日後),!.
一営業日後(_今日,_一営業日後) :-
  翌日(_今日,_翌日),
  一営業日後(_翌日,_一営業日後),!.

三営業日後(_今日,_三営業日後) :-
  一営業日後(_今日,_一営業日後),
  一営業日後(_一営業日後,_二営業日後),
  一営業日後(_二営業日後,_三営業日後),!.

次の営業日(_基準日,_次の営業日) :-
  曜日(_基準日,_曜日),
  member(_曜日,[土曜,日曜]),
  翌日(_基準日,_翌日),
  次の営業日(_翌日,_次の営業日),!.
次の営業日(_基準日,_次の営業日) :-
  祝日(_基準日),
  翌日(_基準日,_翌日),
  次の営業日(_翌日,_次の営業日),!.
次の営業日(_次の営業日,_次の営業日).
248デフォルトの名無しさん:2010/01/14(木) 17:22:10
>>243
% Prolog

'商品売上、1営業日後、3営業日後、比較表示' :-
  setof([_id,_name,_date],tableA( _id , 7 , _name , _date , _売上),L1),
  write('id, code, name, date,  売上,1営業日後売上,3営業日後売上\n'),
  member([_id_1,_name_1,_date_1],L1),
  split(_date_1,['-'],L2),
  concat_atom(L2,_日付),
  一営業日後(_日付,_1営業日後),
  三営業日後(_日付,_3営業日後),
  データベース日付表現(_1営業日後,_日付1),
  データベース日付表現(_3営業日後,_日付3),
  findsum(_売上,tableA( _id , 7 , Name , _日付 , _売上),Sum),
  findsum(_売上,tableA( _id , 7 , Name , _日付1 , _売上),Sum1),
  findsum(_売上,tableA( _id , 7 , Name , _日付3 , _売上),Sum3),
  wr('%t,%t,%t,%t,%t,%t\n',[_id_1,7,_name_1,Sum,Sum1,Sum3]),
  fail.
'商品売上、1営業日後、3営業日後、比較表示'.

データベース日付表現(_日付,_データベース日付表現) :-
  sub_atom(_日付,0,4,_,_年),
  sub_atom(_日付,4,2,_,_月),
  sub_atom(_日付,6,2,_,_日),
  concat_atom([_年,'-',_月,'-',_日],_データベース日付表現).
249デフォルトの名無しさん:2010/01/14(木) 21:17:44
http://pc12.2ch.net/test/read.cgi/tech/1260532772/780
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): 0,1のみを成分にもつn次正方行列Aは各行を2進数とみなして整数のリストとして表現できる。
# たとえば 3次正方行列は 1,0,0/0,1,0/0,0,1は{4,2,1}
#
# これに掃き出し法を適用し、{5,6,3}と入力したとき{5,3,0}と出力されるプログラムを作れ。
# ヒントとして、行の入れ替えは数字の入れ替えになる。
# n桁2進数xの下位から、上位からの数字はそれぞれどう書けるか考える。
#
# まず正方行列の次数をきめ、入力できる10進数の最大値を表示、その後
# その範囲で数値をn回キーボードから入力した後、掃き出し法を行い、
# その正方行列の行の値を10進数に変換するプログラムです。
250デフォルトの名無しさん:2010/01/14(木) 23:23:16
http://pc11.2ch.net/test/read.cgi/db/1252492296/434
# ■テーブルデータ
# ○荷物テーブル
# id 中身id 荷受け
# 1 1 2009/12/11
# 2 1 2009/12/21
# 3 2 2010/12/25
# ○中身テーブル
# id 品物 重さ
# 1 本 500
# 2 テレビ 1000
# ○作業テーブル
# 荷物id 作業項目id 作業者名 作業状況
# 1 1 佐藤 完了
# 1 3 志村 作業中
# 2 1 鈴木 完了
# 2 2 鈴木 未
# 2 3 田中 未
# 3 1 佐藤 完了
# 3 3 田中 未
# ○作業項目テーブル
# id 作業内容
# 1 品物を入れる
# 2 領収書を入れる
# 3 封をして発送する
251デフォルトの名無しさん:2010/01/14(木) 23:24:21
>>250 問題つづき
#
# ■欲しい結果
# 荷物id 品物 重さ 作業者名※1 作業内容※1 作業状況 対応班※2
# 2 本 500 鈴木 領収書を入れる 未 2
# 3 テレビ 1000 田中 領収書を入れる 未 1
# ※1 作業状況が完了以外かつ作業項目idが一番小さいもの
# ※2 重さが1000以上→作業班1、作業者名が鈴木かつ作業状況が未→作業班2、
作業状況にかかわらず、作業者名に田中がある荷物→作業班3
#    (班1 > 班2 > 班3の順で優先し、荷物idを重複させない)
#
# ■説明
# 荷受けが2009/12/31以前の荷物かつ対応班が存在するものを抽出したいです。
# 荷物は沢山ありますのでパフォーマンスもできれば考慮したいです。
# 「パッとわからないけどちょっと考えればわかるだろJK」→「2時間考えてもできないorz」(今ここ)

252デフォルトの名無しさん:2010/01/15(金) 05:19:11
http://pc12.2ch.net/test/read.cgi/tech/1248012902/711
# 【 課題 】課題は3題です。
# http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/873.zip
# 課題1
# 乱数を使って掛け算九九の練習ソフトを作れ。ただし以下の条件に従うものとする 。
#
# 10題練習したところで正解率が8割以下だったら、もう1セット10題の練習を繰り返 す。
# 10問中の正解率が8割以上になるまで繰り返し練習をさせる。
253デフォルトの名無しさん:2010/01/15(金) 05:23:59
http://pc12.2ch.net/test/read.cgi/tech/1248012902/711
# 【 課題 】課題は3題です。
# http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/873.zip
# 課題2
# 西暦を入力させ、うるう年かどうかを判定するプログラムを作れ。なお、うるう年 は以下で認定される。
#
# 西暦の年号が400で割り切れる年はうるう年
# 西暦の年号が400で割り切れないが、100で割り切れる年はうるう年でない
# 西暦の年号が100で割り切れないが、4で割り切れる年はうるう年
254デフォルトの名無しさん:2010/01/15(金) 05:58:31
>>217
使用言語:J

('n',.'=',.":,.a),.':',.'e',.'=',.0j15":,.+/\%!a=.i.31x
n= 0:e=1.000000000000000
n= 1:e=2.000000000000000
n= 2:e=2.500000000000000
n= 3:e=2.666666666666667
n= 4:e=2.708333333333333
n= 5:e=2.716666666666667
n= 6:e=2.718055555555556
n= 7:e=2.718253968253968
n= 8:e=2.718278769841270
n= 9:e=2.718281525573192
n=10:e=2.718281801146384
:
n=29:e=2.718281828459045
n=30:e=2.718281828459045
255デフォルトの名無しさん:2010/01/15(金) 06:20:01
>>253
使用言語:J

f=:monad def '-.=/*400 4 100|y'

f 1800
0
f 2000
1
f 2008
1
f 2010
0
256デフォルトの名無しさん:2010/01/15(金) 06:24:52
http://pc12.2ch.net/test/read.cgi/tech/1260532772/796
# [1] プログラミング演習
# [2] 標準入力から読み込んだテキストファイルを辞書順に整列して標準出力する。
# 辞書順:文字列比較の順番はASCIIコード文字順をベースとした辞書順であるが、文字順が一部
# が変更される A<a<B<c<C<c.....
# [5] 作業用ファイルwork.dat(内容は自由、サイズ無制限とする。プログラム終了時点で削除する必要は無い
# ものとする。)
# を使用出来る。stdio.hで定義されている標準ライブラリ関数、定数を利用出来る。
# 整列アルゴリズムは自由とする。
257デフォルトの名無しさん:2010/01/15(金) 06:26:49
http://pc12.2ch.net/test/read.cgi/tech/1260532772/797
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):問題1 戻値を持たず、一つの double 型の引数を持ち、過去に関数が
# 呼ばれた時、全ての引数の値の総和を表示する関数、d_total
# を定義し、動作の確認ができるプログラムとして作成せよ。例えば、
# d_total(0.1);
# d_total(0.2);
# d_total(0.3);
# と呼べば、d_total の内部の処理にて
# 0.1
# 0.3
# 0.6
#
# と表示するということである。
# ただし, プログラム中の変数として、外部変数は使ってはな
# らない。「内部変数か」自動変数のみを使って実現せよ。
# 問題2  戻値を持たず、二つの float 型のポインタの引数を持ち、二つ
# の引数の値を交換する関数、f_swap を定義し、動作の確認がで
# きるプログラムとして作成せよ。
# 問題3 4行4列のint型の行列を、転置するプログラムを作成せよ。動作の確認のため、転置前と転置後
# の行列の内容を表示するようにせよ
258デフォルトの名無しさん:2010/01/15(金) 06:28:19
http://pc12.2ch.net/test/read.cgi/tech/1260532772/798
# [1] やさしいC
# [2] 次の関数workをコンパイル出来るように,正しく動作するように修正し、
# 正しく実行出来るかどうかを確かめられるプログラムを作りなさい。
# double *work(double[] a,int N){
# double result[N];
# result[0] = a[N-2] ,a[N-1],a[0],a[1] a[2]を1:3:4:3:1の重みで平均した値
# result[1] = a[N-1],a[0],a[1],a[2] を1:3:4:3:1の重みで平均した値
# result[2] = a[0],a[1],a[2],a[3]を1:3:4::3:1の重みで平均した値
# result[3] = a[1],a[2],a[3],a[4] を1:3:4:3:1の重みで平均した値
# ....
# result[N-2] = a[N-4],a[N-3],a[N-2],a[N-1],a[0] を1:3:4:3:1の重みで平均した値
# result[N-1] = a[N-3],a[N-2],a[N-1],a[0],a[1] を1:3:4:3:1の重みで平均した値
# return (double)&result[0];
# }
259デフォルトの名無しさん:2010/01/15(金) 07:25:06
http://pc12.2ch.net/test/read.cgi/tech/1260532772/800
# [1]Cプログラミング演習
# [2]
# 関数 op(int a,int b,int c)は次の結果を返す。
# 結果: a op1 b op2 c op3 a op4 b op5 c (op1,op2,op3,op4,op5は
# + - * %(剰余) xor and orの何れか一つ)
# +:演算0 -:演算1 *:演算2 /:演算3 xor:演算4 and:演算5 or:演算6
# op1=(3*a+5*b)の7による剰余がkの場合、演算kを選択
# op2=(5*b+4*c)の7による剰余がkの場合、演算kを選択
# op3=(a+3*c)の7による剰余がkの場合、演算kを選択
# op4=(a+2*b)の7による剰余がkの場合、演算kを選択
# op5=(3*c+2*b)の7による剰余がkの場合、演算kを選択
# ここで演算子の優先順位は高い順に + > - > * > % >xor > and > orとする
# 例えば1 + 3 xor 5 * 7 - 5は(1+3) xor (5*(7-5))を意味する
# 関数opをコードせよ。どのような演算が行われたか具体的に出力するprintf文も同時に出力すること。
260デフォルトの名無しさん:2010/01/15(金) 07:36:26
http://pc12.2ch.net/test/read.cgi/tech/1248012902/711
# 【 課題 】課題は3題です。
# http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/873.zip
# 課題3
#
# 以下のプログラムに手を加え、アドレス表を利用した並び替えを行って人口の大き>
# い順に人口と県民を表示しなさい
#
# 07年の都道府県人口(csv形式ファイル)は以下の場所にあります。
# http://prolog.asia/html/prolog/jinkou07.csv
261デフォルトの名無しさん:2010/01/15(金) 07:38:49
>>259 訂正

修正前 → +:演算0 -:演算1 *:演算2 /:演算3 xor:演算4 and:演算5 or:演算6
修正後 → +:演算0 -:演算1 *:演算2 %(剰余):演算3 xor:演算4 and:演算5 or:演算6
262デフォルトの名無しさん:2010/01/15(金) 08:09:06
>>250

欲しい結果(_荷受日下限,_荷受日上限) :-
  write('荷物id 品物 重さ 作業者名1 作業内容1 作業状況 対応班2\n'),
  荷物テーブル(_id,_中身id,_荷受け),
  _荷受け @>= _荷受日下限,
  _荷受け @=< _荷受日上限,
  中身テーブル(_中身id,_品物,_重さ),
  作業テーブル(_id,_作業項目id,_作業者名,_作業状況),
  作業項目テーブル(_作業項目id,_作業内容),
  作業班(_作業者名,_作業状況,_重さ,_対応班),
  write_formatted('%t %t %t %t %t %t %t\n',[_id,_品物,_重さ,_作業者名,_作
業内容,_作業状況,_対応班]),
  fail.
欲しい結果(_,_).

作業班(_,_,_重さ,1) :- _重さ >= 1000,!.
作業班(_作業者名,_作業状況,_,2) :- _作業者名=鈴木,_作業状況='未',!.
作業班(田中,_,_,3) :- !.
263デフォルトの名無しさん:2010/01/15(金) 08:11:05
>>250 変なところで折り返しが出たので書き直し。
% Prolog

欲しい結果(_荷受日下限,_荷受日上限) :-
  write('荷物id 品物 重さ 作業者名1 作業内容1 作業状況 対応班2\n'),
  荷物テーブル(_id,_中身id,_荷受け),
  _荷受け @>= _荷受日下限,
  _荷受け @=< _荷受日上限,
  中身テーブル(_中身id,_品物,_重さ),
  作業テーブル(_id,_作業項目id,_作業者名,_作業状況),
  作業項目テーブル(_作業項目id,_作業内容),
  作業班(_作業者名,_作業状況,_重さ,_対応班),
  write_formatted('%t %t %t %t %t %t %t\n',[_id,_品物,_重さ,_作業者名,_作業内容,_作業状況,_対応班]),
  fail.
欲しい結果(_,_).

作業班(_,_,_重さ,1) :- _重さ >= 1000,!.
作業班(_作業者名,_作業状況,_,2) :- _作業者名=鈴木,_作業状況='未',!.
作業班(田中,_,_,3) :- !.
264デフォルトの名無しさん:2010/01/15(金) 10:33:47
>>201
使用言語: 十進BASIC

OPTION ARITHMETIC DECIMAL_HIGH !10進1000桁モード
INPUT PROMPT "a =":a
INPUT PROMPT "b =":b
PRINT "a + b =";a+b
PRINT "a - b =";a-b
PRINT "a * b =";a*b
END

実行結果
a =1.9999999999999999999999999
b =0.0000000000000000000000001
a + b = 2
a - b = 1.9999999999999999999999998
a * b = .00000000000000000000000019999999999999999999999999
265デフォルトの名無しさん:2010/01/15(金) 10:40:01
>>253
% Prolog
% http://prolog.asia/html/prolog/t815.html などにすでにあります。ここでは、

西暦を入力させ、うるう年かどうかを判定する(_西暦) :-
  西暦の年号が400で割り切れる年はうるう年(_西暦),!.
西暦を入力させ、うるう年かどうかを判定する(_西暦) :-
  西暦の年号が400で割り切れないが、100で割り切れる年はうるう年でない(_西暦),!.
西暦を入力させ、うるう年かどうかを判定する(_西暦) :-
  西暦の年号が100で割り切れないが、4で割り切れる年はうるう年(_西暦).
 
西暦の年号が400で割り切れる年はうるう年(_西暦) :- 割り切れる(_西暦,400),!.

西暦の年号が400で割り切れないが、100で割り切れる年はうるう年でない(_西暦) :-
  \+(割り切れる(_西暦,400)),
  割り切れる(_西暦,100),!,fail.

西暦の年号が100で割り切れないが、4で割り切れる年はうるう年(_西暦) :-
  \+(割り切れる(_西暦,100)),
  割り切れる(_西暦,4),!.

割り切れる(A,B) :- 0 is A mod B.
266デフォルトの名無しさん:2010/01/15(金) 11:19:21
>>260
% Prolog

並び替えを行って人口の大きい順に人口と県名を表示する(_ファイル) :-
  see(_ファイル),
  findall([_人口,_県名],(repeat,get_line(X),(X=end_of_file,!,fail;
      split(X,[','],[_県名,_人口])),L),
  seen,
  降順に整列する(L,L1),
  人口と県名を表示する(L1).

人口と県名を表示する([]) :- !.
人口と県名を表示する([[_人口,_県名]|R]) :-
  write_formatted('%t %t\n',[_人口,_県名]),
  人口と県名を表示する(R).
267デフォルトの名無しさん:2010/01/15(金) 11:40:30
>>213
使用言語:J

p:i._1 p: 100
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
268デフォルトの名無しさん:2010/01/15(金) 12:19:34
>>215
使用言語:maxima

(%i41) display2d:false;
(%o41) false
(%i42) solve([x1+5*x2+x3=2,3*x1+4*x2=2,9*x1+10*x2+4*x3=8],[x1,x2,x3]);
(%o42) [[x1 = 2/5,x2 = 1/5,x3 = 3/5]]
269デフォルトの名無しさん:2010/01/15(金) 16:12:12
http://pc12.2ch.net/test/read.cgi/tech/1260532772/810
# [1] 授業単元:プログラミング論(大学)
# [2] 問題文:softbankのiPhoneの使用料金を計算するプログラムを作りなさい
270デフォルトの名無しさん:2010/01/15(金) 16:13:13
>>215
使用言語:J

]a=:3 3 $ 1 5 1,3 4 0,9 10 4
1 5 1
3 4 0
9 10 4
]b=:2 2 8
2 2 8
(%.a)(+/ .*)b
0.4 0.2 0.6
271デフォルトの名無しさん:2010/01/15(金) 17:08:31
http://pc12.2ch.net/test/read.cgi/tech/1260532772/812
# [1] 授業単元: 授業ではないですがお願いします
# [2] 問題文(含コード&リンク): 100個の0〜10までの数字があるとするとき0じゃない数字の個数を数えて表示させたいんですが
# どうすればいいのかよくわかりませんのでお願いします
272デフォルトの名無しさん:2010/01/15(金) 17:45:51
>>271
使用言語:J

a=: ?100#11
4 25 $ a
2 4 3 9 5 10 4 6 10 3 2 3 0 10 9 7 1 2 2 9 5 2 6 9 2
1 3 6 2 6 5 7 9 8 7 8 10 0 8 4 6 3 4 2 8 3 0 5 4 4
0 2 7 8 1 6 6 8 8 5 8 10 6 6 3 7 1 9 8 5 6 2 0 9 3
6 5 1 3 1 2 0 6 9 2 3 4 1 7 7 10 7 3 2 3 4 3 4 8 8
+/0=a
6
273デフォルトの名無しさん:2010/01/15(金) 17:52:53
>>272 >>271
使用言語:J
間違えました。0の個数を数えてました。

a=: ?100#11
4 25 $ a
2 4 3 9 5 10 4 6 10 3 2 3 0 10 9 7 1 2 2 9 5 2 6 9 2
1 3 6 2 6 5 7 9 8 7 8 10 0 8 4 6 3 4 2 8 3 0 5 4 4
0 2 7 8 1 6 6 8 8 5 8 10 6 6 3 7 1 9 8 5 6 2 0 9 3
6 5 1 3 1 2 0 6 9 2 3 4 1 7 7 10 7 3 2 3 4 3 4 8 8

+/0~:a
94
274デフォルトの名無しさん:2010/01/15(金) 18:14:48
>>217
使用言語:maxima

(%i50) for n:0 thru 30 do printf(true,"n=~2d:e=~,15f~%",n,sum(1/i!,i,0,n));
n= 0:e=1.000000000000000
:
n=30:e=2.718281828459045
275デフォルトの名無しさん:2010/01/15(金) 18:20:58
>>271
% Prolog

'100個の0〜10までの数字を発生させる'(L) :-
  length(L,100),
  '0〜10までの数字を発生させる'(L).

'0〜10までの数字を発生させる'([]) :- !.
'0〜10までの数字を発生させる'([N|R]) :-
  N is random mod 11,
  '0〜10までの数字を発生させる'(R).

'0じゃない数字の個数を数えて表示させる'(L) :-
  count((member(A,L),number(A),\+(A=0)),_0じゃない数字の個数),
  write_formatted('0じゃない数字は%t個です\n',[_0じゃない数字の個数]).
276デフォルトの名無しさん:2010/01/15(金) 21:14:06
http://pc12.2ch.net/test/read.cgi/tech/1260532772/819
# [1] 授業単元:情報処理基礎
# [2] 問題文:以下はmain関数、サブ関数で作成します。
#       1.数値nを一つ入力し、各桁の和を求めよ。(123→6)
#       2.数値nを反転した値を表示せよ。(123→321)
277デフォルトの名無しさん:2010/01/15(金) 21:15:57
http://pc12.2ch.net/test/read.cgi/tech/1260532772/820
# [1] 授業単元:情報処理基礎
# [2] 問題文:二次方程式ax^2+bx+c=0の解を求めるプログラムを作成せよ。
#        a,b,cの値を入力する。計算結果は必ず5種類表示すること。
#        a=b=c=0の場合、処理を終了する。a=b=0、Cが0以外の場合は「不能」と表示する。
#        a=0、bが0以外の場合は「一次方程式」と解を表示する。
#        判別式がD<0の場合、「虚解」と表示する。
#        判別式がD<0の場合以外も、必要な表示、結果を表示します。
278デフォルトの名無しさん:2010/01/15(金) 21:39:51
http://pc12.2ch.net/test/read.cgi/tech/1260532772/821
# [1] 授業単元: コンパイラ
# [2] 問題文(含コード&リンク):
# PAdaで記述されたソースプログラムをC言語のソースプログラムに
# 変換するコンパイラを作成しなさい。
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10363.zip
#
279デフォルトの名無しさん:2010/01/15(金) 22:29:17
>>276
% Prolog
main :-
  催促付き整数入力('ひとつ対象となる整数を入力してください : ',_整数),
  write('1.数値nを一つ入力し、各桁の和を求めよ。(123→6)\n'),
  write('2.数値nを反転した値を表示せよ。(123→321)\n'),
  催促付き整数入力('1-2を選択してください : ',_整数2),
  目標選択(_整数2,_整数).

目標選択(1,_数値n) :-
  '数値nを一つ入力し、各桁の和を求める'(_数値n,_各桁の和),
  write_formatted('各桁の和は%tです\n',[_各桁の和]).
目標選択(2,_数値n) :- '数値nを反転した値'を表示する'(_数値n).

'数値nを一つ入力し、各桁の和を求める'(_数値n,_各桁の和) :-
  number_codes(_数値n,L),
  findsum(U,(member(A,L),U is A-48),_各桁の和).

'数値nを反転した値'を表示する'(_数値n) :-
  '数値nを反転した値'(_数値n,_数値nを反転した値),
  write_formatted('数値を反転した値は%tです\n',[_数値nを反転した値]).

'数値nを反転した値'(_数値n,_数値nを反転した値) :-
  number_codes(_数値n,L1),
  reverse(L1,L2),
  number_codes(_数値nを反転した値,L2).
280デフォルトの名無しさん:2010/01/15(金) 22:36:02
http://pc12.2ch.net/test/read.cgi/tech/1259990485/701
# 文字列をn文字ずつ&1文字ずつに分割したいのですが
# x = "ABCDEFGHIJKLMNOPQRSTUVWXY"
# x = x.scan(/.{5}/)
# x.collect!{|y|y.scan(/./)}
# p x
# =>[["A","B","C","D","E"],["F","G","H","I","J"],["K","L","M","N","O"],["P","Q","R","S","T"],["U","V","W","X","Y"]]
# みたいに書くと都度、正規表現によるマッチが行われるので遅いです
# もっと高速に実行する方法があったら教えてください。よろしくお願いします
281デフォルトの名無しさん:2010/01/15(金) 22:50:14
>>280
% Prolog

'文字列をn文字ずつ&1文字ずつに分割'(_文字列,N文字ずつ,L) :-
  atom_chars(_文字列,Chars),
  'N個組'(N文字ずつ,Chars,L).

'N個組'(_,[],[]) :- !.
'N個組'(N,L,[U|R]) :-
  先頭からN個(N,L,U,R1),
  'N個組'(N,R1,R).

先頭からN個(_,[],[],[]) :- !.
先頭からN個(0,L,[],L) :- !.
先頭からN個(N,[A|R1],[A|R2],R) :-
  M is N - 1,
  先頭からN個(M,R1,R2,R).
282デフォルトの名無しさん:2010/01/15(金) 23:17:23
>>280
使用言語:J

a=:'ABCDEFGHIJKLMNOPQRSTUVWXY'
f=:dyad def ';/&.> (-x)<\y'
5 f a
+-----------+-----------+-----------+-----------+-----------+
|+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+|
||A|B|C|D|E|||F|G|H|I|J|||K|L|M|N|O|||P|Q|R|S|T|||U|V|W|X|Y||
|+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+|
+-----------+-----------+-----------+-----------+-----------+
7 f a
+---------------+---------------+---------------+---------+
|+-+-+-+-+-+-+-+|+-+-+-+-+-+-+-+|+-+-+-+-+-+-+-+|+-+-+-+-+|
||A|B|C|D|E|F|G|||H|I|J|K|L|M|N|||O|P|Q|R|S|T|U|||V|W|X|Y||
|+-+-+-+-+-+-+-+|+-+-+-+-+-+-+-+|+-+-+-+-+-+-+-+|+-+-+-+-+|
+---------------+---------------+---------------+---------+
283デフォルトの名無しさん:2010/01/15(金) 23:48:53
>>276
使用言語:J

g=:monad def '+/"."0":y'
h=:monad def '|.&.":y'
f=:monad define
smoutput ('各桁の和=',":g y),:'反転値 =',":h y
)

f 123
各桁の和=6
反転値 =321
284デフォルトの名無しさん:2010/01/16(土) 05:09:26
http://pc12.2ch.net/test/read.cgi/tech/1260532772/834
# [2010/01/15 19:27:07] リュック: 【質問テンプレ】
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): http://ime.nu/www.dotup.org/uploda/www.dotup.org563734.zip.html
# [2] のコピー: http://prolog.asia/html/prolog/c133_834.html
285デフォルトの名無しさん:2010/01/16(土) 05:37:43
http://pc12.2ch.net/test/read.cgi/tech/1260532772/827
# 下記の機能を備えた極めて単純なデータベースシステムであるカード型データベースシステムの構築を考える。
# 課題7-1
# 下記のような方針でプログラムを作成せよ。
# 新しい科目を登録する機能
# すでに登録されている科目を修正(更新)する機能
# 登録科目のソート(並び替え)を行う機能
# 登録科目の一部分のみを検索して取り出し、表示する機能
# 登録科目から、卒業までに必要な単位を計算し、表示する機能
# データベースファイルの仕様
# データベースファイルについては、本格的なデータベースになると、アクセス性や
# 安定性など様々な要求を満たす必要があるが、ここでは最も単純なテキストファイルとする。
# さらに、書き込みをfprintfで、読み込みをfscanfで行えるように、 1行中に、
# それぞれの項目(フィールド)がスペースで区切られているようなファイルとする。
# なお、この場合、それぞれの項目はスペースを含んでいけないこととなる。
# 履修科目データベースシステムの例においては、例えば、
# 単位の種類(必修、選択必修など)、単位数、年次、前期か後期か、再履修かどうか、成績の6項目を含むこととする。
# ここで、いくつかの選択肢から選択するものについては、数字で置き換えることとする。
# このような仕様に基づいたファイルの例は以下のようなものになる。ここでは、ファイル名は、"ユーザ名_kamokudb.txt"とする。
286デフォルトの名無しさん:2010/01/16(土) 06:00:50
>>277
% Prolog

'二次方程式ax^2+bx+c=0の解を求める'(0,0,0,_) :- !.
'二次方程式ax^2+bx+c=0の解を求める'(0,0,C,不能) :- \+(C==0),!.
'二次方程式ax^2+bx+c=0の解を求める'(0,B,C,一次方程式) :- \+(B==0),!.
'二次方程式ax^2+bx+c=0の解を求める'(A,B,C,_解) :-
  _判別式の値 is (B ^ 2 - 4 * A * C),
  '二次方程式ax^2+bx+c=0の解判定'(_判別式の値,A,B,C,_解).

'二次方程式ax^2+bx+c=0の解判定'(_判別式の値,_,_,_,虚解) :- _判別式の値 < 0,!.
'二次方程式ax^2+bx+c=0の解判定'(_判別式の値,A,B,C,_解) :-
  _解 is ((-1) * B + sqrt(_判別式の値)) / ( 2 * A ).
'二次方程式ax^2+bx+c=0の解判定'(_判別式の値,A,B,C,_解) :-
  _解 is ((-1) * B - sqrt(_判別式の値)) / ( 2 * A ).
287デフォルトの名無しさん:2010/01/16(土) 06:44:06
>>269
% Prolog (その一)

:- op(350,xf,円).
お客様データベース('長石 輝',ホワイトプラン通話料,2130).
お客様データベース('長石 輝',ホワイトプランメールウェブ利用料金,0).
お客様データベース('長石 輝',パケット使用量,47310).

iphoneのご利用料金(_お客様名,_ご利用料金 円) :-
  お客様データベース(_お客様名,ホワイトプラン通話料,_通話料),
  お客様データベース(_お客様名,ホワイトプランメールウェブ利用料金,_メール
ウェブ利用料金),
  お客様データベース(_お客様名,パケット使用量,_パケット使用量),
  'ホワイトプラン(i)'(_通話料,_メールウェブ利用料金,_ホワイトプラン料金
円),
  パケット料金(_パケット使用量,_パケット料金 円),
  _ご利用料金 is _ホワイトプラン料金 + _パケット料金.

'ホワイトプラン(i)'(_ホワイトプラン料金 円) :-
  ホワイトプラン基本使用料・通話料(_通話料 円,_基本使用料・通話料 円),
  ホワイトプランメールウェブ利用料金(_メールウェブ利用料金 円),
  _ホワイトプラン料金 is _基本使用料・通話料 + _メールウェブ利用料金,!.

ホワイトプラン基本使用料・通話料(_通話料 円,_基本使用料・通話料 円) :-
  _基本使用料・通話料 is 980 + _通話料.
288デフォルトの名無しさん:2010/01/16(土) 06:45:46
>>269
% Prolog

ホワイトプラン基本使用料・通話料(_通話料 円,_基本使用料・通話料 円) :-
  _基本使用料・通話料 is 980 + _通話料.

ホワイトプランメールウェブ利用料金(0 円).

パケット料金(_パケット,_パケット料金 円) :-
  'S!ベーシックパック(i)'(_パケット料金_1 円),
  パケット定額フル(_パケット,_パケット料金_2 円),
  _パケット料金 is _パケット料金_1 + _パケット料金_2,!.

'S!ベーシックパック(i)'(315 円).

パケット定額フル(_パケット,1029 円) :- _パケット =< 12250,!.
パケット定額フル(_パケット,_パケット料金 円) :-
  _パケット > 12250,
  _パケット =< 71250,
  _パケット料金 is (_パケット - 12250) * 0.084 + 1029,!.
パケット定額フル(_パケット,5985 円) :- _パケット > 71250,!.
289デフォルトの名無しさん:2010/01/16(土) 08:16:13
>>258
% Prolog

重み付け平均をRLにセット(AL,RL) :-
  _重みならび = [1,3,4,3,1],
  sum(_重みならび,_重み合計),
  list_nth(N-2,AL,A_2),
  list_nth(N-1,AL,A_1),
  list_nth(1,AL,A1),
  list_nth(2,AL,A2),
  append([A_2,A_1|AL],[A1,A2],AL2),
  N2 is N + 2,
  重み付け平均をRLにセット(3,N2,_重みならび,_重み合計,AL2,RL).

重み付け平均をRLにセット(M,N,_重みならび,_重み合計,AL,[]) :- M > N,!.
重み付け平均をRLにセット(M,N,_重みならび,_重み合計,AL,[_重み付け平均|R]) :-
  findall(B,(for(M-2,U,M+2),list_nth(U,AL,B)),L1),
  重み付け平均(L1,_重みならび,_重み合計,0,_重み付け平均),
  M2 is M + 1,
  重み付け平均をRLにセット(M2,N,_重みならび,_重み合計,AL,R).

重み付け平均([A|R1],[B|R2],_重み合計,S1,_重み付け平均) :-
  _重み付け平均 is S1 / _重み合計,!.
重み付け平均([A|R1],[B|R2],_重み合計,S1,_重み付け平均) :-
  S2 is S1 + A * B,
  重み付け平均(R1,R2,_重み合計,S2,_重み付け平均).
290デフォルトの名無しさん:2010/01/16(土) 08:56:03
>>258
使用言語:J

f=:dyad def '(+/x)%~+/"1 x*(i.#y)|."0 1 y'

1 3 4 3 1 f 1 2 3 4 5
1.25 3.75 5 3.75 1.25
291デフォルトの名無しさん:2010/01/16(土) 09:25:52
http://pc12.2ch.net/test/read.cgi/tech/1260532772/841
# [1] 授業単元: コンピュータシミュレーション
# [2] 問題文(含コード&リンク):円盤状に分布させた質点に回転の初期条件をあたえたいのですが、
# 中心からの距離、位置により速度の大きさと向きが変わるのでどのようにおけばいいのかお願いします。
#
292デフォルトの名無しさん:2010/01/16(土) 09:41:18
>>231
% Prolog

九九表を作り,テキストファイルに書き出す(_テキストファイル) :-
  九九表を作り(_九九表),
  tell(_テキストファイル),
  書き出す(_九九表),
  told.

九九表を作り(M,N,[]) :- M > N,!.
九九表を作り(M,N,[L|R]) :-
  findall(K,(for(1,J,9),K is J * M),L),
  M2 is M + 1,
  九九表を作り(M2,N,R).

テキストファイルに書き出す(_テキストファイル,_ならび) :-
  tell(_テキストファイル),
  書き出す(_ならび),
  told.

書き出す([]) :- !.
書き出す([L|R]) :-
  concat_atom(L,' ',S),
  write_formatted('%t\n',[S]),
  書き出す(R).
293デフォルトの名無しさん:2010/01/16(土) 10:07:07
>>256
% Prolog (その一)
標準入力から読み込んだテキストファイルを辞書順に整列して標準出力する :-
  標準的整列ルール(32,127,_標準的整列ルール),
  例外的整列ルール(_例外的整列ルール),
  get_lines(user_input,Lines),
  concat_atom(Lines,' ',S),
  split(S,[' '],_語彙ならび),
  辞書順整列(_語彙ならび,_標準的整列ルール,_例外的整列ルール,[],_辞書順に整列された語彙ならび),
  語彙ならびを標準出力する(_語彙ならび).

語彙ならびを標準出力する([]).
語彙ならびを標準出力する([_語彙|R]) :-
  write_formatted('%t\n',[_語彙]),
  語彙ならびを標準出力する(R).

標準的整列ルール(M,N,[]) :- M > N,!.
標準的整列ルール(M,N,[A|R]) :-
  \+((M >=97,M =< 122)),
  char_code(A,M),
  M2 is M + 1,
  標準的整列ルール(M2,N,R),!.
標準的整列ルール(M,N,[A,B|R]) :-
  M >= 65,M =< 90,
  M32 is M + 32,
  char_code(A,M),char_code(B,M32),
  M2 is M + 1,
  標準的整列ルール(M2,N,R),!.
294デフォルトの名無しさん:2010/01/16(土) 10:20:25
>>293 訂正
% Prolog この定義の一番最後は _辞書順に整列された語彙ならび でないといけない。
標準入力から読み込んだテキストファイルを辞書順に整列して標準出力する :-
  標準的整列ルール(32,127,_標準的整列ルール),
  例外的整列ルール(_例外的整列ルール),
  get_lines(user_input,Lines),
  concat_atom(Lines,' ',S),
  split(S,[' '],_語彙ならび),
  辞書順整列(_語彙ならび,_標準的整列ルール,_例外的整列ルール,[],_辞書順に整列された語彙ならび),
  語彙ならびを標準出力する(_辞書順に整列された語彙ならび).

295デフォルトの名無しさん:2010/01/16(土) 10:42:01
>>192
% Prolog
現在の対ドル為替レート(92.69).

日本円をドルに変換する(_日本円,_ドル,_セント) :-
  現在の対ドル為替レート(_現在の為替レート),
  _ドル is truncate(float_integer_part(_日本円 / _現在の為替レート)),
  _セント is truncate(float_fractional_part(_日本円 / _現在の為替レート) * 100).

日本円をドルとセントに変換して金種を計算する(_日本円,_ドルの金種,_セントの金種) :-
  日本円をドルに変換する(_日本円,_ドル,_セント),
  ドルの金種計算(_ドル,[100,50,20,10,5,2,1],_ドルの金種),
  セントの金種計算(_セント,[50,25,10,5,1],_セントの金種).

ドルの金種計算(_,[],[]) :-
ドルの金種計算(D,[_金種|R1],[[_金種,_枚数]|R2]) :-
  _枚数 is truncate(D // _金種),
  D2 is truncate(D mod _金種),
  ドルの金種計算(D2,R1,R2).

セントの金種計算(_,[],[]) :-
セントの金種計算(C,[_金種|R1],[[_金種,_枚数]|R2]) :-
  _枚数 is truncate(C // _金種),
  C2 is truncate(C mod _金種),
  セントの金種計算(C2,R1,R2).

296デフォルトの名無しさん:2010/01/16(土) 11:37:09
>>257
% Prolog 問題3 これもこれまで何度も定義された。

行列の転置([[]|_],[]) :- !.
行列の転置(_副行列,[_第一要素ならび|R]) :-
  第一要素と残り要素の収集(_副行列,_第一要素ならび,_残り要素ならび),
  行列の転置(_残り要素ならび,R),!.

第一要素と残り要素の収集([],[],[]) :- !.
第一要素と残り要素の収集([[A|R1]|R2],[A|R3],[R1|R4]) :-
  第一要素と残り要素の収集(R2,R3,R4).
297デフォルトの名無しさん:2010/01/16(土) 11:47:35
http://pc12.2ch.net/test/read.cgi/tech/1260532772/843
# [1] 授業単元:計算機基本
# [2] 問題文(含コード&リンク):
# 1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求めるプログラムを作ってみましょう。
# 途中経過も表示してください。
# 例:1^2 + 2^2 =
# 1^2 + 2^2 + 3^2 =
# ....
298デフォルトの名無しさん:2010/01/16(土) 16:32:10
http://pc12.2ch.net/test/read.cgi/tech/1260532772/847
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10368.txt
#
299デフォルトの名無しさん:2010/01/16(土) 16:37:32
# 基本課題 2a(数式の読み込みと表示)
# 課題 2a と 2b では,算術式を読み,表示し,値を求めるプログラムを作る.
# 限られた時間内で数式処理の本質部分を効率よく学ぶために,
# 入力できる算術式の構文を,次の BNF で定めるものに限る.
#
# 定数 ::= 0 | 1 | … | 9
# 変数 ::= a | b | … | z | A | B | … | Z
# 算術式 ::= 定数
# | 変数
# | (算術式+算術式)
# | (算術式*算術式)
#
# つまり,1桁の定数や1文字の変数の和や積からなる式が入力である.
#
# 入力された算術式を読み込み,2分木データとして格納し,そのデータをもとに
# 入力と同じ算術式を表示する,という処理を繰り返すプログラムを作れ.
#
# 次の要求を満たすものを作り,仕様の不明確な部分は各自で詳細化すること.
#
# ・算術式は標準入力から読む
# ・2つの算術式の区切りは1つの空白 (間隔文字や改行文字など) とする
# ・結果は標準出力に書く
# ・構文に合わない算術式を読んだらプログラムを終了する
300デフォルトの名無しさん:2010/01/16(土) 16:40:18
# ●基本課題 2b(数式の値の計算)
#
# 課題 2a のプログラムに,算術式の値を計算して表示する機能を追加せよ.
# ただし,変数の値は全て1であるとして,式の値を求めること.
#
# 例えば,入力が (2*3) と (x+(y+z)) の場合,次のような出力をすればよい.
# show: に続いて入力された算術式を,eval: に続いて算術式の値を表示している.
#
# (2*3) ←入力
# show: (2*3)
# eval: 6
#
# (x+(y+z)) ←入力
# show: (x+(y+z))
# eval: 3
#
# まず,算術式の値を求める関数 eval_exp()(exp.c にある)を完成させる.
# 十分な数の検査データを使って動作の正しさを確かめよ.
301デフォルトの名無しさん:2010/01/16(土) 16:42:16
# ●基本課題 2c(数式データの基本操作)
#
# 算術式の値を変えずに括弧をくくり直す簡単な式変形を考える.例えば,式
#
# (1+(2+3))
# (a*(b*c))
# ((i*x)+((j*y)+(k*z)))
#
# の括弧を左にくくり直すと,それぞれ,次の式になる.
#
# ((1+2)+3)
# ((a*b)*c)
# (((i*x)+(j*y))+(k*z))
#
# 括弧を左にくくり直せる (A+(B+C)) や (A*(B*C)) の形の算術式を
# ((A+B)+C) や ((A*B)*C) の形にする式変形は,式に対応する木を
# 「左に転回」する変形と捉えられる.
302デフォルトの名無しさん:2010/01/16(土) 19:23:50
>>297
% Prolog

'1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(_経過,_和) :-
  '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(1,[],_経過,0,_和).

'1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,_経過,_経過,_和,_和) :- M > 10,!.
'1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,_経過1,_経過,S1,_和) :-
  M =< 10,
  concat_atom([M,'^2'],U),
  append(_経過1,[U],_経過11),
  concat_atom(_経過11,'+',_経過),
  _和 is truncate(M ^ 2 + S1).
'1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,_経過1,_経過,S1,_和) :-
  M =< 10,
  concat_atom([M,'^2'],U),
  append(_経過1,[U],_経過2),
  S2 is truncate(M ^ 2 + S1),
  M2 is M + 1,
  '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M2,_経過2,_経過,S2,_和).
303デフォルトの名無しさん:2010/01/16(土) 20:04:17
>>297
ruby
sum=0;array=[]
for i in 1..10
sum+=i**2
array.push (i.to_s(10)+"^2")
puts array.join(" + ") + " = " + sum.to_s(10)
end
304デフォルトの名無しさん:2010/01/16(土) 23:28:57
>>297
使用言語:Io

なんか前にやった問題だなあと、ながめていたらrubyによる解答が
書き込まれた。これを参考にもう一度やってみた。

Io> s:=0;a:="";for(i,1,10,writeln(a=a .. i .. "^2"," = ",s=s+i*i);a=a .. " + ")
305デフォルトの名無しさん:2010/01/17(日) 01:00:17
>>297
;; Common Lisp ひさしぶりに挑戦
(dotimes (n 10)
(let (lst)
(dotimes (i (+ n 1)) (push (+ i 1) lst))
(setf lst (reverse lst))
(format t "~A = ~A~%"
(reduce #'(lambda (x y) (concatenate 'string x " + " y))
(map 'list #'(lambda (x) (concatenate 'string (princ-to-string x) "^2")) lst))
(reduce #'+ (map 'list #'(lambda (x) (* x x)) lst)))))
306デフォルトの名無しさん:2010/01/17(日) 05:23:53
>>297
使用言語:maxima

for i thru 10 do printf(true,"~{~a^2~^ + ~} = ~a~%",a:makelist(j,j,1,i),lsum(k*k,k,a));
307デフォルトの名無しさん:2010/01/17(日) 05:37:41
http://pc12.2ch.net/test/read.cgi/tech/1260532772/864
# [1] 授業単元: プログラミング演習 (木構造と数式処理)
# [2] 問題文(含コード&リンク):
#
# 算術式の値を変えずに括弧をくくり直す簡単な式変形を考える.例えば,式
#
# (1+(2+3))
# (a*(b*c))
# ((i*x)+((j*y)+(k*z)))
#
# の括弧を左にくくり直すと,それぞれ,次の式になる.
#
# ((1+2)+3)
# ((a*b)*c)
# (((i*x)+(j*y))+(k*z))
#
# 括弧を左にくくり直せる (A+(B+C)) や (A*(B*C)) の形の算術式を((A+B)+C) や ((A*B)*C) の形にする式変形は,式に対応する木を
# 「左に転回」する変形と捉えられる
#
# この操作を実行する関数 rotate_left_exp()を完成させてください。
# 括弧をくくり直すと値の変わる (8+(8*8)) のような式や,括弧をくくり直せる部分が内側にある (a+(b*(c*d))) のような式は,
# 変形しないこと.
308デフォルトの名無しさん:2010/01/17(日) 06:11:43
>>297 訂正
% Prolog 一引数増やします。
'1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,_経過,_和) :-
  '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(1,M,[],_経過,0,_和).

'1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,M,_経過,_経過,_和,_和) :- M > 10,!.
'1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,M,_経過1,_経過,S1,_和) :-
  M =< 10,
  concat_atom([M,'^2'],U),
  append(_経過1,[U],_経過11),
  concat_atom(_経過11,'+',_経過),
  _和 is truncate(M ^ 2 + S1).
'1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,MX,_経過1,_経過,S1,_和) :-
  M =< 10,
  concat_atom([M,'^2'],U),
  append(_経過1,[U],_経過2),
  S2 is truncate(M ^ 2 + S1),
  M2 is M + 1,
  '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M2,MX,_経過2,_経過,S2,_和).
309デフォルトの名無しさん:2010/01/17(日) 06:14:45
>>308 (>>297)
% Prolog これで以下のように使います。

?- '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(N,S,_和),write_formatted('%t=%t\n',[S,_和]),N>=10.
1^2=1
1^2+2^2=5
1^2+2^2+3^2=14
1^2+2^2+3^2+4^2=30
1^2+2^2+3^2+4^2+5^2=55
1^2+2^2+3^2+4^2+5^2+6^2=91
1^2+2^2+3^2+4^2+5^2+6^2+7^2=140
1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2=204
1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2+9^2=285
1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2+9^2+10^2=385

N = 10,
S = '1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2+9^2+10^2',
_和 = 385.
310デフォルトの名無しさん:2010/01/17(日) 06:17:52
>>308 (>>297)
% Prolog または、次のように利用もします。

?- '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(N,S,_和).

N = 1,
S = '1^2',
_和 = 1;
N = 2,
S = '1^2+2^2',
_和 = 5;
N = 3,
S = '1^2+2^2+3^2',
_和 = 14;

<中略>

N = 9,
S = '1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2+9^2',
_和 = 285;
N = 10,
S = '1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2+9^2+10^2',
_和 = 385;
no.
?-
311デフォルトの名無しさん:2010/01/17(日) 06:38:27
http://pc11.2ch.net/test/read.cgi/db/1252492296/445
# MySQL 5.1での質問です。
#
# A B C
# 1 q name1
# 2 w name2
# 3 e name3
# 4 q name4
# 5 t name5
#
# 上記テーブルのB列の重複を除いたA,B,C列がほしい場合
#
# SELECT DISTINCT B FROM table_name;
#
# ではB列の重複を除くだけで他の列がとれません。他の列も併せて取得する場合はど
のような解決策がありますか?
#
# 望んでる結果は以下のものです。
#
# A B C
# 1 q name1
# 2 w name2
# 3 e name3
# 5 t name5
#
312デフォルトの名無しさん:2010/01/17(日) 07:37:43
ttp://pc12.2ch.net/test/read.cgi/tech/1260532772/866
#
# 【質問テンプレ】
# [1] 授業単元:C言語演習
# [2] 問題文(含コード&リンク): コマンド引数を使用して
# 以下のように指定した文字列中の指定番号の文字を表示するプログラムを作成せよ。
#
# 例:./prg1 abcde 1
# char 1 is "a"
# ./peg1 abcdef123456 10
# char 10 is "4"
#
# エラー処理もしっかり行うこと。
313デフォルトの名無しさん:2010/01/17(日) 09:40:27
>>311
使用言語:J

A=:,.1;2;3;4;5
B=:'q';'w';'e';'q';'t'
C=:,.'name1';'name2';'name3';'name4';'name5'

A,.B,.C
+-+-+-----+
|1|q|name1|
+-+-+-----+
|2|w|name2|
+-+-+-----+
|3|e|name3|
+-+-+-----+
|4|q|name4|
+-+-+-----+
|5|t|name5|
+-+-+-----+

(~:B)# A,.B,.C
+-+-+-----+
|1|q|name1|
+-+-+-----+
|2|w|name2|
+-+-+-----+
|3|e|name3|
+-+-+-----+
|5|t|name5|
+-+-+-----+
314デフォルトの名無しさん:2010/01/17(日) 16:53:42
http://pc12.2ch.net/test/read.cgi/tech/1260532772/881
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10376.txt
#
# 連立1次方程式の一般的な数値解法にはガウスの単純消去法がある。
# 下記の連立1次方程式の解法をC言語で表せ。
#
# x1 + 5x2 + x3 = 2
# 3x1 + 4x2 = 2
# 9x1 +10x2 + 4x3 = 8
315デフォルトの名無しさん:2010/01/17(日) 17:00:18
http://pc12.2ch.net/test/read.cgi/tech/1260532772/881
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10376.txt
#
# 問題文の構造が大きすぎてコピーできません。[2]のリンクを各自で見てください。
316デフォルトの名無しさん:2010/01/17(日) 17:31:46
>>313
解説お願い。
317デフォルトの名無しさん:2010/01/17(日) 17:39:41
>>315>>314と同じものになってしまいました。構造が多くてコピーできなかったのは
以下の問題です。
http://pc12.2ch.net/test/read.cgi/tech/1260532772/885
# [1] 授業単元:プログラミング(大学講義)
# [2] 問題文
# ハングマンを作成せよ。
# http://ime.nu/ipl.sfc.keio.ac.jp/text/comp-prog-2007-4/main_c9.html#doc1_id2542
# http://ime.nu/ipl.sfc.keio.ac.jp/text/comp-prog-2007-4/main_c10.html#doc1_id2748
#


318デフォルトの名無しさん:2010/01/17(日) 19:16:26
>>316
「~.」が通常のuniqですが、AとCを道連れにするするために
「~:」を使いました。これは、いきなりuniqせずに残す要素を1で
削除する要素を0で表したリストを返します。
「#」はコピーなんですが、1と0のリストを左引数に、操作するデータ
を右引数にすると1に対応するデータだけを返します。
B=:,.'q';'w';'e';'q';'t'
~. B
+-+
|q|
+-+
|w|
+-+
|e|
+-+
|t|
+-+

~: B
1 1 1 0 1

1 1 1 0 1 # B
+-+
|q|
+-+
|w|
+-+
|e|
+-+
|t|
+-+
319デフォルトの名無しさん:2010/01/17(日) 19:52:42
>>318
「~:」によって、どうして、
01111 ではなく 11101 の選択になるのですか?
320デフォルトの名無しさん:2010/01/17(日) 19:55:31
http://pc12.2ch.net/test/read.cgi/tech/1260532772/894
# お願いします
# [1] 授業単元: プログラミング演習�
# [2] 問題文(含コード&リンク):
# Printfを作る。
# %d, %c, %sのみサポートする。
321デフォルトの名無しさん:2010/01/17(日) 21:14:04
>>319
J言語のuniqは重複した要素の内、最初にあらわれたものを
残すようです。
322デフォルトの名無しさん:2010/01/17(日) 21:16:39
http://pc12.2ch.net/test/read.cgi/tech/1258320456/85
# 【課題】
# 同じ長さのリストA,Bがある。Aはソート対象のデータ、Bは比較用の値が入っている。
# A,Bの2つの引数をとり、Bの値が昇順になるようにAをソートする関数を定義しなさい。
# 引数のリストは破壊しても良く、ソート結果は戻り値・引数Aを上書きのどちらでも良い。
# 処理の早いものには追加点を与える。
#
323デフォルトの名無しさん:2010/01/17(日) 21:18:13
>>321
ご丁寧な回答に感謝します。
324デフォルトの名無しさん:2010/01/18(月) 06:01:26
http://pc12.2ch.net/test/read.cgi/tech/1260532772/911
# お願いします
# [1] 授業単元:電子演算機演習
# [2] 問題文(含コード&リンク):
#  2次元の文字配列が、main関数内において次の詞で初期化(空白行も含める)されている。
# 例によって、初期化に用いられた詞の文字数や行数などはわかっていないものとする。
#
#  (1)関数NumOfCharで総文字数(空白以外)を、(2)関数NumOfWordで単語数を、(3)関数
#  NumOfLineで行数(空白行は数えない。また、空白行が2行以上続くことはない)を、(4)main
#  関数内でキーボードから一文字入力し、関数NumOfCoinで入力した文字と一致する文字数を数えて、
#  main関数内でそれらの数を表示する。文字列に小細工をしないこと(単語:空白又は改行から空白
#  又は改行まで)
325デフォルトの名無しさん:2010/01/18(月) 06:05:16
http://pc12.2ch.net/test/read.cgi/tech/1248012902/728
# 【 課題 】国旗を表示するプログラム(日の丸、星条旗、ユニオンジャック等)を作れ。 指定された国旗を画面に表示する。少なくても8種類以上。 国旗の指定にはメニューとかボタンとかを表示して、選択させること。
# 国旗は図形として描くこと。写真を貼り付けたりしては駄目。
326デフォルトの名無しさん:2010/01/18(月) 06:11:51
http://pc12.2ch.net/test/read.cgi/tech/1262163854/238
# Repl-Aceというテキスト置換ツールを使っているんですが、
#
# 1月
# ・1日
# ・2日
# ・3日
# 2月
# ・1日
# ・2日
# ・3日
#
# といったテキストを、
#
# 1月1日
# 1月2日
# 1月3日
# 2月1日
# 2月2日
# 2月3日
#
# といったように置換することができず困っています。
# 単純な文字の置換や簡単な正規表現は理解できるのですが、
# 1月から2月までの「・」を「1月」に置換、2月から3月までの「・」を「2月」に置換、3月から(ry
# を一気に行えるような正規表現ってありますか?

327デフォルトの名無しさん:2010/01/18(月) 06:15:06
http://pc12.2ch.net/test/read.cgi/tech/1258320456/85
# 【課題】
# 同じ長さのリストA,Bがある。Aはソート対象のデータ、Bは比較用の値が入っている。
# A,Bの2つの引数をとり、Bの値が昇順になるようにAをソートする関数を定義しなさい。
# 引数のリストは破壊しても良く、ソート結果は戻り値・引数Aを上書きのどちらでも良い。

328デフォルトの名無しさん:2010/01/18(月) 06:18:30
http://pc12.2ch.net/test/read.cgi/tech/1260532772/922
# visual studioのwindowsフォームアプリケーション visual C++のプログラミングについて質問です!!
# かなり急いでます。
# チェックボックスを5個とボタン1個を使いアンケートみたいなプログラムを作りたいのですができません。
#
# 内容としてはチェックの数で表示される答えを違うようにしたいのです。
# 0〜1個つけたら良い
# 2〜3個つけたら普通
# 4〜5個つけたら悪い
# みたいな感じで最後にボタンを押したら評価がでてくるというものです。
# すべてのプログラムを教えてください!!
329デフォルトの名無しさん:2010/01/18(月) 07:04:45
>>326
% Prolog

'1月から2月までの「・」を「1月」に置換、2月から3月までの「・」を「2月」に置換、
3月から...'(File) :-
  get_lines(File,Lines),
  月表示行まで読み飛ばし(Lines,R,_月),
  '.を月表示に置換'(Lines,_月,L),
  ならびを行表示(L).

'.を月表示に置換'([],_,[]) :- !.
'.を月表示に置換'([A|R1],_月,X) :-
  sub_atom(A,_,1,_,'月'),
  split(A,[月],[_月2|_]),
  '.を月表示に置換'(R1,_月2,X).
'.を月表示に置換'([A|R1],_月,[B|R2]) :-
  sub_atom(A,0,1,_,'.'),
  concat_atom([_月,A],B),
  '.を月表示に置換'(R1,_月,R2).

月表示行まで読み飛ばし(Lines,Lines2,_月) :-
  append(_,[A|Lines2],Lines),
  sub_atom(A,_,1,_,'月'),
  split(A,[月],[_月|_]),!.
330デフォルトの名無しさん:2010/01/18(月) 07:28:37
http://pc12.2ch.net/test/read.cgi/tech/1248012902/730
# 【 課題 】http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/881.zip
# Kadai.javaを以下のステップに沿って改めなさい。
# ファイル名およびクラス名はステップに沿ってKadai1,Kadai2というようにKadai+数字としなさい。
#
# Step1.
# 「入力」が押されると、テキストフィールドに入力されている文字とチェックボック>ス の状態を読み取って「名前,出席する(or しない),10000円(or 0円)」と、氏名、同窓 会の出欠、参加費をカンマ区切りでコマンドプロンプトに出力する機能を追加しなさい 。
#
# Step2.
# 「キャンセル」が押されるとテキストフィールドをクリアし、(もしチェックボックスにチェックされていれば)チェックを外す機能を追加しなさい。
#
# Step3.
# Step1と同じ内容をファイル「出席.txt」に書き込む(追い書き)する機能を追加しなさい。
#
# Step4.
# 右上の「×」ボタンを押す事でプログラムを終了する機能を追加しなさい。keizo@keiizo98:~/Desktop$
331デフォルトの名無しさん:2010/01/18(月) 13:19:56
http://pc12.2ch.net/test/read.cgi/tech/1260532772/934
# [1]授業単元:C言語実習(専門学校:選択授業)
# [2]課題:
# コマンドライン引数に与えられた英数字からなる文字列を、長さが長いものが先、同じ長さのものどう
# しでは辞書に記載される場合に先頭のほうに書かれるものが先に出力されるように出力するCを作る。
# 引数が与えられてない場合は、何も出力しない。
332デフォルトの名無しさん:2010/01/18(月) 13:36:52
http://pc12.2ch.net/test/read.cgi/tech/1260532772/942
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt
# リスト操作関数を作成する問いが5題ある。なお、ここで扱うリストは、ASCII文字を要素とする、頭を持った連結リスト(「文字リスト」と呼ぶ)である。
#
# ●問1.文字リストを作成する関数と印字する関数
#
# 与えられた文字列の各文字を要素とする文字リストを作成し返す関数make_clistと、与えられた文字リスト
# の内容を印字する関数print_clistを作成せよ。
#
#  【問1.については過去ログ等を調べつつ解答を導き出すことができました。コードを最下方に載せます。】
#

333デフォルトの名無しさん:2010/01/18(月) 13:38:21
http://pc12.2ch.net/test/read.cgi/tech/1260532772/942
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt
# ●問2.リストの内容を比較する関数
#
#  与えられた二つのリストに含まれる文字の並びを辞書式順序(※)で比較し、第一のリストの方が小さければ負の
# 値、大きければ正の値、等しければ0を返す関数compareを作成せよ。
#

334デフォルトの名無しさん:2010/01/18(月) 13:39:58
http://pc12.2ch.net/test/read.cgi/tech/1260532772/942
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt
# ●問3.リストの一部を取り除く関数
#
#  与えられた文字リストの先頭から見ていき、要素が'<'なら自身と(あれば)直前の要素を、'>'なら自身
# と(あれば)直後の要素を取り除く関数editを作成せよ。
#

335デフォルトの名無しさん:2010/01/18(月) 13:41:20
http://pc12.2ch.net/test/read.cgi/tech/1260532772/942
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt
# ●問4.リストの一部を別のリストの内容で置き換える関数
#
#  引数として三種のリストが与えられると、第一のリスト内に含まれる第二のリストに一致する部分を第三の
# リストに置き換える関数replaceを作成せよ。ただし新たにリストを作成するのではなく、与えられたリスト
# の変形で実現すること。一度置き換えた部分を再び置き換えの対象としなくてよい。また関数の戻り値として
# 置き換えを行った回数を返すこと。
336デフォルトの名無しさん:2010/01/18(月) 13:42:37
http://pc12.2ch.net/test/read.cgi/tech/1260532772/942
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt
# ●問5.複数回出現する要素からなるリストを返す関数
#
#  与えられた文字リスト中で複数回現れる文字を残して得られるリストを作成する関数multipleを作成せよ。
# ただし新たにリストを作成するのではなく、与えられたリストの変形で実現すること。また複数回現れる同種
# の文字は、そのいずれか1つだけを残すこと。
337デフォルトの名無しさん:2010/01/18(月) 14:35:07
>>327
A=:'chihayafuru';'yothubato';'tomehane'
B=:7;9;6
mysort=: /:

mysort B   単項演算子として使うと並べ替えるための指標(0オリジン)を返す。
2 0 1

A mysort B  二項演算子として使うと右引数のデータでつくった指標で左引数のデータを並べ替える。
+--------+-----------+---------+
|tomehane|chihayafuru|yothubato|
+--------+-----------+---------+
338デフォルトの名無しさん:2010/01/18(月) 17:08:52
>>312
% Prolog

program :-
  user_parameters(L),
  L = [S,A|_],
  atom_to_term(A,N,_),
  integer(N),
  sub_atom(S,N,1,_,X),
  write_formatted('Char %t is "%t"\n',[N,X]),
  halt.
339デフォルトの名無しさん:2010/01/18(月) 20:19:00
>>331
--luaで。 優先順位は、長さ>大文字区別無し辞書>バイナリ
function f(a,b)
if a:len()==b:len() then
if a:lower()==b:lower() then return a<b end
return a:lower()<b:lower()
end
return a:len()>b:len() and true or false
end
t={}
for i=1,#arg do
table.insert(t,arg[i])
end
print("before") print(unpack(t))
table.sort(t,f)
print("after") print(unpack(t))
340デフォルトの名無しさん:2010/01/18(月) 21:58:23
ふらっとC#からきました。
宿題ではないんですが、C#でマルコフ連鎖で人工無脳を作りたいのです。
文章を単語に分けたあと(ここまではできてます)、それを配列にいれるんですか?
Rubyだとこう書くらしいんだけど、これをC#だとどう書けばいいんでしょう?
分かち書きにはChasenを使っています。
よろしくアドバイスお願いします。

# マルコフ連鎖で要約
t1 = data[0]['head']
t2 = data[0]['middle']
new_text = t1 + t2
while true
_a = Array.new
data.each do |hash|
_a.push hash if hash['head'] == t1 && hash['middle'] == t2
end

break if _a.size == 0
num = rand(_a.size) # 乱数で次の文節を決定する
new_text = new_text + _a[num]['end']
break if _a[num]['end'] == "EOS"
t1 = _a[num]['middle']
t2 = _a[num]['end']
end

http://d.hatena.ne.jp/zariganitosh/20090628/1246186477
341デフォルトの名無しさん:2010/01/19(火) 05:20:14
http://pc12.2ch.net/test/read.cgi/tech/1260532772/977
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):異なる自然数p,qと、もう一つの自然数dを入力する。
# d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に表示し、
# 最後にその個数を表示するプログラムを作成せよ。入力する数字はp、q、dの順とする
#
# 実行例
# 3 5 10
# 3 5 6 8 9 10
# 合計で6個あります
342デフォルトの名無しさん:2010/01/19(火) 05:28:57
http://pc12.2ch.net/test/read.cgi/tech/1260532772/963
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10384.txt
# 括弧をすべて左にくくり直す式変形に加えて,分配法則を使って + を * の 外側へとくくり出す式変形をするプログラムを作ってください.
# ファイル exp.c に,+ を * の外側にくくり出す式変形をする 関数 dist_prod_exp() を作ること.
# 例えば,算術式 ((x+1)*(y+a)) の+を外にくくり出し,括弧を左にくくり直すことで, 次の式が順に得られればよい.
# ((x+1)*(y+a))
# (((x*y)+(1*y))+((x*a)+(1*a)))
# ((((x*y)+(1*y))+(x*a))+(1*a))
#
# 分配法則を使う順序によっては,結果の式の形が変わる.((A+B)*(C+D)) の形の式は,* の左の式 (A+B) を先に分配すると (((A+B)*C)+((A+B)*D))
# になり,右の式 (C+D) を先に分配すると ((A*(C+D))+(B*(C+D))) になる. 同じ位置で2通りに分配できる場合,この課題では,左の式の分配を優先する.
# 2分木の節を格納するためのデータ構造(Tree 型)を,次のように定義する.
#
# typedef struct _tree {
# char node; /* 節のデータ (1文字) */
# struct _tree *left; /* 左の子へのポインタ */
# struct _tree *right; /* 右の子へのポインタ */
# } Tree;
343デフォルトの名無しさん:2010/01/19(火) 07:42:54
http://pc12.2ch.net/test/read.cgi/tech/1260532772/961
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): 4行4列のint型の行列を、転置するプログラムを作成し、
# 動作の確認のため、転置前と転置後 の行列の内容を表示するようにせよ。
344デフォルトの名無しさん:2010/01/19(火) 07:46:58
>>343
% Prolog

'4行4列のint型の行列を、転置する'([[A1,A2,A3,A4],[B1,B2,B3,B4],[C1,C2,C3,C4],[D1,D2,D3,D4]],[[A1,B1,C1,D1],
A2,B2,C2,D2],[A3,B3,C3,D3],[A4,B4,C4,D4]]).
345デフォルトの名無しさん:2010/01/19(火) 07:51:53
>>343
% Prolog "["がひとつ抜けた。これが答えといえるかどうか。

'4行4列のint型の行列を、転置する'([[A1,A2,A3,A4],[B1,B2,B3,B4],[C1,C2,C3,C4],[D1,D2,D3,D4]],[[A1,B1,C1,D1],[A2,B2,C2,D2],[A3,B3,C3,D3],[A4,B4,C4,D4]]).
346デフォルトの名無しさん:2010/01/19(火) 07:54:00
少なくともint型の検査はできていない。
347デフォルトの名無しさん:2010/01/19(火) 10:11:17
>>343
使用言語:J

a=:i.4 4
a
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15

,./a     各行を「,.」で連結すると転置になる
0 4 8 12
1 5 9 13
2 6 10 14
3 7 11 15

|:a      「|:」は組み込みの転置演算子
0 4 8 12
1 5 9 13
2 6 10 14
3 7 11 15
348デフォルトの名無しさん:2010/01/19(火) 12:17:19
>>341
使用言語:J

f=:monad define
'p q d'=.y
a=./:~~.,(p*i.d)+/q*i.d
b=.}.(d>:a)#a
smoutput b
smoutput '合計で',(":#b),'個あります'
)

f 3 5 10
3 5 6 8 9 10
合計で6個あります
349デフォルトの名無しさん:2010/01/19(火) 19:56:12
http://pc12.2ch.net/test/read.cgi/tech/1263824755/14
# [1] 授業単元: プログラミング演習�
# [2] 問題文(含コード&リンク):
# 終了時、xとB、まらはAとHの内積のどちらかが0のプログラム。
# (xを入力→Hを設定)
# AとBはそれぞれHやxの最小多項式の係数となるはず。
# X1=(x1,...,xn)の転置行列;
# H=(X1,...,Xt);
350345:2010/01/19(火) 23:04:02
>>347
プログラムというのは何をするのかを示すことなのではないか?
351デフォルトの名無しさん:2010/01/19(火) 23:29:14
http://pc12.2ch.net/test/read.cgi/tech/1263824755/22
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10392.txt
#
# 練習問題1*
#  以下に示すプログラムは、リストを操作するプログラムの一部である。このプログラムに、ジストの指定した位置(末尾以外)にノードを挿入する関数insert_nodeと、
# リストの指定した位置のノードを削除する関数delete_nodeを追加し、プログラムを完成させよ。
#  insert_nodeは引致として挿入位置の情報リストの何番目のノードかという情報)とデータ(文字列)を受け取るも
# のとする。また、挿入位置に元々あったノードは、新しく挿入するノードの次の要素となるものとする。
#  リストの先頭ノードとして挿入される場合にも正しく動くようにすること。
#  delete_nodeは、引数として削除位置の情報を受け取る。リストの先頭のノード、最後のノード、途中のノードが削除されたときにそれぞれ正しく動くようにすること。
# また、ノードが1個しかない場合にも正しく動<ようにすること。
352デフォルトの名無しさん:2010/01/20(水) 07:55:26
>>350
この問いかけはどう受け取ればいいのでしょうか。
「あなたの書き込みは組み込み機能の紹介で
プログラムじゃないよ」ということですか?
353デフォルトの名無しさん:2010/01/20(水) 08:52:50
>>352
半分は自問。
http://pc12.2ch.net/test/read.cgi/tech/1263289291/ の第一夜を書いたのは
私です。このスレの最後に書き込まれた
>>第二夜?は第一夜とは正反対の主張の方と考えてよいのでしょうか?
を読んで書いてみたのが>>345です。>>347は説明的で冗長な>>345の対極にあるかなと思い、
さらに>>350で問いかけました。
私は、オペレータを知らないとそのプログラムの意味がわからない(APL的)ことは、
関数型言語の欠点ではないかと思っています。
354デフォルトの名無しさん:2010/01/20(水) 09:42:40
補足。説明を論理式で書き表すことができるならば、その論理式が
すなわちプログラムである。というのがPrologの"売り"なんですね。
上の論理式の部分を数式に置き換えて、はたして本当にその数式が
"説明"になっているかということを問題にしているのです。常に
完全に理解している事が前提になっているのではないか、と。
355デフォルトの名無しさん:2010/01/20(水) 10:20:42
>>354
プログラムを使うためのもの見るか、理解するためのものと見るかという違いかな。
このスレの魅力は議論を排除してプログラムコードが並んでいるところだから、
ここではあまりやって欲しくはないが、興味深いテーマではあるね。
356デフォルトの名無しさん:2010/01/20(水) 12:39:24
>>353

>私は、オペレータを知らないとそのプログラムの意味がわからない(APL的)ことは、
>関数型言語の欠点ではないかと思っています。

知らないとわからないのは、あたりまえです。
手続き型言語をひとつ覚えると他の手続き型言語のコードがなんとなくわかる
気がするのは前提とする知識がほとんど同じだからじゃないでしょうか。
357デフォルトの名無しさん:2010/01/20(水) 13:32:59
http://pc12.2ch.net/test/read.cgi/tech/1260922392/22
# 次のゲームを考える
# ・二人のプレイヤーA、Bにそれぞれ持ち点m点を与える
# ・コイントスをして表が出たらAからBへ、裏が出たらBからAへ、1点渡す
# ・コイントスをくりかえして先に持ち点がなくなったほうが負け
#
# 一個の自然数mをキーボード入力から読み取ってこのゲームをたとえば1000ゲーム繰り返して、
# 平均何回のコイントスで勝負がつくか、シュミレーションして求めるプログラムを作成してください。
# ただしコイントスを10000回繰り返しても勝負がつかない場合があるかもしれないので、それは回数オーバーとして別にカウントしてください。
#
358デフォルトの名無しさん:2010/01/20(水) 13:35:56
http://pc12.2ch.net/test/read.cgi/tech/1200175247/797
# 質問です!
# 文字列を受け取ってスペースと記号を削除した文字列を返すメソッドを作りたいんですが
# どうすればいいでしょうか?
# ちなみに条件はgsubメソッドをつかうこと
# 記号は全角も半角も含む(","とか"。"とか"?"とか"?"とか)
# どなたかお願いします
#
359デフォルトの名無しさん:2010/01/20(水) 16:49:25
>>358
% Prolog

文字列を受け取ってスペースと記号を削除した文字列を返す(_文字列,_スペースと記号を削除された文字列) :-
  atom_codes(_文字列,Codes),
  文字コードならびからスペースと記号を削除する(Codes,Codes2),
  atom_codes(_スペースと記号を削除された文字列,Codes2).

文字コードならびからスペースと記号を削除する([],[]) :- !.
文字コードならびからスペースと記号を削除する([A|R1],X) :-
  全角記号範囲(_コード下限,_コード上限),
  A >= _コード下限,A =< _コード上限,
  文字コードならびからスペースと記号を削除する(R1,X),!.
文字コードならびからスペースと記号を削除する([A|R1],X) :-
  半角記号範囲(_コード下限,_コード上限),
  A >= _コード下限,A =< _コード上限,
  文字コードならびからスペースと記号を削除する(R1,X),!.
文字コードならびからスペースと記号を削除する([A|R1],[A|R2]) :-
  文字コードならびからスペースと記号を削除する(R1,R2),!.

全角記号範囲(41376,41726).

半角記号範囲(32,47).
半角記号範囲(58,64).
半角記号範囲(91,96).
360デフォルトの名無しさん:2010/01/20(水) 17:45:16
>>358
使用言語:J

f=:-.&(ucp&',.?、。?')

a=:ucp'a,い、b?ろ?c.は。'
f a
aいbろcは
361デフォルトの名無しさん:2010/01/20(水) 18:02:12
>>358
使用言語:J

NB.f=:-.&(ucp&',.?、。?')間違えたので、訂正します。ucpの後ろの&はいりませんでした。

f=:-.&(ucp',.?、。?')

a=:ucp'a,い、b?ろ?c.は。'

f a
aいbろcは
362デフォルトの名無しさん:2010/01/20(水) 18:19:02
http://pc12.2ch.net/test/read.cgi/tech/1263824755/31
# [1] プログラミング実習
# [2] http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10397.txt
#
# 以下に示すプログラムは、リストを操作するプログラムの一部である。この
# プログラムに、リストの指定した位置(末尾以外)にノードを挿入する関数insert_nodeと、
# リストの指定した位置のノードを削除する関数delete_nodeを追加し、プログラムを完成させよ。
# insert_nodeは引数として挿入位置の情報(リストの何番目かという情報)とデータ(文字列)を受け取るものとする。
# また、挿入位置にもともとあったノードは、新しく挿入するノードの次の要素となるものとする。
# リストの先頭ノードとして挿入される場合も正しく動作するようにすること。
# delete_nodeは、引数として削除位置の情報を受け取る。リストの先頭のノード、
# 最後のノード、途中のノードが削除されたときにそれぞれ正しく動くようにすること。
# また、ノードが一個しかない場合も正しく動くようにすること。
363デフォルトの名無しさん:2010/01/20(水) 18:21:50
http://pc12.2ch.net/test/read.cgi/tech/1248012902/755
# 【 課題 】インターネット書店を作成せよ
#       <条件>
#       ・画面サイズ→VGAとする
#       ・書籍は5ジャンル150冊
#       ・1回の注文で5種類まで書籍を注文可能
#       ・書籍の値段は20円単位とし、書籍の値段は自由
#       ・書籍価格の合計金額の2%のポイントが与えられる。(ただし、ポイントは第一ジャンルは2倍、第二ジャンルは3倍になる)
#       ・注文終了後、注文確認画面で注文と支払い代金、獲得ポイントが確認できる。(支払い代金とは、注文図書の合計金額と消費税の和)
#       ・貯まったポイントを併用して支払いが可能(ポイントの価値は、1ポイント1円)
#       ・書籍の発送は電子メールの添付ファイルで行う(発送は出来なくてよい)
#       ・ソフトキーボードのみ使用可能
#
# 【 補足 】実用的な画面インタフェースでは取消機能が必要であるが、ここでは取消機能については
#       考えなくてよい。
#       また、ユーザーは正しい操作を行うものと仮定して良い。
364デフォルトの名無しさん:2010/01/20(水) 18:40:51
>>362>>351 と同じ問題でした。
365デフォルトの名無しさん:2010/01/20(水) 19:14:59
>>357
% Prolog (その一)

一個の自然数mをキーボード入力から読み取ってこのゲームをたとえば1000ゲーム
繰り返して、平均何回のコイントスで勝負がつくか、シュミレーションして求める(_平
均コイントス数) :-
  催促付き整数入力('A,Bが持つコイン数を入力してください :',M),
  このゲームをたとえば1000ゲーム繰り返して、平均何回のコイントスで勝負が
つくか(1,M,_無効ゲーム数,_平均コイントス数),!.

このゲームをたとえば1000ゲーム繰り返して、平均何回のコイントスで勝負がつく
か(M,_無効ゲーム数,_平均コイントス数) :-
  このゲーム(1,M,_有効コイントス総数,_無効ゲーム数),
  \+(_無効ゲーム数 = 1000),
  _平均コイントス数 is _有効コイントス総数 / (1000 - _無効ゲーム数).

このゲーム(N,_,0,0) :- N > 1000,!.
このゲーム(N,M,_コイントス総数,_無効ゲーム数) :-
  コイントスシミュレーション(1,M,M,_トス数),
  N2 is N + 1,
  このゲーム(N,_,_コイントス総数の二,_無効ゲーム数),
  _コイントス総数 is _コイントス総数の二 + _トス数,!.
このゲーム(N,M,_コイントス総数,_無効ゲーム数) :-
  N2 is N + 1,
  このゲーム(N,M,_コイントス総数,_無効ゲーム数の一),
  _無効ゲーム数 is _無効ゲーム数の一 + 1,!.
366デフォルトの名無しさん:2010/01/20(水) 19:18:39
>>357 改行位置を間違えたので書き直し。
% Prolog (その一)

一個の自然数mをキーボード入力から読み取ってこのゲームをたとえば1000ゲームを繰り返して、平均何回のコイントスで勝負がつくか、シュミレーションして求める(_平均コイントス数) :-
  催促付き整数入力('A,Bが持つコイン数を入力してください :',M),
  このゲームをたとえば1000ゲーム繰り返して、平均何回のコイントスで勝負がつくか(1,M,_無効ゲーム数,_平均コイントス数),!.

このゲームをたとえば1000ゲーム繰り返して、平均何回のコイントスで勝負がつくか(M,_無効ゲーム数,_平均コイントス数) :-
  このゲーム(1,M,_有効コイントス総数,_無効ゲーム数),
  \+(_無効ゲーム数 = 1000),
  _平均コイントス数 is _有効コイントス総数 / (1000 - _無効ゲーム数).

このゲーム(N,_,0,0) :- N > 1000,!.
このゲーム(N,M,_コイントス総数,_無効ゲーム数) :-
  コイントスシミュレーション(1,M,M,_トス数),
  N2 is N + 1,
  このゲーム(N,_,_コイントス総数の二,_無効ゲーム数),
  _コイントス総数 is _コイントス総数の二 + _トス数,!.
このゲーム(N,M,_コイントス総数,_無効ゲーム数) :-
  N2 is N + 1,
  このゲーム(N,M,_コイントス総数,_無効ゲーム数の一),
  _無効ゲーム数 is _無効ゲーム数の一 + 1,!.
367デフォルトの名無しさん:2010/01/20(水) 19:20:20
>>357
% Prolog (その二)

コイントスシミュレーション(N,_,_,_) :- N > 10000,!,fail.
コイントスシミュレーション(N,A,B,N) :- コイントスをくりかえして先に持ち点がなくなったほうが負け(A,B,_),!.
コイントスシミュレーション(N,A1,B1,X) :-
  コイントス(_表か裏か),
  表が出たらAからBへ、裏が出たらBからAへ、1点渡す(表,A1,B1,A2,B2),
  N2 is N + 1,
  コイントスシミュレーション(N,A2,B2,X),!.

表が出たらAからBへ、裏が出たらBからAへ、1点渡す(表,A1,B1,A2,B2) :- A2 is A1 -1,B2 is B1 + 1,!.
表が出たらAからBへ、裏が出たらBからAへ、1点渡す(裏,A1,B1,A2,B2) :- B2 is B1 -1,A2 is A1 + 1,!.

コイントスをくりかえして先に持ち点がなくなったほうが負け(0,_,'Aの負け').
コイントスをくりかえして先に持ち点がなくなったほうが負け(_,0,'Bの負け').

コイントス(_表か裏か) :- N is (random mod 2) + 1,list_nth(N,[表,裏],_表か裏か).
368デフォルトの名無しさん:2010/01/20(水) 19:59:07
>>351
% Prolog

'リストの指定した位置(末尾以外)にノードを挿入する'(_指定した位置,Node,_リスト,_挿入されたリスト) :-
  insert_node(_指定した位置,Node,_リスト,_挿入されたリスト).

insert_node(_,_,[],_) :- !,fail.
insert_node(0,Node,_リスト,[Node|_リスト]) :- !.
insert_node(_指定した位置,Node,[A|R1],[A|R2]) :-
  _指定した位置の一 is _指定した位置 - 1,
  insert_node(_指定した位置の一,Node,R1,R2).

リストの指定した位置のノードを削除する(_指定した位置,_リスト,_指定した位置のノードが削除されたリスト) :-
  delete_node(_指定した位置,_リスト,_指定した位置のノードが削除されたリスト).

delete_node(1,[_|R],R) :- !.
delete_node(_指定した位置,[A|R1],[A|R2]) :-
  _指定した位置の一 is _指定した位置 - 1,
  delete_node(_指定した位置の一,R1,R2).
369デフォルトの名無しさん:2010/01/20(水) 20:43:07
>>332
% Prolog

与えられた文字列の各文字を要素とする文字リストを作成し返す(_文字列,_各文字を要素とする文字リスト) :-
  make_clist(_文字列,_各文字を要素とする文字リスト).

make_clist(_文字列,_各文字を要素とする文字リスト) :-
  sub_atom(_文字列,_,_文字列の長さ,_,_文字列),
  make_clist(0,_文字列の長さ,_文字列,_各文字を要素とする文字リスト).

make_clist(N,N,_文字列,[]) :- !.
make_clist(N,_文字列の長さ,_文字列,[_文字|R]) :-
  sub_atom(_文字列,N,1,_,_文字),
  N2 is N + 1,
  make_clist(N2,_文字列の長さ,_文字列,R).

与えられた文字列の各文字を要素とする文字リストの内容を印字する(_文字リスト) :-
  print_clist(_文字リスト).

print_clist([]).
print_clist([_文字|R]) :-
  put_char(_文字),
  print_clist(R).
370デフォルトの名無しさん:2010/01/20(水) 22:14:25
>>333
% Prolog

'与えられた二つのリストに含まれる文字の並びを辞書式順序(※)で比較し、第一のリストの方が小さければ負の値、大きければ正の値、等しければ0を返す'(_文字リスト_1,_文字リスト_2,_返り値) :-
  compare(_文字リスト_1,_文字リスト_2,_返り値).

compare([],[],0).
compare([],[_|_],-1).
compare([_|_],[],1).
compare([A|_],[B|_],-1) :-
  char_code(A,CodeA),CodeA >= 65,CodeA =< 90,
  char_code(B,CodeB),CodeB >= 97,CodeB =< 122,
  CodeC is CodeB - 32,
  CodeC >= CodeA,!.
compare([A|_],[B|_],1) :-
  char_code(A,CodeA),CodeA >= 97,CodeA =< 122,
  char_code(B,CodeB),CodeB >= 65,CodeB =< 90,
  CodeC is CodeA - 32,
  CodeC =< CodeA,!.
compare([A|_],[B|_],-1) :- A @< B,!.
compare([A|_],[B|_],1) :- A @> B,!.
compare([A|R1],[A|R2],X) :-
  compare(R1,R2,X).
371デフォルトの名無しさん:2010/01/20(水) 22:36:28
>>334
% Prolog

'与えられた文字リストの先頭から見ていき、要素が"<"なら自身と(あれば)直前の要素を、">"なら自身と(あれば)直後の要素を取り除く'(_文字リスト,_編集された文字リスト) :-
  edit(_文字リスト,_編集された文字リスト).

edit([],[]).
edit([_,'<'|R1],R2) :- edit(R1,R2),!.
edit(['>',_|R1],R2) :- edit(R1,R2),!.
edit([A|R1],[A|R2]) :- edit(R1,R2).
372デフォルトの名無しさん:2010/01/20(水) 22:45:36
>>335
% Prolog の場合与えられたリストの変形(破壊代入)は使えない。

引数として三種のリストが与えられると、第一のリスト内に含まれる第二のリストに一致する部分を第三のリストに置き換える(_リスト_1,_リスト2,_リスト_3,L) :-
  replace(_リスト_1,_リスト_2,_リスト_3,L).

replace(L1,L2,L3,L) :-
  append(L0,L2,L4,L1),
  append(L0,L3,L4,L).
373デフォルトの名無しさん:2010/01/20(水) 22:58:22
>>336
% Prolog リストの変形では得られない点は同じ。

与えられた文字リスト中で複数回現れる文字を残して得られるリストを作成する(_文字リスト,_複数回現れる文字を残して得られるリスト) :-
  multiple(_文字リスト,_複数回現れる文字を残して得られるリスト).

multiple(_文字リスト,_複数回現れる文字を残して得られるリスト) :-
  findall(_文字,(append(L1,[_文字|L2],_文字リスト),\+(member(_文字,L1)),member(_文字,L2)),_複数回現れる文字を残して得られるリスト).
374デフォルトの名無しさん:2010/01/20(水) 23:01:33
http://pc12.2ch.net/test/read.cgi/tech/1263824755/33
# [1] プログラミング基礎実習
# [2] 文字列strを逆順に格納する関数("SEC"を受け取ったら"CES"とする)
# void rev_string(char str[]){ /*…*/ }
# を作成せよ。

375デフォルトの名無しさん:2010/01/21(木) 06:11:46
>>374
% Prolog 全然、説明的でない例

'文字列strを逆順に格納する'(_Str,Rstr) :-
  rev_string(Str,Rstr).

rev_string(Str,Rstr) :-
  sub_atom(Str,_,Len,_,Str),
  findall(Char,(for(0,N,Len-1),sub_atom(Str,_,1,N,Char)),L),
  concat_atom(L,Rstr).
376デフォルトの名無しさん:2010/01/21(木) 06:17:12
>>374
% Prolog ふつうは

'文字列strを逆順に格納する'(_Str,Rstr) :-
  rev_string(Str,Rstr).

rev_string(Str,Rstr) :-
  atom_chars(Str,Chars),
  rev_string(Chars,[],RChars),
  atom_chars(Rstr,RChars).

rev_string([],X,X).
rev_string([A|R],Y,X) :- rev_string(R,[A|Y],X).
377デフォルトの名無しさん:2010/01/21(木) 06:25:13
http://pc12.2ch.net/test/read.cgi/tech/1263824755/38
# 長くなったのでうpロダお借りしました。
#
# 問題1
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10399.txt
# コピーさせていただきました http://nojiriko.asia/data/10399.txt
378デフォルトの名無しさん:2010/01/21(木) 06:28:56
http://pc12.2ch.net/test/read.cgi/tech/1263824755/38
# [1] 授業単元:応用プログラミング
# [2] 問題文(含コード&リンク):
# 直方体のデータが格納されたファイルを取り扱うプログラムを実装したい。
# プログラムリスト中に必要な関数を実装し、プログラムを完成させよ。尚、プログラムは以下の前提条件(1)−(4)を満たすよう作成せよ。
# (1)新たに大域変数やクラス、クラス内のメンバ変数を宣言してはならない。
#(2)main関数を含む既存の関数、クラス内のメンバ変数は一切変更してはならない。
#(3)直方体のデータが一行毎に、直方体の名前、幅、奥行き、高さ、の順に、スペース区切りで格納されているファイルを読み込める。
#(4)最大20個分のデータを読み込める。
#(5)初めに読み込むファイル名を入力した後、読み込んだデータ数を表示する。
#(6)(5)の表示後、以下に示す操作が繰り返し実行可能であること。
#   操作方法と出力の詳細については、実行例を参考にすること。
#    (ア)データを読み込んだ順に表示する。
#    (イ)体積、もしくは表面積の大きい順に表示する。
#    (ウ)立方体、もしくは正四角柱のみを表示する。
#    (エ)直方体を1個指定し、3辺の長さ(幅、奥行き、高さ)を指定した倍率だけ伸縮する。
379デフォルトの名無しさん:2010/01/21(木) 07:01:07
昨日から悩んでいること。出題が
# 与えられた文字列の各文字を要素とする文字リストを作成し返す関数make_clistと、与えられた文字リスト
# の内容を印字する関数print_clistを作成せよ。
の場合、導入述語名は

'与えられた文字列の各文字を要素とする文字リストを作成し返す関数make_clistと、与えられた文字リストの内容を印字する関数print_clistを作成せよ'(_文字リスト_1,_文字リスト_2,_返り値) :-
  make_list(_文字リスト_1,_文字リスト_2,_返り値).

であるべきか、あるいは、>>370のように、
'与えられた二つのリストに含まれる文字の並びを辞書式順序(※)で比較し、第一のリストの方が小さければ負の値、大きければ正の値、等しければ0を返す'(_文字リスト_1,_文字リスト_2,_返り値) :-
  compare(_文字リスト_1,_文字リスト_2,_返り値).

とした方がよいか・・。 前の方の定義だと引数を持っていることが不自然かなと思い採用しなかった。
380デフォルトの名無しさん:2010/01/21(木) 13:02:50
>>379
二番目の定義が次の問題になってしまった。結果として意味不明。
make_clistがmake_listになってるところもあるし。>>379はなかったことにしてください。

381デフォルトの名無しさん:2010/01/22(金) 18:38:58
>>341
% Prolog

'異なる自然数p,qと、もう一つの自然数dを入力する。d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に表示し、最後にその個数を表示する' :-
  '異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d),
  findall(K,'d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,L),
  concat_atom(L,' ',S),
  write_formatted('%t\n',[S]),
  length(L,_その個数),
  write_formatted('合計で%t個あります\n',[_その個数]),!.

'異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d) :-
  get_line(Line),
  split(Line,[' '],[_p,_q,_d]),!.

'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,_kならび) :-
  findall(N,for(0,N,10),L1),
  findall(_k,(for(0,_k,_d),順列(L1,2,[_m,_n]),'d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k)),_kならび),!.

'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k) :-
  _k is _p * _m + _q * _n,
  _k =< _d,!.
382デフォルトの名無しさん:2010/01/22(金) 20:06:16
>>381 訂正
% Prolog

'異なる自然数p,qと、もう一つの自然数dを入力する。d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に表示し、最後にその個数を表示する' :-
  '異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d),
  'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,L),
  '表示し'(L),
  最後にその個数を表示する(L),!.

表示し(L) :-
  concat_atom(L,' ',S),
  write_formatted('%t\n',[S]),!.

最後にその個数を表示する(L) :-
  length(L,_その個数),
  write_formatted('合計で%t個あります\n',[_その個数]),!.

'異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d) :-
  get_line(Line),
  split(Line,[' '],[_p,_q,_d]),!.

'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,_kならび) :-
  findall(N,for(0,N,10),L1),
  findall(_k,(for(0,_k,_d),順列(L1,2,[_m,_n]),'d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k)),_kならび),!.

'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k) :-
  _k is _p * _m + _q * _n,
  _k =< _d,!.
383デフォルトの名無しさん:2010/01/22(金) 20:10:32
http://pc12.2ch.net/test/read.cgi/tech/1248012902/771
# 【 課題 】
# サーバとクライアントでの間で文字列を送り合うプログラムをつくれ。
# ただし、以下の条件を満たすようにすること。
# アドレス、ポート、名前、文字列はキーボード入力し、お互いに自由に指定できるようにする。
# クライアントで quit が入力された場合、クライアントは接続を切りプログラムを終了し、
# サーバは接続が切られたら、次のクライアントの接続を待つ
# サーバで quit が入力された場合、サーバは接続を切り、次のクライアントの接続を待ち、
# クライアントは接続が切られたらプログラムを終了する
# エンターキーのみが入力された場合は、文字列を送らずもう一度文字列を入力させて、
# その文字列を送るようにする。
384デフォルトの名無しさん:2010/01/22(金) 20:13:21
http://pc12.2ch.net/test/read.cgi/tech/1263824755/74
# [1] 授業単元:プロトタイプ宣言
# [2] 問題文(含コード&リンク):『私は○○です』と表示する関数を作成して
# main関数でそれを三回呼び出して、画面に三回出力プログラムを作成せよ。
# 表示のための関数の名前は『display_name』とせよ
#
385デフォルトの名無しさん:2010/01/22(金) 20:19:16
>>384
% Prolog programがmainにあたる。

display_name :-
  write('私は○○です\n').

program :-
  for(1,N,3),display_name,N=3,halt.
386デフォルトの名無しさん:2010/01/22(金) 21:09:18
>>384

このプログラムのドコが「説明を論理式で書き表すことができるならば、
その論理式がすなわちプログラムである」のだろうか。
387386:2010/01/22(金) 23:43:35
アンカミス
X:>>384 --> O:>>385
388デフォルトの名無しさん:2010/01/23(土) 03:44:26
http://pc12.2ch.net/test/read.cgi/tech/1263824755/77
# [1] 授業単元:プログラミング実習
# [2] 問題文:クラスタリングk-means法
# 1、初期値として、クラスタ数および初期のデータ分割を与える。
#  2、データ分割に基づき各分割の重心を求める。
#    さらに、重心と各事例データとの距離を求める
#  3、各事例を最も近いクラスタに割り当てる。
#  4、上記の割り当てが前回と同じであれば終了。
#    更新があれば2に戻る
389デフォルトの名無しさん:2010/01/23(土) 03:51:44
http://pc12.2ch.net/test/read.cgi/tech/1263824755/79
# [1] 授業単元:応用プログラミング
# [2] 問題文(含コード&リンク):
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10409.txt
#
# 直方体のデータが格納されたファイルを取り扱うプログラムを実装したい。
# プログラムリスト中に必要な関数を実装し、プログラムを完成させよ。尚、プログラムは以下の前提条件(1)−(4)を満たすよう作成せよ。
# (1)新たに大域変数やクラス、クラス内のメンバ変数を宣言してはならない。
# (2)main関数を含む既存の関数、クラス内のメンバ変数は一切変更してはならない。
# (3)直方体のデータが一行毎に、直方体の名前、幅、奥行き、高さ、の順に、スペース区切りで格納されているファイルを読み込める。
# (4)最大20個分のデータを読み込める。
# (5)初めに読み込むファイル名を入力した後、読み込んだデータ数を表示する。
# (6)(5)の表示後、以下に示す操作が繰り返し実行可能であること。
#   操作方法と出力の詳細については、実行例を参考にすること。
#    (ア)データを読み込んだ順に表示する。
#    (イ)体積、もしくは表面積の大きい順に表示する。
#    (ウ)立方体、もしくは正四角柱のみを表示する。
#    (エ)直方体を1個指定し、3辺の長さ(幅、奥行き、高さ)を指定した倍率だけ伸縮する。
390デフォルトの名無しさん:2010/01/23(土) 03:59:06
>>386 >>387

>>382 の方ではなくて? これは結構苦闘してる。
>>385 は「説明を論理式で書き表すことができるならば、その論理式がすなわちプログラムである」の
意識の全くないプログラムだけど。題意もつかめなかった。
391デフォルトの名無しさん:2010/01/23(土) 04:11:07
>>386

>>385
# prolog -e 私は○○です.pro
私の名前は○○です
#
と表示されるためには、mainではなく、述語名がprogramである必要が
あることを示すために書いたコードです。
392391:2010/01/23(土) 04:33:07
すみません。私の名前は○○ですを3回繰り返すのを忘れました。

393デフォルトの名無しさん:2010/01/23(土) 04:53:45
>>384
% Prolog この問題は編集を余儀なくされました。もっと素直な表現がありそう。

program :-
  『私は○○です』と画面に表示する関数display_nameを三回呼び出して出力する,
  終了.

『私は○○です』と画面に表示する関数display_nameを三回呼び出して出力する :-
  display_name,
  display_name,
  display_name.

display_name :- write('私は私は○○です\n').

終了 :- halt.
394デフォルトの名無しさん:2010/01/23(土) 05:00:40
--lua
function display_name()
print "私は私は○○です"
end
function main()
display_name()
display_name()
display_name()
end
main()
395デフォルトの名無しさん:2010/01/23(土) 05:01:31
>>379 でそれに関することを書きたかったのですが、
># [2] 問題文(含コード&リンク):『私は○○です』と表示する関数を作成して
># main関数でそれを三回呼び出して、画面に三回出力プログラムを作成せよ。
># 表示のための関数の名前は『display_name』とせよ

「関数を作成して」あたりを切り落としたくないのですが、述語名に取り込む
方法が今のところ見つからない。
396デフォルトの名無しさん:2010/01/23(土) 05:11:05
function display_name(name)
print("私は私は"..name.."です")
end
function main()
name=io.read()
display_name(name)
name=io.read()
display_name(name)
name=io.read()
display_name(name)
end
main()
397デフォルトの名無しさん:2010/01/23(土) 07:44:33
>>395 これではだめかいwww

program :-
  『私は○○です』と表示する関数を作成してmain関数でそれを三回呼び出して、画
面に三回出力プログラムを作成せよ .

『私は○○です』と表示する関数を作成してmain関数でそれを三回呼び出して、画面に
三回出力プログラムを作成せよ :-
  『私は○○です』と表示する関数を作成して ,
  main.

『私は○○です』と表示する関数を作成して :-
  assertz((display_name :- write('私は○○です\n'))).

main :- display_name,display_name,display_name.

398デフォルトの名無しさん:2010/01/23(土) 09:03:32
>>389 の http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10409.txt
には大量の実行例とデータが載っています。2レスに分けて掲載します。
# [実行例]
# ファイル名を入力して下さい => data.txt
# 5個のデータを読み込みました.
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 1
# No. Name Width Depth Height Volume Area
# [ 1] A 1 2 3 6 22
# [ 2] B 3 3 3 27 54
# [ 3] C 3 2 1 6 22
# [ 4] D 2 2 2 8 24
# [ 5] E 5 1 5 25 70
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 1
# 何順に整列しますか?(0:体積 1:表面積) => 0
# No. Name Width Depth Height Volume Area
# [ 2] B 3 3 3 27 54
# [ 5] E 5 1 5 25 70
# [ 4] D 2 2 2 8 24
# [ 1] A 1 2 3 6 22
# [ 3] C 3 2 1 6 22
399デフォルトの名無しさん:2010/01/23(土) 09:04:22
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 3
# 何を探索しますか?(0:体積 1:表面積) => 1
# No. Name Width Depth Height Volume Area
# [ 2] B 3 3 3 27 54
# [ 4] D 2 2 2 8 24
# [ 5] E 5 1 5 25 70
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 4
# どの直方体ですか?(1〜5) => 1
# 何倍しますか? => 1.5
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 1
# No. Name Width Depth Height Volume Area
# [ 1] A 1.5 3 4.5 20.25 49.5
# [ 2] B 3 3 3 27 54
# [ 3] C 3 2 1 6 22
# [ 4] D 2 2 2 8 24
# [ 5] E 5 1 5 25 70
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 0
# 終了します.
400デフォルトの名無しさん:2010/01/23(土) 09:06:12
# データファイル
# A 1 2 3
# B 3 3 3
# C 3 2 1
# D 2 2 2
# E 5 1 5
401デフォルトの名無しさん:2010/01/23(土) 09:08:27
>>384
使用言語:J

display_name=:[: smoutput '私は○○です。'"_
main=:display_name^:(3)

main ''
私は○○です。
私は○○です。
私は○○です。
402デフォルトの名無しさん:2010/01/23(土) 16:25:45
http://pc12.2ch.net/test/read.cgi/tech/1263824755/83
# [1]プログラミング演習(大学専門過程演習授業)
# [2] コマンドライン引数で与えられたテキストファイルを読み込み
# 空行でなければ、その行に含まれているスペース、タブを
# 除去したものを標準出力するプログラム。但し英数字と"_"で
# 構成される文字列同士の間には一つのスペースは残す。
# ",'で囲まれた部分に関してはスペース、タブはそのまま残す
# "で囲まれた部分について最後の文字が¥であってはならない。
# 'で囲まれた部分について最後の文字が¥であってはならない。
# (テキストファイルの空行と余計な空白/タブを除去する
# プログラムでクオテーションに配慮したもの)
403デフォルトの名無しさん:2010/01/23(土) 23:22:54
http://pc12.2ch.net/test/read.cgi/tech/1263824755/91
# [1] 授業単元:情報処理
# [2] 問題文:
#
# 問1 キーボードから3個の実数(整数でない)値を1行に1組として計5組入力し、
# ファイル(ファイル名data1.txt)に保存する。
#
# 問2
#  問1で作ったファイルから実数値を読み込み、総合計と各組の実数の平均を求める

# ただし、ファイルに書かれている組の数は不明とする。
404デフォルトの名無しさん:2010/01/24(日) 06:23:46
http://pc12.2ch.net/test/read.cgi/tech/1263824755/93
# [1] 授業単元:プロトタイプ宣言
# [2] 問題文(含コード&リンク):
# 次の式を以下の条件(値)に基づいて計算.表示するプログラムを作成せよ。ただし式は簡単化せずそのままプログラムすることとして、更に表示するときは計算の答えと合� 錣擦鴇魴�値)も表示して分かりやすくせよ。
#
# 計算する式
# {(a+b)c-a(b-c)}/{(c/b)a+abc-ca}
#
# 条件1
# a=3 b=4 c=2
# a=3 b=4.3 c=2.5
# a=32.6 b=57.82 c=2.543
#
# この問題を、
# 式の分だけを関数化した場合
# 式と出力部分を関数化した場合
# の2つの場合でプログラムを作成せよ
405デフォルトの名無しさん:2010/01/24(日) 06:24:41
http://pc12.2ch.net/test/read.cgi/tech/1263824755/94
# [1] C
# [2]
# 反復列 x_n+1=a*x_n(1-x_n),0<=a<=4,0<=x<=1
# に対して、x_nが1周期(不動点)、2周期、4周期、8周期、16周期
# をもつaの範囲について、プログラムを作成して確かめよ。
# ※
# ○周期というのはaがある値のとき、○個の解で振動するという意味です※
406デフォルトの名無しさん:2010/01/24(日) 06:28:27
http://pc12.2ch.net/test/read.cgi/tech/1263824755/95
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):http://ime.nu/www.acm-japan.org/past-icpc/domestic2008/problems/all_ja.html
#
# 等しい合計点
#
# 太郎と花子はそれぞれカードを何枚か持っている.各カードには点数が書かれている.
# 太郎のカードと花子のカードを 1 枚ずつ交換して,それぞれの持つカードの合計点数が等しくなるようにしたい.
# どのカードとどのカードを交換したらよいか.
#
# ただし,カードを交換しなくても合計点数が等しい場合でも,必ずカードの交換を行うものとする.
407デフォルトの名無しさん:2010/01/24(日) 07:02:19
http://pc12.2ch.net/test/read.cgi/tech/1248012902/778
# 【 課題 】1.任意のWEBページからhttp://ime.nu/で始まるハイパーリンクを抽出するプログラムの作成
# http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/901.java
# 2.任意のWEBページ10ページに含まれる単語のうち,上位10位の単語リストとその出現頻度
# http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/903.java
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 GUI  】制限なし
# 【 期限 】1/25
# 【 Ver  】1.6.0_14
# 【 補足 】1.に関してはプログラムはあっていると思うのですがなぜか実行
#       できないので、実行できたら結果をコピペで教えてもらえたら嬉しいです
#       2.に関しては実行結果があるのですが、上から多い順に並んでいます
#       プログラムのどの部分でその並べ替えを行っているのか、またどんな
#       アルゴリズムを用いて並べ替えているのかを教えてもらえたら嬉しいです
408デフォルトの名無しさん:2010/01/24(日) 12:47:28
http://pc12.2ch.net/test/read.cgi/tech/1263824755/102
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10419.zip
#
# ●問2.リストの一部を取り除く関数
#
#  与えられた文字リストの先頭から見ていき、要素が'<'なら自身と(あれば)直前の要素を、'>'なら自身
# と(あれば)直後の要素を取り除く関数editを作成せよ。
#  editは与えられたリスト自体を変形し、変形後のリストを返す。
#
# ●問3.いずれか一方のリストに含まれる要素からなるリストを返す関数
#
#  引数として二種の文字リストが与えられると、いずれか一方のリストにのみ含まれる 要素を持つリストを新たに作成し返す関数exclusiveを作成せよ。
#
409デフォルトの名無しさん:2010/01/24(日) 16:43:52
>>408 問2
使用言語:J

edit=:monad define
r=.y#~-.(+._1&|.)(<'>')=y
r#~-.(+.1&|.)(<'<')=r
)

]C=:;/'a<bcd>ef>ghi'
+-+-+-+-+-+-+-+-+-+-+-+-+
|a|<|b|c|d|>|e|f|>|g|h|i|
+-+-+-+-+-+-+-+-+-+-+-+-+
edit C
+-+-+-+-+-+-+
|b|c|d|f|h|i|
+-+-+-+-+-+-+
410デフォルトの名無しさん:2010/01/24(日) 16:50:03
>>408 問3
使用言語:J

exclusive=:dyad def '(x -. y) , y -. x'

]A=:;/'abcdef'
+-+-+-+-+-+-+
|a|b|c|d|e|f|
+-+-+-+-+-+-+

]B=:;/'defghi'
+-+-+-+-+-+-+
|d|e|f|g|h|i|
+-+-+-+-+-+-+

A exclusive B
+-+-+-+-+-+-+
|a|b|c|g|h|i|
+-+-+-+-+-+-+
411デフォルトの名無しさん:2010/01/24(日) 20:46:43
http://pc12.2ch.net/test/read.cgi/tech/1263824755/103
# [1] 授業単元:Cプログラミング演習2
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt
# (1) 指定した10 個の整数のうち,指定した数で割り切れる整数の個数を求めるプログラムを作成せよ.
# 以下の関数を利用すること.
# int div_enable(int *in, int num, int divisor)
# in 複数の整数値が格納された配列の(先頭)ポインタ
# num 入力値の数
# divisor 割り切れるかどうかの判定に使う除数
# 戻り値 入力値のうち, divisor で割り切れる整数の数
# 入力に関して
# キーボードから整数(被除数用)をスペース1つずつ空けて10 個入力して改行する.次に除数用
# の自然数を1 つ入力し,改行する.この一連の入力時,例題や解答例のような入力を促す文字
# 等は決して表示しないこと.
# 出力に関して
# 割り切れる整数の個数を数値のみ (+改行)を出力する.指定した数値・改行以外の文字等の出
# 力は一切行わないこと.
412デフォルトの名無しさん:2010/01/24(日) 21:21:01
>>411
使用言語:J

div_enable=: dyad def '+/0=x|y'

]in=:>:i.10
1 2 3 4 5 6 7 8 9 10

3 div_enable in
3
413デフォルトの名無しさん:2010/01/25(月) 05:35:28
http://pc12.2ch.net/test/read.cgi/tech/1263824755/103
# [1] 授業単元:Cプログラミング演習2
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt
# (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デフォルトの名無しさん:2010/01/25(月) 05:37:43
http://pc12.2ch.net/test/read.cgi/tech/1263824755/103
# [1] 授業単元:Cプログラミング演習2
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt
#
# (3) 平均値と中央値を求める関数を作成し,その関数を使用して平均値と中央値を出力するプログラム
# を作成せよ.関数は下記の通りとする.
# int median(int *in, int num)
# in 複数の整数値が格納された配列の(先頭)ポインタ
# num 入力値の数
# 戻り値 中央値
# int avg (int *in, int num)
# in 複数の整数値が格納された配列の(先頭)ポインタ
# num 入力値の数
# 戻り値 平均値(四捨五入した整数値, 負の場合丸め方は任意)
# 入力に関して
# キーボードから入力する整数の個数を入力し(最大で128 に対応すること)改行する.次に指
# 定した数の整数をスペース1つずつ開けて1行で入力し,改行する.この一連の入力時,例題
# や解答例のような入力を促す文字等は決して表示しないこと.
# 出力に関して
# 中央値 平均値(+改行)のみ出力.中央値と平均値の間はスペースを1 つ入れること.指定した
# 数値・改行以外の文字等の出力は一切行わないこと.
415デフォルトの名無しさん:2010/01/25(月) 06:03:31
http://pc12.2ch.net/test/read.cgi/tech/1263824755/104
#
# 課題1 20 桁までの自然数の足し算と掛け算を浮動小数点演算を用いないで実施するプログラムlongcomp.c を
# 作成し、C のソースコードを提出しなさい。足し算は必須課題、掛け算はオプション課題です。
# 実行形式をlongcomp とした動作仕様は以下である1
# >./longcomp 12345678901234567890 + 12345678901234567890
# >12345678901234567890 + 12345678901234567890 = 24691357802469135780
# >./longcomp 1234567890 * 1234567890
# >1234567890 * 1234567890 = 1524157875019052100
416デフォルトの名無しさん:2010/01/25(月) 06:05:44
http://pc12.2ch.net/test/read.cgi/tech/1263824755/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デフォルトの名無しさん:2010/01/25(月) 06:14:47
http://pc12.2ch.net/test/read.cgi/tech/1263824755/124
# [1] 授業単元: Cプログラミング入門
# [2] 問題文(含コード&リンク): 入力された2つの文字列(日本語その他バイト文字は不可)
# を比較するプログラムを作成せよ。ただし、大文字小文字の違いは無視。単語間に連続して
# スペース・タブが複数入っていても単独のスペースとしない。
#
# [5] その他の制限: 文字列とポインタまでやってます。
# 入力に関して、キーボードから1つ目の文字列を1行で入力し、改行する。
# この時、入力を促す文字は一切表示しない。入力文字数は128文字まで。
# 出力に関して、一致すれば何も表示しない。不一致の場合は最初に不一致となる
# 入力1の文字と入力2の文字(1文字+スペース+1文字+改行)を表示する。
# どちらかが末端の場合は代わりにスペースで埋める。
418デフォルトの名無しさん:2010/01/25(月) 06:22:12
http://pc12.2ch.net/test/read.cgi/tech/1263824755/135
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10408.txt
#
# (1)複数の整数を平均値に近い順にソートするプログラムを作成せよ。
# 平均値は切り捨てして整数値で求めるものとし、平均値との距離が等しい
# 場合は値の小さな整数が優先されるものとする。
#
# 入力に関して

# キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行。
# 次に指定した数の整数をスペース1つ開けて1行で入力し、改行する。
# この時、入力を促す文字は一切表示しないこと。
# 出力に関して
# ソートした整数をスペース1つのみあけて1行で出力する(+改行)。指定した数改行
# 以外の出力は一切行わないこと。
419デフォルトの名無しさん:2010/01/25(月) 07:12:24
http://pc12.2ch.net/test/read.cgi/tech/1263824755/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/25(月) 15:28:46
http://pc12.2ch.net/test/read.cgi/tech/1263824755/143
# [1] データ構造とプログラミング
# [2]
# 演習問題4.5 逆ポーランド記法による入力文字列(空白で区切られている)に対して

# 16進数と10進数で答えを返すプログラムrpnを作りなさい。
# (入力例)rpn 5 2 + 7 *
# (出力例)0x31, 49(decimal)
#
423デフォルトの名無しさん:2010/01/25(月) 17:57:56
http://pc12.2ch.net/test/read.cgi/tech/1263824755/147
# [1] 授業単元: C++
# [2] 問題文(含コード&リンク):
# 2.
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10439.txt
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10436.txt
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10437.txt
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10438.txt
# http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10436.txt
↑pm1.txt
# http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10437.txt
# ↑pm2.txt
# http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10438.txt
# ↑pm3.txt
# というファイルがある。
# plus で始まる行の数値を足し,minus で始まる行の数値を引く。
# ファイルの最後まで計算した結果を表示するプログラムを作成せよ。
# データの数は実行前にはわからないものとする。
424デフォルトの名無しさん:2010/01/25(月) 18:07:11
http://pc12.2ch.net/test/read.cgi/tech/1263824755/154
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):http://ime.nu/www.acm-japan.org/past-icpc/domestic2008/problems/all_ja.html
# 等しい合計点
#
# 太郎と花子はそれぞれカードを何枚か持っている.
# 各カードには点数が書かれている.太郎のカードと花子のカードを 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デフォルトの名無しさん:2010/01/25(月) 19:04:37
>>423
使用言語:J

plus =:+
minus=:-
f=:monad def '+/".;._2(1!:1)y'

f <'pm3.txt'
_316
426デフォルトの名無しさん:2010/01/25(月) 20:18:00
http://pc12.2ch.net/test/read.cgi/tech/1263824755/161
# [1] 授業単元: プログラミング演習(木構造と数式処理)
# [2] 問題文(含コード&リンク):
#
# 累乗の計算の逆を行うプログラムを作ってください。
#
# 例
# x*x*xと入力されればx^3と画面に出力する。
#
# x*x*x*aなどの場合はx^3*aと出力されればよい。
#
427デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/26(火) 01:18:57
http://pc12.2ch.net/test/read.cgi/tech/1263824755/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デフォルトの名無しさん:2010/01/26(火) 01:21:28
>>429
ごめんなさい。>>416に既出でした。
431デフォルトの名無しさん:2010/01/26(火) 01:39:43
http://pc12.2ch.net/test/read.cgi/tech/1263824755/174
# [1] データ構造とプログラミング
# [2]
# リングバッファを使って、9個のキューを作り、データを追加したり、
# データを取り出すプログラムを完成させなさい。
# 以下の添付にあるプログラムを完成させろという課題です。
# http://ime.nu/www.geocities.jp/pegasus_violet/en5-2.pdf
# 演習問題5.2 リングバッファを使って、9 個のキュー(配列は10 元)を作り、
# データを追加したり(EnQue), データを取り出す(DeQue) プログラムを
# 完成させなさい29。プログラムの動作仕様は以下のようである。
# 1. 数字を入力するとキューが伸びる
# 2. d(deque) を入力するとfront を標準出力に出力
# 3. s(show) を入力するとキューを表示
# 4. キューがいっぱいだったらエラーメッセージを出す
# 5. q で終了

432デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/26(火) 06:04:00
>>433 (>>432) 訂正
% Prolog 訂正するのを忘れていた。

出力する([],_) :- !.
出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット),出力する(R,_表示フォーマット).

434デフォルトの名無しさん:2010/01/26(火) 07:16:12
>>374
使用言語:J

rev_string=: ,~/

rev_string 'SEC'
CES


|. 'SEC'
CES
435デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/26(火) 08:14:42
>>436
# 平均値との距離が等しい場合は値の小さな整数が優先されるものとする。

この判断が漏れている。
438デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/26(火) 10:43:20
すみません。行末あたりに一文字何かが入ってしまったようで改行の制御が
正しくできませんでした。
http://nojiriko.asia/prolog/c134_135.html
に仕上げて書いておきます。
441デフォルトの名無しさん:2010/01/26(火) 11:06:53
http://pc12.2ch.net/test/read.cgi/tech/1263824755/189
# [1] データ構造とプログラミング
# [2]
# ツリーにノードを追加するプログラムを完成させなさい。またプログラム中 に使われている要素 mitsugi, emura, satou, yonemura, murai, nakamura, kwkt がツリー上でどのように配置され ているか書きなさい。
# 以下の添付にあるプログラムを完成させろという課題です。
# http://ime.nu/www.geocities.jp/pegasus_violet/en9-5.pdf
442デフォルトの名無しさん:2010/01/26(火) 16:43:14
http://pc12.2ch.net/test/read.cgi/tech/1263824755/193
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク):[3〜6]∫x^2 dx(これだと正解は63)を計算するプログラムを作成せよ。
# 尚、積分本体(始点と終点)と関数本体f(x)に分けること。dx=1/N N=(10,1000…10000)誤差評価を行う事。積分範囲を変更すること。x^2の関数を変更すること。
#
443デフォルトの名無しさん:2010/01/26(火) 16:44:31
http://pc12.2ch.net/test/read.cgi/tech/1263824755/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デフォルトの名無しさん:2010/01/26(火) 17:33:48
http://pc12.2ch.net/test/read.cgi/tech/1263824755/200
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):
# A組、B組、C組にそれぞれn人の生徒がいて、
# A組の生徒が一列に並んでいる。
# このとき、B組の生徒をA組の生徒の隣に並ばせたいが
# なるべく隣同士で身長に差がないようにしたい。
# どうやって計算すればいいでしょう?
# 加えて、C組の生徒もB組の隣に並ばせたい場合はどうすれば?
# (身長の配列) double height_a[n], height_b[n], height_c[n];
445デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/26(火) 19:24:07
http://pc12.2ch.net/test/read.cgi/tech/1262163854/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/27(水) 02:28:09
http://pc12.2ch.net/test/read.cgi/tech/1263824755/233
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク): 入力された数字が偶数なら、trueを返す関数。それ以外ならfalse
450デフォルトの名無しさん:2010/01/27(水) 02:30:31
http://pc12.2ch.net/test/read.cgi/tech/1263824755/232
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク): 得点を入力して以下のルールに従った成績を返す関数を実装せよ。
# 90点以上 S
# 80点以上 A
# 60点以上 B
# それ未満 C
451デフォルトの名無しさん:2010/01/27(水) 02:41:54
>>449
% Prolog

入力された数字が偶数なら、trueを返す :-
  get_integer(N),
  入力された数字が偶数なら、trueを返す(N).

入力された数字が偶数なら、trueを返す(N) :- 0 is N mod 2.
452デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/27(水) 02:58:21
>>450
% Prolog

得点を入力して以下のルールに従った成績を返す(_成績) :-
  get_integer(_得点),
  得点を入力して以下のルールに従った成績を返す(_得点,_成績).

得点を入力して以下のルールに従った成績を返す(_得点,_成績) :-
  以下のルール(_得点,_,_成績).

以下のルール(_得点,'90点以上','S') :- _得点 >= 90,!.
以下のルール(_得点,'80点以上','A') :- _得点 >= 80,!.
以下のルール(_得点,'60点以上','B') :- _得点 >= 60,!.
以下のルール(_得点,'それ未満','C') :- _得点 < 60,!.
455デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/27(水) 06:29:40
>>456 訂正 成績がひとつ落ちた

'得点がそれ未満のはC' -> '得点がそれ未満の成績はC'
458デフォルトの名無しさん:2010/01/27(水) 13:39:12
>>449
使用言語:Io

Number even:=method(self % 2 == 0)

Io> 23 even
==> false
Io> 24 even
==> true
459デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/27(水) 17:34:13
>>449
使用言語:J

even=: 0=2&|

even 23
0
even 24
1
461デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/27(水) 17:56:26
http://pc12.2ch.net/test/read.cgi/tech/1263824755/245
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):
# キーボードから正の整数nを入力し、n!を計算して画面表示するプログラムを
# 作成せよ。ただし、階乗を計算する関数のプロトタイプを「void kaiyo(int , int *)」
# とし、第1引数にnを、第2引数に計算結果を格納する変数のポインタを指定すること。
#
463デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/27(水) 20:16:34
>>464
書き忘れましたが、使用言語は maxima です。
466デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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]),!.
470469:2010/01/28(木) 05:16:26
ついでに言うとこれは説明不能ww ということは、
重リストを使ったキュー操作はあまり推奨できるプログラムではないのかも。
471デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/28(木) 15:26:00
>>449
使用言語:tcl

% proc even {n} {expr $n%2==0}
% even 23
0
% even 24
1
476デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/28(木) 18:09:44
>>449
使用言語:R

> even <- function(n){n%%2==0}

> even(23)
[1] FALSE

> even(24)
[1] TRUE
480デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/01/28(木) 22:51:35
http://pc12.2ch.net/test/read.cgi/tech/1263824755/296
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 10個の要素を持つ動的な整数配列を作るプログラムを作成しなさい。
# 動的な配列へのポインタを整数ポインタに代入しなさい。
# 次に、ポインタ算術または配列の添字を使って、1から10までの値を配列を構成する整数に代入しなさい。
# 最後に、代入した値を表示し、メモリを解放しなさい。
#
482デフォルトの名無しさん:2010/01/28(木) 22:53:22
http://pc12.2ch.net/test/read.cgi/tech/1263824755/299
# [1] 授業単元:コンピュータリテラシー
# [2] 問題文(含コード&リンク):
# あるファイルの名簿を呼びだし、名前もしくは名字で検索しその結果を新しいファイルに保存する。あるファイルの名簿は特に決められていない。
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10456.txt
483デフォルトの名無しさん:2010/01/28(木) 22:57:40
http://pc12.2ch.net/test/read.cgi/tech/1263824755/307
# [1] Cプログラミング入門:
# [2] http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10460.txt
# 次のプログラムを作成し二つのファイルを提出せよ。
# 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デフォルトの名無しさん:2010/01/28(木) 22:59:38
http://pc12.2ch.net/test/read.cgi/tech/1263824755/309
# [1] C言語プログラミング演習(大学任意科目)
# [2] コマンドラインで指定された各テキストファイルに対して個別に以下の処理を行うCプログラムを作成
# ☆テキストファイルを通読し、各行のインデント深度の最大値を求める(それをNとおく)
# ☆テキストファイルの先頭から再度読み出し、それぞれの行についてインデント深度がnなら
# ば、インデント深度をN-nに変更したものを標準出力する。
# ☆新しいテキストファイルのNが判明した時点で、その改行とファイル名、改行を標準出力する。
# ここでインデント深度とは、行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合
# 深度=nとする。
485デフォルトの名無しさん:2010/01/28(木) 23:04:35
http://pc12.2ch.net/test/read.cgi/tech/1263824755/315
# [1] 授業単元:プログラミング応用
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10461.txt
#
# ■問題1
#  pnm(pbm, pgm, ppm)フォーマット画像ファイルを読み込み、
#  左右を反転させた画像をpnmフォーマット画像ファイルとして
#  保存するプログラムを作成せよ.
#
# ■問題2
#  256(横)×256(縦)の画素数をもつpgmフォーマット画像の階調度を
#  7段階(128階調,64階調,32階調,16階調,8階調,4階調,2階調)で変換し,
#  各階調に変換したときの画像(7枚)をpgmフォーマット画像として
#  保存するプログラムを作成せよ.
#
# ※問題1,2共に、アスキー形式とバイナリー形式のpnmフォーマット画像を
#  処理できるプログラムとすること
486デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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デフォルトの名無しさん:2010/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).
492デフォルトの名無しさん:2010/01/29(金) 09:40:48
>>488->>491 全部に間違いがありました。
今夕までに
http://nojiriko.asia/prolog/c134_370_1.html から
http://nojiriko.asia/prolog/c134_370_4.html までに
訂正分を書き込んで置きます。
493デフォルトの名無しさん:2010/01/29(金) 10:43:20
>>483
% Prolog 4:

'配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,[],[]) :- !.
'配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,[N|R1],[[N,Count]|R2]) :-
  count(member(N,COM),Count),
  '配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,R1,R2).

count([],0) :- !.
count([_|R],Count) :- count(R,Count1),Count is Count1 + 1,!.
count(P,Count) :- findsum(1,P,Count).
494デフォルトの名無しさん:2010/01/29(金) 10:49:26
>>483
% Prolog 4: どうやら、Countとは含まれる総数のことらしい。それで・・

'4:配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,MAN,Count) :-
  '配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,MAN,L),
  findsum(M,member([_,M],L),Count),!.
495デフォルトの名無しさん:2010/01/29(金) 12:14:39
http://pc12.2ch.net/test/read.cgi/tech/1197620454/580
# 下記のプログラムを関数を用いて実行したいのですが、どのようにすれば良いでしょうか?
# 回答(できたら簡単な解説)の明記をお願いします。
#
# 問題1:入力したプログラムから以下のように出力するプログラムを作成する。
# (実行結果例)
# 文字列を入力: 今日は、晴れです。
#
# 今日は、晴れです。
# 日 す
# は で
# 、 れ
# 晴 晴
# れ 、
# で は
# す 日
# 。すでれ晴、は日今
#
496デフォルトの名無しさん:2010/01/29(金) 12:16:06
http://pc12.2ch.net/test/read.cgi/tech/1197620454/580
# 問題2:ファイル入力した漢字データ(全角)を読み込み、行数を数えながら逆から表示するプログラム。
# (実行結果例)
# (例として次のような C:\test2.txtを入力する)
# 今日は、晴れです。昨日は、雨で
# した。明日は、曇でしょう。明後
# 日は、快晴でしょうか。 ←の文章を以下のようなプログラムにする。
#
# ファイル名を入力してください:C:\test2.txt
#
# 1:で雨、は日昨。すでれ晴、は日今
# 2:後明。うょしで曇、は日明。した
# 3:。かうょしで晴快、は日
#
497デフォルトの名無しさん:2010/01/29(金) 12:17:44
http://pc12.2ch.net/test/read.cgi/tech/1197620454/581
# 問題3:ファイルのデータ(英文)を読み込み、一行毎の文字数(スペースも含む)
とワード数を数えるプログラム。
# (実行結果例)
# (例として次のような C:\test3.txtを入力する)
# And friends just can't be found
# Like a bridge over troubled water
# I will lay me down ←の文章を以下のようなプログラムにする。
#
# ファイル名を入力してください:C:\test3.txt
# 1:And friends just can't be found
# ⇒31文字、6ワード
# 2:Like a bridge over troubled water
# ⇒33文字、6ワード
# 3:I will lay me down
# ⇒18文字、5ワード
#

498デフォルトの名無しさん:2010/01/29(金) 12:19:00
http://pc12.2ch.net/test/read.cgi/tech/1197620454/581
# 問題4:1月1日が金曜日の平年(たとえば2010年)について、月日の入力データから、曜日を求めるプログラム。
# (実行結果例)
# 月を入力してください:9
# 日を入力してください:15
# 9月15日は、水曜日です。
#
# 以上4問です。どうか回答よろしくお願い致します
499デフォルトの名無しさん:2010/01/29(金) 12:32:53
http://pc11.2ch.net/test/read.cgi/db/1252492296/471
# 【質問テンプレ】
# ・DBMS名とバージョン: SQLite 3
# ・テーブルデータ:長いため下記に記載
# ・欲しい結果:RSSリーダ(brief)のデータ(*.sqlite)から特定の記事データを削除したいです。
# ・説明:長いため下記に記載
#
# ●テーブルデータ
# =======================================================================================================================
# ■entries
#  | id | feedID | primaryHash | secondaryHash | providerID | entryURL | date | read | updated | starred | deleted | bookmarkID |
# -----------------------------------------------------------------------------------------------------------------------
# ■entries_text
#  | title | content | authors | tags |
# -----------------------------------------------------------------------------------------------------------------------
# ■entries_text_content
#  | docid | c0title | c1content | c2authors | c3tags |
# -----------------------------------------------------------------------------------------------------------------------
# ■sqlite_sequence
#  | name | seq |
# =======================================================================================================================
500デフォルトの名無しさん:2010/01/29(金) 12:34:45
http://pc11.2ch.net/test/read.cgi/db/1252492296/472
# 1.【entries】テーブルの[deleted]フィールドが「 2 」の場合に、そのレコードを削除。
#
# 2.同時に、【entries_text_content】テーブルの[docid]フィールドが、1.で削除した
#   [id]フィールドと同じ値のレコードも削除。
#
# 3.更に同時に、【entries_textテーブル】から、1.で削除した[idフィールド]の値(数字)と
#   同じレコード番号のレコードを削除。 ※idフィールドがない為
#
# 4.その後、下記のフィールドの値を、1・2・3〜とリナンバリングしたい。
#   【entries】テーブルの[id]フィールド
#   【entries_text_content】テーブルの[docid]フィールド
#
# 5.そして、1.2.3.の三つのテーブルのレコード数がどれも同じ数だけあるか確認。
#
# 6.最後に、【sqlite_sequence】テーブルの[seq]フィールドに5.で確認したレコード数を
#   設定したい。
501デフォルトの名無しさん:2010/01/29(金) 13:11:44
>>483
% Prolog 5:

'配列 COM,MAN の全要素,変数 count をresult.out に書き込め'(COM,MAN,Count) :-
  tell('result.out'),
  write_formatted('%q.\n',['COM'=COM]),
  write_formatted('%q.\n',['MAN'=MAN]),
  write_formatted('%q.\n',['Count'=Count]),
  told.
502デフォルトの名無しさん:2010/01/29(金) 15:40:12
>>12
% Prolog
http://nojiriko.asia/prolog/ml6_12.html

ゲームとして成立していない。「実例で学ぶゲームAIプログラミング」を
これから買って研究してみます。
503デフォルトの名無しさん:2010/01/29(金) 15:56:43
>>502
ゲームはロジックの間に挿入される副作用に値打ちがあるのだから、
述語構成は

r(Z) :- 停止条件(Z),!.
r(X).
r(X) :- filter(X,Y),r(Y).

のステッパ型パターンが望ましいのかな。実際には、
u(X) :- r(X),_副作用,fail.
といった副作用述語が並ぶことになる。
504デフォルトの名無しさん:2010/01/29(金) 18:04:23
>>495
% Prolog
問題1 :-
文字ならびの取得(Chars),
  取得したならびの反転(Chars,Chars2),
第一文字と最終文字を除外(Chars,L2),
第一文字と最終文字を除外したならびの反転(L2,L3),
第一行目の印字(Chars),
第二行目以降の印字(L2,L3),
最終行の印字(Chars2),!.

文字ならびの取得(Chars) :- get_chars(Chars).

取得したならびの反転(Chars,Chars2) :- reverse(Chars,Chars2),!.

第一文字と最終文字を除外(Chars,L2) :- append([_],L2,[_],Chars),!.

第一文字と最終文字を除外したならびの反転(L2,L3) :- reverse(L2,L3),!.

第一行目の表示(L) :- ならびの文字表示(L),nl,!.

第二行目以降の表示(L2,L3) :- 転置([L1,L3],L4),ならびの行表示(L4),!.

最終行の印字(L3) :- ならびの文字表示(L),nl,!.

ならびの行表示([]) :- write('\n'),!.
ならびの行表示([A|R]) :- write_formatted('%t\n',[A]),ならびの行表示(R).
505デフォルトの名無しさん:2010/01/29(金) 18:06:47
>>504 (>>495) 書き直し
% Prolog インデントしてないところがあって読みにくいから書き直し。
問題1 :-
文字ならびの取得(Chars),
  取得したならびの反転(Chars,Chars2),
  第一文字と最終文字を除外(Chars,L2),
  第一文字と最終文字を除外したならびの反転(L2,L3),
  第一行目の印字(Chars),
  第二行目以降の印字(L2,L3),
  最終行の印字(Chars2),!.

文字ならびの取得(Chars) :- get_chars(Chars).

取得したならびの反転(Chars,Chars2) :- reverse(Chars,Chars2),!.

第一文字と最終文字を除外(Chars,L2) :- append([_],L2,[_],Chars),!.

第一文字と最終文字を除外したならびの反転(L2,L3) :- reverse(L2,L3),!.

第一行目の表示(L) :- ならびの文字表示(L),nl,!.

第二行目以降の表示(L2,L3) :- 転置([L1,L3],L4),ならびの行表示(L4),!.

最終行の印字(L3) :- ならびの文字表示(L),nl,!.

ならびの行表示([]) :- write('\n'),!.
ならびの行表示([A|R]) :- write_formatted('%t\n',[A]),ならびの行表示(R).
506デフォルトの名無しさん:2010/01/29(金) 18:14:50
>>505 (>>495) もう一度すみません。
% Prolog
問題1 :-
  文字ならびの取得(Chars),
  取得したならびの反転(Chars,Chars2),
  第一文字と最終文字を除外(Chars,L2),
  第一文字と最終文字を除外したならびの反転(L2,L3),
  第一行目の表示(Chars),
  第二行目以降の表示(L2,L3),
  最終行の表示(Chars2),!.

文字ならびの取得(Chars) :- get_chars(Chars).

取得したならびの反転(Chars,Chars2) :- reverse(Chars,Chars2),!.

第一文字と最終文字を除外(Chars,L2) :- append([_],L2,[_],Chars),!.

第一文字と最終文字を除外したならびの反転(L2,L3) :- reverse(L2,L3),!.

第一行目の表示(L) :- ならびの文字表示(L),nl,!.

第二行目以降の表示(L2,L3) :- 転置([L1,L3],L4),ならびの行表示(L4),!.

最終行の表示(L3) :- ならびの文字表示(L),nl,!.

ならびの行表示([]) :- write('\n'),!.
ならびの行表示([A|R]) :- write_formatted('%t\n',[A]),ならびの行表示(R).
507デフォルトの名無しさん:2010/01/29(金) 18:42:01
>>496
% Prolog

ファイル入力した漢字データ(全角)を読み込み、行数を数えながら逆から表示する(_ファイル名) :-
  ファイル入力した漢字データ(全角)を読み込み(_ファイル名,Lines),
  行数を数えながら逆から表示する(Lines),!.

ファイル入力した漢字データ(全角)を読み込み(_ファイル名,Lines) :-
  get_lines(_ファイル名,Lines).

行数を数えながら逆から表示する(Lines) :-
  行数を数えながら逆から表示する(1,Lines).

行数を数えながら逆から表示する(_,[]) :- !.
行数を数えながら逆から表示する(N,[_行|R]) :-
  文字列の反転(_行,_反転した行),
  write_formatted('%t:%t\n',[N,_反転した行]),
  N2 is N + 1,
  行数を数えながら逆から表示する(N2,R).

文字列の反転(_文字列,_反転した文字列) :-
  atom_chars(_文字列,_文字ならび),
  reverse(_文字ならび,_反転した文字ならび),
  atom_chars(_反転した文字列,_反転した文字ならび).
508デフォルトの名無しさん:2010/01/29(金) 18:56:47
>>497
% Prolog

'ファイルのデータ(英文)を読み込み、一行毎の文字数(スペースも含む)とワード数を数える'(_ファイル名) :-
  'ファイルのデータ(英文)を読み込み'(_ファイル名,Lines),
  '一行毎の文字数(スペースも含む)とワード数を数えて表示する'(Lines).

'ファイルのデータ(英文)を読み込み'(_ファイル名,Lines) :- get_lines(_ファイル名,lines).

'一行毎の文字数(スペースも含む)とワード数を数えて表示する'(Lines) :-
  '一行毎の文字数(スペースも含む)とワード数を数えて表示する'(1,Lines).

'一行毎の文字数(スペースも含む)とワード数を数えて表示する'(_,[]) :- !.
'一行毎の文字数(スペースも含む)とワード数を数えて表示する'(N,[Line|R]) :-
  文字数を数える(Line,_文字数),
  ワード数を数える(Line,_ワード数),
  write_formatted('=>%t:%t文字、%tワード\n',[N,_文字数,_ワード数]),
  N2 is N + 1,
  '一行毎の文字数(スペースも含む)とワード数を数えて表示する'(N2,R).

文字数を数える(Line,_文字数) :- sub_atom(Line,0,_文字数,0,Line),!.

ワード数を数える(Line,_ワード数) :-
  split(Line,[' ','.'],語彙ならび),
  length(語彙ならび,_ワード数),!.
509デフォルトの名無しさん:2010/01/29(金) 19:14:34
>>498
% Prolog
'1月1日が金曜日の平年(たとえば2010年)について、月日の入力データから、曜日を求める' :-
  催促付き整数入力('月を入力してください:',_月),
  催促付き整数入力('日を入力してください:',_日),
  曜日を求める(_月,_日,_曜日),
  write_formatted('%t月%t日は%t日です\n',[_月,_日,_曜日]),!.

曜日を求める(_月,_日,_曜日) :- 曜日を求める(1,1,_月,_日,金曜,_曜日).

曜日を求める(_月,_日,_月,_日,_曜日,_曜日) :- !.
曜日を求める(_月1,_日1,_月,_日,_曜日1,_曜日) :-
  翌日(_月1,_日1,_翌日の月,_翌日の日),
  曜日連鎖(_曜日1,_曜日2),
  曜日を求める(_翌日の月,_翌日の日,_月,_日,_曜日2,_曜日).

翌日(2,28,3,1) :- !.
翌日(_月,30,_翌日の月,1) :- member(_月,[4,6,9,11]),_翌日の月 is _月 + 1,!.
翌日(_月,31,_翌日の月,1) :- member(_月,[1,3,5,7,8,10,12]),_翌月の月 is _月 + 1,!.
翌日(_月,_日,_月,_翌日の日) :- _翌日の日 is _日 + 1.

曜日連鎖(月曜,火曜).
曜日連鎖(火曜,水曜).
曜日連鎖(水曜,木曜).
曜日連鎖(木曜,金曜).
曜日連鎖(金曜,土曜).
曜日連鎖(土曜,日曜).
曜日連鎖(日曜,月曜).
510デフォルトの名無しさん:2010/01/29(金) 20:13:17
http://code.nanigac.com/forum/view/453
# Prologでリスト操作をする関数をいくつか書いているんですが、
# どうもうまく動いてくれません。
# うまく動いてくれないのがいくつかあるのですが、全部あげたら
# 切りがないですし、図々しすぎるので、とりあえず
# test1関数とtest2関数の2つ(2つでも図々しいきがするけれど)の相談に乗ってください。
#
# test1関数
# 2つのリストを受け取って2つを(交互に)合わせたリストを作る
# 例1、test([a,b,c],[1,2,3],X). --> X = [a,1,b,2,c,3]
# 例2、test([a,b,c],X,[a,1,b,2,c,3]). --> X = [1,2,3]
# 例3、test([a,b,c],[1,2,3],[a,1,b,2,c,3]). --> true
# 例4、test([a,b,c],[1,2,3],[a,b,c,1,2,3]). --> false
511デフォルトの名無しさん:2010/01/29(金) 20:14:34
>>510
% Prolog

test1([],[],[]).
test1([A|R1],[B|R2],[A,B|R3]) :- test1(R1,R2,R3).
512デフォルトの名無しさん:2010/01/29(金) 20:28:58
http://ime.nu/code.nanigac.com/forum/view/453
# test2関数
# 2つのリストを受け取り、まず一つ目のリストからダブリを取り除く。
# そして、それが二つ目のリストと(順番も含めて)同じかチェックする。
# 例1、test2([a,b,c,c,b,a],[a,b,c]). --> true
# 例2、test2([a,b,c,b,c,],[c,b,a]). --> false (順番が違うので)
# 例3、test2([a,a,b,b,c,c],X). --> X = [a,b,c]
513デフォルトの名無しさん:2010/01/29(金) 20:34:53
>>512
% Prolog

test2([],[]).
test2([A|R1],[A|R2]) :-
  ならびの削除(A,R1,R3),
  test2(R3,R2).

ならびから削除(_,[],[]).
ならびから削除(A,[A|R1],R2) :- ならびから削除(A,R1,R2).
ならびから削除(A,[B|R1],[B|R2]) :- \+(A=B),ならびから削除(A,R1,R2).
514デフォルトの名無しさん:2010/01/29(金) 21:03:05
http://pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題2★
# キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を
# 受け取って(最後は改行)、二次方程式 ax2+bx+c=0 の解を画面に(標準出力に)出力せよ。
# 二次方程式の解は複素数の範囲で考えること。二次方程式を解く部分はmain関数とは
# 別にしてmain関数から呼ぶこと。グローバル変数の使用は禁止。
515デフォルトの名無しさん:2010/01/29(金) 21:07:29
http://pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題1★
# キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、
# その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば
# 画面に(標準入力に)YES、そうでなければ、NOと出力せよ。与えられた条件を
# 判定する部分はmain関数とは別の関数にしてmain関数から呼ぶこと。
# グローバル変数の使用は禁止。
516デフォルトの名無しさん:2010/01/29(金) 21:10:17
http://pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題3★
# キーボードから(標準入力から)スペースで区切られて最後が改行の3つの実数を
# 3回を受け取って、それらの合計9この実数からなる3行3列の行列の逆行列を
# 求めて画面に(標準出力)出力せよ。
# 逆行列を求める部分はmain関数とは別の関数にしてmain関数から呼ぶこと。
# グローバル変数の使用は禁止。
517デフォルトの名無しさん:2010/01/29(金) 21:18:16
http://pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題4★
# 複素数の行列を扱うことを考える。実部と虚部をdouble型のメンバーとしてもつ
# 構造体struct complex型の二次元配列を使って、2行2列の成分からなる複素数の
# 行列を扱う。Struct complex型の変数の足し算やかけ算、および上述のような
# 2行2列の複素行列の足し算やかけ算を行う関数を準備し、それらの関数を
# 利用して、2行2列の複素数の行列のexpを、Maclaurin展開の10項目までを
# 計算することによって求めなさい。グローバル変数の使用は禁止。
# 実行時に入力する行列の内容については、実数だけからなる対角行列、
# 純虚数の対角行列、一般の複素数の対角行列、その他の一般の行列などの
# 多くの場合についてテストすること。
518デフォルトの名無しさん:2010/01/29(金) 21:22:17
http://pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題5★
# 1行にスペースで区切られた2つの実数が書かれているデータファイルをエディタで
# 作成して適当な名前で保存しておけ。標準入力からのリダイレクトを使って
# そのファイルからデータを読み込み、データのグラフを画面に(標準入力に)出力せよ

# ここで、各行の左側のデータをxデータ、右側のデータをyデータとする。
# また、グラフはテキスト画面にマイナス(‐)やプラス(+)や縦棒(|)や
# アスタリスク(*)などの文字を出力することによって実現せよ。さらに、
# yデータの平均と標準偏差も求めて画面に(標準出力に)出力せよ。様々なデータ数や
# データ範囲をもつ入力データを与えられても適切に動くようにつくることが
# 望ましいが、難しければ入力データ範囲は0以上10以下に限定するなど、
# 自分でプログラムの仕様を簡素化してもよい。
519デフォルトの名無しさん:2010/01/29(金) 21:28:15
http://pc11.2ch.net/test/read.cgi/db/1252492296/474
# SQL Server Compact 3.5 で、a_tbl と b_tbl のコードが一致した場合に
# a_tbl に、b_tblの名前をセットするみたいなことしたいのですが無理ですか?
#
# UPDATE a_tbl
# SET name = b_tbl.name
# FROM b_tbl
# WHERE a_tbl.no = b_tbl.no
#
# 実行すると、「FROM 句はこのクエリの種類では使用できません」ってエラーになります。
# SQL Server 2008 だと問題ないのですが・・・
520デフォルトの名無しさん:2010/01/29(金) 22:06:58
>>519
% Prolog

'a_tbl と b_tbl のコードが一致した場合に a_tbl に、b_tblの名前をセットする' :-
  a_tbl(_no,_name1),
  b_tbl(_no,_name2),
  update_a_tbl(_no,_name2),
  fail.
'a_tbl と b_tbl のコードが一致した場合に a_tbl に、b_tblの名前をセットする'.

update_a_tbl(_no,_name2) :-
  retract(a_tbl(_no,_)),
  assertz(a_tbl(_no,_name2)),
  fail.
update_a_tbl(_,_).
521デフォルトの名無しさん:2010/01/29(金) 22:25:00
>>515
% Prolog
'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば画面に(標準入力に)YES、そうでなければ、NOと出力せよ' :-
'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数),
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_正の整数,_診断),
write_formatted('%t\n',[_診断]),!.

'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数):-
  repeat,
  get_integer(_正の整数),
  integer(_正の整数),
  _正の整数 >= 0,!.

その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_数,'YES') :-
  0 is _数 mod 3,!.
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_数,'YES') :-
  各桁の数字のいづれか(_数,L),
  member(3,L),!.
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_,'NO').

各桁の数字のいづれか(N,[N]) :- N < 10,!.
各桁の数字のいづれか(N,[M|R]) :-
  M is N mod 10,
  M2 is N // 10,
  各桁の数字のいづれか(M2,R).
522デフォルトの名無しさん:2010/01/29(金) 22:28:41
>>521 (>>515) 一部表示し直し
% Prolog

'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば画面に(標準入力に)YES、そうでなければ、NOと出力せよ' :-
  'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数),
  その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_正の整数,_診断),
  write_formatted('%t\n',[_診断]),!.
523デフォルトの名無しさん:2010/01/30(土) 05:59:00
>>484
% Prolog (その一)

インデント深度とは(_行,_インデント深度) :-
  '行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n),
  _n = _インデント深度,!.

'行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n) :-
  sub_atom(_行,_n,1,_,C),
  \+(C=' '),
  \+(C='\t'),!.
524デフォルトの名無しさん:2010/01/30(土) 06:13:04
>>523 (>>484)
% Prolog (その一) 「インデント深度とは」の「とは」は説明的ではあるが実用上好ましいとはいえない。
% 備考的な部分の定義ではしばしば迷うところ。普通は以下だが、

インデント深度(_行,_インデント深度) :-
  '行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n),
  _n = _インデント深度,!.

% 辞書引きの際は実務的な定義を参照する感じの定義。

インデント深度とは(_行,_インデント深度) :- インデント深度(_行,_インデント深度).

% ひっくり返して、実用時に辞書を引く感じ。

インデント深度(_行,_インデント深度) :- インデント深度とは(_行,_インデント深度).
525デフォルトの名無しさん:2010/01/30(土) 06:26:39
>>523 (>>484)
% Prolog 出題が不完全でtab処理ができていない。普通は、

tab(空白,6).

'行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n) :-
  atom_chars(_行,Chars),
  行頭からタブ、空白以外の文字が現れるまでの文字数(0,Chars,_n).

行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[],_n) :- !.
行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[A|_],_n) :- \+(A='\t'),\+(A=' '),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,['\t'|R],_n) :-
  tab(空白,M),
N2 is N + M,
行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,[' '|R],_n) :-
N2 is N + 1,
行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.

526デフォルトの名無しさん:2010/01/30(土) 06:28:44
>>525 (>>484) 書き直し。すみません。
% Prolog 出題が不完全でtab処理ができていない。普通は、

tab(空白,6).

'行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n) :-
  atom_chars(_行,Chars),
  行頭からタブ、空白以外の文字が現れるまでの文字数(0,Chars,_n).

行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[],_n) :- !.
行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[A|_],_n) :- \+(A='\t'),\+(A=' '),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,['\t'|R],_n) :-
  tab(空白,M),
  N2 is N + M,
  行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,[' '|R],_n) :-
  N2 is N + 1,
  行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.
527デフォルトの名無しさん:2010/01/30(土) 07:35:48
>>514
% Prolog
'キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を 受け取って(最後は改行)、二次方程式 ax2+bx+c=0 の解を画面に(標準出力に)出力せよ。二次方程式の解は複素数の範囲で考えること。' :-
  'キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を 受け取り(A,B,C),
  二次方程式の解(A,B,C,X).

'キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を 受け取り(A,B,C) :-
  get_line(Line),
  split(Line,[' '],L),
  findall(V,(member(A,L),atom_to_term(A,V,_)),[A,B,C]),!.

二次方程式の解(A,B,C,X) :-
  _判別式 is B ^ 2 - 4 * A * C,
  判別式により解を求める(_判別式,A,B,C,X).

判別式により解を求める(_判別式,A,B,C,X) :-
  ( _判別式 > 0; _判別式 > 0.0),!,
  (  X is ((-1) * B + sqrt(_判別式)) / ( 2 * A);
    X is ((-1) * B + sqrt(_判別式)) / ( 2 * A)).
判別式により解を求める(_判別式,A,B,C,X) :-
  (_判別式 = 0;_判別式 = 0.0),!,
  X is ((-1) * B) / ( 2 * A).
判別式により解を求める(_判別式,A,B,C,X) :-
  ( _判別式 < 0; _判別式 < 0.0),!,
  U is (-1) / (2 * A),
  V is sqrt((-1) * _判別式)),
  ( X = (U + iV); X = (U - iV)).
528デフォルトの名無しさん:2010/01/30(土) 12:11:35
http://pc12.2ch.net/test/read.cgi/tech/1248012902/815
# 【 課題 】http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/915.txt
# 【 形態 】1. Javaアプリケーション(main()で開始)
#
# しりとりゲームをするプログラム
# 第一段階ーShiritori.javaを次に掲載する。
#      これをEclipseに入力する
#    ー与えられた単語の可否を判定するためのクラスReferee.javaを作成する
#
# 第二段階ーReferee.javaをしりとりのルールにのっとった判定をさせるように改善
#
# 第一段階のRefereeの使用
# ・直前に入力された単語の末尾の文字を記憶するchar型のフィールド
#    lastChar
# ・次の単語がどの文字で始まらなければならないかをchar型で返すメソッド
# mustBeginWith()
# ・引数として与えられた単語の可否を判定し、可ならtrueを返すとともにlastCharを更新し、否ならfalseを返すメソッド
#    isOK(String newWord)
# とりあえずは何でもかんでも「可」とするように作る

529デフォルトの名無しさん:2010/01/30(土) 13:33:48
Microsoft社 Visual Studio C++のソフトウェアを用いて
チャットアプリケーションを作れと言われたのですが、
当方C言語系がとても苦手で困っています;;

システムの仕様は
・1対1の環境でのみ動作。
・サーバ側はポート番号を指定して、クライアントからの接続を待つ。
・クライアント側はサーバのIPアドレスとポート番号を指定して、サーバに接続する。
・この時の通信はTCPで行う。
・クライアントが通信をやめたい場合は"endc"
・サーバ側がやめたい場合は"ends"と入力。
・WinSockを使用してWindowsのコンソールプログラムとして基本的な簡易なチャット

以上の条件でプログラミングしていただけると幸いです。
よろしくお願いします m__)m



530デフォルトの名無しさん:2010/01/30(土) 16:46:35
http://pc12.2ch.net/test/read.cgi/tech/1263824755/351
# [1] 授業単元:プログラミング演習�
# [2] 問題文(含コード&リンク):
# □1□2□3□4□5□6□7□8□9
# の□に四則の演算子(+,−)や空白を入れて100なるような
# 小町算の全ての解を求めるプログラムを作成すること
#
# 例えば
# 12 + 3 - 4 + 5 + 67 + 8 + 9 = 100
# 123 - 45 - 67 + 89 = 100
#
531デフォルトの名無しさん:2010/01/30(土) 16:47:53
http://pc12.2ch.net/test/read.cgi/tech/1263824755/353
# [1] 授業単元:コンピュータグラフィック
# [2] 問題文(含コード&リンク):10468.txt
# モノクロ画像を読み込み,(319,239) の画素値を 0 とする
# 画像を関数を使用して読み込み,それを 2 次元配列に格納する関数を作成する.
# 指定した画素の画素値をセットする.
# 2 次元配列に格納していた画像を 1 次元配列に再度格納し,関数を使用して画像ファイルとして書き戻す.
#
532デフォルトの名無しさん:2010/01/30(土) 17:17:04
>>528
% Prolog 全然ルールが違うのですが「馬名しりとり」というのを作ってみました。
http://nojiriko.asia/prolog/j68_815.html
533デフォルトの名無しさん:2010/01/30(土) 17:22:56
>>532
全然違うというのは日本語として変かな。
javaの宿題とルールが違っている上に、馬名である特徴も今のところほとんどありません。
今後、血統や競争成績の検索やコメントを付与する機能を付け加えたいと思います。
534デフォルトの名無しさん:2010/01/30(土) 23:25:03
http://pc12.2ch.net/test/read.cgi/tech/1263824755/369
# [1] 授業単元: プログラム演習?
# [2] 問題文(含コード&リンク):
# 3次元空間において線分が平面を通過しているか判定するプログラムを作りなさい
# (線分の座標(x1,y1,z1) (x2,y2,z2)と平面の四隅の座標は入力する)
# 平面を通過していても平面の四隅の中に交点がない場合は通過していないものとする
535デフォルトの名無しさん:2010/01/31(日) 13:44:22
http://pc12.2ch.net/test/read.cgi/tech/1263824755/381
# [1] 授業単元:プログラミング演習?
# [2] 問題文(含コード&リンク): 入出力とデータファイルへの保存とその間の処理あるプログラムを作成する
#                http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10475.txt
# 入出力とデータファイルへの保存とその間の処理のあるプログラムの作成
#
# 作成条件
# 1.入力→処理→出力のシステムが構築されていること
# 2.データをファイルに保存しておけるようにしておく
# 3.データに構造体が用いられること
# 4.main以外を1つ以上関数化すること
# 5.datファイルも各自で作成する
536デフォルトの名無しさん:2010/01/31(日) 19:32:39
>>530
% Prolog (その一)

空白を含む文字列の空白を取り除いて解析する(_文字列,_項) :-
  文字列から空白を取り除く(_文字列,_空白を取り除かれた文字列),
  文字列を解析して項を生成する(_空白を取り除いた文字列,_項).

文字列から空白を取り除く(_文字列,_空白を取り除かれた文字列) :-
  atom_chars(_文字列,Chars),
  ならびから空白要素を取り除く(Chars,_空白を取り除かれたならび),
  atom_chars(_空白を取り除かれた文字列,_空白を取り除かれたならび).

ならびから空白要素を取り除く([],[]) :- !.
ならびから空白要素を取り除く([' '|R1],R2) :-
  ならびから空白要素を取り除く(R1,R2),!.
ならびから空白要素を取り除く([A|R1],[A|R2]) :-
  ならびから空白要素を取り除く(R1,R2),!.

文字列を解析して項を生成する(_文字列,_項) :- atom_to_term(_文字列,_項,_).
537デフォルトの名無しさん:2010/02/01(月) 05:59:17
http://pc12.2ch.net/test/read.cgi/tech/1263824755/394
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): 住所録の機能を実現するプログラムを作成せよ。
538デフォルトの名無しさん:2010/02/01(月) 06:03:19
http://pc12.2ch.net/test/read.cgi/tech/1263824755/391
# すいませんが規制されてるので携帯から簡単に
# 問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10482.txt
# キーボードから名前と年齢をレコードとするデータを入力し、
# ファイルに書き出すプログラムを作成しなさい。ただしデータの終わりは^z(CTRL+Z)とする。
# また、書き出す先のファイル名はコマンドライン引数を使用して指定すること。
#
# 「実行結果」
#
# C:\Kadai01>Kadai01 a.txt
#
# 名前 年齢
# 上戸彩 20
# 長澤まさみ 29
# 新垣結衣 20
# ^z
539デフォルトの名無しさん:2010/02/01(月) 06:06:12
http://pc12.2ch.net/test/read.cgi/tech/1252382593/516
# 2つの同じ要素数のリスト (Num a) => [a] を、
# 片方を1要素分横にずらして和を取りたいです。
# たとえば [1, 2, 3] と [7, 8, 9] であれば
# [1, 2, 3, 0] と [0, 7, 8, 9] の和です。
#
# 今は定義を素直に実装して次のようにやってます。
# shearAdd :: (Num a) => [a] -> [a] -> [a]
# shearAdd as bs = zipWith (+) (as ++ [0]) (0 : bs)
#
# もっと洗練された方法はあるでしょうか。
# たとえば (++) 演算子は左辺のリストの要素数が大きいと不利なので、
# これを改善できるとか。

540デフォルトの名無しさん:2010/02/01(月) 06:18:46
http://pc12.2ch.net/test/read.cgi/tech/1263824755/358
# [1] 授業単元:プログラミング演習?
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10471.txt
#
# ≪問題と条件≫
# 第1引数に指定したファイルからバイナリーモードで1バイトずつファイルを読み込み、
# ファイルの内容を16進数で示したものを第2引数に指定したファイルに書き込むプログラムを作成せよ。ただし、16バイトごとに改行を入れること。
541デフォルトの名無しさん:2010/02/01(月) 06:34:03
http://pc12.2ch.net/test/read.cgi/tech/1248012902/821
# 【 課題 】線分描画,点描画のメソッドをつかって,放物線を描画して下さい.
542デフォルトの名無しさん:2010/02/01(月) 06:37:34
http://pc12.2ch.net/test/read.cgi/tech/1263824755/387
#
# 息抜きにって下さい。
# 自分は分からないっす
#
# お客様に「今後の夏のセールには、必ず連絡してほしい」といわれた時
#
# お客様に「もらいもので気に入らないので他の商品と取り替えて欲しい」といわれた時
#
# 販売員の正しい行動を。
543デフォルトの名無しさん:2010/02/01(月) 07:05:19
>>539
使用言語:J

f=:dyad def '(x,0)+0,y'

1 2 3 f 7 8 9
1 9 11 9
544デフォルトの名無しさん:2010/02/01(月) 07:14:10
>>481
使用言語:J

>:i.10
1 2 3 4 5 6 7 8 9 10
545デフォルトの名無しさん:2010/02/01(月) 07:18:18
>>483 問1
使用言語:J

]COM=: 30?100
95 18 11 58 67 85 60 21 30 10 81 27 47 0 35 75 24 69 23 26 29 98 54 92 40 34 45 52 33 79
546デフォルトの名無しさん:2010/02/01(月) 13:29:23
http://pc12.2ch.net/test/read.cgi/tech/1263824755/369
# [1] 授業単元: プログラム演習�
# [2] 問題文(含コード&リンク):
# 3次元空間において線分が平面を通過しているか判定するプログラムを作りなさい
# (線分の座標(x1,y1,z1) (x2,y2,z2)と平面の四隅の座標は入力する)
# 平面を通過していても平面の四隅の中に交点がない場合は通過していないものとする
547デフォルトの名無しさん:2010/02/01(月) 13:30:35
http://pc12.2ch.net/test/read.cgi/tech/1263824755/362
# ../test/read.cgi/tech/1263824755/361
# ≪問題と条件≫
# 第1引数に指定したファイルからバイナリーモードで1バイトずつファイルを読み込み、
# ファイルの内容を16進数で示したものを第2引数に指定したファイルに書き込むプログラムを作成せよ。ただし、16バイトごとに改行を入れること。
# (実行)
# >free1.exe test.txt test2.txt
#
# でしょ?
548デフォルトの名無しさん:2010/02/01(月) 13:35:45
>>545 >>483
使用言語:J
複数の問題だと勘違いしていたのでやり直しました。

read=: 1!:1
write=: 1!:2
f=: monad define
COM=. 30?100
MAN=. y
Work=. 100#0
COM=. I.1(COM)}Work
MAN=. I.1(MAN)}Work
count=. +/MAN e. COM
data=. ,((":COM),(":MAN),:":count),.LF
data write<'result.out'
)
f 5 10 77 85 99 43
read<'result.out'
4 9 12 14 16 20 21 22 23 26 30 31 34 36 37 40 60 61 62 63 65 67 70 77 82 84 92 93 98 99
5 10 43 77 85 99
2
549デフォルトの名無しさん:2010/02/01(月) 13:54:12
>>539
% Prolog

ならびをずらして加算(L1,L2,L) :-
  append(L1,[0],L3),
  append([0],L2,L4),
  行列の転置([L3,L4],L5),
  findsum(U,member(U,L5),L).
550デフォルトの名無しさん:2010/02/01(月) 13:55:30
>>546>>536 に既出でした。>>536 の方を使ってください。
551デフォルトの名無しさん:2010/02/01(月) 14:35:38
>>539
使用言語:R

> f <- function(a,b) c(a,0)+c(0,b)

> f(c(1,2,3),c(7,8,9))
[1] 1 9 11 9
552デフォルトの名無しさん:2010/02/01(月) 14:37:21
>>539
使用言語:maxima

(%i3) f(a,b):=endcons(0,a)+cons(0,b);
(%o3) f(a, b) := endcons(0, a) + cons(0, b)
(%i4) f([1,2,3],[7,8,9]);
(%o4) [1, 9, 11, 9]
553デフォルトの名無しさん:2010/02/01(月) 14:54:28
>>539
使用言語:Scilab

-->deff('r=f(a,b)','r=[a,0]+[0,b]')

-->f(1:3,7:9)
ans =

1. 9. 11. 9.
554デフォルトの名無しさん:2010/02/01(月) 15:54:09
>>547
% Prolog

program :-
  user_parameters([FileIn,FileOut]),
  open(FileIn,read,Input,[type(binary)]),
  open(FileOut,write,Output),
  get_byte(Input,C),
  free1(0,Input,Output,C),
  close(Output),
  close(Input).

free1(_,_,_,-1) :- !.
free1(16,Input,Output,C) :-
  write(Output,'\n'),
  free1(0,Input,Output,C),!.
free1(M,Input,Output,C) :-
  free1(M,Input,Output,C) :-
  N進数(16,C,A),
  write(Output,A),
  get_byte(Input,C2),
  M2 is M + 1,
  free1(M2,Input,Output,C2).

% N進数/3の定義は http://nojiriko.asia/prolog/j68_493.html 参照
555デフォルトの名無しさん:2010/02/01(月) 16:01:21
http://pc12.2ch.net/test/read.cgi/tech/1263824755/406
# [1] 授業単元:プログラミング応用演習
# [2] 問題文(含コード&リンク): http://mikilab.doshisha.ac.jp/dia/research/report/2008/1118/002/report20081118002.html
# [5] その他の制限: ライブラリは使わず。問題文のリンク先のプログラム(DIRECT)を組む。
# よろしくお願いします。できれば解説を付けてくださると助かります。

[2]のサイトをコピーすることは困難でした。直接参照してください。
556デフォルトの名無しさん:2010/02/01(月) 17:07:57
>>537
% Prolog (その一)
% consult/1,reconsult/1,assertz/1,retract/1,clause/2,listing/1 を最終的に使用します。
% 実務ではもっとずっと丁寧にチェックしながら進みます。ここでは簡単に

住所の登録 :-
  名字は(_名字),
  名前は(_名前),
  郵便番号は(_郵便番号),
  住所は(_住所),
  電話番号は(_電話番号),
  メールアドレスは(_メールアドレス),
  住所の登録((_名字,_名前,_郵便番号,_住所,_電話番号,_メールアドレス),!.

住所の登録(_名字,_名前,_郵便番号,_住所,_電話番号,_メールアドレス) :-
  \+(住所録(_名字,_名前,_郵便番号_1,_住所_1,_電話番号_1,_メールアドレス_1)),
  assertz(住所録(_名字,_名前,_郵便番号,_住所,_電話番号,_メールアドレス)),
  write('登録を完了しました\n'),!.
住所の登録(_名字,_名前,_郵便番号,_住所,_電話番号,_メールアドレス) :-
  住所録(_名字,_名前,_郵便番号_1,_住所_1,_電話番号_1,_メールアドレス_1),
  この氏名は既に登録がありますが(_名字,_名前,_郵便番号_1,_住所_1,_電話番号_1,_メールアドレス_1,_郵便番号,_住所,_電話番号,_メールアドレス),!.

この氏名は既に登録がありますが(_名字,_名前,_郵便番号_1,_住所_1,_電話番号_1,_メールアドレス_1,_郵便番号,_住所,_電話番号,_メールアドレス) :-
  write_formatted('%t %tという氏名は以下の通り既に登録がありますが\n%t %t %t%t %t %t',[_名字,_名前,_名字,_名前,_郵便番号_1,_住所_1,_電話番号_1,_メールアドレス_1]),
  write('別人と考えて登録してよいでしょうか Y or N でお答えください : '),
  get_line(Line),
  この氏名は既に登録がありますが(Line,_名字,_名前,_郵便番号,_住所,_電話番号,_メールアドレス).
557デフォルトの名無しさん:2010/02/01(月) 20:23:21
http://pc12.2ch.net/test/read.cgi/tech/1263824755/409
# [1] C言語演習
# [2]
# int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10}
# int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5}
# が与えられている。
# 値x[0]*y[0]+2*x[1]*y[1]+3*x[2]*y[2]+4*x[3]*y[3]+5*x[4]*y[4]+6*x[5]*y[5]
# が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム
558デフォルトの名無しさん:2010/02/01(月) 21:33:56
>>557 の訂正として出されましたが、それぞれ独立の問題としましょう。
http://pc12.2ch.net/test/read.cgi/tech/1263824755/409
# [1] C言語演習
# [2]
# int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10}
# int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5}
# が与えられている。
# 値x[0]*y[0]-2*x[1]*y[1]+3*x[2]*y[2]-4*x[3]*y[3]+5*x[4]*y[4]-6*x[5]*y[5]+7*x[6]*y[6]-8*x[7}*y[7]+9*x[8]}*y[8]-10*x[9]*x[9]
# が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム
559デフォルトの名無しさん:2010/02/01(月) 21:42:32
http://pc12.2ch.net/test/read.cgi/tech/1263824755/418
# [1] C言語プログラミング演習(大学専門課程選択教科期末課題)
# [2]http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10483
.txt
# 以下のSQL文で定義されるテーブルに対する
# SQL操作をテーブルに対応する適当な構造体配列
# struct_SEISEKIHYOUを定義することにより
# 1関数として実装せよ。
# 関数は
# list(struct_SEISEKIHYOU* table,int N);
# とする。処理効率を十分に考えること。
#
# テーブル定義:
# CREATE TABLE SEISEKIHYOU (
# TANNINN VARCHAR, //担任教師
# NAME VARCHAR,//生徒名
# KOKUGO INTEGER,//国語得点
# SUUGAKU INTEGER//数学得点
# RIKA INTEGER,//理科得点
# SYAKAI INTEGER,//社会得点
# EIGO INTEGER,//英語得点
# )
#
560デフォルトの名無しさん:2010/02/01(月) 21:44:36
>>559 問題のつづきです。
#
# SQL操作  SELECTでリストアップされる項目リスト
# をコンソール出力させる。
#
# SELECT X.TANNINN,X.NAME,X.SUUGAKU,X.KOKUGO
# FROM SEISEKIHYOU AS X
# WHERE
# SUUGAKU>=KOKUGO
# AND
# SUUGAKU>=RIKA
# AND
# SUUGAKU>=SYAKAI
# AND
# SUUGAKU>=EIGO
# AND
# (KOKUGO+SUUGAKU+RIKA+SYAKAI+EIGO)/5.0
# >=(SELECT (AVG(KOKUGO)+AVG(SUUGAKU)+AVG(RIKA)
# +AVG(SYAKAI)+AVG(EIGO))/5.0 FROM SEISEKIHYOU
# GROUP BY TANNINN) HAVING COUNT(*)>=
# (SELECT COUNT(*) FROM SEISEKHYOU GROUP BY
# TANNINN HAVING TANNINN=X.TANNNIN)
#
# ORDER BY X.TANNIN,X.NAME,X.SUUGAKU;
561デフォルトの名無しさん:2010/02/02(火) 03:12:54
http://pc12.2ch.net/test/read.cgi/tech/1263824755/420
# [1] 授業単元:プログラミング実践
# [2] 問題文
# アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして90°回転した結果を出力せよ。
# (図)affin.txt
# 00000
# 00000
# 11111
# 00000
# 00000
#
562デフォルトの名無しさん:2010/02/02(火) 04:30:07
>>538
% Prolog (その一)
program :-
  user_parameters([_ファイル名]),
  'EOFがコントロールZであるファイルの読み込み'(Lines),
  tell(_ファイル名),
  write_formatted('%10s    %4s\n',[名前,年齢]),
  '名前・年齢の行表示'(Lines),
  told.

'EOFがコントロールZであるファイルの読み込み'(Lines) :-
  get_code(Code),
  'EOFがコントロールZであるファイルの読み込み'(Code,Lines),!.

'EOFがコントロールZであるファイルの読み込み'(-1,[]) :- !.
'EOFがコントロールZであるファイルの読み込み'(Code,[[_名前,_年齢]|R]) :-
  'EOFがコントロールZであるファイルの行読み込み'(Code,RCode,Codes),
  atom_codes(Line,Codes),
split(Line,[' ',','],[_名前,_年齢]),
  'EOFがコントロールZであるファイルの読み込み'(RCode,R).

'EOFがコントロールZであるファイルの行読み込み'(-1,-1,[]) :- !.
'EOFがコントロールZであるファイルの行読み込み'(26,-1,[]) :- !.
'EOFがコントロールZであるファイルの行読み込み'(10,Code2,[]) :-
  ひとつ先読みが同時に終了ステータスにもなる(Code2),!.
'EOFがコントロールZであるファイルの行読み込み'(Code1,RCode,[Code1|R]) :-
  get_code(Code2),
  'EOFがコントロールZであるファイルの行読み込み'(Code2,RCode,R).
563デフォルトの名無しさん:2010/02/02(火) 04:31:08
>>538
% Prolog (その二)

ひとつ先読みが同時に終了ステータスにもなる(Code2) :- get_code(Code2),!.

名前・年齢の行表示([]) :- !.
名前・年齢の行表示([[_名前,_年齢]|R]) :-
  write_formatted('%12s%t\n',[_名前,_年齢]),
  名前・年齢の行表示(R).
564デフォルトの名無しさん:2010/02/02(火) 04:32:07
> EOFがコントロールZであるファイルの読み込み
w
565デフォルトの名無しさん:2010/02/02(火) 04:36:16
>>564
やれやれww
566デフォルトの名無しさん:2010/02/02(火) 04:53:35
http://pc12.2ch.net/test/read.cgi/tech/1262163854/556
# こんばんは.失礼します.
# 現在,次のような課題に取り組んでいます.
# もしよろしければこの難問をハックしていただけないでしょうか.
# (できればCで・・・)
#
# N個の要素があり,その,すべての組み合わせ(2^N組)に対して,
# それぞれに値が決まっているものとします.
# そして,ある組み合わせの値は,その組み合わせの中の部分集合の
# どんな和よりも大きいです.
#
# また0個の集合では値は0とします.
#
# こうした場合に,全ての組み合わせの値を以上のルールに則ったまま
# 乱数を用いて決定したいと考えています.
#
# 具体的には
# 要素が一つの組み合わせは乱数.たとえばAのみの集合の場合 v(A)=random
# 要素が2つでは,v(A,B)=v(A)+v(B) + random
# 3つでは,v(A,B,C) = max(v(A,B)+v(C), v(B,C)+v(A), v(C,A)+v(B)) + random
# となります.
#
# この方式で,全ての組み合わせに値を当てはめることを考えているのですが
# コードに落とし込むことが出来ません.
567デフォルトの名無しさん:2010/02/02(火) 04:56:05
>>566 つづき
# 今のところ,各組み合わせを以下のような二進数で表そうと考えています.(N=3の場
合)
# 各行の一列目が1はAがその組み合わせにいることを意味し,
# 二列目はB,三列目はCを表しています.
#
# ABC V
# 000 0
# 001 rc
# 010 rb
# 011 ?
# 100 ra
# 101 ?
# 110 ?
# 111 ?
#

568デフォルトの名無しさん:2010/02/02(火) 08:08:22
>>495
使用言語:J

f=: monad define
l=.(#y)-2
t=.(l,l)$ ucp' '
g=.}.}:y
y,(|:g),t,|.g),|.y
)

f ucp'今日は、晴れです。'
今日は、晴れです。
日       す
は       で
、       れ
晴       晴
れ       、
で       は
す       日
。すでれ晴、は日今
569デフォルトの名無しさん:2010/02/02(火) 09:37:53
>>559
% Prolog

'SQL操作に対応する述語定義'(X) :-
  findall([TANNINN,NAME,SUGAKU,KOKUGO],
  (
    findall(TANNINN,'SEISEKIHYOU'(TANNINN,_,_,_,_,_,_),L1),sort(L1,L2),
    'SEISEKIHYOU'(TANNINN,NAME,KOKUGO,SUUGAKU,RIKA,SYAKAI,EIGO),
    SUUGAKU>=KOKUGO,SUUGAKU >= RIKA,SUUGAKU>=SYAKAI,SUUGAKU>=EIGO,
    U1 is (KOKUGO+SUUGAKU+RIKA+SYAKAI+EIGO)/5.0,
    findall(AVGs,(member(TANNINN2,L2),findavg([KOKUGO2,SUUGAKU2,RIKA2,SYAKAI2,EIGO2],'SEISEKIHYOU'(TANNINN2,NAME2,KOKUGO2,SUUGAKU2,RIKA2,SYAKAI2,EIGO2),AVGs)),L3),
    sum(L3,SUM1),
    U2 is SUM1 / 5.0,
    U1 >= U2,
    findavg(KOKUGO3,('SEISEKIHYOU'(TANNINN,_,KOKUGO3,_,_,_,_),KOKUGOAVG),
    KOKUGO > AVGKOKUGO)
  ),L4),
  sort(L4,L5),
  member(X,L5).
570デフォルトの名無しさん:2010/02/02(火) 11:14:43
>>496
使用言語:J

f=: monad define
t=.<;._2 y
for_i. i.#t do.
smoutput (":>:i),':',":|.;i{t
end.
)
read=: 1!:1

f ucp read <'test2.txt'
1:で雨、は日昨。すでれ晴、は日今
2:後明。うょしで曇、は日明。たし
3:。かうょしで晴快、は日
571デフォルトの名無しさん:2010/02/02(火) 11:18:26
>>556
何をいっているのかわからないので元スレを覗いてきます。
572デフォルトの名無しさん:2010/02/02(火) 11:24:32
>>571
すみません。>>556ではなく>>566でした。
元スレでも質問者が問題を理解していないだろうと指摘されていました。
573デフォルトの名無しさん:2010/02/02(火) 12:01:03
>>542
% Prolog 例えばこんな具合に書き進める。これからが大変。

販売員の正しい行動(_お客様,_お客様の要求,_販売員の正しい行動) :-
  お客様の要求の要約(_お客様,_お客様の要求,_お客様の要求の要約),
  お客様の要求の要約から販売員の正しい行動を考える(_お客様の要求の要約,_販売員の正しい行動).

お客様の要求の要約(_お客様,_お客様の要求,_お客様の要求の要約) :-
  お客様がどんな方か明確にする(_お客様,_お客様の情報),
  お客様が関心をお持ちの分野を明確にする(_お客様,_お客様の情報,_お客様が関心をお持ちの分野),
  お客様の情報を解析して要求を要約する(_お客様,_お客様の要求,_お客様の情報,_お客様が関心をお持ちの分野,_お客様の要求の要約).

お客様がどんな方か明確にする(_お客様,_お客様の情報) :- 顧客情報(_お客様,_お客様の情報).

お客様が関心をお持ちの分野を明確にする(_お客様,_お客様の情報,_お客様が関心をお持ちの分野) :-
  購買情報(_お客様,_過去の購買情報ならび,_過去のクレームならび),
  関心のある分野診断(_お客様,_過去の購買情報ならび,_過去のクレームならび,_お客様が関心をお持ちの分野).

お客様の情報を解析して要求を要約する(_お客様,_お客様の要求,_お客様の情報,_お客様が関心をお持ちの分野,_お客様の要求の要約) :-
  句構造解析(_お客様の要求,_解析された句構造),
  句構造からキーワードを拾い出して意味を推定する(_解析された句構造,_キーワードならび,_お客様の要求の要約).
574デフォルトの名無しさん:2010/02/02(火) 12:23:19
>>497
使用言語:J

f=: monad define
t=:<;._2 y
for_i. i.#t do.
s=.;i{t
w=.":#cutopen s
smoutput (":>:i),':',":s
smoutput '=>',(":#s),'文字、',w,'ワード'
end.
)

read=: 1!:1

f read<'test3.txt'
1:And friends just can't be found
=>31文字、6ワード
2:Like a bridge over troubled water
=>33文字、6ワード
3:I will lay me down
=>18文字、5ワード
575デフォルトの名無しさん:2010/02/02(火) 14:05:25
>>498
使用言語:J

f=: monad define
'M D'=.y
t=.0 0 31 59 90 120 151 181 212 243 273 304 334
w=.ucp'木金土日月火水'
a=.(7|(M{t)+D){w
smoutput (":M),(ucp'月'),(":D),(ucp'日は、'),a,ucp'曜日です。'
)

f 9 15
9月15日は、水曜日です。
576デフォルトの名無しさん:2010/02/02(火) 17:22:34
>>510
使用言語:J

f=: dyad def ';,|:(;/x),:;/y'

'asdfgh' f '123'
a1s2d3fgh
577デフォルトの名無しさん:2010/02/02(火) 17:27:22
>>512
使用言語:J

test2=: dyad def 'y-:~.x'
'abccba' test2 'abc'
1
'abcbc' test2 'cba'
0
578デフォルトの名無しさん:2010/02/02(火) 18:11:22
http://pc12.2ch.net/test/read.cgi/tech/1248012902/827
# 【 課題 】 http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/918.txt
# 課題1
# ラーメンをオブジェクト指向で表現。
# 3種類程度のラーメンが表現できるようにする。
# フィールド、メソッド、オーバーロード、オーバーライド、カプセル化(他クラスからのアクセスはgetメソッドとsetメソッドのみ)が確実に表現されていること。
#
# 実行は以下のクラスから呼び出される
# class RamenExample{
# public static void main(String [] args){
# Ramen shouyuRamen = new Ramen("しょうゆ");
# Ramen misoRamen = new Ramen("みそ");
# Ramen shioRamen = new Ramen("しお");
# }
# }
#
# また、以下のクラスは生成が条件
# class Ramen{ }
# class Utsuwa{ }
# class Soup{ }
# class Pasta{ }
# class Topping{ }
579デフォルトの名無しさん:2010/02/02(火) 18:14:12
http://pc12.2ch.net/test/read.cgi/tech/1248012902/827
# 【 課題 】 http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/918.txt
# 課題2
# 以下の、お金をうけとり、おつりを計算するプログラムをつくりなさい。
#
# ここから、よくわからなくなりました。
# たとえば、6200円の買い物をして、7000円受とると、100円を8枚って計算したいです。
#
580デフォルトの名無しさん:2010/02/02(火) 21:11:17
>>579
% Prolog (その一)

金種計算(0,_,[]) :- !.
金種計算(_おつり残高,[],[]) :- _おつり残高 > 0,write('レジ不足です\n'),!,fail.
金種計算(_おつり残高,[_金種|R1],[(_金種,B)|R2]) :-
  _おつり残高 >= _金種,
  金種が足りる(_おつり残高,_金種,N,B),
  _残り金額 is _おつり残高 mod _金種,
  金種計算(_残り金額,R1,R2).
金種計算(_おつり残高,[_金種|R1],[(_金種,N)|R2]) :-
  _おつり残高 >= _金種,
  金種が足りない(_おつり残高,_金種,N,B),
  _残り金額 is _おつり残高 - _金種 * N,
  金種計算(_残り金額,R1,R2).
金種計算(_おつり残高,[_金種|R1],R2) :-
  _おつり残高 >= _金種,
  \+(レジの中(_金種,N)),
  金種計算(_おつり残高,R1,R2).
金種計算(_おつり残高,[_金種|R1],R2) :-
  _おつり残高 < _金種,
  金種計算(_おつり残高,R1,R2).

金種が足りる(_おつり残高,_金種,N,B) :-
  レジの中(_金種,N),
  B is _おつり残高 // _金種,
  N >= B,!.
金種が足りない(_おつり残高,_金種,N,B) :-
  レジの中(_金種,N),
  B is _おつり残高 // _金種,
  N < B,!.
581デフォルトの名無しさん:2010/02/03(水) 03:21:11
>>579 (その二)
% Prolog こちらがトップレベル >>580 はレジの中身を更新するのを忘れている

おつりの計算(_お買い上げ金額,_うけとったお金,_金種) :-
  _受け取ったお金 > _お買い上げ金額,
  _おつり is _うけとったお金 - _お買い上げ金額,
  金種計算(_おつり,[10000,5000,2000,1000,500,100,50,10,5,1],_金種).
582デフォルトの名無しさん:2010/02/03(水) 03:25:18
>>580 >>581
一般に、給料計算の一部に金種計算が現れる場合は、銀行がその金種を
用意するものと考えられるから、レジの中身についての考慮は必要ないが、
おつりの場合はレジの内容が計算を主導する。
583デフォルトの名無しさん:2010/02/03(水) 05:26:20
>>225
% Prolog (その一)
'0から10の中からランダムに整数の2組を決める。それを平面上の座標と、座標を10個つくる。'(_10個の座標点ならび) :-
  '座標を10個つくる。'(1,_10個の座標点ならび).

座標を10個つくる。'(N,[]) :- N > 10,!.
座標を10個つくる。'(N,[[X,Y]|R]) :-
  '0から10の中からランダムに整数の2組を決める。'(X,Y),
  N2 is N + 1,
  座標を10個つくる。'(N2,R).

'0から10の中からランダムに整数の2組を決める。'(X,Y) :- X is random mod 9,Yis random mod 9.

ユーザに座標を入力させ、その点から最も遠い点と近い点を求める。(_10個の座標点ならび,X,Y,_最も遠い点,_最も近い点) :-
  ユーザに座標を入力させ、(X,Y),
  その点から最も遠い点と近い点を求める(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標),
  ユーザ座標と10個の座標点の表示(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標).

ユーザに座標を入力させ、(X,Y) :-
  催促付き整数入力('X座標を入力してください :',X),
  催促付き整数入力('Y座標を入力してください :',Y),!.

その点から最も遠い点と近い点を求める。(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :-
  ユーザの入力点からの距離ならびを得る(_10個の座標点ならび,X,Y,_ユーザの入力点からの距離ならび),
  ユーザの入力座標から最も遠い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も遠い点X座標,_最も遠い点Y座標),
  ユーザの入力座標から最も近い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も近い点X座標,_最も近い点Y座標),!.
584デフォルトの名無しさん:2010/02/03(水) 06:20:55
>>225
% prolog (その二)

ユーザの入力点からの距離ならびを得る([],_,_,[]) :- !.
ユーザの入力点からの距離ならびを得る([[X1,Y1]|R1],X,Y,[[_距離,X1,Y1]|R2]) :-
  _距離 is sqrt(((Y1-Y)^2 + (X1-X)^2)),
  ユーザの入力点からの距離ならびを得る(R1,X,Y,R2).

ユーザの入力座標から最も遠い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も遠い点X座標,_最も遠い点Y座標) :-
  findmax(L,member(L,_ユーザの入力点からの距離ならび),[_最も遠い距離,_最も遠い点X座標,_最も遠い点Y座標]).
ユーザの入力座標から最も近い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も近い点X座標,_最も近い点Y座標) :-
  findmin(L,member(L,_ユーザの入力点からの距離ならび),[_最も近い距離,_最も近い点X座標,_最も近い点Y座標]).

ユーザ座標と10個の座標点の表示(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :-
  ユーザ座標と10個の座標点の表示(0,0,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標).

ユーザ座標と10個の座標点の表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :- N > 9,!.
ユーザ座標と10個の座標点の表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :-
  M > 9,N2 is N + 1,wr('\n'),
  ユーザ座標と10個の座標点の表示(0,N2,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標),!.
ユーザ座標と10個の座標点の表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :-
  座標点表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標),
  M2 is M + 1,
  ユーザ座標と10個の座標点の表示(M,N2,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標).

585デフォルトの名無しさん:2010/02/03(水) 06:23:40
>>225
% Prolog (その三)

座標点表示(X,Y,_,X,Y,_,_,X,Y) :- write('◎'),!.
座標点表示(X,Y,_,X,Y,_,_,_,_) :- write('×'),!.
座標点表示(_最も遠い点のX座標,_最も遠い点のY座標,_,_,_,_最も遠い点のX座標,_最も遠い点のY座標,_,_) :- write('●'),!.
座標点表示(_最も近い点のX座標,_最も近い点のY座標,_,_,_,_,_,_最も近い点のX座標,_最も近い点のY座標) :- write('○'),!.
座標点表示(M,N,_10個の座標点ならび,_,_,_,_,_,_) :- member([M,N],10個の座標点ならび),write('△'),!.
座標点表示(_,_,_,_,_,_,_,_,_) :- write(' '),!.
586デフォルトの名無しさん:2010/02/03(水) 06:38:51
>>227
% Prolog

program :-
  user_parameters([A,B]),
  atom_to_term(A,_実数1,_),
  atom_to_term(B,_実数2,_),
  sasho(_実数1,_実数2,_差,_商,_診断),
  program_1(_差,_商,_診断),!.

sasho(_実数1,_実数2,_差,_商,0) :-
  (_実数2 = 0.0;_実数=0),
  _差 is _実数1 - _実数2,!.
sasho(_実数1,_実数2,_差,_商,1) :-
  \+(_実数2 = 0.0),
  \+(_実数=0),
  _差 is _実数1 - _実数2,
  _商 is _実数1 / _実数2,!.

program_1(_差,_商,0) :- write_formatted('%t',[_差]),!.
program_1(_差,_商,1) :- write_formatted('%t,%t',[_差,_商]),!.
587デフォルトの名無しさん:2010/02/03(水) 06:42:17
>>227 訂正
% Prolog 除数検査の中で _実数2 とするべきところを _実数 としていたものがある。

program :-
  user_parameters([A,B]),
  atom_to_term(A,_実数1,_),
  atom_to_term(B,_実数2,_),
  sasho(_実数1,_実数2,_差,_商,_診断),
  program_1(_差,_商,_診断),!.

sasho(_実数1,_実数2,_差,_商,0) :-
  (_実数2 = 0.0;_実数2=0),
  _差 is _実数1 - _実数2,!.
sasho(_実数1,_実数2,_差,_商,1) :-
  \+(_実数2 = 0.0),
  \+(_実数2=0),
  _差 is _実数1 - _実数2,
  _商 is _実数1 / _実数2,!.

program_1(_差,_商,0) :- write_formatted('%t',[_差]),!.
program_1(_差,_商,1) :- write_formatted('%t,%t',[_差,_商]),!.
588デフォルトの名無しさん:2010/02/03(水) 07:36:27
http://pc12.2ch.net/test/read.cgi/tech/1197620454/586
# 問題こちら↓
# 階乗 n! を計算する関数を作成し,
# 順列
#  n個の異なるものからr個取り出して並べる。
#  このときの順列の総数をnPrとあらわす。
#  nPr=n(n-1)(n-2)・・・(n-r+1)
# を計算する関数を作成し,
#
# 組み合わせ
#  異なるn個からr個取り出して組を作る。
#  このときの組合せの総数をnCrとあらわす。
#  nCr = nPr/r!
#
# を計算するプログラムを作成してください。できればFORTRANで。
589デフォルトの名無しさん:2010/02/03(水) 08:27:50
>>588
% Prolog

nPr(N,R,X) :-
  U is N - R + 1,
  階乗(U,N,X).

nCr(N,R,X) :-
  U is N - R + 1,
  階乗(U,N,K1),
  階乗(R,K2),
  X is K1 // K2 .

階乗(M,N,1) :- M > N,!.
階乗(M,N,X) :-
  M2 is M + 1,
  階乗(M2,N,Y),
  X is M * Y.

階乗(0,1) :- !.
階乗(1,1) :- !.
階乗(N,X) :-
  N2 is N - 1,
  階乗(N2,Y),
  X is N * Y,
  asserta((階乗(N,X) :- (!))) .
590デフォルトの名無しさん:2010/02/03(水) 16:35:57
591デフォルトの名無しさん:2010/02/03(水) 16:51:15
>>216
% Prolog

search(Text,Pat,Start) :-
  sub_atom(Text,Start,_,_,Pat),!.
search(_,_,-1).

search(Start) :-
  write('Text :'),get_line(Text),
  write('Pat :'),get_line(Pat),
  search(Text,Pat,Start),!.
592デフォルトの名無しさん:2010/02/03(水) 17:45:56
>>214
% Prolog

述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す :-
  findall(_値,数値(_,_値),L1),
  quicksort(L1,L2),
  abolish(数値/2),
  述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(1,L2).

述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(_,[]) :- !.
述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(M,[N|R]) :-
  assertz(数値(M,N)),
  M2 is M + 1,
  述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(M2,R).
593デフォルトの名無しさん:2010/02/03(水) 18:33:33
>>530
使用言語:J

op=:a:,;/'+-'
a=:,;&.>,{(<a:,<'-')0},(<op),.<&.>":L:0;/>:i.9
;"1,.&(<'=100'),.a{~I.(<100)=".&.>a

123+45-67-8-9=100
123+4-5-67-89=100
123-45+67-89=100
123-4+5+6+7-8-9=100
12+3+4+5-6+7-89=100
12+3-4-5+67+8+9=100
12-3+4-5-6-7+89=100
1+23-4-56+7+8+9=100
1+23-4-5+6+78-9=100
1+2+34-5-67-8-9=100
1+2+3-4-5+6+78+9=100
-1-2-3-4+5+6+78+9=100
594デフォルトの名無しさん:2010/02/03(水) 21:30:57
http://pc12.2ch.net/test/read.cgi/tech/1263824755/451
# [1] 授業単元:情報処理入門
# [2] 問題文(含コード&リンク):
# rep1.ppmとrep2.ppmの2つの画像を加算するプログラムを作成せよ.
# プログラム中で加算したデータは,コントラスト強調を行った上で
# PPM画像ファイル(h12r.ppm)として保存するようにすること.
# Cのソースファイルh12r.cおよび実行することにより作成
# される画像ファイルを提出すること.rep1.ppmとrep2.ppmの
# サイズはいずれも横124×縦124画素である.h12r.ppmのサイズも同じとする.
#
# rep1.ppm
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10487.zip
# rep2.ppm
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10488.zip
595デフォルトの名無しさん:2010/02/04(木) 00:50:42
優勝賞金500万円

http://www.jaist.ac.jp/ICGA-events-2010/olympiad/

1989年にロンドンで第1回目のコンピュータオリンピアードが開催されました。
毎年開催される本イベントでは,コンピュータゲームプレイヤー同士が競技し,世界最高位を決定します。
これまでの優勝者には,Neurogammon(バックギャモン, 1989年), Chinook (チェッカー, 1989年および1990年) そして Tacos(将棋, 2005年, 2006年, 2008年, 2009年)などがあります。
コンピュータオリンピアードは国際コンピュータゲーム協会(ICGA)が主催して実施されています。

競技部門には,アマゾン,バックギャモン,ブリッジ,コンピュータプール,六目並べ,象棋,ドッツアンドボックス,国際ドローツ,囲碁,9路盤囲碁,ヘックス,ハバナ,ラインズオブアクション,
将棋,スラカルタなどがあります。

この他のゲームもコンピュータによる競技会を開催する可能性があります。主催者までコンタクトしてください。
2010年に第15回目となるコンピュータオリンピアードは金沢市内で開催されます。
ICGAとJAISTとの共同イベントとして9月25日から10月2日にかけて金沢市内で開催されます。
各競技の日程は後日決定します。
参加申し込みなどの詳細も後日お知らせ致します。
596デフォルトの名無しさん:2010/02/04(木) 06:08:29
>>595
% Prolog
コンピュータオリンピアード(優勝賞金,500万円).
コンピュータオリンピアード('URL','http://www.jaist.ac.jp/ICGA-events-2010/olympiad/').
コンピュータオリンピアード(歴史,第1回目,ロンドン,1989).
コンピュータオリンピアード(開催,毎年).
コンピュータオリンピアード(主催,'国際コンピュータゲーム協会(ICGA)').
コンピュータオリンピアード(出場者,コンピュータゲームプレイヤー同士).
コンピュータオリンピアード(競技部門,アマゾン).
コンピュータオリンピアード(競技部門,バックギャモン).
コンピュータオリンピアード(競技部門,ブリッジ).
コンピュータオリンピアード(競技部門,コンピュータプール).
コンピュータオリンピアード(競技部門,六目並べ).
コンピュータオリンピアード(競技部門,象棋).
コンピュータオリンピアード(競技部門,ドッツアンドボックス).
コンピュータオリンピアード(競技部門,国際ドローツ).
コンピュータオリンピアード(競技部門,囲碁).
コンピュータオリンピアード(競技部門,'9路盤囲碁').
コンピュータオリンピアード(競技部門,ヘックス).
コンピュータオリンピアード(競技部門,ハバナ).
コンピュータオリンピアード(競技部門,ラインズオブアクション).
コンピュータオリンピアード(競技部門,X) :- 新しい競技種目になる(X).
コンピュータオリンピアード(開催予定,第15回,金沢市内,'2010年','自9月25日','至10月2日').
コンピュータオリンピアード(第15回大会開催形態,共同エベント).
コンピュータオリンピアード(第15回大会共同エベント,主催,'ICGA').
コンピュータオリンピアード(第15回大会共同エベント,主催,'JAIST').
コンピュータオリンピアード(第15回大会,競技日程,後日決定).
コンピュータオリンピアード(参加申し込みなどの詳細,後日お知らせ致します).
597デフォルトの名無しさん:2010/02/04(木) 06:28:59
http://pc12.2ch.net/test/read.cgi/tech/1263824755/455
# [1] 授業単元: アルゴリズム
# [2] 問題文(含コード&リンク):課題2−2と2−3です。
# 課題2-2
# コマンドライン引数で入力される任意個の実数を,malloc関数で動的に確保した配列に 格納するように,kadai2_1.c を修正したプログラム kadai2_2.c を作成せよ.
#
# 実行例は課題2-1と同じ.
# --------------------------------------------------------------------------------
# 課題2-3
# コマンドライン引数で入力される任意個の実数に対し,整数部(integer part)と小数部(fractional part)に分割し,実行例のように出力するプログラム kadai2_3.c を作成せよ.ただし,以下の仕様を満足すること.
#
# 実数値,整数部,小数部をメンバにもつ構造体を定義し,構造体の配列として利用すること.
# 構造体の配列は,malloc関数を利用して動的に確保すること.
# 整数部,小数部の分割および構造体メンバへの格納は,dividePart関数を定義して利用すること.
# 構造体配列の内容を実行例のように出力する printData関数を定義して利用すること.
# 構造体配列の内容もとに整数部の合計,小数部の合計,実数値の合計を出力する printSum関数を定義して利用すること.
598デフォルトの名無しさん:2010/02/04(木) 06:36:09
http://pc12.2ch.net/test/read.cgi/tech/1263824755/456
# [1] 授業単元: データ演習
# [2] 問題文(含コード&リンク):
# できなかった問題は11−1です。
# 課題10−1を使う問題なので、できている10−1のソースコードを一緒に入れています。
# どなたか、よろしくお願いします。
# 課題10-1
# コマンドライン引数で指定される整数列を順番に二分探索木に登録し,キーボードから入力される値を探索するプログラム kadai10_1.c を作成せよ.
# また,最初に inorderで木をなぞった結果を示せ.
#
# 課題10−1に番兵を導入したプログラム kadai11_1.c を作成せよ.
#
# ヒント:番兵用に1個のノードを定義し,ノードのNULLポインタが番兵を指すようにすればよい.
# 挿入関数と探索関数,inorder, main関数を変更すればよい.挿入時の挿入ノードを決める操作も番兵を使えばよい.
# その際,初期状態として,rootが番兵を指す状態から開始する必要がある.
599デフォルトの名無しさん:2010/02/04(木) 06:38:48
http://pc12.2ch.net/test/read.cgi/tech/1263824755/459
# [1] 授業単元:プログラミング実践
# [2] 問題文
# アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして60°左回転した結果を出力せよ。
# (図)affin.txt
# 000000000
# 000010000
# 000010000
# 000010000
# 011111110
# 000010000
# 000010000
# 000010000
# 000000000
#
600デフォルトの名無しさん:2010/02/04(木) 07:45:56
>>597
% Prolog

program :-
  user_parameters(L),
  dividePart(L,L1),
  assertz('>>597 構造体'(L1)).

dividePart([],[]) :- !.
dividePart([A|R1],[(整数部(_整数部),小数部(_小数部),(実数値(_実数値))|R2]) :-
  atom_to_term(A,_実数値,_),
  _整数部 is float_integer_part(_実数値),
  _小数部 is float_fractional_part(_実数値),
  dividePart(R1,R2).

printData :-
  '>>597 構造体'(L),
  printSum(L,0.0,0.0,0.0).

printSum([],_整数部の合計,_小数部の合計,_実数値の合計) :-
  write_formatted('整数部の合計=%t,小数部の合計=%t,実数値の合計=%t\n',[_整数部の合計,_小数部の合計,_実数値の合計]),!.
printSum((整数部(_整数部),小数部(_小数部),(実数値(_実数値))|R1],_整数部の合計1,_小数部の合計1,_実数値の合計1) :-
  _整数部の合計2 is _整数部 + _整数部の合計1,
  _整数部の合計2 is _小数部 + _小数部の合計1,
  _実数値の合計2 is _実数値 + _実数値の合計1,
  printSum(R1,_整数部の合計2,_小数部の合計2,_実数値の合計2).
601デフォルトの名無しさん:2010/02/04(木) 07:52:16
>>596 の二節を訂正します
% Prolog

コンピュータオリンピアード(競技部門,X) :- 新しい競技種目になる(X).
=>
コンピュータオリンピアード(競技部門,X) :-
  コンピュータオリンピアード(新しい競技種目になる,X).


コンピュータオリンピアード(開催予定,第15回,金沢市内,'2010年','自9月25日','至10月2日').
=>
コンピュータオリンピアード(開催予定,第15回,金沢市内,'自2010年9月25日','至2010年10月2日').

下は原文のニュアンスから少し遠くなりますが。
'9月25日'-'10月2日'のような構造を持ったデータを持ってきたくないんです。
602デフォルトの名無しさん:2010/02/04(木) 08:02:08
>>601
それなら、

コンピュータオリンピアード(開催予定,第15回,金沢市内,'2010年').
コンピュータオリンピアード('第15回',開催日時,'9月25日から10月2日まで').

の方がいいのでは。
文の解析を残すのがいいかどうかというところだね。
603602:2010/02/04(木) 08:07:27
コンピュータオリンピアードを述語に持って来ているということは、
これがクラスという意識が多少はあるのかな?
604デフォルトの名無しさん:2010/02/04(木) 08:32:44
>>602
コンピュータオリンピアード('第15回',開催予定日,'9月25日から10月2日まで').
ですか。
「9月25日から10月2日まで」に比べて「9月25日から10月2日にかけて」は
ふくらみがありますね。こういう部分の表現は自然言語に敵わない。
いや、自然言語は大袈裟で単に「掛かる」という言葉のふくらみかな。

>>603
検索の都合もあるw ゼネラルデータベースのように特権的なテーブルとか
述語を持たない系は魅力がありますが、現実には大変でしょう。しかしまあ、
アナーキズムも再評価されているようですから、わからないですよね。
605デフォルトの名無しさん:2010/02/04(木) 09:15:50
http://pc12.2ch.net/test/read.cgi/tech/1263824755/465
# [2] CIP法での1次元の移流計算
#
# 自分で以下のプログラムを作ったところ。
# http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10493.txt
# tの値を増やすにつれてf[n][t]のnの初期のほうの値がなぜかでかい数字が出てしまいます。
# 自分の計算ではtの値を増やせば、f[n][t]のnの初期のほうの値は0になると思うんですが、一体どこが悪いのか、ご教授をお願いいたします。
606デフォルトの名無しさん:2010/02/04(木) 13:20:04
http://pc12.2ch.net/test/read.cgi/tech/1153585095/340
# 【 課題 】
# 次の要求を満たすフィルタプログラムを作れ。
# 1.標準入力から行を読み込み、空白をカンマに変換し、標準出力に出力する
# 2.連続した複数の空白はひとつの空白と同じと見なす
# 3.タブ文字も空白と見なす
# 4.オプション等は設けない
# 5.フィルタとして動作するので余分なメッセージ類は一切出力しない
#
# 例として「1 Bill  1955 Oct 28」と入力したら「1,Bill,1955,Oct,28」と出力されるようにします。
607デフォルトの名無しさん:2010/02/04(木) 17:11:30
>>606
% Prolog (その一) 例で ","の後に空白が一つ入っているのは誤りだと思う。

program :-
  repeat,
  標準入力から行を読み込み(_行),
  空白をカンマに変換し、標準出力に出力する(_行).

空白をカンマに変換し、標準出力に出力する(end_of_file) :- !.
空白をカンマに変換し、標準出力に出力する(_行) :-
  空白をカンマに変換し、(_行,_変換された行),
  標準出力に出力する(_変換された行),
  fail.

標準入力から行を読み込み(_行) :-
  get_line(_行).

空白をカンマに変換し、(_行,_変換された行) :-
  atom_chars(_行,Chars),
  文字ならびの空白をカンマに変換(Chars,Chars2),
  atom_chars(_変換された行,Chars2).

文字ならびの空白をカンマに変換([],[]) :- !.
文字ならびの空白をカンマに変換(L,[',']) :- 空白またはタブならび(L),!.
文字ならびの空白をカンマに変換(L1,[',',A|R2]) :-
  append(L0,[A|R3],L1),
  \+(A=' '),\+(A='\t'),
  空白またはタブならび(L0),
  文字ならびの空白をカンマに変換(R3,R2),!.
文字ならびの空白をカンマに変換([A|R1],[A|R2]) :-
  文字ならびの空白をカンマに変換(R1,R2),!.
608デフォルトの名無しさん:2010/02/04(木) 17:13:11
>>606
% Prolog (その二)

空白またはタブならび([' ']) :- !.
空白またはタブならび(['\t']) :- !.
空白またはタブならび([' '|R]) :-
  空白またはタブならび(R),!.
空白またはタブならび(['\t'|R]) :-
  空白またはタブならび(R),!.

標準出力に出力する(_行) :- write_formatted('%t\n',[_行]).
609デフォルトの名無しさん:2010/02/04(木) 17:18:29
http://pc12.2ch.net/test/read.cgi/tech/1260922392/27
# 微分方程式の境界値問題
#
# y''(x) = f(y(x)), 0<x<1, y(0)=y(1)=0
#
# の解を数値的に求める方法のひとつとして、射的法(shooting method)
# があります。自然数nを与えて、区間[0,1]をn等分して、ykをy(k/n)
# の近似式として、漸化式(ここから下のyの後ろのカッコの中身は添え字と思え)
# y(0) = 0, y(1)= t,
# y(k+1) = 2y(k) - y(k-1) + 1/n²f(y(k)), k=1,2,…,2n-1,
# の解の数値的y(n)=0 を満たすものを、上の問題の近似解として求める方法です。
# yn=0となる数列を求めるために、ynを未知パラメータtの関数とみなして、tに関する二分法を使います。
#
# 正の実数aを適当に定めて、
# f(y) = ay(1 - y)
# の場合の近似解y(k)を、誤差10-6の範囲で求めるプログラムを作成してください。
# 自然数nは適当に決めてください。(2のベキ乗にするのが無難です)
# 実数あの値は、とりあえず20にしてみてください。
# (注意:a≧10でないと…)
610デフォルトの名無しさん:2010/02/04(木) 18:24:04
>>52

音通(恨み,浦見).
音通(恨み,裏見).

この系統は根深い。
611デフォルトの名無しさん:2010/02/04(木) 20:58:20
>>515
使用言語:J

g=:(0=3&|)+.(3 e. 10&#.inv)
f=:[:;{&('NO';'YES')

f g 11
NO
f g 12
YES
f g 13
YES
612デフォルトの名無しさん:2010/02/05(金) 06:06:05
>>206
% Prolog (その一)

自分で五つの問題文を入力して練習するタイピング練習ソフト :-
  自分で五つの問題文を入力して(1,_五つの問題文),
  問題文は入力した五つの中から10題がランダムに出題される(1,_五つの問題文,_問題文ならび),
  タイプ練習(_問題文ならび,_正解数),
  write_formatted('正解数は%tです\n',[_正解数]).

自分で五つの問題文を入力して(N,[]) :- N > 5,!.
自分で五つの問題文を入力して(N,[_問題文|R]) :-
  問題文を入力して(_問題文1),
  問題文の長さを調整する(_問題文1,_問題文),
  N2 is N + 1,
  自分で五つの問題文を入力して(N2,R).
 
問題文を入力して(_問題文) :- write_formatted('%tつ目の問題文 :',[N]),get_line(問題文),!.

問題文の長さを調整する(_問題文,_問題文) :-
  sub_atom(_問題文,0,_長さ,_,_問題文),
  _長さ =< 20,!.
問題文の長さを調整する(_問題文1,_問題文) :-
  sub_atom(_問題文1,0,20,_,_問題文).
613デフォルトの名無しさん:2010/02/05(金) 06:07:07
>>206
% Prolog (その二)

問題文は入力した五つの中から10題がランダムに出題される(N,_,[]) :- N > 10,!.
問題文は入力した五つの中から10題がランダムに出題される(N,_問題集,[_問題|R]) :-
  M is (random mod 5) + 1,
  list_nth(M,_問題集,_問題),
  N2 is N + 1,
  問題文は入力した五つの中から10題がランダムに出題される(N2,_問題集,R).

タイプ練習([],0) :- !.
タイプ練習([_問題文|R],_正解数) :-
  write_formatted('%t\n',[_問題文]),get_line(Line),
  _問題文 = Line,
  タイプ練習(R,_正解数2),
  _正解数 is _正解数2 + 1,!.
タイプ練習([_|R],_正解数) :- タイプ練習(R,_正解数).
614デフォルトの名無しさん:2010/02/05(金) 06:28:08
>>212
% Prolog

'2つの名前を入力しステータス(ランダム)を決定し 勝敗表示する' :-
  '2つの名前を入力し'(_名前1,_名前2),
  'ステータス(ランダム)を決定し'(_名前1のステータス,_名前2のステータス),
  勝負表示する(_名前1,_名前2,_名前1のステータス,_名前2のステータス),!.

'ステータス(ランダム)を決定し'(_名前1のステータス,_名前2のステータス) :-
  _名前1のステータス is random mod 100 + 1,
  _名前2のステータス is random mod 100 + 1.

勝負表示する(_名前1のステータス,_名前2のステータス) :-
  _名前1のステータス > _名前2のステータス,
  write_formatted('%tの勝ちです\n',[_名前1]),!.
勝負表示する(_名前1のステータス,_名前2のステータス) :-
  _名前1のステータス < _名前2のステータス,
  write_formatted('%tの勝ちです\n',[_名前2]),!.
勝負表示する(_名前1のステータス,_名前2のステータス) :-
  _名前1のステータス = _名前2のステータス,
  write('引き分けです\n'),!.
615デフォルトの名無しさん:2010/02/05(金) 09:44:04
>>238
% Prolog ここでは構造体=述語定義と解釈してみる。

'構造体を利用して、氏名,年齢,性別が5人分書かれたテキストファイルを読み込んで、画面に表示する'(_テキストファイル) :-
  '構造体を利用して、氏名,年齢,性別が5人分書かれた次のようなテキストファイルを読み込んで、(_テキストファイル,Lines),
  abolish(氏名・年齢・性別/3),
  '氏名・年齢・性別構造体として定義'(Lines).
  画面に表示する,!.

'構造体を利用して、氏名,年齢,性別が5人分書かれたテキストファイルを読み込んで、(_テキストファイル,Lines) :-
  get_lines(_テキストファイル,Lines),!.

'氏名・年齢・性別構造体として定義'([]) :- !.
'氏名・年齢・性別構造体として定義'([Line|R]) :-
  split(Line,[' '],[_氏名,_年齢,_性別]),
  assertz(氏名・年齢・性別(氏名(_氏名),年齢(_年齢),性別(_性別))),
  '氏名・年齢・性別構造体として定義'(R).

画面に表示する :-
  write('%20s %6s %4s\n',[氏名,年齢,性別]),
  氏名・年齢・性別(氏名(_氏名),年齢(_年齢),性別(_性別)),
  write_formatted('%20s %6d %4s\n',[_氏名,_年齢,_性別]),
  fail.
画面に表示する.
616デフォルトの名無しさん:2010/02/05(金) 10:45:47
>>515
使用言語:J
同じ値がでないステータスの生成なので引き分けはない。

f=:dyad define
'xs ys'=. 2?10000
smoutput x,' status ',":xs
smoutput y,' status ',":ys
smoutput (;(xs<ys){x;y),' win'
)

'scala' f 'clojrure'
scala status 8546
clojrure status 8515
scala win
617デフォルトの名無しさん:2010/02/05(金) 10:49:07
>>616

>>515 ではなくて >>212 でした
618デフォルトの名無しさん:2010/02/05(金) 16:47:01
>>229
% Prolog

'テキストファイルの内容を,別のテキストファイルにコピーする'(_コピー元ファイル,_コピー先ファイル) :-
  open(_コピー元ファイル,read,Input,[type(binary)]),
  open(_コピー先ファイル,write,Output,[type(binary)]),
  repeat,
  一文字読む(Input,C),
  一文字書き出す(Output,C),
  close(Input),
  close(Output),!.

一文字読む(Input,C) :- get_byte(C).

一文字書き出す(Output,-1) :- !.
一文字書き出す(Output,C) :- put_byte(Output,C),fail.!.

テキストファイルの中身の内容を画面に出力(_コピー元ファイル,_コピー先ファイル) :-
  get_lines(_コピー元ファイル,Lines1),
  get_lines(_コピー先ファイル,Lines2),
  '2テキストを並べて行表示'(Lines1,Lines2),!.

'2テキストを並べて行表示'([],[]) :- !.
'2テキストを並べて行表示'([A|R1],[B|R2]) :-
  write_formatted('%t %t\n',[A,B]),
  '2テキストを並べて行表示'(R1,R2).
619デフォルトの名無しさん:2010/02/05(金) 17:10:32
>>232
% Prolog

モンテカルロ法で円周率を計算する(_円周率) :-
  モンテカルロ法で円周率を計算する(1,10000,0,_円周率),!.

モンテカルロ法で円周率を計算する(M,N,Y,X) :- M > N,X is 4.0 * Y / N,!.
モンテカルロ法で円周率を計算する(M,N,Y,X) :-
  U1 is ((random mod 10000) / 10000) ^ 2,
  U2 is ((random mod 10000) / 10000) ^ 2,
  U1 + U2 =< 1.0,
  Y2 is Y + 1,
  M2 is M + 1,
  モンテカルロ法で円周率を計算する(M2,N,Y2,X),!.
モンテカルロ法で円周率を計算する(M,N,Y,X) :-
  M2 is M + 1,
  モンテカルロ法で円周率を計算する(M2,N,Y,X),!.
620デフォルトの名無しさん:2010/02/05(金) 17:24:20
>>244
% Prolog

オイラー級数を用いて、πの近似値を求める(_円周率) :-
  findsum(U,(for(1,N,100000),U is 1 / (N * N)),Sum),
  _円周率 is sqrt(6 * Sum).
621デフォルトの名無しさん:2010/02/05(金) 17:25:31
Prolog氏かっけー。
622620:2010/02/05(金) 19:16:08
ごめん出題は >>144 だった。
623デフォルトの名無しさん:2010/02/06(土) 07:00:34
大学が ->受験->春休み になるから、出題なくなりますね。未解決問題を
しばらくは潰していきます。
624デフォルトの名無しさん:2010/02/07(日) 05:47:54
http://pc12.2ch.net/test/read.cgi/tech/1263824755/483
# [1] C言語プログラミング初歩(専門学校)
# [2] int型の配列変数A[64][32]をB[32][64]に代入する.
# 次の対応があるようにすること
# A[0][0] -> A[0][1] -> A[0][31] ->A[1][0] ->....->A[63][31]
# B[0][0] -> B[0][1]-> B[0][31] -> B[0][32]->....->B[31][63]
# (上の段と下の段が一致)
# A[m][n]には値 (m+n) % 31が入っているものとする。
625デフォルトの名無しさん:2010/02/07(日) 05:51:59
http://pc12.2ch.net/test/read.cgi/tech/1263824755/480
# [2] プログラム
# 環境
# [3.1] OS:Linux
# [3.2] コンパイラ名:gcc
# [3.3] 言語:C++
# 以下の実行結果はどうなるか
#
#
# #include<stdio.h>
# #define N10
# int main(){
# int i,wa=0;
# for(i=1;i<N;i++){
# if((i%2) == 0) continue;
# wa+=i;}
# printf("%d\n",wa);
# return 0;}
#
# これを、C言語を他の言語に書き換える課題とします。

626デフォルトの名無しさん:2010/02/07(日) 06:23:14
>>624
% Prolog

ならびを2要素ごとに纏める([],[]) :- !.
ならびを2要素ごとに纏める([L1,L2|R1],[L3|R2]) :-
  append(L1,L2,L3),
  ならびを2要素ごとに纏める(R1,R2).
627デフォルトの名無しさん:2010/02/07(日) 06:34:42
>>624
% Prolog

'A[m][n]には値 (m+n) % 31が入っている'(A) :-
  'A[m][n]には値 (m+n) % 31が入っている'(0,A),!.

'A[m][n]には値 (m+n) % 31が入っている'(M,[]) :- M > 31,!.
'A[m][n]には値 (m+n) % 31が入っている'(M,[L|R]) :-
  'A[m][n]には値 (m+n) % 31が入っている'(M,0,L),
  M2 is M + 1,
  'A[m][n]には値 (m+n) % 31が入っている'(M2,R).

'A[m][n]には値 (m+n) % 31が入っている'(M,N,[]) :- N > 63,!.
'A[m][n]には値 (m+n) % 31が入っている'(M,N,[X|R]) :-
  X is (M + N) mod 31,
  N2 is N + 1,
  'A[m][n]には値 (m+n) % 31が入っている'(M,N2,R),!.
628デフォルトの名無しさん:2010/02/07(日) 07:03:06
>>625
% Prolog

'Prologでの表現' :-
  'Prologでの表現'(1,X),
  write_formatted('%t\n',[X]).

'Prologでの表現'(9,0) :- !.
'Prologでの表現'(N,X) :-
  0 is N mod 2,
  N2 is N + 1,
  'Prologでの表現'(N2,Y),
  X is Y + 1,!.
'Prologでの表現'(N,X) :-
  \+(0 is N mod 2),
  N2 is N + 1,
  'Prologでの表現'(N2,X).
629デフォルトの名無しさん:2010/02/07(日) 16:33:47
http://pc12.2ch.net/test/read.cgi/tech/1263824755/494
# 【質問テンプレ】
# [1] 授業単元:C言語入門
# [2] 問題文:
# キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。
# その数だけアスタリスクを表示する。
# ただし、入力を終了するときはCtrl+Zを押すものとする。(vowel.c)
630デフォルトの名無しさん:2010/02/07(日) 16:44:40
>>629
% Prolog

キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する :-
  キーボードから英文を1文字ずつ入力し(Chars),
  母音の出現数をカウントする(Chars,L),
  その数だけアスタリスクを表示する(L).

キーボードから英文を1文字ずつ入力し(Chars) :-
  get_chars(Chars).

母音の出現数をカウントする(L) :-
  findall('*',(member(A,Chars),member(A,['A','E','I','O','U',a,e,i,o,u])),L).

その数だけアスタリスクを表示する(L) :-
  concat_atom(L,S),
  write_formatted('%t\n',[S]).
631デフォルトの名無しさん:2010/02/07(日) 16:50:26
>>630 (>>629) 訂正
% Prolog 述語 母音の出現数をカウントする の第一引数が落ちていました。

キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する :-
  キーボードから英文を1文字ずつ入力し(Chars),
  母音の出現数をカウントする(Chars,L),
  その数だけアスタリスクを表示する(L).

キーボードから英文を1文字ずつ入力し(Chars) :-
  get_chars(Chars).

母音の出現数をカウントする(Chars,L) :-
  findall('*',(member(A,Chars),member(A,['A','E','I','O','U',a,e,i,o,u])),L).

その数だけアスタリスクを表示する(L) :-
  concat_atom(L,S),
  write_formatted('%t\n',[S]).
632デフォルトの名無しさん:2010/02/07(日) 16:55:48
>>629
% Prolog 母音出現数をカウントする 以下は、この定義の方が自然かもしれない。
% でも、私はアスタリスクの表示でカウントしているとする>>631の方が好きだ。

キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する :-
  キーボードから英文を1文字ずつ入力し(Chars),
  母音の出現数をカウントする(Chars,_カウント),
  その数だけアスタリスクを表示する(_カウント).

キーボードから英文を1文字ずつ入力し(Chars) :-
  get_chars(Chars).

母音の出現数をカウントする(Chars,_カウント) :-
  count((member(A,Chars),member(A,['A','E','I','O','U',a,e,i,o,u])),_カウント).

その数だけアスタリスクを表示する(_カウント) :-
  length(L,_カウント),
  all(L,'*'),
  concat_atom(L,S),
  write_formatted('%t\n',[S]).
633デフォルトの名無しさん:2010/02/07(日) 19:30:00
http://pc12.2ch.net/test/read.cgi/tech/1263824755/502
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
#  入力された2つの文字列str1,str2を比較し、str1にstr2の文字列が含まれている場合に1を、
#   含まれていない場合に-1を返す関数、strcmpを作成せよ。
# int strcmp( char *str1, char *str2);
# ex. str1=”abaabab” , str2=”aab” 1
# ex. str1=”abaabab” , str2=”abb” -1
634デフォルトの名無しさん:2010/02/07(日) 19:36:17
>>633
% Prolog

入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,1) :-
  sub_atom(Str1,_,_,_,Str2),!.
入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,(-1)) :-
  \+(sub_atom(Str1,_,_,_,Str2)),!.
635デフォルトの名無しさん:2010/02/07(日) 19:54:06
>>633
% Prolog 「1を返す」という部分が微妙な位置にある例。

入力された2つの文字列Str1,Str2を比較する(Str1,Str2,_診断) :-
  'Str1にStr2の文字列が含まれている場合に1を返す'(Str1,Str2,_診断),!.
入力された2つの文字列Str1,Str2を比較する(Str1,Str2,_診断) :-
  'Str1にStr2の文字列が含まれていない場合に-1を返す'(Str1,Str2,_診断),!.

'Str1にStr2の文字列が含まれている場合に1を返す'(Str1,Str2,1) :-
  sub_atom(Str1,_,_,_,Str2),!.

'Str1にStr2の文字列が含まれていない場合に-1を返す'(Str1,Str2,(-1)) :-
  \+(sub_atom(Str1,_,_,_,Str2)),!.

636デフォルトの名無しさん:2010/02/08(月) 04:33:36
>>633
% Prolog

入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,1) :-
  'Str1にStr2の文字列が含まれている'(Str1,Str2),!.
入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,(-1)) :-
  'Str1にStr2の文字列が含まれていない'(Str1,Str2),!.

'Str1にStr2の文字列が含まれている'(Str1,Str2) :-
  sub_atom(Str1,_,_,_,Str2),!.

'Str1にStr2の文字列が含まれていない'(Str1,Str2) :-
  \+(sub_atom(Str1,_,_,_,Str2)),!.
637デフォルトの名無しさん:2010/02/08(月) 04:51:03
>>634->>636
要するにどこで組込述語を含む原初的な述語を目標とする節に行き着くか。そこまで
自然な説明として目標を辿ることができるように定義できるか、ということ。
ここで原初的な述語とは、先祖定義に現れる親子/2のような述語。

先祖(X,Y) :- 親子(X,Y).
先祖(X,Y) :- 親子(X,Z),先祖(Z,Y).

親子(義朝,頼朝).
親子(為朝,義朝).
638デフォルトの名無しさん:2010/02/08(月) 04:52:59
ふつう祖先だったかw
639デフォルトの名無しさん:2010/02/08(月) 05:01:20
http://pc12.2ch.net/test/read.cgi/tech/1263824755/515
# 【質問テンプレ】
# [1] 授業単元:C言語
# [2] 問題文:
# input.ppm というPPMフォーマットのファイルを読み込み, ヘッダをつけて縦横をそれぞれ 1/2(面積にして1/4) にして出力するプログラムを書きなさい.
# input.ppm のサイズは 410x307 である.
640デフォルトの名無しさん:2010/02/08(月) 21:12:40
http://pc12.2ch.net/test/read.cgi/tech/1248012902/839
# 【 課題 】5個以上の学生番号(2桁程度の数字で良い)、
#       名前、身長をプログラム中でセットし、
#       学生番号または名前をもとに身長を調べるプログラム。
#       学生番号と名前の入力データ、検索結果の身長データを両方表示する機
能があること。
# 【 形態 】1. Javaアプリケーション(main()で開始)/
# 【 期限 】2/10(水)
#
# たぶん二分探索使うかと思うのですが
# よくわかりません!すみませんがよろしくおねがいします!!
641デフォルトの名無しさん:2010/02/08(月) 21:38:31
>>640
% Prolog

学生(11,源亮,168).
学生(33,高階高子,156).
学生(7,九条良常,173).
学生(61,石川広也,162).
学生(16,藤原隆甫,177).

学生番号または名前をもとに身長を調べる(_学生番号または名前,_身長) :-
  integer(_学生番号または名前),
  学生(_学生番号または名前,_名前,_身長),
  write_formatted('学生番号=%t,名前=%t,身長=%t\n',[_学生番号または名前,_名前,_身長]).
学生番号または名前をもとに身長を調べる(_学生番号または名前,_身長) :-
  atom(_学生番号または名前),
  学生(_学生番号,_学生番号または名前,_身長),
  write_formatted('学生番号=%t,名前=%t,身長=%t\n',[_学生番号,_学生番号または名前,_身長]).
642デフォルトの名無しさん:2010/02/08(月) 21:56:43
>>641
% Prolog
write_formatted/2で結果を表示するのに、第二引数に"_身長"が付いているのは
奇妙ですね。これは同姓同名の有り得ることを思い起こさせるための配慮と
考えてください。
643デフォルトの名無しさん:2010/02/09(火) 05:06:03
http://pc12.2ch.net/test/read.cgi/tech/1263824755/528
# [1] 授業単元:C言語
# [2] 問題文: ガウス分布における数値積分 I=∫f(x)dx,←xmin〜xmax f(x)=1/√(2*π*σ)*exp(a)  a=-(x-μ)*(x-μ)/(2*σ*σ)
# 積分区間は[xmin,xmax]=[myuu-2siguma,myuu+2siguma]として計算すること。なおμ=0,σ=1とした場合、I=0.95449と
#   なるので確認すること。
644デフォルトの名無しさん:2010/02/09(火) 05:09:15
http://pc11.2ch.net/test/read.cgi/db/1252492296/500
# MYSQLなんですけど
#
# date      data
# 2010/01/01 hoge1
# 2010/01/05 hoge2
#
# みたいなテーブルから
#
# 2010/01/01 hoge1
# 2010/01/02 NULL
# 2010/01/03 NULL
# 2010/01/04 NULL
# 2010/01/05 hoge2
#
# のような結果の出せるSQLを求めてます。
#
# select * from table between date '2010/01/01' and '2010/01/05'
#
# とするとデータのある2レコードしか出ないのですが、
# データがない部分も日付を出しつつ、デフォルトのデータないよっていう文字列を出せると助かります。
645デフォルトの名無しさん:2010/02/09(火) 07:04:31
>>644
% Prolog こんな述語定義が必要。日付連鎖は未定義かも知れない。後で。

'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付下限,_日付上限) :-
  日付からデータを表示する。存在しない日はデータをNULLとして表示(_日付下限),
  日付連鎖(_日付下限,_日付),
  日付からデータを表示する。存在しない日はデータをNULLとして表示(_日付),
  _日付=_日付上限.

'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付) :-
  _日付 = (_年/_月/_日),
  table(_日付,Data),
write_formatted('%2d%2d%2d %t\n',[_年,_月,_日,Data]),!.
'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付) :-
  _日付 = ( _年/_月/_日),
  \+(table(_日付,Data)),
  write_formatted('%2d%2d%2d NULL\n',[_年,_月,_日]),!.
646デフォルトの名無しさん:2010/02/09(火) 07:06:43
http://pc12.2ch.net/test/read.cgi/tech/1248012902/847
# 【 課題 】電話番号検索を行うjavaプログラムを、探索アルゴリズムを用いて作成せよ。
# 【 補足 】・最初に顧客番号(2桁の数字)、顧客名(Yamadaなど姓のみ)、
# 電話番号(09012345678の形式、ハイフンなし)という顧客データを10人以上プログラム中でセットし、
# 顧客番号または姓をもとに電話番号を調べるアルゴリズムを作成する。
#       ・顧客番号と顧客名の入力データ、電話番号データを両方表示させる機能をつけなければならない。
#       ・(もし可能なら)データリストへの顧客データの追加or削除機能を盛り込みたい
647デフォルトの名無しさん:2010/02/09(火) 07:21:04
>>646
% Prolog 実際には、入力された項・要素の形式検査をしますが。

電話番号を10件登録する :-
  write('引数として、顧客番号(2桁の数字)、顧客名(Yamadaなど姓のみ)、電話番号(09012345678の形式、ハイフンなしの三つの項をもつ複合項、電話番号を10件入力します\n'),
  for(1,N,10),write_formatted('%t件目 : '),read(X),assertz(X),N=10.

顧客データの追加(_追加する項) :- assertz(_追加する項).

顧客データの削除(_追加する項) :- retract(_削除する項).

電話番号の検索(_顧客番号,_顧客名,_電話番号) :- 電話番号(_顧客番号,_顧客名,_電話番号).
648デフォルトの名無しさん:2010/02/09(火) 07:23:27
>>647 訂正 write_formatted/2の引数が目標で1個になってしまっているところがあった。
% Prolog 実際には、入力された項・要素の形式検査をしますが。

電話番号を10件登録する :-
  write('引数として、顧客番号(2桁の数字)、顧客名(Yamadaなど姓のみ)、電話番号(09012345678の形式、ハイフンなしの三つの項をもつ複合項、電話番号を10件入力します\n'),
  for(1,N,10),write_formatted('%t件目 : ',[N]),read(X),assertz(X),N=10.

顧客データの追加(_追加する項) :- assertz(_追加する項).

顧客データの削除(_追加する項) :- retract(_削除する項).

電話番号の検索(_顧客番号,_顧客名,_電話番号) :- 電話番号(_顧客番号,_顧客名,_電話番号).
649デフォルトの名無しさん:2010/02/09(火) 07:25:45
http://pc12.2ch.net/test/read.cgi/tech/1263824755/534
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 配列に
# Institute of Technology
# という文字列を代入し、ポインタを利用して
# ・各文字が格納されているアドレス
# ・そのアドレスに格納されている文字
# を表示するプログラムを作成せよ。
650デフォルトの名無しさん:2010/02/09(火) 07:27:55
>>649
% Prolog
% Prologではアドレス操作はできない。したがって、この問題は解けない。
651デフォルトの名無しさん:2010/02/09(火) 07:48:06
>>648 (>>646)
% Prolog さすがにちょっと乱暴だったか。

顧客データの追加(_顧客番号,_顧客名,_電話番号) :- assertz(電話番号(_顧客番号,_顧客名,_電話番号)).

顧客データの削除(_顧客番号,_顧客名,_電話番号) :- retract(電話番号(_顧客番号,_顧客名,_電話番号)).
652デフォルトの名無しさん:2010/02/09(火) 07:59:23
>>648
% Prolog この「いろんな言語で宿題スレ」に書き込みだしてから初めて read/1 を使っています。
% この組込述語は入力を項として解釈する便利で基本的なものですが、
% 入力時にピリオドで終了する必要があります。これを一般ユーザに要請するのは
% 現実的ではないと考えて、get_line/1等を用いてきました。
% 利用者がPrologの項とそのルールについて理解している場合はreadを使って
% 構わないと思います。なお細かいことですが、read/1の場合、
% 標準では処理系がプロンプトを表示するが普通です。その表示するプロンプトの
% 変更なども組込述語で行えるようになっています。
653デフォルトの名無しさん:2010/02/09(火) 08:10:02
>>642

654デフォルトの名無しさん:2010/02/09(火) 08:26:31
http://pc12.2ch.net/test/read.cgi/tech/1263824755/535
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# まず次の内容のテキストファイルを準備せよ。
# (メモ帳で作成し、test02.txtという名前で保存すること)
#
# abc
# 123
# def
# 456
# ghi
# 789
# jkl
# 000
#
# 次に、作成したテキストファイルから内容を読み出し、
# 各行の先頭に 01 02 03 というように番号を付加して
# 画面に出力するプログラムを作成せよ。
655デフォルトの名無しさん:2010/02/09(火) 08:38:03
>>654
% Prolog

'テキストファイルから内容を読み出し、各行の先頭に 01 02 03 というように番号を付加して画面に出力する' :-
  get_lines('test02.txt',L),
  '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(1,L).

'各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(_,[]) :- !.
'各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N,[Line|R]) :-
  write_formatted_atom('%2d',[N],A),
  空白を0に置換する(A,A2),
  write_formatted('%t %t\n',[A2,Line]),
  N2 is N + 1,
  '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N2,R).

空白を0に置換する(A,A2) :-
  atom_chars(A,L),
  ならびの置換(' ','0',L,L2),
  atom_chars(A2,L2).
656デフォルトの名無しさん:2010/02/09(火) 09:04:16
>>653
% Prolog

ある述語の引数を表示する場合の一般解は :-
  ある述語(_引数),
  write_formatted('%t\n'm,[_引数]),
  fail.
ある述語の引数を表示する場合の一般解は.

でしょう。>>641では同姓同名をきっちりと表示することをサボっています。
それでそのことをこの述語を利用するプログラマに注意するために変数の引数を
強制しています。こうして置けば、この述語をテストした時に

?- 学生番号または名前をもとに身長を調べる(藤原隆甫,_身長).
_身長 = 177

という解を示してインタプリタが停止します。これがPrologプログラマをして
同姓同名への配慮が必要かどうか判断させる契機となるということです。
657デフォルトの名無しさん:2010/02/09(火) 09:07:39
>>656
変な"m"が混入してしまいました。

write_formatted('%t\n'm,[_引数]),  -> write_formatted('%t\n',[_引数]),

です。
658デフォルトの名無しさん:2010/02/09(火) 11:53:10
>>654
% Prolog 出題の元スレの覗いていたら、%02d というformat表記が出ていた。
% もしかしてと試みたら私のPrologでも同じ。これまでの私の人生は何だったんだwww
% ということで、

'テキストファイルから内容を読み出し、各行の先頭に 01 02 03 というように番号を付加して画面に出力する' :-
  get_lines('test02.txt',L),
  '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(1,L).

'各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(_,[]) :- !.
'各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N,[Line|R]) :-
  write_formatted('%02d %t\n',[N,Line]),
  N2 is N + 1,
  '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N2,R).
659デフォルトの名無しさん:2010/02/09(火) 12:19:44
>>644
% Prolog これも実はヘッドゼロサプライだったのだけれど、サボっていた。
% 直そうと見たら、スラッシュも落ちていた。修正。

'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付下限,_日付上限) :-
  日付からデータを表示する。存在しない日はデータをNULLとして表示(_日付下限),
  日付連鎖(_日付下限,_日付),
  日付からデータを表示する。存在しない日はデータをNULLとして表示(_日付),
  _日付=_日付上限.

'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付) :-
  _日付 = (_年/_月/_日),
  table(_日付,Data),
  write_formatted('%02d/%02d/%02d %t\n',[_年,_月,_日,Data]),!.
'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付) :-
  _日付 = ( _年/_月/_日),
  \+(table(_日付,Data)),
  write_formatted('%02d/%02d/%02d NULL\n',[_年,_月,_日]),!.
660デフォルトの名無しさん:2010/02/09(火) 12:37:38
>>645 (>>644)
% Prolog 日付連鎖は

日付連鎖(_日付,_今日) :- var(_日付),前日・今日(_日付,_今日).
日付連鎖(_日付,_今日) :- var(_日付),前日・今日(_前日,_今日),日付連鎖(_日付,_前日).
日付連鎖(_今日,_日付) :- var(_日付),前日・今日(_今日,_日付).
日付連鎖(_今日,_日付) :- var(_日付),前日・今日(_今日,_翌日),日付連鎖(_翌日,_日付).

前日・今日(_前日の年/12/31,_年/1/1) :- 一つ違い(_前日の年,_年),!.
前日・今日(_年/2/29,_年/3/1) :- うるう年(_年),!.
前日・今日(_年/2/28,_年/3/1) :- not(うるう年(_年)),!.
前日・今日(_年/_前月/30,_年/_月/1) :- 一つ違い(_前月,_月),member(_前月,[4,6,9,11]),!.
前日・今日(_年/_前月/31,_年/_月/1) :- 一つ違い(_前月,_月),member(_前月,[1,3,5,7,8,10,12]),!.
前日・今日(_年/_月/_前日,_年/_月/_日) :- 一つ違い(_前日,_日),!.

一つ違い(M,N) :- integer(M),!,N is M + 1 .
一つ違い(M,N) :- integer(N),!,M is N - 1 .

うるう年(_年) :- 0 is _年 mod 400,!.
うるう年(_年) :- 0 is _年 mod 100,!,fail.
うるう年(_年) :- 0 is _年 mod 4,!.
うるう年(_年) :- not(0 is _年 mod 4),fail.
661デフォルトの名無しさん:2010/02/09(火) 14:16:05
# t_date 1_dekidaka a_dekidaka
# 2010/01/28 1000 1500
# 2010/01/29 1026 0
# 2010/01/30 0 3400
# みたいな感じなんですけど。
662デフォルトの名無しさん:2010/02/09(火) 14:18:07
>>661 上半分がちぎれてしまった。
http://pc11.2ch.net/test/read.cgi/db/1252492296/502
# すいませんが、SQLを教えてください MySQL 5.1.35です
# 日付テーブル dailytbl
# t_date 西暦日付
#
# 出来高aテーブル
# code 1,2,3〜
# a_date 西暦日付
# dekidaka
#
# 出来高bテーブル
# code a,b,c〜
# a_date 西暦日付
# dekidaka
#
# 日付テーブルのt_dateに沿って出来高を表示させたいです。
# 出来高aテーブルにしても、出来高bテーブルにしても出来高のない日が
# ありますが、出来高のない日はdekidakaを0として表示させたい
#
# イメージとしては
# 日付テーブル 出来高aテーブル 出来高bテーブル
# t_date 1_dekidaka a_dekidaka
# 2010/01/28 1000 1500
# 2010/01/29 1026 0
# 2010/01/30 0 3400
# 2010/01/31 0 5500
# みたいな感じなんですけど。
663デフォルトの名無しさん:2010/02/09(火) 14:22:31
>>662
% Prolog

日付テーブルのt_dateに沿って出来高を表示する :-
  write('日付テーブル 出来高aテーブル 出来高bテーブル\n'),
  日付テーブル(_西暦日付),
  出来高aテーブルの取得(_西暦日付,_出来高a),
  出来高bテーブルの取得(_西暦日付,_出来高b),
  write_formatted('%t   %10d   %10d\n',[_西暦日付,_出来高a,_出来高b]),
  fail.
日付テーブルのt_dateに沿って出来高を表示する.

出来高aテーブルの取得(_西暦日付,_出来高a) :- 出来高aテーブル(_西暦日付,_出来高a),!.
出来高aテーブルの取得(_,0).

出来高bテーブルの取得(_西暦日付,_出来高b) :- 出来高bテーブル(_西暦日付,_出来高b),!.
出来高bテーブルの取得(_,0).
664デフォルトの名無しさん:2010/02/09(火) 14:39:10
>>662
% Prolog 日付テーブルにそって常に全部表示するというのは現実味がない。

日付テーブルのt_dateに沿って出来高を表示する(_日付下限,_日付上限) :-
  write('日付テーブル 出来高aテーブル 出来高bテーブル\n'),
  日付テーブル(_西暦日付),
  _西暦日付>=_日付下限,
  _西暦日付=<_日付上限,
  出来高aテーブルの取得(_西暦日付,_出来高a),
  出来高bテーブルの取得(_西暦日付,_出来高b),
  write_formatted('%t   %10d   %10d\n',[_西暦日付,_出来高a,_出来高b]),
  fail.
日付テーブルのt_dateに沿って出来高を表示する(_,_).
665デフォルトの名無しさん:2010/02/09(火) 14:49:05
>>663 (>>662)
% Prolog もう一つの表記法を示す。この表記法もread/1と同様このスレでは
% 私は故意に使用しなかった。

日付テーブルのt_dateに沿って出来高を表示する :-
  write('日付テーブル 出来高aテーブル 出来高bテーブル\n'),
  (
    日付テーブル(_西暦日付),
    ( 出来高aテーブル(_西暦日付,_出来高a);\+(出来高aテーブル(_西暦日付,_)),_出来高a=0),
    ( 出来高bテーブル(_西暦日付,_出来高b);\+(出来高bテーブル(_西暦日付,_)),_出来高b=0),
    write_formatted('%t   %10d   %10d\n',[_西暦日付,_出来高a,_出来高b]),
    fail;
    true
  ).
666デフォルトの名無しさん:2010/02/09(火) 17:09:19
http://pc12.2ch.net/test/read.cgi/tech/1248012902/850
# 【 課題 】‐出題内容‐
# Testプロジェクトのsrc直下にパッケージtest5を作成し、下記のテストプログラムを作成する。そして、TripTestをパスする実装を作成しなさい。
# <TripTestの説明>
# 日本旅行(JapanTrip)とアメリカ旅行(AmericaTrip)それぞれの旅費を算出する機能を実装する。抽象クラスTripを作成すること。
# 日本旅行もアメリカ旅行も食費(1万円)と宿泊費(3万円)は全く同じ金額で変わらないものとする。
# それぞれの食費、宿泊費、交通費はそのまま金額が取得でき、旅費合計は食費と宿泊費と交通費を足したものである。
#
# package test5;
#
# import static org.junit.Assert.*;
# import org.junit.Test;
# public class TripTest {
# @Test // 旅費を算出するテストプログラム
# public void testCost() throws Exception {
# Trip jpTrip = new JapanTrip();
# assertEquals(10000, jpTrip.getFoodCost()); // 食費
# assertEquals(30000, jpTrip.getRoomCost()); // 宿泊費
# assertEquals(50000, jpTrip.getTravelCost()); // 交通費
# assertEquals(90000, jpTrip.getTotalCost()); // 旅費合計(食費+宿泊費+交通費)
# Trip americaTrip = new AmericaTrip();
# assertEquals(10000, americaTrip.getFoodCost()); // 食費
# assertEquals(30000, americaTrip.getRoomCost()); // 宿泊費
# assertEquals(300000, americaTrip.getTravelCost()); // 交通費
# assertEquals(340000, americaTrip.getTotalCost()); // 旅費合計(食費+宿泊費+交通費)
# }
# }
667デフォルトの名無しさん:2010/02/09(火) 17:34:26
>>666
% Prolog 旅費を算出するまでもない。

旅費(日本,食費,10000).
旅費(日本,宿泊費,30000).
旅費(日本,交通費,50000).
旅費(日本,合計,_旅費合計) :-
  旅費(日本,食費,_食費),
  旅費(日本,宿泊費,_宿泊費),
  旅費(日本,交通費,_交通費),
  _旅費合計 is _食費 + _宿泊費 + _交通費.
旅費(アメリカ,食費,10000).
旅費(アメリカ,宿泊費,30000).
旅費(アメリカ,交通費,300000).
旅費(アメリカ,合計,_旅費合計) :-
  旅費(アメリカ,食費,_食費),
  旅費(アメリカ,宿泊費,_宿泊費),
  旅費(アメリカ,交通費,_交通費),
  _旅費合計 is _食費 + _宿泊費 + _交通費.
668デフォルトの名無しさん:2010/02/09(火) 18:30:28
# http://pc12.2ch.net/test/read.cgi/tech/1248012902/848
# 【 課題 】クラスの継承 http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/920.zip
# 課題11-2
# オブジェクト指向型の特徴である多態性(ポリモーフィズム)を利用して
# AnimalクラスのDogとCatからbarkメソッドを呼び出し、実行結果と同じメッセージが
# 表示されるプログラムを作成しなさい。
# 【 Animalクラス仕様 】
# barkメソッドが宣言されている。(処理内容:「動物が吠えている」と表示する。)
#
# 【 Dogクラス仕様 】
# Animalクラスを継承。
# Animalクラスのbarkメソッドをオーバーライト(処理内容:「犬がワンワン吠えている!!」と表示する。)
#
# 【 Catクラス仕様 】
# Animalクラスを継承。
# Animalクラスのbarkメソッドをオーバーライト(処理内容:「猫がニャーニャー鳴く!!」と表示する。)
#
# 【 Kad11_2クラス 】
# Animalクラスの参照変数animal1を宣言し、参照先はAnimalオブジェクトとする。
# Animalクラスの参照変数animal2を宣言し、参照先はDogオブジェクトとする。
# Animalクラスの参照変数animal3を宣言し、参照先はCatオブジェクトとする。
# animal1、animal2、animal3のオブジェクトに対してbarkメソッドを実行する。
669デフォルトの名無しさん:2010/02/09(火) 18:35:24
>>668
% Prolog

動物(猫,吠える) :- write('ニャーニャーと鳴く!!'),!.
動物(犬,吠える) :- write('ワンワン吠えている!!'),!.
動物(_,吠える) :- write('動物が吠えている').
670デフォルトの名無しさん:2010/02/09(火) 18:46:29
>>668
% Prolog 主語が抜けた。

動物(猫,吠える) :- write('猫がニャーニャーと鳴く!!'),!.
動物(犬,吠える) :- write('犬がワンワン吠えている!!'),!.
動物(_,吠える) :- write('動物が吠えている').
671デフォルトの名無しさん:2010/02/09(火) 20:13:24
>>668
% Prolog (その一) 課題11-3

得点表を入力した上で平均点を付加して一覧表示する :-
  write('入力人数は? >'),get_integer(_入力人数),
  得点表入力(1,_入力人数,L),
  得点表表示(L).

得点表入力(N,_入力人数,[]) :- N > _入力人数,!.
得点表入力(N,_入力人数,[[_名前,_得点ならび]|R]) :-
  write_formatted('%t人目 受験科目数 :',[N]),get_integer(_受験科目数),
  write('名前 :'),get_line(_名前),
  科目別得点入力(_受験科目数,_得点ならび),
  N2 is N + 1,
  得点表入力(N2,_入力人数,R).

科目別得点入力(3,[_国語,_数学,_英語]) :-
  write('国語 :'),get_integer(_国語),
  write('数学 :'),get_integer(_数学),
  write('英語 :'),get_integer(_英語),!.
科目別得点入力(5,[_国語,_数学,_英語,_社会,_理科]) :-
  write('国語 :'),get_integer(_国語),
  write('数学 :'),get_integer(_数学),
  write('英語 :'),get_integer(_英語),
  write('社会 :'),get_integer(_社会),
  write('理科 :'),get_integer(_理科),!.
672デフォルトの名無しさん:2010/02/09(火) 20:16:10
>>668
% Prolog (その二) 課題11-3

得点表表示(L) :- 得点表見出し表示,得点表明細表示(L).

得点表見出し表示 :- write('  国語 数学 英語 社会 理科 | 平均点\n').

得点表明細表示([[_名前,[_国語,_数学,_英語]]|R]) :-
  _平均点 is (_国語+_数学+_英語) // 3,
  write_formatted('%t %t %t %t    | %t\n',[_名前,_国語,_数学,_平均点]),
  得点表明細表示(R),!.
得点表明細表示([[_名前,[_国語,_数学,_英語,_社会,_理科]]|R]) :-
  _平均点 is (_国語+_数学+_英語+_社会+_理科) // 5,
  write_formatted('%t %t %t %t %t %t | %t\n',[_名前,_国語,_数学,_英語,_社会,_理科,_平均点]),
  得点表明細表示(R),!.
673デフォルトの名無しさん:2010/02/10(水) 02:43:22
http://pc12.2ch.net/test/read.cgi/tech/1263824755/547
# [1] 情報処理応用
# [2] Fortranで,
#
#
# 階乗 n! を計算する関数を作成し,
#
# 順列
# n個の異なるものからr個取り出して並べる。
# このときの順列の総数をnPrとあらわす。
# nPr=n(n-1)(n-2)・・・(n-r+1)
# を計算する関数を作成し,
#
# 組み合わせ
# 異なるn個からr個取り出して組を作る。
# このときの組合せの総数をnCrとあらわす。
# nCr = nPr/r!
# を計算するプログラムを作成してください

674デフォルトの名無しさん:2010/02/10(水) 02:45:56
http://pc12.2ch.net/test/read.cgi/tech/1263824755/549
# [1] 授業単元:プログラミング 1
# [2] 問題文(含コード&リンク):
# 球の体積をもとめよ。
675デフォルトの名無しさん:2010/02/10(水) 03:03:34
http://pc12.2ch.net/test/read.cgi/tech/1263824755/554
# [1] 授業単元:プログラミング 1
# [2] 問題文(含コード&リンク):
# /*************************
# ある二つの文字列str1,str2 の編集距離はつぎの3つの操作を行うことによりstr1をstr2 に変換するのに要する操作の最低回数である
# ・ 1文字挿入する
# ・ 1文字削除する
# ・ 1文字を他の1文字に置き換える
# たとえば str1="sport" はstr2="sort" に, 文字 'p' を削除することによりstr2 に変換できるため編集距離は 1 である
#
# str_n を文字列str の頭からn 番目までの部分列としm(i,j)をstr i とstr j の編集距離を表すものとする.m(i,j)とm(i+1,j),m(i,j+1),m(i+1,j+1)の間に成り立つ再帰式を記述しなさい
#
# この再帰式に基づき効率良く編集距離を計算するプログラムを2次元配列を利用して作成しなさい.ただし,関数m(i,j)はint型の編集距離を返り値とする.
# ******************************/

676デフォルトの名無しさん:2010/02/10(水) 03:06:10
http://pc12.2ch.net/test/read.cgi/tech/1263824755/548
# [1]C言語課題
# [2] コマンドラインに与えられた文字列が単数で自然数を表しているとして
# 以下の例のように出力されるプログラムを作れ
# 入力==>3
# 132
# 231
# 入力==>5
# 1304
# 2552
# 4031
# 入力==>10
# 136107
# 259084
# 480952
# 710631
# 入力==>20
# 13610150016
# 25914201711
# 48131918127
# 71218191384
# 11172014952
# 16001510631
677デフォルトの名無しさん:2010/02/10(水) 03:19:32
http://pc12.2ch.net/test/read.cgi/tech/1263824755/551
# [1] 授業単元:プログラミング 1
# [2] 問題文(含コード&リンク):
# 二つの数列の和によってできる数列を表示したい。
678デフォルトの名無しさん:2010/02/10(水) 03:52:22
http://pc12.2ch.net/test/read.cgi/tech/1263824755/568
# [1]数値計算演習
# [2] 極座標で表される曲線 r(t)=sin^2(πt) θ(t)=α sin(πt^2) (0<=t<=1)でαを指定した時
# の曲線の長さと囲む面積の近似値を求め、π/4<=α<=πまで変化させる時、
# 面積/曲線の長さが最大になるαを推定する
# 曲線上の代表点をとり隣接する点の間の距離の和で曲線の長さを近似。
# 面積は隣接する代表点と原点が作る三角形の面積の和で近似する。
679デフォルトの名無しさん:2010/02/10(水) 03:57:07
>>677
% Prolog

二つの数列の和によってできる数列を表示する(L1,L2) :-
  二つの数列の和によってできる数列(L1,L2,L),
  write_formatted('%t+%t=%t\n',[L1,L2,L3]).

二つの数列の和によってできる数列([],L,L) :- !.
二つの数列の和によってできる数列(L,[],L) :- !.
二つの数列の和によってできる数列([A|R1],[B|R2],[C|R3]) :-
  C is A + B,
  二つの数列の和によってできる数列(R1,R2,R3).
680デフォルトの名無しさん:2010/02/10(水) 04:16:37
>>674
% Prolog 積分で、の意味かな。とりあえず球の体積の公式で。

球の体積(_半径,_球の体積) :-
  _球の体積 is ( 4 / 3 ) * pi * _半径 ^ 3.
681デフォルトの名無しさん:2010/02/10(水) 06:16:37
>>673

階乗(M,N,1) :- M > N,!.
階乗(M,N,X) :-
  M2 is M + 1,
  階乗(M2,N,Y),
  X is M * Y.

階乗(0,1) :- !.
階乗(1,1) :- !.
階乗(N,X) :-
  N2 is N - 1,
  階乗(N2,Y),
  X is N * Y,
  asserta((階乗(N,X) :- (!))).

nPr(N,R,X) :-
  M is N - R + 1,
  階乗(M,N,X).

nCr(N,R,X) :-
  U is N - R + 1,
  階乗(U,N,K1),
  階乗(R,K2),
  X is K1 // K2.
682デフォルトの名無しさん:2010/02/11(木) 10:27:50
>>677
使用言語:J

A=:+:>:i.10
A
2 4 6 8 10 12 14 16 18 20
B=:2^i.10
B
1 2 4 8 16 32 64 128 256 512
A + B
3 6 10 16 26 44 78 144 274 532
683デフォルトの名無しさん:2010/02/11(木) 10:54:30
>>679 (>>677) 訂正
% Prolog L3とするべきところがLになっていた。

二つの数列の和によってできる数列を表示する(L1,L2) :-
  二つの数列の和によってできる数列(L1,L2,L3),
  write_formatted('%t+%t=%t\n',[L1,L2,L3]).

二つの数列の和によってできる数列([],L,L) :- !.
二つの数列の和によってできる数列(L,[],L) :- !.
二つの数列の和によってできる数列([A|R1],[B|R2],[C|R3]) :-
  C is A + B,
  二つの数列の和によってできる数列(R1,R2,R3).

% C/C++の宿題スレで採りあげやすい出題がなかったので一日完全休養しました。
684デフォルトの名無しさん:2010/02/11(木) 12:53:34
>>633
使用言語:J

f=: dyad def '-_1^+./y E. x'

'abaabab' f 'aab'
1
'abaabab' f 'abb'
_1
685デフォルトの名無しさん:2010/02/11(木) 13:13:26
>>625
使用言語:J

f=: monad def '+/>:I.2|>:i.<:y'

f 10
25
686デフォルトの名無しさん:2010/02/11(木) 16:22:41
http://pc12.2ch.net/test/read.cgi/tech/1263824755/602
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):
# #include <stdio.h>
# int main(void){
# int a=0,k;
# for (k=0;k<100;k++){a++;
# if(a%5==0&&a%9==0)printf("A\n");
# else if(a%5==0)printf("B\n");
# else if(a%9==0)printf("C\n");
# else printf("%d\n",a);
# }return 0;}
# この処理のプログラムをスペース、改行を含み140字以内で書き直したい。
%
% 別の言語で同じ意味のプログラムを140字以内でということにしましょう。
687デフォルトの名無しさん:2010/02/11(木) 17:18:38
>>686
使用言語:J

smoutput&>((0 i.~45 5 9|]){(;/'ABC'),<)"0>:i.100
688デフォルトの名無しさん:2010/02/11(木) 19:06:48
>>686
% Prolog

main:-for(1,N,100),(q(N),u(N)->A='A';q(N)->A='B';u(N)->A='C';A=N),write(A),nl,N
=100.
q(N):-0 is N mod 5.
u(N):-0 is N mod 9.
689デフォルトの名無しさん:2010/02/11(木) 21:50:42
>>686
使用言語:R

a=b=1:100;a[b%%5==0]="B";a[b%%9==0]="C";a[b%%45==0]="A";write(a,"")
690デフォルトの名無しさん:2010/02/11(木) 22:12:19
>>686
使用言語:Lua

for i=1,100 do print(({i,"B","C","A"})[2-i*i*i*i%5+2*0^(i%9)])end
691デフォルトの名無しさん:2010/02/12(金) 01:14:32
>>686
% Prolog

main:-for(1,N,100),(0=:=N mod 5,0=:=N mod 9->A='A';0=:=N mod 5->A='B';0=:=N mod 9->A='C';A=N),write(A),nl,N=100.
692デフォルトの名無しさん:2010/02/12(金) 05:34:48
>>687
仮に45は反則ということにすると、どうなりますか?
693デフォルトの名無しさん:2010/02/12(金) 07:05:25
>>692 >>686
使用言語:J

smoutput&>((0 i.~[:(,~+/)5 9|]){(;/'ABC'),<)"0>:i.100
694デフォルトの名無しさん:2010/02/12(金) 10:26:37
>>693
ありがとうございます。
695デフォルトの名無しさん:2010/02/12(金) 12:08:24
>>686
使用言語:maxima

f(a,b):=1-signum(mod(a,b));for i thru 100 do print([i,"B","C","A"][f(i,5)+f(i,9)*2+1]);
696デフォルトの名無しさん:2010/02/12(金) 14:34:00
http://pc12.2ch.net/test/read.cgi/tech/1263824755/555
# [1]C言語とプログラミング
# [2] キーボードから3つの整数を受け取り大きさの小さい順に出力するプログラムを作りなさい。
# 但しmain関数内ではint変数一つだけが使えるものとします。またmain関数の再帰呼び出しも
# 出来ません。(main関数の引数、argc,argvをint変数として使用することも勿論禁止します)
# main関数のみで構成されるプログラムとして下さい。
# 入力される数は1から10までの範囲にあることを常にチェックし、それ以外の入力の場合は
# 再入力を促して下さい。
697デフォルトの名無しさん:2010/02/12(金) 16:00:22
>>696
% Prolog
% 述語make/0 で 述語main/0 のソースプログラムを生成する。

http://nojiriko.asia/prolog/c134_555.html
698デフォルトの名無しさん:2010/02/12(金) 16:38:21
>>697
再帰は禁止でしたね。うっかりしました。
再入力はrepeat/0を使えば書けますが、repeat自体が再帰そのものですから、
あまり意味がないですね。
Prologでは>>697のmainのような膨大な冗長述語の定義は稀ではないので、
ここでは題意から離れて、その述語の生成に焦点を当ててみました。
699デフォルトの名無しさん:2010/02/12(金) 22:56:39
>>696
// F#

[<EntryPoint>]
let main _ =
  "1〜10の数字を3つ入力:"
  |> Seq.unfold (printf "%s" >> System.Console.ReadLine >> System.Int32.TryParse
    >> function
      | true, x when 1 <= x && x <= 10 -> Some(Some(x), "次を入力:")
      | _ -> Some(None, "1〜10の数字を再入力:"))
  |> Seq.choose id |> Seq.take 3 |> Seq.sort |> Seq.iter (printf "%d ")
  0
700デフォルトの名無しさん:2010/02/13(土) 02:10:11
>>696
使用言語:J
エラーチェックに苦労してなんとも悲惨なことになってしまった。データnをn番目の素数で表して
変数aに掛けていき、最後に因数分解(ここで勝手にソートしてくれた)して素数からnに変換。

f=: monad define
a=.1
label_b. smoutput '(1-10)?' select. ".(1!:1)1
case. 1 do. a=.a*p:1 case. 2 do. a=.a*p:2 case. 3 do. a=.a*p:3 case. 4 do. a=.a*p:4 case. 5 do. a=.a*p:5
case. 6 do. a=.a*p:6 case. 7 do. a=.a*p:7 case. 8 do. a=.a*p:8 case. 9 do. a=.a*p:9 case. 10 do. a=.a*p:10
case. do. goto_b.
end.
label_c. smoutput '(1-10)?' select. ".(1!:1)1
case. 1 do. a=.a*p:1 case. 2 do. a=.a*p:2 case. 3 do. a=.a*p:3 case. 4 do. a=.a*p:4 case. 5 do. a=.a*p:5
case. 6 do. a=.a*p:6 case. 7 do. a=.a*p:7 case. 8 do. a=.a*p:8 case. 9 do. a=.a*p:9 case. 10 do. a=.a*p:10
case. do. goto_c.
end.
label_d. smoutput '(1-10)?' select. ".(1!:1)1
case. 1 do. a=.a*p:1 case. 2 do. a=.a*p:2 case. 3 do. a=.a*p:3 case. 4 do. a=.a*p:4 case. 5 do. a=.a*p:5
case. 6 do. a=.a*p:6 case. 7 do. a=.a*p:7 case. 8 do. a=.a*p:8 case. 9 do. a=.a*p:9 case. 10 do. a=.a*p:10
case. do. goto_d.
end.
smoutput _1 p:q:a
)
701デフォルトの名無しさん:2010/02/13(土) 06:48:19
http://pc12.2ch.net/test/read.cgi/tech/1248012902/868
# 【 課題 】GUIを使った簡易テキストエディターのプログラムです。
#       ---------------------------------------------------------------------------
#       テキストを入力してください: I am a student!
#       フォント変換後のテキスト: I am a student!
#       --------------------------------------------------------------------------
#       上のような形で、JTextField オブジェクト内に文字を入力した後、
#       その下に“Helvetica”, Bold, 24のフォントで変換した文字を表示させたいのですが。
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 GUI  】JTextFieldとJLabelオブジェクトを使用します
# 【 期限 】2/14(水) 夜まで
# 【 補足 】Java初心者でよく分かりません。よろしくお願いします。 
702デフォルトの名無しさん:2010/02/13(土) 09:40:36
>>701
% Prolog SWI-PrologにはXPCEというグラフィックライブラリが
% 付いているのですが、私はうまく使うことができずにいます。
% それでこの課題はパス。
703デフォルトの名無しさん:2010/02/13(土) 09:47:43
>>702
>>698なんかも、これはPrologではできません!とした方が親切なんじゃないの?
多少とも、Prologを知らしめたいという願いがあるのなら。
704デフォルトの名無しさん:2010/02/13(土) 11:48:09
できるのにできないって言うのはただのネガキャンにしかなんねえだろ
705デフォルトの名無しさん:2010/02/13(土) 15:05:27
大域変数を標準に取り込むかは現在ISOの作業グループで検討中。
元々の出題の意図は「ひとつの変数だけ使って」ということでしょうから、
代入できない論理変数ではできるはずもない。大域変数を使用できたとしても、
少なくとも一つ論理変数が必要でこれは題意に沿うかどうか。
それで、冗談のような方向へ逃げてみた。
もっとも元スレを読み直してみたら、私のと同じ発想の回答がずっと前に
書き込まれていた。
706705:2010/02/13(土) 15:13:25
代入できない論理変数 --> 破壊代入できない論理変数
に訂正。
大域変数については、実は現在ほとんどの処理系がサポートしています。
しかし、私はこのスレで使うつもりはありません。
707705:2010/02/13(土) 15:18:17
>>705 またまた訂正。元スレを読み直したら --> 出題元スレを読み直したら
708デフォルトの名無しさん:2010/02/13(土) 17:24:16
>>701
// F#

open System.Windows.Forms
open System.Drawing

type TinyEditorForm() =
    inherit Form(Text = "TinyEditor", Width = 450, Height = 150)
    let labelInput = new Label(Text = "テキストを入力してください:", Left = 10, Top = 10, Width = 140)
    let textboxInput = new TextBox(Left = 160, Top = 10, Width = 240)
    let labelOutput = new Label(Text = "フォント変換後のテキスト:", Left = 10, Top = 50, Width = 140)
    let textboxOutput = new TextBox(ReadOnly = true, Left = 160, Top = 50, Width = 240, Height = 50, Font = new Font("Helvetica", 24.f, FontStyle.Bold))
    do
        textboxInput.TextChanged |> Event.map (fun _ -> textboxInput.Text)
        |> Event.add (fun text -> textboxOutput.Text <- text)
        base.Controls.AddRange [|labelInput; textboxInput; labelOutput; textboxOutput|]

[<System.STAThread>]
do
    new TinyEditorForm() |> Application.Run
709デフォルトの名無しさん:2010/02/14(日) 05:33:41
http://pc12.2ch.net/test/read.cgi/tech/1258320456/104
# 以下の5行の文字列のいずれかをランダムに返すプログラムを書きなさい
# あいうえお
# かきくけこ
# さしすせそ
# たちつてと
# なにぬねの
710デフォルトの名無しさん:2010/02/14(日) 07:31:37
>>709
使用言語:J

] a=:5 5$ucp'あいうえおかきくけこさしすせそたちつてとなにぬねの'
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
f=:monad def '(1?(#y)){y'

f a
あいうえお
f a
たちつてと
711デフォルトの名無しさん:2010/02/14(日) 08:05:21
http://pc11.2ch.net/test/read.cgi/db/1252492296/521
# 販売集計処理について教えてください。
# 商品テーブル
# 商品名 販売本数
# ─── ────
# お菓子
# お弁当
# 飲み物
#
# 販売履歴テーブル
# 商品名
# ───
# 飲み物
# お菓子
# お弁当
# お菓子
# お菓子
# 飲み物
# お弁当
# お弁当
#
# 商品テーブルの各商品が、販売履歴テーブルに何件ずつあるかを集計し、
# 商品テーブルの販売本数に記録させたいと思っております(日次処理)。
712デフォルトの名無しさん:2010/02/14(日) 08:27:31
>>710
% Prolog

'5行の文字列のいずれかをランダムに返す'(_文字列) :-
  findall(S,文字列(S),L),
  N is random mod 5 + 1,
  list_nth(N,L,_文字列).

文字列(あいうえお).
文字列(かきくけこ).
文字列(さしすせそ).
文字列(たちつてと).
文字列(なにぬねの).
713デフォルトの名無しさん:2010/02/14(日) 08:43:03
>>710
% Prolog 非決定性にするには

'5行の文字列のいずれかをランダムに返す'(_文字列) :-
  findall(S,文字列(S),L),
  '5行の文字列のいずれかをランダムに返す'(L,_文字列).

'5行の文字列のいずれかをランダムに返す'(L,_文字列) :-
  N is random mod 5 + 1,
  list_nth(N,L,_文字列).
'5行の文字列のいずれかをランダムに返す'(L,_文字列) :-
  '5行の文字列のいずれかをランダムに返す'(L,_文字列).

文字列(あいうえお).
文字列(かきくけこ).
文字列(さしすせそ).
文字列(たちつてと).
文字列(なにぬねの).

% ただし、
% ?- ..<Aゾーン>.. ,'5行の文字列のいずれかをランダムに返す'(_文字列), ..<Bゾーン>.. ,fail.
% のように使うと<Bゾーン>の記述によっては<Aゾーン>には決してバックトラックしないことに注意。
714デフォルトの名無しさん:2010/02/14(日) 08:49:35
>>713
% Prolog
% <Aゾーン>にバックトラックさせるためには例えば、

'5行の文字列のいずれかをランダムに返す'(L,_文字列) :-
  N is random mod 5 + 1,
  list_nth(N,L,なにぬねの),!.
'5行の文字列のいずれかをランダムに返す'(L,_文字列) :-
  N is random mod 5 + 1,
  list_nth(N,L,_文字列).
'5行の文字列のいずれかをランダムに返す'(L,_文字列) :-
  '5行の文字列のいずれかをランダムに返す'(L,_文字列).

% これで一度なにぬねのが利用された後はこの述語は非決定性の性質を一旦失う。
715デフォルトの名無しさん:2010/02/14(日) 09:26:14
>>711
% Prolog

販売履歴(飲み物).
販売履歴(お菓子).
販売履歴(お弁当).
販売履歴(お菓子).
販売履歴(お菓子).
販売履歴(飲み物).
販売履歴(お弁当).
販売履歴(お弁当).

販売集計処理 :-
  一意な商品名ならびを得る(L),
  商品テーブルに追加(L).

一意な商品名ならびを得る(L) :- setof(_商品名,販売履歴(_商品名),L).

商品テーブルに追加([]) :- !.
商品テーブルに追加([_商品名|R]) :-
  count(販売履歴(_商品名),_販売本数),
  assertz(商品(_商品名,_販売本数)),
  商品テーブルに追加(R).
716デフォルトの名無しさん:2010/02/14(日) 21:09:11
>>711
// F#

let countCommodities cs hs =
    let cnt = hs |> Seq.countBy id |> Map.ofSeq
    List.map (fun c -> (c, defaultArg (Map.tryFind c cnt) 0)) cs

let commodities = ["お菓子"; "お弁当"; "飲み物"]
let salesHistory = ["飲み物"; "お菓子"; "お弁当"; "お菓子";
                    "お菓子"; "飲み物"; "お弁当"; "お弁当"]
countCommodities commodities salesHistory
717デフォルトの名無しさん:2010/02/14(日) 22:21:13
>>701
使用言語:なでしこ
文字スタイルの指定方法はわかりませんでした。


母艦は「フォント変換表示」
「テキストを入力してください」と表示
入力欄とはエディタ
その幅は200
「フォント変換後のテキスト」と表示
出力欄とはラベル
そのテキストは「」
その幅は200
その文字書体は「Helvetica」
その文字サイズは24

入力欄を変更した時は〜出力欄のテキストは入力欄のテキスト
718デフォルトの名無しさん:2010/02/15(月) 12:06:38
http://pc12.2ch.net/test/read.cgi/tech/1263824755/654
# 【質問テンプレ】
# [1] 授業単元:データ構造とアルゴリズム
# [2] 問題文(含コード&リンク):
# 生徒数1000人分の学力テスト(五教科)の得点データが有る。ここで、任意の生徒Aと

# 得点の傾向が一番近い生徒の番号を高速で抽出できるようデータ構造を組みなさい。

# (合計点が近い、ではなく、各教科の得点の傾向が大事のようです。)
#
# 生徒のデータはstruct seito{int tensuu[5];};こんな感じです。
# 単に全部検索して得点差を計算したのを提出したらダメと言われました。
# こういう問題を解く定石のようなものがあるのでしょうか・・・
# 先輩方、よろしくお願いします。
719デフォルトの名無しさん:2010/02/15(月) 21:26:13
>>718
イメージとしてはレーダーチャートの五角形のかたちを「傾向」として
その重心を「近さ」のものさしにしたいけど、さっとコードにする能力はない。
720デフォルトの名無しさん:2010/02/15(月) 21:41:59
最近傍探索を高速にできるアルゴリズムかな?kd木?
721デフォルトの名無しさん:2010/02/15(月) 21:47:22
それか、「各教科の得点の傾向」を「点数の比率」と受け取るなら
コサイン尺度を使って普通に最近傍探索でもいいかも
722デフォルトの名無しさん:2010/02/16(火) 02:56:24
# 公認野球規則二・〇四には、
#
# 「ボール」 ストライクゾーンを通過しなかった投球、または地面に
# 触れた投球で、いずれも打者が打たなかったものである。
#
# とある。この定義をプログラムとして表現しなさい。
723デフォルトの名無しさん:2010/02/16(火) 06:49:49
http://pc12.2ch.net/test/read.cgi/tech/1263824755/683
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10530.zip
# ポーカープログラム
# # 1,二つのクラス(Card,Deck)が与えられていて、
# game1.hとgame1.cppのプラグラムを書け。
# このプログラムはデッキから5枚配る事を1回とし、
# その中に何回ペアまたはフラッシュ(同じ手札に同じマークが5枚揃う事)が
# あるかの10000回の統計であり、以下を表示させること
#
# 何回の統計か
# そのうち何個の手札がペアを持つか
# そのうち何個の手札がフラッシュを持つか
# ペアは全体の何%か
# フラッシュは全体の何%か
#
# 無作為化する為に以下を必ず含める事
# stand(unsigned)time(NULL);
#
# #2,新しいクラスhand(hand.hとhand.cpp)と、これを実行させる為の
# game2.hとgame2.cppを書け。
# これはカードの配布、ペア・フラッシュの確認、そしてデッキにカードを戻す為の
# プログラムである。
724デフォルトの名無しさん:2010/02/16(火) 07:25:21
>>722
% Prolog

ボール(X) :-
  投球(X),
  \+(通過した(X,ストライクゾーン)),
  \+(打った(打者,X)).
ボール(X) :-
  投球(X),
  触れた(X,地面),
  \+(打った(打者,X)).
725デフォルトの名無しさん:2010/02/16(火) 08:45:55
>>722
% Prolog

ボール(公認野球規則二・〇四,X) :-
  'ストライクゾーンを通過しなかった投球、または地面に触れた投球で、いずれも打者が打たなかったものである。'(X).
726デフォルトの名無しさん:2010/02/16(火) 08:47:35
>>722
% Prolog

% Prolog

公認野球規則(二・〇四,ボール,X) :-
  'ストライクゾーンを通過しなかった投球、または地面に触れた投球で、いずれも打者が打たなかったものである。'(X).
727デフォルトの名無しさん:2010/02/16(火) 16:31:33
>>723
% Prolog 一枚のカードを作る/2 や トランプのようにならびを切る/4 は
% http://nojiriko.asia/prolog/c134_683.html 参照

ペアまたはフラッシュの出現度数(_回数,_ペアの度数,_フラッシュの度数) :-
  findsum([M1,M2],(for(1,N,_回数),トランプの準備([A,B,C,D,E|R]),役([A,B,C,D,E],M1,M2)),[_ペアの度数,_フラッシュの度数]).

役(L,1,0) :- sort(L,L1),ペア(L1),!.
役([A|R],0,1) :- sub_atom(A,1,1,_,_種類),フラッシュ(_種類,R),!.

ペア([A,B]) :- sub_atom(A,0,1,_,C),sub_atom(B,0,1,_,C),!.
ペア([A,B,C|R]) :- sub_atom(A,0,1,_,E),sub_atom(B,0,1,_,E),sub_atom(C,0,1,_,E),ペア(R),!.
ペア([A,B,C|R]) :- sub_atom(A,0,1,_,E),sub_atom(B,0,1,_,E),\+(sub_atom(C,0,1,_,E)),!.
ペア([A|R]) :- ペア(R).

フラッシュ(_,[]) :- !.
フラッシュ(A,[B|R]) :- sub_atom(B,1,1,_,A),フラッシュ(A,R).

トランプの準備(X) :-
  findall(U,(for(1,N,52),一枚のカードを作る(N,U)),_整列したカード),
  トランプを切るようにならびを切る(41,53,_整列したカード,X),!.
728デフォルトの名無しさん:2010/02/16(火) 16:48:06
>>727 (>>723)
% Prolog ペア度数の数え方ですが、ワンペアを1 ツーペアを2 と勘定するなら
% ここでは採用していないがスリーカーズを3 フォーカーズを4と数えるなどもあるかもしれない。

役(L,N,0) :- sort(L,L1),ペア(L1,0,N),\+(N=0),!.
役([A|R],0,1) :- sub_atom(A,1,1,_,_種類),フラッシュ(_種類,R),!.

ペア([],N,N) :- !.
ペア([A,B],N1,N) :- sub_atom(A,0,1,_,C),sub_atom(B,0,1,_,C),N is N1 + 1,!.
ペア([A,B,C|R],N1,N) :- sub_atom(A,0,1,_,E),sub_atom(B,0,1,_,E),sub_atom(C,0,1,_,E),ペア(R,N1,N),!.
ペア([A,B,C|R],N1,N) :- sub_atom(A,0,1,_,E),sub_atom(B,0,1,_,E),\+(sub_atom(C,0,1,_,E)),N2 is N1 + 1,ペア([C|R],N2,N),!.
ペア([A|R],N1,N) :- ペア(R,N1,N).
729デフォルトの名無しさん:2010/02/17(水) 21:53:46
# 公開された日本最大の競馬情報データベースjbisのサイトで
# ディープインパクトの五代血統表は
# http://www.jbis.or.jp/horse/0000742976/pedigree/ を検索することによって
# 得られます。このサイトを利用し、これを起点にして、
# 父系(父親の父親の父親・・・と遡る)20代前の大種牡馬Eclipseまで列記する
# プログラムを作りなさい。
730デフォルトの名無しさん:2010/02/18(木) 05:14:30
>>729
% Prolog jbis/2 の定義を長くなるのでここでは省略して。

父系の収集(_目標馬,_五代血統書,X) :-
  五代血統書に於いて父系は最初の5要素以内に現れる(_目標馬,_五代血統表,X),!.
父系の収集(_目標馬,[_一代父,_二代父,_三代父,_四代父,_五代父|_],[_一代父,_二代父,_三代父,_四代父,_五代父|R]) :-
  jbis(_五代父,_五代遡った五代血統表),
  父系の収集(_目標馬,_五代遡った五代血統表,R).

五代血統書に於いて父系は最初の5要素以内に現れる(_目標馬,_五代血統表,X) :-
  append(L1,[_目標馬|_],_五代血統書),
  length(L1,N),
  N < 5,
  append(L1,[_目標馬],X),!.
731デフォルトの名無しさん:2010/02/18(木) 05:27:25
>>730 (>>729)
% Prolog jbis/2 の定義を書くと長くなるのでここでは省略して。
732デフォルトの名無しさん:2010/02/18(木) 05:44:54
>>730
実はこんなに単純ではない。
最終的に五代遡らない内に牝馬が現れてしまうことがある。
父系に目標馬が存在しなかった場合だ。このことは、
五代血統表は牡馬、牝馬の区別ができるための情報を
持つ必要があることを意味する。これがめんどうなら
jbis/2に於いて牝馬が現れたら、それ以降の情報を
切り捨ててしまう方法もある。これだと五代血統表と
名乗ることはできず「_五代父系ならび」とでもなるが。
733デフォルトの名無しさん:2010/02/18(木) 06:11:28
>>732 (>>729)
% Prolog 理屈の上では、三頭の始祖馬が出てきたら、とすればそれで良さそう
% ですが、実際には血統不詳で切れている血統表も存在するからこれでは済まない。

父系の収集(_目標馬,_五代血統表,X) :-
  member(_始祖馬,['Byerley Turk','Darley Arabian','Godolphin Arabian']),
  append(L1,[_始祖馬|_],_五代血統表),
  length(L1,N),
  N < 5,
  \+(member(_目標馬,L1)),
  !,fail.
父系の収集(_目標馬,_五代血統書,X) :-
  五代血統書に於いて父系は最初の5要素以内に現れる(_目標馬,_五代血統表,X),!.
父系の収集(_目標馬,[_一代父,_二代父,_三代父,_四代父,_五代父|_],[_一代父,_二代父,_三代父,_四代父,_五代父|R]) :-
  jbis(_五代父,_五代遡った五代血統表),
  父系の収集(_目標馬,_五代遡った五代血統表,R).
734デフォルトの名無しさん:2010/02/18(木) 11:19:38
父系でも血統不詳なんてあるの?
735デフォルトの名無しさん:2010/02/18(木) 15:01:57
>>734
データベースがある程度完備していればない。だから>>733は間違い。
Eclipseの時代まで遡ると種牡馬欄が空欄で母系だけ3-4代伸びている場合が
あるのだけれど、これは何だろう。
736デフォルトの名無しさん:2010/02/19(金) 01:04:59
http://pc11.2ch.net/test/read.cgi/db/1252492296/545
# ・データ
# ■Relationテーブル
# TaskNo RelationTaskNo
# 1 2
# 2 3
# 2 4
# 4 5
# : :
#
# 上記はタスクと、そのタスクに関連するタスクのNoを保持しているテーブルです。
# このようなテーブルから、指定したTaskNoに関連するタスクを取得して、
# その関連タスクにまた関連するタスクを…といった形でデータを取得したいのです。
# 以前SQLServerで似たような結果を取得した際は
# WITH RELATIONS (TaskNo,RelationTaskNo)
# AS
# (SELECT TaskNo,RelationTaskNo FROM Relation WHERE TaskNo = 取得したい番号
# UNION ALL
# SELECT R.TaskNo,R.RelationTaskNo
# FROM Relation AS R INNER JOIN RELATIONS AS CTE ON R.RelationTaskNo = CTE.TaskNo)
# SELECT * FROM RELATIONS
# (当時の環境が手元にないため構文が微妙に間違っているかも…)
# どなたかご存じだったら知恵を貸してください。
737デフォルトの名無しさん:2010/02/19(金) 09:59:16
>>736
% Prolog

'RelationTaskNoS'(TaskNo,[TaskNo|R]) :-
  'Relation'(TaskNo,RelationTaskNo),
  'RelationTaskNoS(RelationTaskNo,R).
'RelationTaskNoS'(TaskNo,[TaskNo]).
738デフォルトの名無しさん:2010/02/19(金) 12:54:03
>>729
% Prolog jbis/2 の定義は
http://nojiriko.asia/prolog/sonota_729.html を参照してください。
739デフォルトの名無しさん:2010/02/19(金) 16:10:29
http://pc12.2ch.net/test/read.cgi/tech/1263824755/713
# HPはどのページも3クリック以内でたどり着けるのが良いとされています。
# さて問題です。どのページからも、すべてのページへこの条件を満たすようにするには
# 各ページにリンクはいくつ必要でしょうか。
# link(n)をページnのリンク数としたとき min { link(n) } を決定するという問題です。
# ページ数は、1000から1万の任意の値が与えられる物とします。
740デフォルトの名無しさん:2010/02/19(金) 20:46:28
>>739
// F#

// click : 最大クリック数、page : 全ページ数
let minLink click page =
    Seq.initInfinite id
    |> Seq.find (fun x -> List.sumBy (pown x) [0 .. click] >= page)
741デフォルトの名無しさん:2010/02/19(金) 23:11:30
>>729
// F#

open System.Text.RegularExpressions

let paternal last =
    use client = new System.Net.WebClient()
    let rec paternal' url =
        seq {
            let page = "http://www.jbis.or.jp" + url + "pedigree/" |> client.DownloadString
            let firstRow = Regex.Match(page, @"<tr>(.+?)</tr>", RegexOptions.Singleline).Groups.[1].Value
            let horses = Regex.Matches(firstRow, @"<(?:td|th).*?><a href=""(.+?)"">(.+?)</a>")
                        |> Seq.cast<Match> |> Seq.map (fun m -> (m.Groups.[1].Value, m.Groups.[2].Value))
                        |> Seq.cache
            yield! Seq.map snd horses
            yield! Seq.nth (Seq.length horses - 1) horses |> fst |> paternal' }
    let horses = paternal' "/horse/0000742976/" |> Seq.cache
    Seq.take (Seq.findIndex ((=) last) horses + 1) horses

paternal "Eclipse" |> Seq.iter (printfn "%s")
742デフォルトの名無しさん:2010/02/20(土) 08:23:18
# 以下は「中世の秋」ホイジンガ/堀越孝一訳(中公文庫による)の冒頭ちかくの段落です。
# ここにあらわれる文章をプログラム言語で書き換えなさい。
#
#  夏と冬の対照は、わたしたちの経験からはとても考えられないほど強烈だったが、
# 光と闇、静けさと騒がしさとの対照もまた、そうだったのである。現在、都市に住む
# 人びとは、真の暗闇、真の静寂を知らない。ただひとつまたたく灯、遠い一瞬の叫ぶ
# 声がどんな感じのものかを知らない。
743デフォルトの名無しさん:2010/02/20(土) 15:08:26
http://pc12.2ch.net/test/read.cgi/tech/1255277760/82
# [1] 授業単元:
# [2] 問題文(含コード&リンク):
#
# 一次方程式y=a*x+bにおいて、A[x1,y1]とB[x2,y2]が与えられた時、
# 方程式の係数a,bを求めよ。
# x1 y1: 450 454.4
# x2 y2: 452 454.8
# y=0.2*x+364.4
744デフォルトの名無しさん:2010/02/20(土) 16:33:23
>>743
使用言語:J

x1=:450
y1=:454.4
x2=:452
y2=:454.8
(y1,y2)%.2 2$x1,1,x2,1
0.2 364.4
745デフォルトの名無しさん:2010/02/20(土) 18:35:05
>>743
% Prolog

'一次方程式y=ax+bの二点[x1,y1][x2,y2]から係数a,bを求める'(X1,Y1,X2,Y2,A,B) :-
  A is (Y1 - Y2) / (X1 - X2),
  B is Y1 - (A * X1).
746デフォルトの名無しさん:2010/02/20(土) 21:27:49
>>709
使用言語:Clojure

user=> (def A ["あいうえお","かきくけこ","さしすせそ","たちつてと","なにむねの"])
#'user/A
user=> (defn f [x] (x (int(* (Math/random)(.length x)))))
#'user/f
user=> (f A)
"たちつてと"
user=> (f A)
"かきくけこ"
747デフォルトの名無しさん:2010/02/21(日) 06:21:56
>>742
% Prolog 第二節目は
# 人びとは、真の暗闇、真の静寂を知らない。ただひとつまたたく灯、遠い一瞬の叫ぶ
# 声がどんな感じのものかを知らない。

知らない(人びと,_何かを) :-
  知らない(_何かを).

知らない(_暗闇) :-
  真の暗闇(_暗闇).
知らない(_静寂) :-
  真の静寂(_静寂).

知らない(人びと,_何かの,_感じ) :-
  感じ(_何かの,_感じ).

感じ(_またたく灯) :-
  またたく灯(_またたく灯),
  ただひとつ(_またたく灯).
感じ(_叫ぶ声) :-
  叫ぶ声(_叫ぶ声),
  遠い(_叫ぶ声),
一瞬の(_叫ぶ声).
748デフォルトの名無しさん:2010/02/21(日) 20:17:19
http://pc12.2ch.net/test/read.cgi/tech/1263824755/746
# [1] 授業単元:
# UNIX C Programming
# [2] 問題文(含コード&リンク):
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10541.txt
#
# 下記のコードはUnixコマンドのmoreの低水準バージョンである。
# このmoreにundoの機能を付加しターミナルで使えるようにしたい。
# 例:ファイルの中を'Enter'で1行進み、'UNDO'で1行戻る。
#   'Enter'で1行進み、' '(Space)で1ページ進んだ後、'UNDO'で1ページ元に戻る。
#
# 一案として、/dev/ttyからのinputをarrayの中に残しておき、それを元に作業を一つ戻すことが考えられる。
# 下記のコードはmoreの基本的な機能である、’Enter’で一行前進・’ ’(Space)で一ページ前進を既に盛り込んでいる。
749デフォルトの名無しさん:2010/02/23(火) 05:31:29
http://pc12.2ch.net/test/read.cgi/tech/1263824755/786
# 【質問テンプレ】
# [1]プログラム演習
# [2]標準入力から入力した自然数を変数iに格納し i<(2のj乗)となる最小の自然数j
# を求める。ただし再帰関数を用いる。
# [3] Windows 7/Borland C++ 5.0/C言語
# [4] 3/1迄
#
# 再帰関数がよくわからないので分かり易いサイトなどあれば教えてください。
750デフォルトの名無しさん:2010/02/23(火) 05:35:12
http://pc12.2ch.net/test/read.cgi/tech/1260922392/33
# 問題
# 楕円内の定点Aより光が出て楕円にぶつかり反射する。
# 反射した光はまた楕円にぶつかり反射する。
# この操作を繰り返すとき、光の通った跡を直線として描くと
# 楕円の内部を埋め尽くすか否かシミュレーションせよ。
#
# お願いします
# 出発点Aの位置を変え実験せよ。(光のはじめの方向は適当でよい)
751デフォルトの名無しさん:2010/02/23(火) 10:42:02
>>749
% Prolog

'標準入力から入力した自然数を変数iに格納し i<(2のj乗)となる最小の自然数jを求める。ただし再帰関数を用いる。'(J) :-
  催促付き整数入力('自然数を入れてください :',I),
  'i<(2のj乗)となる最小の自然数jを求める'(1,0,I,J).

'i<(2のj乗)となる最小の自然数jを求める'(J1,J,I,J) :- J1 > I,!.
'i<(2のj乗)となる最小の自然数jを求める'(J1,_,I,J) :-
  J2 is J1 * 2,
  'i<(2のj乗)となる最小の自然数jを求める'(J2,J1,I,J).
752デフォルトの名無しさん:2010/02/23(火) 10:44:06
>>751 (>>749) 訂正
% Prolog 第一節の本体。

'i<(2のj乗)となる最小の自然数jを求める'(J1,J,I,J) :- J1 >= I,!.
'i<(2のj乗)となる最小の自然数jを求める'(J1,_,I,J) :-
  J2 is J1 * 2,
  'i<(2のj乗)となる最小の自然数jを求める'(J2,J1,I,J).
753デフォルトの名無しさん:2010/02/23(火) 10:48:28
>>751 >>752 (>>749) 問題読み違えました。訂正。
% Prolog

'標準入力から入力した自然数を変数iに格納し i<(2のj乗)となる最小の自然数jを求める。ただし再帰関数を用いる。'(J) :-
  催促付き整数入力('自然数を入れてください :',I),
  'i<(2のj乗)となる最小の自然数jを求める'(1,I,J).

'i<(2のj乗)となる最小の自然数jを求める'(J,I,J) :- J > I,!.
'i<(2のj乗)となる最小の自然数jを求める'(J1,I,J) :-
  J2 is J1 * 2,
  'i<(2のj乗)となる最小の自然数jを求める'(J2,I,J).
754デフォルトの名無しさん:2010/02/23(火) 13:08:39
>>749
使用言語:J

g=:dyad def 'if. y<2^x do. <:x else. (>:x) g y end.'
f=:monad def 'if. y<3 do. '''' return. else. 1 g y end.'

f 2

f 10
3
f 100
6
755デフォルトの名無しさん:2010/02/24(水) 03:47:05
http://pc12.2ch.net/test/read.cgi/tech/1248012902/905
# Write a program to sum the following series:
# (これらを合計するプログラムを書きなさい)
#
# 1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99
756デフォルトの名無しさん:2010/02/24(水) 22:37:21
>>749
// F#
// 自然数の入力処理に再帰関数を使用してみる

open System

let rec input msg =
    printf "%s:" msg
    match Console.ReadLine() |> Int32.TryParse with
    | true, i when i > 0 -> i
    | _ -> input "自然数を入力してってば"

let i = input "自然数を入力してください"
Seq.initInfinite ((+) 1) |> Seq.find (pown 2 >> (<) i) |> printfn "%d"
757デフォルトの名無しさん:2010/02/24(水) 22:55:47
>>755
// F#
// なぜか 5/7 だけないのを考慮

List.sum [for i in 1N .. 2N .. 97N -> i / (i + 2N)] - 5N / 7N
758デフォルトの名無しさん:2010/02/25(木) 18:44:27
http://pc11.2ch.net/test/read.cgi/db/1252492296/572
# 社員
# ・ID
# ・名前
# ・現在の課ID
# ・その他社員情報いろいろ(各列は独立した要素)
#
# 異動歴
# ・社員ID
# ・異動番号(社員ID単位の通し番号)
# ・課ID
#
# のような構造とした場合、このデータベースを使うアプリケーション上では、
# 社員というオブジェクトがあって、異動歴という可変長配列を、
# IDや名前と同じように社員オブジェクトのメンバに持たせたいです。
#
# 社員検索のSQLから引っかかった社員オブジェクトを作る際、
# WHEREやJOINで社員と異動歴をつなげた状態で検索すると
# 同じIDの社員レコードが異動歴ごとに連続して出てきてしまいます。
#
# 異動歴を固定数の列として社員テーブルに持たせてしまえば
# なにも悩まずに1つのレコードから社員オブジェクトを作れるのですが、
# このようなケースの場合、異動歴の可変長配列を作るためだけに
# 異動歴テーブル単体をあとから再検索することになるのでしょうか?
759デフォルトの名無しさん:2010/02/25(木) 21:27:28
>>755
% Prolog 5/7 はうっかりミスということにして。bignumの必要あり。

'1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(_分子,_分母) :-
  '1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(97,_分
子,_分母).


'1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(97,97,99) :- !.
'1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(N,_分子,_分母) :-
  M is N + 2,
  '1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(M,_分子2,_分母2),
  _分子1 is ( N * _分母2 + M * _分子2),
  _分母1 is M * _分母2,
  約分(_分子1,_分母1,_分子,_分母),!.
760デフォルトの名無しさん:2010/02/25(木) 21:31:11
>>759 (>>755) 訂正
% Prolog 初期値が違っていた(97->1)のと改行位置を直してなかった。

'1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(_分子,_分母) :-
  '1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(1,_分子,_分母).
761デフォルトの名無しさん:2010/02/25(木) 22:00:56
>>758
% Prolog その他社員情報は別述語を定義するべきなので割愛。

社員異動情報(_社員異動情報) :-
  findall(ID,社員(ID,_,_),L),
  findall([ID,_名前,_現在の課ID,_異動情報],(member(ID,L),社員異動情報(ID,_名前,_現在の課ID,_異動情報)),_社員異動情報).

社員異動情報(ID,_名前,_現在の課ID,_異動情報) :-
  社員(ID,_名前,_現在の課ID),
  findall([_異動番号,_課ID],異動歴(ID,_異動番号,_課ID),L),
  sort(L,_異動情報),!.
762デフォルトの名無しさん:2010/02/27(土) 00:34:17
>>755
使用言語:J
5/7はあるものとして。

+/(}:%}.)>:+:i.50
45.1245


有理数を使った場合。JではA/BをArBと表記する。
また、数値の末尾にxをつけると有理数リテラルになる。

+/(}:%}.)>:+:i.50x
49157712611924558897925120243494707766897r1089380862964257455695840764614254743075
763デフォルトの名無しさん:2010/02/27(土) 02:01:03
>>755
使用言語:maxima
5/7はあるものとして。

(%i18) sum((i*2+1)/(i*2+3),i,0,48);
49157712611924558897925120243494707766897
-----------------------------------------
1089380862964257455695840764614254743075
764デフォルトの名無しさん:2010/02/27(土) 02:33:34
>>755
使用言語:Clojure
5/7はあるものとして。

user=> (reduce + (map #(/ % (+ % 2)) (range 1 98 2)))
49157712611924558897925120243494707766897/1089380862964257455695840764614254743075

最初、他の言語での結果と違う結果になった。range の範囲を間違えていた。
下のようになる。
user=> (range 1 5)
(1 2 3 4)
765デフォルトの名無しさん:2010/02/27(土) 07:34:30
>>755
使用言語:R
5/7はあるものとして。

> a<-seq(1,97,2)
> cat(sum(a/(a+2)))
45.12445
766デフォルトの名無しさん:2010/02/27(土) 19:31:50
http://pc12.2ch.net/test/read.cgi/tech/1248012902/923
# キーボードから5人分の点数を入力して、合計、平均、最高点、最低点を
# 表示するプログラムを作成してくださいというものです。
# 今は途中で終わっています
# http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/935.java
#
# お願いしますm(_ _)m
767デフォルトの名無しさん:2010/02/28(日) 12:33:05
% Prologの苦手とする問題でしたので採用しました。
http://pc11.2ch.net/test/read.cgi/db/1252492296/577
# アップデータ文を使う練習問題を解いていて、どうしてもわからなくなりました。
# 一つのテーブルないで、ある行(A)を参照して、他の行(B)にその値をいれたいです。
# 簡単にかくと
# A B
# 1 1
# 2 1
# 3 1
# 4 1
# というところを
#
# A B
# 1 1
# 2 2
# 3 3
# 4 4
#
# としたいのです。
# アップデート文を一つ使って、一行分変える事はできるのですが、
# 全部で100行変えたい場合は、今のままだとSQL文を100回使わないと
# 変えられません。
768デフォルトの名無しさん:2010/02/28(日) 15:38:27
>>767
% Prolog では節の出現位置に意味があるため定義された順序は変えられない。
% 行位置を指定してretract/assertをすることもできない。

update767 :- retract(テーブル(A,B)),update767_2(A,B),fail.
update767.

update767_2(A,B) :- A>=1,A=<100,assertz(A,A).
update767_2(A,B) :- \+((A>=1,A=<100)),assertz(A,B).
769デフォルトの名無しさん:2010/02/28(日) 18:15:37
>>766
% Prolog

キーボードから5人分の点数を入力して、合計、平均、最高点、最低点を表示する :-
  キーボードから5人分の点数を入力して(_点数ならび),
  合計、平均、最高点、最低点を表示する(_点数ならび).

キーボードから5人分の点数を入力して(_点数ならび) :-
  write('5人分の点数をカンマで区切って一行で入力してください : '),
  get_line(_入力行),
  split(_入力行,[','],_点数ならび).

合計、平均、最高点、最低点を表示する(_点数ならび) :-
  findavg(_点数ならび,_平均),
  findmax(_点数ならび,_最高点),
  findmin(_点数ならび,_最低点),
  write_formatted('平均=%t点,最高点=%t点,最低点=%t点\n',[_平均,_最高点,_最低点]).
770デフォルトの名無しさん:2010/03/02(火) 21:48:06
http://pc12.2ch.net/test/read.cgi/tech/1263824755/806
# [1] 授業単元:C++
# [2] 問題文(含コード&リンク):
# 成績を表示するプログラムを作成せよ。処理する人数は40人であるとする。以下の様な仕様である
# 1番の成績を入力せよ
# 85
# 1番は85点です
# 2番の成績を入力せよ
# 100
# 2番は100点です
771デフォルトの名無しさん:2010/03/02(火) 21:48:50
http://pc12.2ch.net/test/read.cgi/tech/1263824755/807
# [1] 授業単元:C++
# [2] 問題文(含コード&リンク):
# 角度0から90°,10°刻みのsin,cos,tanの表を作成せよ
772デフォルトの名無しさん:2010/03/03(水) 05:49:36
>>742
% Prolog

現在、都市に住む人びとは、真の暗闇、真の静寂を知らない(_現在,_人びと,_都市,_真の闇,_真の静寂) :-
  現在(_人びと,_現在),
  都市に住む(_人びと,_都市),
  人びと(_人びと),
  知らない(_人びと,_真の暗闇),
  知らない(_人びと,_真の静寂),
  真の静寂(_真の静寂),
  真の暗闇(_真の暗闇).

真の暗闇(_真の暗闇) :- 暗闇(_真の暗闇),真の(_真の暗闇).

真の静寂(_真の静寂) :- 静寂(_真の静寂),真の(_真の静寂).

現在(_人びと,_現在) :- 現在(_現在),生きる(_人びと,_現在).

都市に住む(_人びと,_都市) :- 都市(_都市).
773デフォルトの名無しさん:2010/03/03(水) 06:05:06
>>772 訂正
% Prolog 引数に現れる _真の闇 は _真の暗闇 の間違いです。
774デフォルトの名無しさん:2010/03/03(水) 06:18:38
>>772
% Prolog 書き直しました。一部目標の順序も変更。

現在、都市に住む人びとは、真の暗闇、真の静寂を知らない(_現在,_人びと,_都市,_真の暗闇,_真の静寂) :-
  現在(_人びと,_現在),
  都市に住む(_人びと,_都市),
  人びと(_人びと),
  真の暗闇(_真の暗闇),
  知らない(_人びと,_真の暗闇),
  真の静寂(_真の静寂),
  知らない(_人びと,_真の静寂).

真の暗闇(_真の暗闇) :- 暗闇(_真の暗闇),真の(_真の暗闇).

真の静寂(_真の静寂) :- 静寂(_真の静寂),真の(_真の静寂).

現在(_人びと,_現在) :- 現在(_現在),生きる(_人びと,_現在).

都市に住む(_人びと,_都市) :- 都市(_都市).
775デフォルトの名無しさん:2010/03/03(水) 09:02:36
>>774

> ... 真の(_真の暗闇),

のところだけど、
... 真の(暗闇,_真の暗闇), ...

であるべきでは?
776デフォルトの名無しさん:2010/03/03(水) 11:17:13
>>771
% Prolog

'角度0から90°,10°刻みのsin,cos,tanの表を作成する' :-
    member(F,[sin,cos,tan]),
    functor(_式,F,1),
    arg(1,_式,R),
    for(0,N,9),
    N2 is N * 10,
    R is pi * N2 / 180,
    X is _式,
    assertz('角度0から90°,10°刻みのsin,cos,tanの表'(F,N2,X)),
    N = 9,
    fail.
'角度0から90°,10°刻みのsin,cos,tanの表を作成する'.
777デフォルトの名無しさん:2010/03/03(水) 11:28:53
>>770
% Prolog

成績を表示する :-
    成績を登録する,
    登録された成績を表示する.

成績を登録する :-
    処理する人数は40人であるとする.

処理する人数は40人であるとする :-
    for(1,N,40),
    write_formatted('%t番の成績を入力せよ\n',[N]),
    get_integer(_点数),
    assertz(成績(N,_点数)),
    write_formatted('%t番の成績として%点を登録しました\n',[N,_点数]),
    N = 40,!.

登録された成績を表示する :-
    成績(N,_点数),
    write_formatted('%t番目の成績は%t点です\n',[N,_点数]),
    fail.
登録された成績を表示する.
778デフォルトの名無しさん:2010/03/03(水) 11:41:33
http://pc12.2ch.net/test/read.cgi/tech/1266565626/8
# 1,1,4
# 1,2,7
# 1,3,2
#
# という(X,Y,値)というメッシュ(グリッド)データがあって
# 例えば座標が1ごとに値があるのを、5毎にして今までの値を平均して入れるというのを組みたいのですが
# どうすればよいでしょうか?
779デフォルトの名無しさん:2010/03/03(水) 13:30:16
>>778
% Prolog

要素変換([],_,[]) :- !.
グリッド要素変換([[X,Y,V],[X2,Y2,V2]|R1],Sum,[[X,Y1,Avg]R2]) :-
   \+(X=X2),
   Y1 is Y // 5,
   M is Y mod 5,
   Avg is (Sum + V) / M,
   グリッド要素変換([[X2,Y2,V2]|R1],0,R2),!.
グリッド要素変換([[X,Y,V],[X,Y2,V2]|R1],Sum,[[X,Y1,Avg]|R2]) :-
   0 is Y mod 5,
   Y1 is Y // 5,
   Avg is (Sum + V) / 5,
   グリッド要素変換([[X2,Y2,V2]|R1],0,R2),!.
グリッド要素変換([[X,Y,V],[X,Y2,V2]|R1],Sum,L) :-
   Sum2 is Sum + V,
   グリッド要素変換([[X,Y2,V2]|R1],Sum2,L),!.
780デフォルトの名無しさん:2010/03/03(水) 13:32:02
>>779 (>>778)
% Prolog 第一節に文字置換を書け損ねた。

グリッド要素変換([],_,[]) :- !.
グリッド要素変換([[X,Y,V],[X2,Y2,V2]|R1],Sum,[[X,Y1,Avg]R2]) :-
   \+(X=X2),
   Y1 is Y // 5,
   M is Y mod 5,
   Avg is (Sum + V) / M,
   グリッド要素変換([[X2,Y2,V2]|R1],0,R2),!.
グリッド要素変換([[X,Y,V],[X,Y2,V2]|R1],Sum,[[X,Y1,Avg]|R2]) :-
   0 is Y mod 5,
   Y1 is Y // 5,
   Avg is (Sum + V) / 5,
   グリッド要素変換([[X2,Y2,V2]|R1],0,R2),!.
グリッド要素変換([[X,Y,V],[X,Y2,V2]|R1],Sum,L) :-
   Sum2 is Sum + V,
   グリッド要素変換([[X,Y2,V2]|R1],Sum2,L),!.
781デフォルトの名無しさん:2010/03/03(水) 13:35:44
書け損ねた -> 掛け損ねた w
782デフォルトの名無しさん:2010/03/03(水) 15:48:42
http://pc11.2ch.net/test/read.cgi/db/1252492296/594
#(問)
# ID | DATE     | DATA
# --+----------+-----
# 1 | 2007-11-11 | aaa
# 2 | 2007-11-11 | bbb
# 1 | 2007-11-10 | ccc
# 3 | 2007-11-12 | ddd
# 3 | 2007-11-11 | eee
# 4 | 2007-11-10 | fff
# 1 | 2007-11-12 | ggg
#
# このようなテーブルから、各idに対して最新の5件だけ抽出しなさい
783デフォルトの名無しさん:2010/03/03(水) 15:49:41
>>782
% Prolog

各idに対して最新の5件だけ抽出する(_テーブル名,L) :-
   functor(Q,_テーブル名,3),
   setof(ID,Q,L1),
   整列(L1,L2),
   findall(L3,(member(ID,L1),idに対して最新の5件だけ抽出する(ID,Q,L3)),L).

idに対して最新の5件だけ抽出する(ID,Q,L) :-
   arg(1,Q,ID),
   findall(L1,(call(Q),Q=..[_|L1]),L2),
   整列(L2,L3),
   length(L,5),
   最新の5件だけ抽出する(L3,L).

最新の5件だけ抽出する(L3,L) :-
   append(_,L,L3),!.
最新の5件だけ抽出する(L,L) :- !.
784デフォルトの名無しさん:2010/03/03(水) 18:41:58
>>782
% Prolog

各idに対して最新の5件だけ抽出する(_テーブル名,L) :-
   functor(Q,_テーブル名,3),
   重複を排除したidならびの抽出(ID,Q,L1),
   整列(L1,L2),
   findall(L3,(member(ID,L1),idに対して最新の5件だけ抽出する(ID,Q,L3)),L).

idに対して最新の5件だけ抽出する(ID,Q,L) :-
   目標Qの第一引数はID(ID,Q),
   idに対して組ならびを抽出する(Q,L3),
   最新の5件だけ抽出する(L3,L).

idに対して組ならびを抽出する(Q,L3) :-
   findall(L1,(call(Q),引数部分だけ抽出する(Q,L1)),L2),
   整列(L2,L3),!.

重複を排除したidならびの抽出(ID,Q,L1) :- setof(ID,Q,L1).

目標Qの第一引数はID(ID,Q) :- arg(1,Q,ID),!.

引数部分だけ抽出する(Q,L1) :- Q =.. [_|L1].

最新の5件だけ抽出する(L3,L) :-
   length(L,5),
   append(_,L,L3),!.
最新の5件だけ抽出する(L,L) :- !.
785デフォルトの名無しさん:2010/03/03(水) 20:38:02
http://pc12.2ch.net/test/read.cgi/tech/1263824755/826
# [1] 授業単元:C++
# [2] 問題文(含コード&リンク):
# 任意の整数から整数までの合計を計算するプログラムを作成せよ。ただし、必ず、(始めに入れた数字)<(最後に入れた数字)となるように数値を入力するものとする。
# 始めの数を入力せよ
# 156
# 終わりの数を入力せよ
# 328
# 156から328までの合計は41866です。
#
# 上の問題では(始めに入れた数字)<(最後に入れた数字)としたが、
# これを、(始めに入れた数字)≧(最後に入れた数字)と入力しても合計を計算できるようなプログラムも作成せよ
786デフォルトの名無しさん:2010/03/03(水) 20:40:12
>>785
% Prolog

任意の整数から整数までの合計を計算する(_開始整数,_終了整数,_合計) :-
   findsum(N,for(_開始整数,N,_終了整数),_合計).
787デフォルトの名無しさん:2010/03/03(水) 20:42:51
http://pc12.2ch.net/test/read.cgi/tech/1248012902/967
# 【 課題 】
# ○県、市別に男女の人数を集計するプログラムを作成せよ。
#
# 千葉県 柏市 男
# 千葉県 松戸市 男
# 埼玉県 さいたま市 女
# 千葉県 柏市 男
# 埼玉県 越谷市 男
# 千葉県 松戸市 男
# 埼玉県 岩槻市 女
# 千葉県 柏市 女
# 埼玉県 さいたま市 女
#
# [実行例]
# 千葉県 柏市:男2人女1人
# 千葉県 松戸市:男1人0人
# 埼玉県 さいたま市:男0人女2人
# (以下略)…
#
788デフォルトの名無しさん:2010/03/03(水) 21:08:09
>>787
% Prolog

県、市別に男女の人数を集計する(_ファイル,_集計ならび) :-
   get_split_lines(_ファイル,[' '],L1),
   整列(L1,L2),
   県、市別に男女の人数を集計する(0,L2,_集計ならび).

県、市別に男女の人数を集計する(N,[[_県,_市,_性別]],[[_県,_市,_性別,N2]]) :-
   N2 is N + 1,!.
県、市別に男女の人数を集計する(N,[[_県,_市,_性別],[_県,_市,_性別]|R1],R2) :-
   N2 is N + 1,
   県、市別に男女の人数を集計する(N2,[[_県,_市,_性別]|R1],R2),!.
県、市別に男女の人数を集計する(N,[[_県,_市,_性別]|R1],[[_県,_市,_性別,N2]|R2) :-
   N2 is N + 1,
   県、市別に男女の人数を集計する(0,R1,R2),!.
789デフォルトの名無しさん:2010/03/04(木) 04:59:50
http://pc12.2ch.net/test/read.cgi/tech/1263824755/847
# [1] 授業単元:C++
# [2] 問題文(含コード&リンク):
# 入力した整数の桁を数えるプログラムを作成せよ
# 整数値を入力せよ
# 5659693
# 7桁である。
790デフォルトの名無しさん:2010/03/04(木) 05:01:37
http://pc12.2ch.net/test/read.cgi/tech/1263824755/851
# [1] 授業単元:知識情報基礎実験
# [2] 問題文(含コード&リンク):
# 乱数を希望数取得し、それをバブルソート、挿入ソート、クイックソート、ヒーブソートの各種を用いてソートせよ(4個のプログラムを作成する)。
# また、それぞれ比較回数、実行時間を計測せよ。
791デフォルトの名無しさん:2010/03/04(木) 05:31:04
>>789
% Prolog

入力した整数の桁を数える :-
   催促付き整数入力('整数値を入力せよ\n',N),
   入力した整数の桁を数える(N,_桁),
   write_formatted('%t桁である。\n',[_桁]).

入力した整数の桁を数える(N,1) :- 0 is N // 10,!.
入力した整数の桁を数える(N,X) :-
   M is N // 10,
   入力した整数の桁を数える(M,Y),
   X is Y + 1.
792デフォルトの名無しさん:2010/03/04(木) 07:27:27
>>790
% Prolog クイックソートのみ。

クイックソート(_対象ならび,_整列された値ならび) :-
   第一要素を分割値とする(_対象ならび,_分割値,_残り対象ならび),
   分割値に対しての大小でならびを二分割する(_分割値,_残り対象ならび,_分割値より小さいかまたは等しい値ならび,_分割値より大きい値ならび),
   分割されたならびを部分的に整列する(_分割値より小さいかまたは等しい値ならび,_整列された分割値より小さいかまたは等しい値ならび),
   分割されたならびを部分的に整列する(_分割値より大きい値ならび,_整列された分割値より大きい値ならび),
   整列された二つのならびと分割値を結合する(_分割値,_整列された分割値より小さいかまたは等しい値ならび,_整列された分割値より大きい値ならび,_整列された値ならび).
クイックソート([],[]).

第一要素を分割値とする([_分割値|_残り対象ならび],_分割値,_残り対象ならび).

分割値に対しての大小でならびを二分割する(_,[],[],[]) :- !.
分割値に対しての大小でならびを二分割する(_分割値,[A|R1],[A|R2],R3) :-
   A @=< _分割値,
   分割値に対しての大小でならびを二分割する(_分割値,R1,R2,R3),!.
分割値に対しての大小でならびを二分割する(_分割値,[A|R1],R2,[A|R3]) :-
   A @> _分割値,
   分割値に対しての大小でならびを二分割する(_分割値,R1,R2,R3),!.

分割されたならびを部分的に整列する(_分割された値ならび,_整列された分割された値ならび) :-
   クイックソート(_分割された値ならび,_整列された分割された値ならび),!.

整列された二つのならびと分割値を結合する(_分割値,_整列された分割値より小さいかまたは等しい値ならび,_整列された分割値より大きい値ならび,_整列された値ならび) :-
   append(_整列された分割値より小さいかまたは等しい値ならび,[_分割値|_整列された分割値より大きい値ならび],_整列された値ならび),!.
793デフォルトの名無しさん:2010/03/04(木) 17:55:35
>>776 (>>771) 訂正
% Prolog tan(pi/2) は除外が適切か。

'角度0から90°,10°刻みのsin,cos,tanの表を作成する' :-
    member(F,[sin,cos,tan]),
    functor(_式,F,1),
    arg(1,_式,R),
    for(0,N,9),
    \((N=9,F=tan)),
    N2 is N * 10,
    R is pi * N2 / 180,
    X is _式,
    assertz('角度0から90°,10°刻みのsin,cos,tanの表'(F,N2,X)),
    N = 9,
    fail.
'角度0から90°,10°刻みのsin,cos,tanの表を作成する'.
794デフォルトの名無しさん:2010/03/04(木) 17:58:44
>>793 さらに訂正

   \((N=9,F=tan)), -> \+((N=9,F=tan)),
795デフォルトの名無しさん:2010/03/05(金) 11:44:54
http://pc11.2ch.net/test/read.cgi/db/1252492296/599
# 以下のSQLで最新日の2000円以上の売上があった商品を抽出しているんですが、
# SELECT * FROM SALES WHERE uriage >= 2000 AND date = (select max(date) from SALES)
# 「その商品の前回売上があった日の売上額」と「前回の売上と比べてどれだけ増えたのかの増加率」
# を出したい場合どうしたらいいでしょう?
#
# 商品ID(id) | 日付(date) | 売上額(uriage) | 前回売上額 | 売上増加率
# 3 | 1267714800 | 2500 | ????? | ?????
# 4 | 1267714800 | 2800 | ????? | ?????
#
# [日付の形式はunixtimeで、データ登録の際は日付だけ変更させ、時間と秒は常に統一させています]
796デフォルトの名無しさん:2010/03/05(金) 18:34:03
>>795
% Prolog

前回売上との比較売上表(_年/_月/_日) :-
    setof(_商品ID,(売上(_商品ID,_日付,_),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上のあった商品IDならび),
    write('商品ID(id) | 日付(date) | 売上額(uriage) | 前回売上額 | 売上増加率\n'),
    member(_商品ID2,_売上のあった商品IDならび),
    当日の売上金額計(_商品ID2,_年/_月/_日,_売上金額計),
    前回売上があった日(_商品ID2,_日付,_前回売上があった日),
    前回売上があった日の売上金額計(_商品ID2,_前回売上があった日,_前回売上があった日の売上金額計),
    売上行表示(_商品ID2,_年/_月/_日,_売上金額計,_前回売上があった日の売上金額計),
    fail.
前回売上との比較売上表(_,_,_).

前回売上があった日(_商品ID,_日付,_前回売上があった日) :-
    localtime(_日付,_年1,_月1,_日1,_,_,_,_),
    findmax(_年2/_月2/_日2,(売上(_商品ID,_日付2,_),localtime(_日付2,_年2,_月2,_日2,_,_,_,_),_年1/_月1,_日1 @> _年2/_月2/_日2),_前回売上があった日).

前回売上があった日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-
    findsum(_売上金額,(売上(_商品ID,_日付2,_売上金額),localtime(_日付2,_年,_月,_日,_,_,_,_)),_売上金額計).

当日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-
    findsum(_売上金額,(売上(_商品ID,_日付,_売上金額),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上金額計).

売上行表示(_商品ID,_年/_月/_日,_売上金額計,0.0) :-
    write_formatted('%14d |  %2d/%2d/%2d  |  %12.0f  |  %12.0f  | -------------- | ----\n',[_商品ID2,_年/_月/_日,_売上金額計]),!.
売上行表示(_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計) :-
    _売上増加率 is _売上金額計 / _前回売上のあった日の売上金額計,
    write_formatted('%14d |  %2d/%2d/%2d  |  %12.0f  |  %12.0f  |  %4.1f\n',[_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計,_売上増加率]),!.
797デフォルトの名無しさん:2010/03/05(金) 18:44:05
>>796 (>>795) 訂正
% Prolog 最初の5行が微妙に変わっています。

前回売上との比較売上表(_年/_月/_日) :-
    findall(_商品ID,(売上(_商品ID,_日付,_),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上のあった商品IDならび),
    sort(_売上のあった商品IDならび,_売上のあった商品IDならび2),
    write('商品ID(id) | 日付(date) | 売上額(uriage) | 前回売上額 | 売上増加率\n'),
    member(_商品ID2,_売上のあった商品IDならび2),
    当日の売上金額計(_商品ID2,_年/_月/_日,_売上金額計),
    前回売上があった日(_商品ID2,_日付,_前回売上があった日),
    前回売上があった日の売上金額計(_商品ID2,_前回売上があった日,_前回売上があった日の売上金額計),
    売上行表示(_商品ID2,_年/_月/_日,_売上金額計,_前回売上があった日の売上金額計),
    fail.
前回売上との比較売上表(_,_,_).

前回売上があった日(_商品ID,_日付,_前回売上があった日) :-
    localtime(_日付,_年1,_月1,_日1,_,_,_,_),
    findmax(_年2/_月2/_日2,(売上(_商品ID,_日付2,_),localtime(_日付2,_年2,_月2,_日2,_,_,_,_),_年1/_月1,_日1 @> _年2/_月2/_日2),_前回売上があった日).

前回売上があった日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-
    findsum(_売上金額,(売上(_商品ID,_日付2,_売上金額),localtime(_日付2,_年,_月,_日,_,_,_,_)),_売上金額計).

当日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-
    findsum(_売上金額,(売上(_商品ID,_日付,_売上金額),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上金額計).

売上行表示(_商品ID,_年/_月/_日,_売上金額計,0.0) :-
    write_formatted('%14d |  %2d/%2d/%2d  |  %12.0f  |  %12.0f  | -------------- | ----\n',[_商品ID2,_年/_月/_日,_売上金額計]),!.
売上行表示(_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計) :-
    _売上増加率 is _売上金額計 / _前回売上のあった日の売上金額計,
    write_formatted('%14d |  %2d/%2d/%2d  |  %12.0f  |  %12.0f  |  %4.1f\n',[_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計,_売上増加率]),!.
798デフォルトの名無しさん:2010/03/05(金) 20:39:35
http://pc11.2ch.net/test/read.cgi/db/1252492296/602
# MYSQLを使っています。
# SELECT * FROM aaa WHERE id = ●
# この●の部分が複数ある場合、例えば 3,9,14,43,413,545のような場合に
# 一度に結果を取り出したいのですが、どういう風にかけばいいでしょうか?
# 他のテーブルにid_list = "3 9 14 43 413 545"
# のように入っていているのですが
# これをsplitしてid=3 id=9のようにして
# SELECT * FROM aaa WHERE id = ●を繰り返すコードにしてるですが
# 数増えたらとんでもないことになるじゃん・・・って気づきました。
#
799デフォルトの名無しさん:2010/03/05(金) 20:44:22
>>798
% Prolog

'SELECT * FROM aaa WHERE id = ●'(IdList,Id,Data) :-
    split(IdList,[' '],L),
    aaa(Id,Data),
    member(Id,L).

800デフォルトの名無しさん:2010/03/06(土) 02:42:00
// F#
// >>766

open System

let statistics() =
    let rec input n =
        printf "%d人目の点数を入力せよ:" n
        match Console.ReadLine() |> Int32.TryParse with
        | true, x -> x | _ -> input n
    let scores = [for i in 1 .. 5 -> input i]
    (List.sum scores, List.averageBy float scores, List.max scores, List.min scores)


// >>767

type Table = { A : int; B : int }

let update = List.map (fun t -> { t with B = t.A })
801デフォルトの名無しさん:2010/03/06(土) 02:45:54
// F#
// >>771

open System

let trigonometric() =
    printfn "deg    sin        cos        tan"
    [0 .. 10 .. 90] |> List.map (function
        | 90 -> (90, 1., 0., Double.NaN)
        | d -> let r = float d * Math.PI / 180. in (d, sin r, cos r, tan r))
    |> List.iter (fun (x, s, c, t) -> printfn "%3d %10.8g %10.8g %10.8g" x s c t)


// >>782

type Table = { ID : int; DATE : System.DateTime; DATA : string }

let latest5 tables =
    tables |> Seq.groupBy (fun t -> t.ID)
    |> Seq.map (snd >> Seq.toList >> List.sortBy (fun t -> t.DATE) >> List.rev >> Seq.truncate 5)
    |> Seq.concat
802デフォルトの名無しさん:2010/03/06(土) 02:46:34
なんだかPrologばっかりだな

転載してる人=Prologの人
なのかな?
803デフォルトの名無しさん:2010/03/06(土) 02:48:04
// F#
// >>785

open System

let sum() =
    let rec input msg =
        printfn "%sの数を入力せよ" msg
        match Console.ReadLine() |> Int32.TryParse with
        | true, x -> x | _ -> input msg
    let (a, b) = (input "初め", input "終わり")
    [min a b .. max a b] |> List.sum |> printfn "%dから%dまでの合計は%dです。" a b


// >>787

type Table = { Pref : string; City : string; Sex : string }

let count tables =
    tables |> Seq.groupBy (fun t -> (t.Pref, t.City))
    |> Seq.map (fun (address, ts) ->
        let cs = ts |> Seq.countBy (fun t -> t.Sex) |> Map.ofSeq
        let cs' = List.map (fun s -> (s, defaultArg (Map.tryFind s cs) 0)) ["男"; "女"]
        (address, cs'))
804デフォルトの名無しさん:2010/03/06(土) 05:20:24
>>785
使用言語:J

f=:dyad def '+/(x<.y)+i.>:|y-x'

156 f 328
41866
328 f 156
41866
805デフォルトの名無しさん:2010/03/06(土) 06:11:24
>>771
使用言語:J

a=:,.10 * i.10
b=:1r180p1 * a
c=:'deg';'sin';'cos';'tan'
c,:a;;/8j6":1 2 3 o./b
+---+--------+--------+--------+
|deg|sin |cos |tan |
+---+--------+--------+--------+
| 0 |0.000000|1.000000|0.000000|
|10 |0.173648|0.984808|0.176327|
|20 |0.342020|0.939693|0.363970|
|30 |0.500000|0.866025|0.577350|
|40 |0.642788|0.766044|0.839100|
|50 |0.766044|0.642788|1.191754|
|60 |0.866025|0.500000|1.732051|
|70 |0.939693|0.342020|2.747477|
|80 |0.984808|0.173648|5.671282|
|90 |1.000000|0.000000|********|
+---+--------+--------+--------+
806デフォルトの名無しさん:2010/03/06(土) 10:38:40
>>785
使用言語:R

> f<-function(a,b)sum(a:b)

> f(1,10)
[1] 55
> f(10,1)
[1] 55
807デフォルトの名無しさん:2010/03/06(土) 20:03:01
>>790
// F#

/// バブルソート
let bsort xs =
    let rec bsort' = function
        | [] -> [] | a::[] -> a::[]
        | a::b::rs when a > b -> b::bsort' (a::rs)
        | a::b::rs -> a::bsort' (b::rs)
    [for _ in 1 .. List.length xs - 1 -> bsort'] |> List.fold (fun x f -> f x) xs

/// 挿入ソート
let isort xs =
    let a = ResizeArray()
    xs |> List.iter (fun x ->
        match ResizeArray.tryFindIndex ((<) x) a with
        | Some(i) -> a.Insert(i, x)
        | None -> a.Add x)
    ResizeArray.toList a

/// クイックソート
let rec qsort = function
    | [] -> []
    | x::xs ->
        let (a, b) = List.partition ((>=) x) xs
        qsort a @ [x] @ qsort b
808デフォルトの名無しさん
>>790 続き
// F#

/// ヒープソート
let hsort xs =
    let a = List.toArray xs
    let swap i j = let t = a.[j] in a.[j] <- a.[i]; a.[i] <- t
    let rec toHeap i len =
        let (c1, c2) = (i * 2 + 1, i * 2 + 2)
        if c2 < len then
            toHeap c1 len; toHeap c2 len
            match List.maxBy (Array.get a) [i; c1; c2] with
            | m when m <> i -> swap i m; toHeap m len
            | _ -> ()
        elif c2 = len && a.[i] < a.[c1] then swap i c1
    for len = a.Length downto 2 do
        toHeap 0 len; swap 0 (len - 1)
    Array.toList a   

// 処理時間計測
let random = System.Random()
let xs = [for _ in 1 .. 1000 -> random.Next(1000)]
[bsort; isort; qsort; hsort] |> List.iter (fun f ->
    let watch = System.Diagnostics.Stopwatch.StartNew()
    f xs |> ignore
    watch.Stop()
    printfn "%O" watch.Elapsed)