[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 06/19 21:59 / Filesize : 314 KB / Number-of Response : 617
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

いろんな言語で宿題スレ



1 名前:a36 ◆K0BqlCB3.k [2009/05/21(木) 12:30:47 ]
他の宿題スレで出された問題を各々好きな言語で解答して言語の良さを競い合うスレです。
なお、宿題スレが存在する言語についてはその言語のスレで解答してください。

C/C++の宿題片付けます 126代目
pc12.2ch.net/test/read.cgi/tech/1242655611/

Python の宿題ここで答えます Part 1
pc12.2ch.net/test/read.cgi/tech/1153585095/

★★ Java の宿題ここで答えます Part 67 ★★
pc12.2ch.net/test/read.cgi/tech/1232627790/

Pascalの宿題は俺にやらせろ!!Part2
pc12.2ch.net/test/read.cgi/tech/1136994325/

BASICの宿題はお前にまかせた
pc12.2ch.net/test/read.cgi/tech/1136788500/

Rubyの宿題教えてください。2限目
pc12.2ch.net/test/read.cgi/tech/1200175247/

C#,C#の宿題片付けます。
pc12.2ch.net/test/read.cgi/tech/1197620454/

136 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 03:29:11 ]
<<課題>> Ruby
[1] 授業単元: Ruby演習 [2] 問題文、kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9426.txt
Rubyの問題がわかりません
助けてください

(1)曜日を表す英語と日本語との対応を表すハッシュwdayを定義しなさい

p wday["sunday"] #=> "日曜日"
p wday["monday"] #=> "月曜日"
p wday["saturday"] #=> "土曜日"

(2)ハッシュのメソッドを使って(1)のハッシュwdayのペアの数を数えなさい

(3)eachメソッドと(1)のハッシュwdayを使って以下の文字列を出力させてください。
「sunday」は日曜日のことです。
「monday」は月曜日のことです。


(4)ハッシュには配列の%wのようなものがありません。そこで、空白とタブと改行(正規表現で定義するなら「/\s+/」)で区切られた文字列をハッシュに変換するメソッドstr2hashを定義してください。

p str2hash("bule 青 white 白\nred赤");
#=> {"bule"=>"青", "white"=>"白", "red"=>"赤"}


137 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 05:06:33 ]
>>135 まだ解答ではありません。基準日から順に曜日を調べるユーティリティ
% Prolog(1/2)
前日・今日(_前日の年/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]),
曜日連鎖(_前日の曜日,_曜日).

138 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 05:08:53 ]
すみません。書き直しです。
% Prolog (1/2)
前日・今日(_前日の年/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]),
  曜日連鎖(_前日の曜日,_曜日).

139 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 05:10:20 ]
% Prolog(2/2)
一つ違い(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.

曜日連鎖(月曜,火曜).
曜日連鎖(火曜,水曜).
曜日連鎖(水曜,木曜).
曜日連鎖(木曜,金曜).
曜日連鎖(金曜,土曜).
曜日連鎖(土曜,日曜).
曜日連鎖(日曜,月曜).

140 名前:139 mailto:sage [2009/06/11(木) 05:13:26 ]
訂正
一つ違い(M,N) :-
  integer(M),!,
  N is M + 1.
一つ違い(M,N) :-
  integer(N),!,
  M is N - 1.

141 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 05:50:17 ]
>>140 の 一つ違い という述語ですが、これは>>135の 前日・今日 に
「双方向性」を与えるたのトリックです。
一般に関数評価述語 is が条件に現れると双方向性は失われてしまいます。
?- var(A),5 is A + 2. がエラーになってしまうからです。
それを回避するというか、誤魔化しているのですね。


142 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 06:03:37 ]
前日・今日の最後の節がコピペできていませんでした。

前日・今日(_年/_月/_前日,_前日の曜日,_年/_月/_日,_曜日) :-
  一つ違い(_前日,_日),
  曜日連鎖(_前日の曜日,_曜日).

が一番最後に来ますね。

143 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 07:18:14 ]
>>136 (4)だけです
% Prolog (正規表現との競争ということかな 少し負けるが・・)
% nojiriko.asia/prolog/t136.html
:- op(700,xfx,(=>)).
t136(Atom,X) :- 英語色日本語色ペアリストの作成(Atom,X).

英語色日本語色ペアリストの作成(Atom,X) :-
  atom_chars(Atom,Chars),
  文字ならびから英語色日本語色ペアリストの作成(Chars,X),!.

文字ならびから英語色日本語色ペアリストの作成([],[]).
文字ならびから英語色日本語色ペアリストの作成(L,[_英語色=>_日本語色|R]) :-
  一語切り出す(L,L2,R1),
  一語切り出す(R1,L3,R2),
  atom_chars(_英語色色,L2),
  atom_chars(_日本語色色,L3),
  文字ならびから英語色日本語色ペアリストの作成(R2,R).

一語切り出す([],[],[]).
一語切り出す(['\t'|R1],[],R1).
一語切り出す([' '|R1],[],R1).
一語切り出す(['\n'|R1],[],R).
一語切り出す([A|R1],[A|R2],R) :-
  一語切り出す(R1,R2,R).


144 名前:143 mailto:sage [2009/06/11(木) 07:25:29 ]
>>143
色色とあるのは色の間違いです。

  atom_chars(_英語色色,L2),
  atom_chars(_日本語色色,L3),
=>
  atom_chars(_英語色,L2),
  atom_chars(_日本語色,L3),




145 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:23:42 ]
<<問題>>
pc12.2ch.net/test/read.cgi/tech/1244449887/206
[1] プログラミング
[2] 入力した数値を4で割った余りを求めるプログラムを作れ。(switch)を用いて。


146 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:25:02 ]
>>145
% Prolog
'4で割ったあまり'(0,0).
'4で割ったあまり'(1,1).
'4で割ったあまり'(2,2).
'4で割ったあまり'(3,3).
'4で割ったあまり'(N,X) :- M is N-4,'4で割ったあまり'(M,X).

147 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:32:29 ]
>>145
このプログラムを
?- member(N,[11,33,47,51]),'4で割ったあまり'(N,X).

のように使うと不具合が生じる。どんなことになるか?
>>146 を適切なプログラムに書き換えなさい。

148 名前:143 mailto:sage [2009/06/11(木) 21:42:17 ]
Prologでペアリストとは[[a,1],[c,3], ... [y,26]]のような形式かな。
>>143では _=>_ の形式にしたからペアではないかも知れない。
Rubyに合わせてみたのだが。
ここでは、その方が分かり易いかと思ってペアリストという名称を
借用したが、普段は「対のならび」という言葉を使うところ。

149 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:45:40 ]
pc12.2ch.net/test/read.cgi/tech/1232627790/675
【 課題 】二つの文字列str1 とstr2 を入力して、str1 とstr2 から交互に一文字ずつ順番にとりだして、交
互にならべた文字列をつくれ。長い方の文字列の後の部分はそのままくっついた形になる。
String,StringBuffer クラスのメソッドを使え。

150 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:59:47 ]
% Prolog
交互にならべた文字列(Str1,Str2,Str) :-
  atom_chars(Str1,Chars1),
  atom_chars(Str2,Chars2),
  交互にならべた文字列_1(Chars1,Chars2,Chars3),
  atom_chars(Str,chars3).

交互にならべた文字列_1([],[],[]) :- !.
交互にならべた文字列_1(L,[],L) :- !.
交互にならべた文字列_1([],L,L) :- !.
交互にならべた文字列_1([A|R1],[B|R2],[A,B|R]) :-
  交互にならべた文字列_1(R2,R1,R).

?- 交互にならべた文字列(abcde,opq,X).
X = aobpcqde;
no
?-

151 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:13:06 ]
<<課題>> C
pc12.2ch.net/test/read.cgi/tech/1244449887/209
1行に一つづつ表示するプログラムを作成せよ。
空白が2個以上連続してもうまく動作するようにすること。また、コンマ(,)、
ピリオド(,)は表示する単語に含めないこと。

(実行例)
・入力
  This is a pen.

・出力
  This
is
a
pen


152 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:20:50 ]
>>151
% Prolog (1/2)
文字列から切り出した単語の行表示(_文字列) :-
  文字列から単語の切り出し(_文字列,_単語ならび),
  wrln(_単語ならび).

文字列から単語の切り出し(_文字列,_単語ならび) :-
  atom_chars(_文字列,_文字ならび),
  文字ならびを区切り文字により分割する(_文字ならび,L),
  単語ならびに変換(,_単語ならび).

文字ならびを区切り文字により分割する([A|R1],R2) :-
  区切り文字(A),
  文字ならびを区切り文字により分割する(R1,R2),!.
文字ならびを区切り文字により分割する(_文字ならび,[L1|R]) :-
  append(L1,[A|L2],_文字ならび),
  区切り文字(A),
  文字ならびを区切り文字により分割する(L2,R),!.
文字ならびを区切り文字により分割する(_,[]) :- !.

153 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:21:52 ]
>>151
% Prolog (2/2)
区切り文字(' ').
区切り文字('\n').
区切り文字('.').
区切り文字(',').

単語ならびに変換([]) :- !.
単語ならびに変換([L|R1],[_単語|R2]) :-
  concat_atom(L,_単語),
  単語ならびに変換(R1,2).

wrln([]) :- !.
wrln([A|R]) :-
  write_formatted('%t\n',[A]),
  wrln(R).

154 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:09:25 ]
>>147
'4で割ったあまり'(0,0).
'4で割ったあまり'(1,1).
'4で割ったあまり'(2,2).
'4で割ったあまり'(3,3).
'4で割ったあまり'(N,X) :- N > 3,M is N-4,'4で割ったあまり'(M,X).




155 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 08:47:13 ]
>>154
's(s(s(s(0))))で割ったあまり'(0,0).
's(s(s(s(0))))で割ったあまり'(s(0),s(0)).
's(s(s(s(0))))で割ったあまり'(s(s(0)),s(s(0))).
's(s(s(s(0))))で割ったあまり'(s(s(s(0))),s(s(s(0)))).
's(s(s(s(0))))で割ったあまり'(s(s(s(s(S)))),X) :- 's(s(s(s(0))))で割ったあまり'(S,X).

以下でもいいのだが。
's(s(s(s(0))))で割ったあまり'(s(s(s(s(S)))),X) :- 's(s(s(s(0))))で割ったあまり'(S,X).
's(s(s(s(0))))で割ったあまり'(X,X) :- not(X=s(s(s(s(_))))).

最後の否定がちょっとややこしい。

156 名前:デフォルトの名無しさん [2009/06/12(金) 10:54:16 ]
>>151
LEXを使えば超カンタン!

これで終り


%{
#include <stdio.h>
%}

%option noyywrap

%%

[A-Za-z\']* {printf("%s\n",yytext);}
.|\n

%%

main()
{
yylex();
}


157 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:07:26 ]
<<課題>> C/C++
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9442.txt


158 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 22:10:33 ]
>>157
% Prolog
nojiriko.asia/prolog/t157.html

159 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:42:06 ]
>>135
% Prolog 一応書き上げました。使えるユーティリティを含みますが出来は悪い。
nojiriko.asia/prolog/t135.html

160 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:47:14 ]
>>74
% Prolog これは忘れてました。
nojiriko.asia/prolog/t74.html

161 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 12:39:20 ]
pc12.2ch.net/test/read.cgi/tech/1232627790/701
# 【課題】あるコンテナ・ヤードにおけるコンテナの処理状 況は次のとおりであった。
# (1)コンテナの入場率平均値:5.0個/時間
# (2)コンテナの捌き率平均値:4.7個/時間
# (3)ゲート数窓口数:1
# このコンテナ・ヤードのゲートにおける滞貨状況
# を計算機シミュレーションにより調べ、考察を加え
# なさい。なお、滞貨状況の考慮時間は100時間と
# し、昼夜を問わず同様なコンテナの動きであるとす
# る。
#【形態】コマンドプロンプト
#【提出期限】6月26日
#【 Ver  】1.6.0_07
#【補足】入場率は指数分布、捌き率は標準偏差の3倍の範囲
# を考慮する正規分布に従うものとする。
# 変わった課題ですがよろしくお願いします。


162 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 04:33:08 ]
>>161
# >>701
# ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/702.zip
#
# >捌き率は標準偏差の3倍の範囲を考慮する正規分布に従うものとする。
# ここだけ意味分からなかったから、自分でGateModel#getDepartureInterval()を適当に書き換えて。

163 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 04:55:01 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/324
# [1] 授業単元: プログラミング
# [2] 問題文
# 問5.1に示す表を表示するプログラムを作成せよ。
# ただし氏名はポインタ配列を用いて参照するようにし、年齢、初任給は配列に入れる。
#
# 氏名は次のようにポインタ配列に初期値として入れる。
# char *namae[]={"高専 卒男","大学 学男","大学 修治"};
#
# 年齢、初任給は二次元配列salary[3][2]を宣言してそこに読み込む。方法としては次の2通りがある。
# (1)キーボードから読み込む
# (2)配列の初期設定で行う
# Salary[][2]={{20,215000},
# {22,235000},
# {24,255000}};
#
# 表はこれです
# a.pic.to/11fgne
# 氏名 ,年齢,初任給
# 高専 卒男,20,215000
# 大学 学男,22,235000
# 大学 修治,24,255000


164 名前:デフォルトの名無しさん [2009/06/14(日) 05:00:21 ]
>>163
高専 卒男 さんは20才の時初任給を貰いその額は215000でした。
という意味に解釈せざるを得ない変な表だ。



165 名前:デフォルトの名無しさん [2009/06/14(日) 05:48:29 ]
>>163
% Prolog (カンマを含む整数表示にはなっていない)

namae(['高専 卒男','大学 学男','大学 修治']).
'Salary'([[20,215000],[22,235000],[255000]]).

'問5.1に示す表を表示する'(2) :-
  namae(L1),
  'Salary'(L2),
  length(namae,Len),
  write_formatted('%20s,%8s,%8s\n',[名前,年齢,初任給]),
  for(1,N,Len),
  list_nth(N,L1,_名前),
  list_nth(N,L2,[_年齢,_初任給]),
  write_formatted('%20s,%8d,%8d\n',[_名前,_年齢,_初任給]),
  N=Len,
  write('\n\na.pic.to/11fgne のような美しい表を作るにはポストスクリプト
命令述語を使う必要がありますね\n').

166 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 07:13:12 ]
pc12.2ch.net/test/read.cgi/tech/1232627790/663
#【 課題 】3桁の数値データが複数入ったファイルをバブルソートを用いて
#      昇順に整列、新しいファイルに格納。データの件数は50件まで
#【 形態 】1. Javaアプリケーション(main()で開始)
#【 GUI  】制限なし
#【 期限 】6月11日 
#【 Ver  】1.6.0_13
#【 用語 】
#【 補足 】例外処理として、コマンドライン引数が間違っている場合、
#      読み込みファイルがオープンできない、書き込みファイルも
#      オープンできない、読み込みにファイルがない場合をお願いします。


167 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 07:24:21 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/276
#[1] 授業単元:プログラミング演習
#[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9445.txt
#               ほとんど英文です。訳そうとしたんですが自分でも意味がわからなくなったんでそのままにしました。すいません。

168 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 04:04:07 ]
# <<課題>
pc12.2ch.net/test/read.cgi/tech/1244449887/364
# [1] 授業単元: プログラミング実験
# [2] 問題文(含コード&リンク): 
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9455.txt
#【課題1】
#
# 完全列挙法(力ずく法)を用いて巡回セールスマン問題(TSP) を解くプログラムを作成せよ。
# (※1 : 適当に出発点を設定し、そこから出発するすべての閉路を求めその中で最短のものを選択、出力する)
# (※2 : 都市数は外部から入力するものとする)
# (注意 : プログラムを動かすとき決して大きな都市数を与えてはならない)




169 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 04:05:58 ]
# >>168 続き
#【課題2】
#
# 順次生成・比較法により、閉路を順次生成し、これまでの最短経路長をもった閉路と閉路長を比較することによってTPSを解くプログラムを作成せよ。
# (※1 : 適当に出発点を定め、そこを出発点とする閉路をひとつ生成し、それをとりあえず最短閉路とする)
# (※2 : 新たに経色を生成し、その閉路長をその時点での最短閉路長と比較し、短い方を最短閉路とする)
# (※3 : 上記のことを全ての閉路について繰り返し、最短閉路を求める)

170 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 06:12:20 ]
>>166
% Prolog
nojiriko.asia/prolog/t166.html

171 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 08:18:42 ]
>>167
% Prolog
nojiriko.asia/prolog/t167.html

172 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 19:00:47 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/
[1] 授業単元:For文
[2] 問題文:整数1〜10までの累計(1+2+3・・・・9+10=55)
 [3.1] OS: XP
 [3.2] Turbo C++
 [3.3] C++

簡単だと思いますがアホなんでわかりません。

173 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 19:01:53 ]
>>172
% Prolog
整数1〜10までの累計(X) :-
  sum(0,1,10,X).

sum(_空リストの時の値,[],_空リストの時の値). /* _空リストの時の値は 0 か 0.0 */
sum(_空リストの時の値,[A|R1],X) :-
  sum(_空リストの時の値,R,Y),
  X is A + Y.

174 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 19:19:30 ]
>>172
pc12.2ch.net/test/read.cgi/tech/1244449887/408
です



175 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 19:45:03 ]
>>173 普通は、
sum([],0).
sum([A|R],X) :- sum(R,Y),X is A + Y.
で十分。
リストの中に浮動小数点数が一つでもあれば、X は浮動小数点。一つもなく、
整数リストの時は整数解となります。
>>173は実務的には演算はすべて浮動小数点であり、整数の合計はほとんど
使うことがないため、
sum([],0.0).
sum([A|R],X) :- sum(R,Y),X is A+X.
と定義してしまいます。逆にこの問題のように、整数の合計を求める場合は
N is trancate(X) のような評価を被せなくてはならず不便です。それを回避
しようとしているのが>>173の第一引数の指定ということになります。
しかし、上記の理由から型指定としては曖昧で好ましいものではありません。

176 名前:175 mailto:sage [2009/06/15(月) 19:59:05 ]
N is trancate(X) ではなく N is truncate(X) ですね。

177 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 20:41:47 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/405
[1] 授業単元:プログラミング実習I
[2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9459.txt
typedef struct node *Tree;
typedef struct node{
int data;
Tree left_subtree;
Tree right_subtree;
} Node;
という風に定義された構造体を木の節点として
ポインタでつなげることによって表すことができる。
この様に表された2分木の根節点へのポインタが引数
として与えられた時、その2分木の高さ(すなわち、
根節点から葉節点までの枝の本数の最大値)を
調べて返すCの関数
    int height(Tree t);
を定義せよ。ただし、簡単さのため、ここでは、
height(NULL)=-1として関数定義を行え。

HINT.
2分木の高さに関する
2分木の高さ=max{(2分木の左部分木の高さ),
(2分木の右部分木の高さ)}+1
という漸化式に着目すれば簡単。

178 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 20:42:46 ]
>>177
% Prolog
木の高さ([],-1).
木の高さ(_根,_高さ) :-
枝(_根,_左,_右),
木の高さ(_左,_左の高さ),
木の高さ(_右,_右の高さ),
max([_左の高さ,_右の高さ],_高さの二),
_高さ is _高さの二 + 1.

179 名前:177 mailto:sage [2009/06/15(月) 20:51:49 ]
まちがえた。枝ではなくて、木でした。
% Prolog
木の高さ([],-1).
木の高さ(_根,_高さ) :-
  木(_根,_左枝,_右枝),
  木の高さ(_左枝,_左枝の高さ),
  木の高さ(_右枝,_右枝の高さ),
  max([_左枝の高さ,_右枝の高さ],_高さの二),
  _高さ is _高さの二 + 1.

180 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 02:51:49 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/446
#[1] 授業単元:プログラミング
#[2] 問題文(含コード&リンク):
# キーボードから入力された1行(空白で区切られた正整数並びの文字列)を項に分解して,i番目の項の整数値を配列要素d[i-1]に累算しながら格納するプログラムをつくりなさい。
# ただし,配列dの要素数は10として宣言し,10項目より多い入力の場合は11項目以降を棄却しなさい。
# 1行の入力には関数fgetsを用いなさい。
# fgetsは改行文字も取り込む点に注意して,入力の終了は「改行のみの入力」で判定しなさい。


181 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 03:01:29 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/413
#[1] インタラクティブコミュニケーション
#[2] ttp://www.ncc-1701.jp/kakei/InteractiveComm/Class5/InteractiveComm_5.htmlに書いている演習
# 最後の<<演習>>が課題です。
#[3] 環境
# [3.1] OS: Windows
# [3.2] コンパイラ名とバージョン: Windows Visual Studio 2005
# [3.3] 言語: C
#[4] 期限: 今日
#[5] その他の制限: 六曜は順番通り巡るとする。

182 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 06:19:04 ]
>>167
% Prolog (完全日本語版)
nojiriko.asia/prolog/t167_n.html

183 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 08:57:46 ]
>>143

// 0, 1, 2, 3, 4, 5, 6
//火曜,水曜,木曜,金曜,土曜,日曜,月曜
//友引,先負,仏滅,大安,赤口,先勝
#include<stdio.h>
int main(){
int i,n,c=0;
printf("n=");scanf("%d",&n);
for(i=0;i<=n;i++)
if(i%7==5 && i%6!=2)
c++;
printf("%d\n",c);
return 0;
}

184 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 09:12:06 ]
>>181
% Prolog
nojiriko.asia/prolog/t181.html



185 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 09:20:22 ]
ひどい宣伝だな

186 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 09:51:46 ]
>>168 >>169
完全列挙法 順次生成・比較法 というのがわからない。
「最短経路の本 レナのふしぎな数学の旅」 p253以下を読み直してみます。

187 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 10:23:45 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/458
#[1] 授業単元:プログラミング
#[2] 問題文(含コード&リンク):
# n*n行列A、Bをそれぞれキーボード から入力し、積を求めろ。
# 行列の大きさnもキーボードから入力せよ。多次元配列を使ってください。

188 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 10:26:32 ]
>>187
% Prolog (1/2)
行列の積(L1,L2,X) :-
  行列の転置(L,L2,L3),
  行列の積の一(L1,L3,X).

行列の積の一([],_,[]) :- !.
行列の積の一([A|R1],L,[S1|R3]) :-
  行列の積の二(A,L,S1),
  行列の積の一(R1,L,R3).

行列の積の二(_,[],[]) :- !.
行列の積の二(A,[B|R2],[C|R3]) :-
  行列の積の三(A,B,C),
  行列の積の二(A,R2,R3).

行列の積の三([],[],0) :- !.
行列の積の三([A|R1],[B|R2],S) :-
  S1 is A * B,
  行列の積の三(R1,R2,S2),
  S is S1 + S2 .

189 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 10:28:02 ]
>>187
% Prolog (2/2)
行列の転置([],[],[]) :- !.
行列の転置([[A|R]|R1],[A|R2],[R|R3]) :-
  行列の転置(R1,R2,R3) .

行列の転置([[]|_],[]) :- !.
行列の転置(L,[B|R1]) :-
  行列の転置(L,B,R2),
  行列の転置(R2,R1),!.

190 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 15:29:48 ]
>>180
main = getLine >>= return . scanl1 (+) . map (read :: String -> Int) . take 10 . words >>= \t -> if null t then return () else print t >> main

>>187
import Data.List (transpose)

type Matrix = [[Int]]

fold2l :: (a -> b -> c -> a) -> a -> [b] -> [c] -> a
fold2l f a [] _ = a
fold2l f a _ [] = a
fold2l f a (x:xs) (y:ys) = fold2l f (f a x y) xs ys

mult :: Matrix -> Matrix -> Matrix
mult xss yss = mult' xss $ transpose yss
where
mult' :: Matrix -> Matrix -> Matrix
mult' [] _ = []
mult' (xs:xss) yss = map (\ys -> fold2l (\s x y -> s + x*y) 0 xs ys) yss : mult' xss yss

191 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 18:29:42 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/481
# [1] 授業単元:ソフトウェア演習C
# [2] 問題文:
# 文書ないのすべての単語とその単語の頻度をメンバとして持つ構造体を定義し、
# この構造体へのポインタをノードの値として持つ二分木のノードを定義せよ
#
# 次に、任意のノードはその左の部分木にはそのノードの単語より辞書順で小さい単語の
みがあり、その右の部分木にはより大きい単語のみがあるように保持される。
# 新たに単語がすでに木にあるかどうかを探すには、ルート(根元)から出発してそのノー
ドに格納されている単語と新しい単語を比較する。
# 二つが一致したら、それで良い。
# 新しい単語が木の単語より小さいときは、探索は左の子供に対して続けられ、そうでな
ければ右の子供が調べられる。
# 求める方向に子供がないときは、新しい単語は木の中にはないと言うことであり、また
実際にはその子供のないところがそれを置く場所である。
# このプロセスは再帰的である必要があり、単語の挿入を行うadd_word()関数を定義せよ
。この関数は再帰的に呼ばれて、左または右の部分木に振り分けられる。
# 単語は木の中の単語と一致する(その場合カウント(頻度)がインクリメントされる)か、
あるいはノードを作成し、木に加えなければならないことを示すヌル・ポインタと出会う

# 新たにノードが生成されると、この関数ではそのノードへのポインタが返され、親ノー
ドに埋め込まれる。
# この関数を利用し、以下のテキストをコマンド実行時の引数として与えられたファイル
を入力して二分探索木を生成し、単語と頻度のリストを表示するプログラムを作成せよ。

#
# 文章:
# University was founded in April 1998 at Iwate,
# which is situated in the northeastern part of Japan. University consists of
# four faculties Software and Information Science, Nursing, Social Welfare,
# and policy Studies, and additionally other educational supporut centers.

192 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 19:49:14 ]
>>191
% Prolog
nojiriko.asia/prolog/t191.html

193 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 21:45:48 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/482
#[1] 授業単元:プログラミング基礎
#[2] 問題文
#
# kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9473.txt
# for文やif文を使用して下図のように出力せよ
#
# ★   ★
#  ★ ★
#   ★
#  ★ ★
# ★   ★
#


194 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 21:49:07 ]
>>193
% Prolog
nojiriko.asia/prolog/t193.html



195 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 21:50:36 ]
>>193
% Prolog
193 :-
t193_1([0,0,0,0,1],[1,0,0,0,0]).

t193_1(L1,L2) :-
L1=[1|_],
★を表示(L1,L2),!.
t193_1(L1,L2) :-
★を表示(L1,L2),
append([A],R1,L1),
append(R1,[A],L3),
append(L4,[B],L2),
t_193_1(L3,[B|L4]).

★を表示([],[]) :- nl.
★を表示([A|R1],[B|R2]) :-
or(A,B,1),
write(★),
★を表示(R1,R2).
★を表示([A|R1],[B|R2]) :-
or(A,B,0),
write(' '),
★を表示(R1,R2).

196 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 21:54:22 ]
すみません。再表示です。
t193 :-
  t193_1([0,0,0,0,1],[1,0,0,0,0]).

t193_1(L1,L2) :-
  L1=[1|_],
  ★を表示(L1,L2),!.
t193_1(L1,L2) :-
  ★を表示(L1,L2),
  append([A],R1,L1),
  append(R1,[A],L3),
  append(L4,[B],L2),
  t_193_1(L3,[B|L4]).

★を表示([],[]) :- nl.
★を表示([A|R1],[B|R2]) :-
  or(A,B,1),
  write(★),
  ★を表示(R1,R2).
★を表示([A|R1],[B|R2]) :-
  or(A,B,0),
  write(' '),
  ★を表示(R1,R2).

197 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 03:32:33 ]
>>196
% Prolog (ちょっとだけ変更)
t193 :-
  t193_1([' ',' ',' ',' ',★],[★,' ',' ',' ',' ']).

t193_1(L1,L2) :-
  L1=[★|_],
  ★を表示(L1,L2),!.
t193_1(L1,L2) :-
  ★を表示(L1,L2),
  append([A],R1,L1),
  append(R1,[A],L3),
  append(L4,[B],L2),
  t_193_1(L3,[B|L4]).

★を表示([],[]) :- nl.
★を表示([' '|R1],[' '|R2]) :-
  !,
  write(' '),
  ★を表示(R1,R2).
★を表示([_|R1],[_|R2]) :-
  write(★),
  ★を表示(R1,R2).

198 名前:197 mailto:sage [2009/06/17(水) 03:42:45 ]
% 全角スペースがうまく表示できてない・・・

193 :-
  t193_1([' ',' ',' ',' ',★],[★,' ',' ',' ',' ']).

t193_1(L1,L2) :-
  L1=[★|_],
  ★を表示(L1,L2),!.
t193_1(L1,L2) :-
  ★を表示(L1,L2),
  append([A],R1,L1),
  append(R1,[A],L3),
  append(L4,[B],L2),
  t_193_1(L3,[B|L4]).

★を表示([],[]) :- nl.
★を表示([' '|R1],[' '|R2]) :-
  !,
  write(' '),
  ★を表示(R1,R2).
★を表示([_|R1],[_|R2]) :-
  write(★),
  ★を表示(R1,R2).

199 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 04:09:41 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/505
#[1] 授業単元: C言語
#[2] 問題文
# (1)
# 文字列を受け取る関数(charポインタを使用)
# その文字列の一番最後の文字を消去する関数を作る。
# (2)
# 文字列を受け取る関数(charポインタ使用)
# その文字列の一番最初の文字を消去する関数を作る。
# (3)'文字列を入力し、ある文字を入力。その文字列の中にその入力した文字がいく
つあるかを数える関数。
# 例 文字列 asdfgvbfdcaa 文字aと入力したら 3となる
# その関数は二つのパラメータをもち、一つ目は文字列へのポインタ、二つ目は数えた文
字の数である。

200 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 04:11:28 ]
>>199
% Prolog
% (1)
'その文字列の一番最後の文字を消去する'(_文字列,_一番最後の文字を消去された文字列
) :-
  sub_atom(_文字列,0,Len,1,_一番最後の文字を消去された文字列).

% (2)
'文字列の一番最初の文字を消去する'(_文字列,_一番最初の文字を消去された文字列) :-

  sub_atom(_文字列,1,_,0,_一番最初の文字を消去された文字列).

% (3)
文字列中である文字の出現回数(_文字,_文字列,_出現回数) :-
  findall(_,sub_atom(_文字列,_,1,_,_文字),L),
  length(L,_出現回数).

201 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 06:19:02 ]
pc12.2ch.net/test/read.cgi/tech/1136994325/925
# 123456789の順に数字を並べて,数字の間に+,−を補うことで式を作り, その値が100になる# 組み合わせをすべて求め,その式を出力するプログラムを作成しなさい.
# お願いします


202 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 07:47:20 ]
>>201
% Prolog
t201 :-
  findall(Q,t201(Q),L),
  member(A,L),
  write(A),
  nl;
  true.

t201(Q) :-
  符号を含むならびの生成([1,2,3,4,5,6,7,8,9],L),
  atom_chars(S,L),
  atom_to_term(S,Q,_),
  100 is Q.

符号を含むならびの生成([A],[A]).
符号を含むならびの生成([A|R1],[A|R2]) :-
  符号を含むならびの生成(R1,R2).
符号を含むならびの生成([A|R1],[A,'+'|R2]) :-
  符号を含むならびの生成(R1,R2).
符号を含むならびの生成([A|R1],[A,'-'|R2]) :-
  符号を含むならびの生成(R1,R2).

203 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 08:28:48 ]
% 間違いがありました。訂正します。
% atom_chars/2 の第二引数リストの要素はcharしか許されないので
t201 :-
  findall(Q,t201(Q),L),
  member(A,L),
  write(A),
  nl;
  true.

t201(Q) :-
  符号を含むならびの生成(['1','2','3','4','5','6','7','8','9'],L),
  atom_chars(S,L),
  atom_to_term(S,Q,_),
  100 is Q.

符号を含むならびの生成([A],[A]).
符号を含むならびの生成([A|R1],[A|R2]) :-
  符号を含むならびの生成(R1,R2).
符号を含むならびの生成([A|R1],[A,'+'|R2]) :-
  符号を含むならびの生成(R1,R2).
符号を含むならびの生成([A|R1],[A,'-'|R2]) :-
  符号を含むならびの生成(R1,R2).

204 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 08:41:07 ]
% もう一ヶ所訂正。fail が落ちていた。
t201 :-
  findall(Q,t201(Q),L),
  member(A,L),
  write_formatted('%t\n',[A]),
  fail.
t201.

t201(Q) :-
  符号を含むならびの生成(['1','2','3','4','5','6','7','8','9'],L),
  atom_chars(S,L),
  atom_to_term(S,Q,_),
  100 is Q.

符号を含むならびの生成([A],[A]).
符号を含むならびの生成([A|R1],[A|R2]) :-
  符号を含むならびの生成(R1,R2).
符号を含むならびの生成([A|R1],[A,'+'|R2]) :-
  符号を含むならびの生成(R1,R2).
符号を含むならびの生成([A|R1],[A,'-'|R2]) :-
  符号を含むならびの生成(R1,R2).



205 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 08:47:44 ]
>>200 ですが、
これではPrologが誇るスーパー組込み述語 sub_atom/5 の
リファレンスの意味しかないので、sub_atom/5を使わない版を
後で示します。
それからアトムに対して文字列という言葉を使っていることに、
違和感を覚える方がおられると思いますが、私は"文字列"は
絶対といっていいくらい使いません。私の書き込みで文字列と
言うときは文字列アトムのことだと思ってください。

206 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 09:07:55 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/514
#[1]授業単元:プログラミング演習1
#
#[2]問題文:画面より入力した成績データをファイルに登録する。
# 画面より入力する項目は以下のとおり。
# ・生徒コード、数字6桁、数字であること。
# ・氏名、文字列20文字、1字以上、20字以内
# ・国語(点数)、数字3桁、数字であること、0<=点数<=100
# ・算数(点数)、国語と同じ
# ・社会(点数)、国語、算数と同じ
#
#
# 生徒コードに999999が入力されたら終了する。

207 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 10:55:36 ]
>>206
% Prolog
nojiriko.asia/prolog/t206.html

208 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 16:53:31 ]
>>206 一部書き直しました。
% Prolog
nojiriko.asia/prolog/t206.html

209 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 17:09:49 ]
>>206
-- Haskell
ttp://ja.pastebin.ca/1463106

210 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 18:05:15 ]
pc12.2ch.net/test/read.cgi/tech/1200175247/550
#
# (1)曜日を表す英語と日本語との対応を表すハッシュwdayを定義しなさい
#
# p wday["sunday"] #=> "日曜日"
# p wday["monday"] #=> "月曜日"
# p wday["saturday"] #=> "土曜日"
#
# (2)ハッシュのメソッドを使って(1)のハッシュwdayのペアの数を数えなさい
#
# (3)eachメソッドと(1)のハッシュwdayを使って以下の文字列を出力させてくださ
い。
# 「sunday」は日曜日のことです。
# 「monday」は月曜日のことです。
# …
#
# (4)ハッシュには配列の%wのようなものがありません。そこで、空白とタブと改行
# (正規表現で定義するなら「/\s+/」)で区切られた文字列をハッシュに変換するメ
ソッド
# str2hashを定義してください。
#
# p str2hash("bule 青 white 白\nred赤");
# #=> {"bule"=>"青", "white"=>"白", "red"=>"赤"}

211 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 18:10:18 ]
>>210
% Prolog (Prologにハッシュはないよw したがって・・)
% (1)
wday(sunday,日曜日).
wday(monday,月曜日).
wday(saturday,土曜日).

% (2)
wdayの節数(_節数) :- 節数(wday(_,_),_節数).

節数(_節形式,_節数) :- findall(_,_節形式,L),length(L,_節数).

% (3)
'(3)' :-
  wday(A,B),
  write_formatted('「%t」は%tのことです。\n',[A,B]),
  fail;
  true.

% (4)
str2hash(S,_述語名) :-
  split(S,['\n'],L),
  member(A,L),
  split(A,['\t',' '],L1),
  P =.. [_述語名|L1],
  assertz(P),
  fail;
  true.

212 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 20:13:52 ]
>>210
-- Haskell
ttp://ja.pastebin.ca/1463260

213 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 21:26:01 ]
VB6をやっているのですが、
「ストアド関数」というものが、
いまいちどういう役割を担っているものなのかわかりません。
MSDNを見たりウェブで調べたりはしたのですが…

宜しければ、どなたかお願いします。


214 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 04:16:40 ]
pc12.2ch.net/test/read.cgi/tech/1200175247/580
#[1] 授業単元: プログラミング演習
#[2] 問題文: 人の名前(ローマ字)を検索(部分一致)することができるプログラムを作成せよ。



215 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 04:29:48 ]
>>214
% Prolog (最初に組込述語から)
t214(_人の名前,_検索文字列の変位,_その長さ,_残った文字列長さ,_検索文字列) :-
  sub_atom(_人の名前,_検索文字列の変位,_その長さ,_残った文字列長さ,_検索文字列).

?- t214('Hitomaro Kakinomoto',A,B,C,'kino').
A = 11,
B = 4,
C = 4;
no
?- /* >>200 参照 */

216 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 05:37:47 ]
>>214
% Prolog >>215 をより使いやすくするため sChars/6 を定義する。

sChars(A,B,C,D,E,F) :- sub_atom(A,B,C,D,E),C > 0,atom_chars(E,F).

% これでkから始まりoで終わる部分文字列の検索などがやり易くなる。

?- sChars('Hitomaro Kakinomoto',B,C,D,E,F),append([k|_],[o],F).
B = 11,
C = 4,
D = 4,
E = kino,
F = [k,i,n,o],
_ = [i,n];
B = 11,
C = 6,
D = 2,
E = kinomo,
F = [k,i,n,o,m,o],
_ = [i,n,o,m];
B = 11,
C = 8,
D = 0,
E = kinomoto,
F = [k,i,n,o,m,o,t,o],
_ = [i,n,o,m,o,t];
no.
?-

217 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 06:02:02 ]
>>216
% Prolog より一般的にsCharsという述語の中に検索条件を書き込めないであろうか?
% sChars/7を定義する。_検索条件項の中でEかFを使用しなければならない。

sChars(_検索条件項,A,B,C,D,E,F) :- sChars(A,B,C,D,E,F),call(_検索条件項).

% >>216 に較べてこちらの方が優れているかは疑問だ。

218 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 06:10:49 ]
>>217
% Prolog 例えば正規表現(に限らないが)を処理するには、

sChars(_正規表現パターン,A,B,C,D,E,F) :- sChars(A,B,C,D,E,F), ... 正規表現パターンの解決副目標(_正規表現パターン), ...
sChars(_検索条件項,A,B,C,D,E,F) :- sChars(A,B,C,D,E,F),call(_検索条件項).

% のように上に定義を加えていけばよい。

219 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 06:38:52 ]
pc12.2ch.net/test/read.cgi/tech/1200175247/560
#[1] 授業単元: C
#[2] 問題文(含コード&リンク):アルファベットの小文字を大文字に変換するプログラムを作成せよ
# ヒント: 'a'〜'z'は連続した文字コードが割り当てられている。'A'〜'Z'も連続した文字コードが割り当てられている。すなわち、'a'の文字コード
#      にある定数を足す(または引く)と'A'になり、'b'にその定数を足す(または引く)と'B'になる。この定数さえ求められれば、簡単に計算できることがわかる。
#      定数は、'a'や'A'を使えば計算できる。

220 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 07:01:41 ]
>>219
% Prolog 敢えて、出題の題意通りやってみる。

英小文字から大文字へのコード変換(_英小文字,_英大文字) :-
  char_code(a,_aの文字コード),
  char_code('A',_Aの文字コード),
  _変位 is _aの文字コード - _Aの文字コード,
  char_code(_英小文字,_英小文字の文字コード),
  _英大文字の文字コード is _英小文字の文字コード - _変位,
  char_code(_英大文字,_英大文字の文字コード).


221 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 07:13:10 ]
>>220
% 双方向性を持たせよう。少し無理をする。

英小文字大文字変換(_英小文字,_英大文字) :-
  char_code(a,_aの文字コード),length(L1,_aの文字コード),
  char_code('A',_Aの文字コード),length(L2,_Aの文字コード),
  append(L2,R,L1),
  char_code(_英小文字,_英小文字の文字コード),length(L3,_英小文字の文字コード),
  append(R2,R,L3),length(R2,_英大文字の文字コード),
  char_code(_英大文字,_英大文字の文字コード).

222 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 07:29:55 ]
>>221
すみません。これだとやっぱりだめだ。
char_code/2を使う以上は、変数の有無だけは検査しないといけないのかな。
ちょっと考えます・・・

文字連鎖('A','B').
文字連鎖('B','C').
...
文字連鎖('Z','A').
...
文字連鎖(a,b).
文字連鎖(b,c).
・・・
文字連鎖(z,a).

を定義しないと無理かな。

223 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 07:40:21 ]
>>222
% この定義があればなんとかなるか。

英小文字([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','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']).

224 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 08:06:43 ]
>>222
% 実は、

英小文字大文字変換(_英小文字,_英大文字) :-
  英大文字ならび(LL),append(L1,[_英大文字|_],LL),
  英小文字ならび(SL),append(L2,[_英小文字|_],SL),
  length(L1,Len),
  length(L2,Len).

英大文字ならび(L) :- findall(C,(for(65,N,90),char_code(C,N)),L).

英小文字ならび(L) :- findall(C,(for(97,N,122),char_code(C,N)),L).

% で済むようです。まあ、ペアで定義すればいいだけですが。




225 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 09:33:49 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/548
# [1] 授業単元: プログラミング論
# [2] 問題文(含コード&リンク): C言語で三目並べをするプログラムの作成
# C言語で三目並べ(いわゆる○×)をするプログラムを作成する。
#
# # 条件
# ・コンピュータの手はランダムに決定するものとする(空いているところに打つ)
# ・盤面を表現する配列は3×3の二次元配列とし、グローバルに宣言する
# ・以下のような関数を作成すること:盤の表示、○×を打つ、3つ並んだかチェック
# ・他にも必要に応じて関数を宣言すること
#
# ヒント集
# ・マスの状態は空:0 ○:1 ×:2など数値で定義するとよい。
# ・char stone[3][3]={"-","○","×"};などと宣言しておくと便利?
# ・9マスしかないので、9マス打ち切ったら終了→このとき勝敗が決まっていなければ引
き分け
# ・ループの考え方は2通りできる
#  1.先手後手がセットで1ループ、9マス目に先手が打ったらbreak
# 2.先手、後手それぞれ1ループ,nマス目は、n%2=0なら先手、n%2=1な  ら後手
# ・三目並んだかのチェックは工夫のしどころ
#  ・手盤の人の石だけチェックする
#  ・打ったところの縦横は必ずチェック、斜めはどうする?
# ・作っていく順
#  ・石の入力+盤面表示、コンピュータの手番、3つ並んだかチェック、勝敗表示
#  ・石の入力+盤面表示、3つ並んだかチェック、勝敗表示、コンピュータの手番

226 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 09:39:35 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/554
# [1] 授業単元: c言語演習
# [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9478.txt

227 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 09:41:34 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/551
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# cos(x)とx軸で囲まれる領域において、xがa〜bの区間の面積を台形積分で求めるプログラムを作成しなさい。
# なお、aとbは引数として与えるようにすること。

228 名前:デフォルトの名無しさん [2009/06/18(木) 14:56:57 ]
>>227
できますた
これでいいですか?

(defun s (a b)
(let ((ya (cos a)) (yb (cos b)))
(/ (* (- b a) (+ ya yb)) 2)))


229 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 16:46:28 ]
>>227
% Prolog
'cos(x)とx軸で囲まれる領域において、xがa〜bの区間の面積を台形積分で求める'(_開始
X座標,_終了X座標,X) :-
  分割数(_分割数),
  _開始X座標2 is _開始X座標,
  _終了X座標2 is _終了X座標,
  刻み幅(_分割数,_開始X座標2,_終了X座標2,_刻み幅),
  Y座標ならびを得る(_分割数,_分割数,_開始X座標2,_終了X座標2,_Y座標ならび),
  台形の総面積(_Y座標ならび,_刻み幅,X).

分割数(30).

台形の総面積([A,B],_刻み幅,X) :-
  X is (A+B) * _刻み幅 / 2,!.
台形の総面積([A,B|R],_刻み幅,X) :-
  Z is (A+B) * _刻み幅 / 2,
  台形の総面積([B|R],_刻み幅,Y),
  X is Z + Y.

Y座標ならびを得る(_分割数,_分割数,_開始X座標,_終了X座標,[A]) :-
  A is cos(_終了X座標),!.
Y座標ならびを得る(N,_分割数,_開始X座標,_終了X座標,[A|R]) :-
  A is cos(((_終了X座標-_開始X座標) * N / _分割数 + _開始X座標)),
  Y座標ならびを得る(M,_分割数,_開始X座標,_終了X座標,R).

刻み幅(_分割数,_開始X座標,_終了X座標,_刻み幅) :-
  _刻み幅 is (_終了X座標-_開始X座標) / _分割数.

230 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 17:24:52 ]
>>226
% Prolog
gcd(M,N,N) :-
0 is M mod N,!.
gcd(M,N,X) :-
Mod is M mod N,
gcd(N,Mod,X).

gcd(M,N,O,X) :-
gcd(M,N,Y),
gcd(Y,O,X).

231 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 17:26:54 ]
>>226 書き直し
% Prolog
gcd(M,N,N) :-
  0 is M mod N,!.
gcd(M,N,X) :-
  Mod is M mod N,
  gcd(N,Mod,X).

gcd(M,N,O,X) :-
  gcd(M,N,Y),
  gcd(Y,O,X).


232 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 17:46:05 ]
>>228
ニュートン・コーツ とか
区分求積法 でググれ

233 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 18:28:43 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/592
# [1] 授業単元: C
# [2] 問題文(含コード&リンク):入力した文字の種類を表示するプログラムを作成せよ。ただし、表示は次に従うとする
# 入力キーA〜Z 表示メッセージ 英大文字です
# 入力キーa〜z 表示メッセージ  英小文字です
# 入力キー0〜9 表示メッセージ  数字です
# 上記以外    表示メッセージ  その他のキャラクターです

234 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 18:32:23 ]
>>233
% Prolog
入力した文字の種類を表示するプログラム(_文字,_文字の種類) :-
  文字の範疇(_文字の範疇,_文字),
  表示は次に従うとする(_文字の範疇,_,_表示メッセージ),
  write(_表示メッセージ).
 
表示は次に従うとする(入力キーA〜Z,表示メッセージ,英大文字です).
表示は次に従うとする(入力キーa〜z,表示メッセージ,英小文字です).
表示は次に従うとする(入力キー0〜9,表示メッセージ,数字です).
表示は次に従うとする(上記以外,表示メッセージ,その他のキャラクターです).

文字の範疇(入力キーA〜Z,_文字) :-
  member(_文字,['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〜z,_文字) :-
  member(_文字,[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]).
文字の範疇(入力キー0〜9,_文字) :-
  member(_文字,['0','1','2','3','4','5','6','7','8','9']).
文字の範疇(上記以外,_文字) :-
  not(member(_文字,['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〜z,_文字) :-
  member(_文字,[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]).
文字の範疇(入力キー0〜9,_文字) :-
  member(_文字,['0','1','2','3','4','5','6','7','8','9']).
文字の範疇(上記以外,_文字) :-
  not(member(_文字,['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'])),
  not(member(_文字,[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])),
  not(member(_文字,['0','1','2','3','4','5','6','7','8','9'])).



235 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 18:40:39 ]
>>233 訂正
% Prolog
入力した文字の種類を表示するプログラム(_文字) :-
  文字の範疇(_文字の範疇,_文字),

% 2引数ではなく、1引数の述語です。削り忘れてました。
% なんて冗長な馬鹿なプログラムだと思われるでしょうが、渡された
% 仕様を可能な限りそのまま利用して、何も考えずにプログラムすると
% こんな事になるという例です。

入力した文字の種類を表示するプログラム(_文字,_文字の種類) :-
  表示は次に従うとする(_文字の範疇,_,_表示メッセージ),
  文字の範疇(_文字の範疇,_文字),
  write(_表示メッセージ).

% 順序をひっくり返してもちゃんと動作します。開発順序としては
% この述語を作ってから、2行目と3行目を入れ替えました。


236 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 20:51:57 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/615
# [1] 授業単元: C初心者コース
# [2] 問題文(含コード&リンク):試験の点数(100点満点)を入力すると、評価値(A+,A,B,C,F)を表示する
# プログラムを作れ90〜100A+80〜89A70〜79B60〜69C0〜59Fそれ以外error
# [3] 環境
# [3.1]linux
# [3.2] gcc
# [3.3]C
# [4]6月19日
# [5]if文(gotoは論外)while do while for等 ループ文を使ってはいけないそうです






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<314KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef