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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:57:19 ]
第二編も512Kbyte越えで終了しました。
前スレで未解決な課題は順次このスレにコピーします。

487 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 09:40:48 ]
>>488->>491 全部に間違いがありました。
今夕までに
nojiriko.asia/prolog/c134_370_1.html から
nojiriko.asia/prolog/c134_370_4.html までに
訂正分を書き込んで置きます。

493 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:14:39 ]
pc12.2ch.net/test/read.cgi/tech/1197620454/580
# 下記のプログラムを関数を用いて実行したいのですが、どのようにすれば良いでしょうか?
# 回答(できたら簡単な解説)の明記をお願いします。
#
# 問題1:入力したプログラムから以下のように出力するプログラムを作成する。
# (実行結果例)
# 文字列を入力: 今日は、晴れです。
#
# 今日は、晴れです。
# 日 す
# は で
# 、 れ
# 晴 晴
# れ 、
# で は
# す 日
# 。すでれ晴、は日今
#




496 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:16:06 ]
pc12.2ch.net/test/read.cgi/tech/1197620454/580
# 問題2:ファイル入力した漢字データ(全角)を読み込み、行数を数えながら逆から表示するプログラム。
# (実行結果例)
# (例として次のような C:\test2.txtを入力する)
# 今日は、晴れです。昨日は、雨で
# した。明日は、曇でしょう。明後
# 日は、快晴でしょうか。 ←の文章を以下のようなプログラムにする。
#
# ファイル名を入力してください:C:\test2.txt
#
# 1:で雨、は日昨。すでれ晴、は日今
# 2:後明。うょしで曇、は日明。した
# 3:。かうょしで晴快、は日
#


497 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:17:44 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:19:00 ]
pc12.2ch.net/test/read.cgi/tech/1197620454/581
# 問題4:1月1日が金曜日の平年(たとえば2010年)について、月日の入力データから、曜日を求めるプログラム。
# (実行結果例)
# 月を入力してください:9
# 日を入力してください:15
# 9月15日は、水曜日です。
#
# 以上4問です。どうか回答よろしくお願い致します


499 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:32:53 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:34:45 ]
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 15:40:12 ]
>>12
% Prolog
nojiriko.asia/prolog/ml6_12.html

ゲームとして成立していない。「実例で学ぶゲームAIプログラミング」を
これから買って研究してみます。

503 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:13:17 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:14:34 ]
>>510
% Prolog

test1([],[],[]).
test1([A|R1],[B|R2],[A,B|R3]) :- test1(R1,R2,R3).

512 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:28:58 ]
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:03:05 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): 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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:07:29 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題1★
# キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、
# その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば
# 画面に(標準入力に)YES、そうでなければ、NOと出力せよ。与えられた条件を
# 判定する部分はmain関数とは別の関数にしてmain関数から呼ぶこと。
# グローバル変数の使用は禁止。




516 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:10:17 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題3★
# キーボードから(標準入力から)スペースで区切られて最後が改行の3つの実数を
# 3回を受け取って、それらの合計9この実数からなる3行3列の行列の逆行列を
# 求めて画面に(標準出力)出力せよ。
# 逆行列を求める部分はmain関数とは別の関数にしてmain関数から呼ぶこと。
# グローバル変数の使用は禁止。


517 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:18:16 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): 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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:22:17 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題5★
# 1行にスペースで区切られた2つの実数が書かれているデータファイルをエディタで
# 作成して適当な名前で保存しておけ。標準入力からのリダイレクトを使って
# そのファイルからデータを読み込み、データのグラフを画面に(標準入力に)出力せよ

# ここで、各行の左側のデータをxデータ、右側のデータをyデータとする。
# また、グラフはテキスト画面にマイナス(‐)やプラス(+)や縦棒(|)や
# アスタリスク(*)などの文字を出力することによって実現せよ。さらに、
# yデータの平均と標準偏差も求めて画面に(標準出力に)出力せよ。様々なデータ数や
# データ範囲をもつ入力データを与えられても適切に動くようにつくることが
# 望ましいが、難しければ入力データ範囲は0以上10以下に限定するなど、
# 自分でプログラムの仕様を簡素化してもよい。


519 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:28:15 ]
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:28:41 ]
>>521 (>>515) 一部表示し直し
% Prolog

'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば画面に(標準入力に)YES、そうでなければ、NOと出力せよ' :-
  'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数),
  その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_正の整数,_診断),
  write_formatted('%t\n',[_診断]),!.

523 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 06:13:04 ]
>>523 (>>484)
% Prolog (その一) 「インデント深度とは」の「とは」は説明的ではあるが実用上好ましいとはいえない。
% 備考的な部分の定義ではしばしば迷うところ。普通は以下だが、

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

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

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

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

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


525 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 12:11:35 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/815
# 【 課題 】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 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:46:35 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:47:53 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/353
# [1] 授業単元:コンピュータグラフィック
# [2] 問題文(含コード&リンク):10468.txt
# モノクロ画像を読み込み,(319,239) の画素値を 0 とする
# 画像を関数を使用して読み込み,それを 2 次元配列に格納する関数を作成する.
# 指定した画素の画素値をセットする.
# 2 次元配列に格納していた画像を 1 次元配列に再度格納し,関数を使用して画像ファイルとして書き戻す.
#


532 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 17:17:04 ]
>>528
% Prolog 全然ルールが違うのですが「馬名しりとり」というのを作ってみました。
nojiriko.asia/prolog/j68_815.html

533 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 17:22:56 ]
>>532
全然違うというのは日本語として変かな。
javaの宿題とルールが違っている上に、馬名である特徴も今のところほとんどありません。
今後、血統や競争成績の検索やコメントを付与する機能を付け加えたいと思います。

534 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:25:03 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/369
# [1] 授業単元: プログラム演習?
# [2] 問題文(含コード&リンク):
# 3次元空間において線分が平面を通過しているか判定するプログラムを作りなさい
# (線分の座標(x1,y1,z1) (x2,y2,z2)と平面の四隅の座標は入力する)
# 平面を通過していても平面の四隅の中に交点がない場合は通過していないものとする


535 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 13:44:22 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/381
# [1] 授業単元:プログラミング演習?
# [2] 問題文(含コード&リンク): 入出力とデータファイルへの保存とその間の処理あるプログラムを作成する
#                ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10475.txt
# 入出力とデータファイルへの保存とその間の処理のあるプログラムの作成
#
# 作成条件
# 1.入力→処理→出力のシステムが構築されていること
# 2.データをファイルに保存しておけるようにしておく
# 3.データに構造体が用いられること
# 4.main以外を1つ以上関数化すること
# 5.datファイルも各自で作成する




536 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 05:59:17 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/394
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): 住所録の機能を実現するプログラムを作成せよ。


538 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:03:19 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/391
# すいませんが規制されてるので携帯から簡単に
# 問題文: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 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:06:12 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:18:46 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/358
# [1] 授業単元:プログラミング演習?
# [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10471.txt
#
# ≪問題と条件≫
# 第1引数に指定したファイルからバイナリーモードで1バイトずつファイルを読み込み、
# ファイルの内容を16進数で示したものを第2引数に指定したファイルに書き込むプログラムを作成せよ。ただし、16バイトごとに改行を入れること。


541 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:34:03 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/821
# 【 課題 】線分描画,点描画のメソッドをつかって,放物線を描画して下さい.

542 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:37:34 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/387
#
# 息抜きにって下さい。
# 自分は分からないっす
#
# お客様に「今後の夏のセールには、必ず連絡してほしい」といわれた時
#
# お客様に「もらいもので気に入らないので他の商品と取り替えて欲しい」といわれた時
#
# 販売員の正しい行動を。

543 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 07:14:10 ]
>>481
使用言語:J

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

545 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 13:29:23 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/369
# [1] 授業単元: プログラム演習�
# [2] 問題文(含コード&リンク):
# 3次元空間において線分が平面を通過しているか判定するプログラムを作りなさい
# (線分の座標(x1,y1,z1) (x2,y2,z2)と平面の四隅の座標は入力する)
# 平面を通過していても平面の四隅の中に交点がない場合は通過していないものとする

547 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 13:30:35 ]
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 13:55:30 ]
>>546>>536 に既出でした。>>536 の方を使ってください。

551 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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の定義は nojiriko.asia/prolog/j68_493.html 参照

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

[2]のサイトをコピーすることは困難でした。直接参照してください。



556 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:23:21 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:33:56 ]
>>557 の訂正として出されましたが、それぞれ独立の問題としましょう。
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 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:42:32 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/418
# [1] C言語プログラミング演習(大学専門課程選択教科期末課題)
# [2]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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 03:12:54 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/420
# [1] 授業単元:プログラミング実践
# [2] 問題文
# アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして90°回転した結果を出力せよ。
# (図)affin.txt
# 00000
# 00000
# 11111
# 00000
# 00000
#


562 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:31:08 ]
>>538
% Prolog (その二)

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

名前・年齢の行表示([]) :- !.
名前・年齢の行表示([[_名前,_年齢]|R]) :-
  write_formatted('%12s%t\n',[_名前,_年齢]),
  名前・年齢の行表示(R).

564 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:32:07 ]
> EOFがコントロールZであるファイルの読み込み
w

565 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:36:16 ]
>>564
やれやれww



566 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:53:35 ]
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 11:18:26 ]
>>556
何をいっているのかわからないので元スレを覗いてきます。

572 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 11:24:32 ]
>>571
すみません。>>556ではなく>>566でした。
元スレでも質問者が問題を理解していないだろうと指摘されていました。

573 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 12:01:03 ]
>>542
% Prolog 例えばこんな具合に書き進める。これからが大変。

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

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

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

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

お客様の情報を解析して要求を要約する(_お客様,_お客様の要求,_お客様の情報,_お客様が関心をお持ちの分野,_お客様の要求の要約) :-
  句構造解析(_お客様の要求,_解析された句構造),
  句構造からキーワードを拾い出して意味を推定する(_解析された句構造,_キーワードならび,_お客様の要求の要約).

574 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 17:22:34 ]
>>510
使用言語:J

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

'asdfgh' f '123'
a1s2d3fgh

577 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 17:27:22 ]
>>512
使用言語:J

test2=: dyad def 'y-:~.x'
'abccba' test2 'abc'
1
'abcbc' test2 'cba'
0

578 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:11:22 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/827
# 【 課題 】 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 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:14:12 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/827
# 【 課題 】 ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/918.txt
# 課題2
# 以下の、お金をうけとり、おつりを計算するプログラムをつくりなさい。
#
# ここから、よくわからなくなりました。
# たとえば、6200円の買い物をして、7000円受とると、100円を8枚って計算したいです。
#


580 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 03:21:11 ]
>>579 (その二)
% Prolog こちらがトップレベル >>580 はレジの中身を更新するのを忘れている

おつりの計算(_お買い上げ金額,_うけとったお金,_金種) :-
  _受け取ったお金 > _お買い上げ金額,
  _おつり is _うけとったお金 - _お買い上げ金額,
  金種計算(_おつり,[10000,5000,2000,1000,500,100,50,10,5,1],_金種).


582 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 03:25:18 ]
>>580 >>581
一般に、給料計算の一部に金種計算が現れる場合は、銀行がその金種を
用意するものと考えられるから、レジの中身についての考慮は必要ないが、
おつりの場合はレジの内容が計算を主導する。

583 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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',[_差,_商]),!.






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

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

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