[表示 : 全て 最新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越えで終了しました。
前スレで未解決な課題は順次このスレにコピーします。

604 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 08:32:44 ]
>>602
コンピュータオリンピアード('第15回',開催予定日,'9月25日から10月2日まで').
ですか。
「9月25日から10月2日まで」に比べて「9月25日から10月2日にかけて」は
ふくらみがありますね。こういう部分の表現は自然言語に敵わない。
いや、自然言語は大袈裟で単に「掛かる」という言葉のふくらみかな。

>>603
検索の都合もあるw ゼネラルデータベースのように特権的なテーブルとか
述語を持たない系は魅力がありますが、現実には大変でしょう。しかしまあ、
アナーキズムも再評価されているようですから、わからないですよね。

605 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 09:15:50 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/465
# [2] CIP法での1次元の移流計算
#
# 自分で以下のプログラムを作ったところ。
# kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10493.txt
# tの値を増やすにつれてf[n][t]のnの初期のほうの値がなぜかでかい数字が出てしまいます。
# 自分の計算ではtの値を増やせば、f[n][t]のnの初期のほうの値は0になると思うんですが、一体どこが悪いのか、ご教授をお願いいたします。

606 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:20:04 ]
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 17:13:11 ]
>>606
% Prolog (その二)

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

標準出力に出力する(_行) :- write_formatted('%t\n',[_行]).

609 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 17:18:29 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 18:24:04 ]
>>52

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

この系統は根深い。


611 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 10:49:07 ]
>>616

>>515 ではなくて >>212 でした

618 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 17:25:31 ]
Prolog氏かっけー。

622 名前:620 mailto:sage [2010/02/05(金) 19:16:08 ]
ごめん出題は >>144 だった。



623 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 07:00:34 ]
大学が ->受験->春休み になるから、出題なくなりますね。未解決問題を
しばらくは潰していきます。

624 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 05:47:54 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 05:51:59 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 06:23:14 ]
>>624
% Prolog

ならびを2要素ごとに纏める([],[]) :- !.
ならびを2要素ごとに纏める([L1,L2|R1],[L3|R2]) :-
  append(L1,L2,L3),
  ならびを2要素ごとに纏める(R1,R2).

627 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:33:47 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/494
# 【質問テンプレ】
# [1] 授業単元:C言語入門
# [2] 問題文:
# キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。
# その数だけアスタリスクを表示する。
# ただし、入力を終了するときはCtrl+Zを押すものとする。(vowel.c)

630 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:30:00 ]
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 04:51:03 ]
>>634->>636
要するにどこで組込述語を含む原初的な述語を目標とする節に行き着くか。そこまで
自然な説明として目標を辿ることができるように定義できるか、ということ。
ここで原初的な述語とは、先祖定義に現れる親子/2のような述語。

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

親子(義朝,頼朝).
親子(為朝,義朝).

638 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 04:52:59 ]
ふつう祖先だったかw

639 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 05:01:20 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/515
# 【質問テンプレ】
# [1] 授業単元:C言語
# [2] 問題文:
# input.ppm というPPMフォーマットのファイルを読み込み, ヘッダをつけて縦横をそれぞれ 1/2(面積にして1/4) にして出力するプログラムを書きなさい.
# input.ppm のサイズは 410x307 である.


640 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:12:40 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/839
# 【 課題 】5個以上の学生番号(2桁程度の数字で良い)、
#       名前、身長をプログラム中でセットし、
#       学生番号または名前をもとに身長を調べるプログラム。
#       学生番号と名前の入力データ、検索結果の身長データを両方表示する機
能があること。
# 【 形態 】1. Javaアプリケーション(main()で開始)/
# 【 期限 】2/10(水)
#
# たぶん二分探索使うかと思うのですが
# よくわかりません!すみませんがよろしくおねがいします!!

641 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:56:43 ]
>>641
% Prolog
write_formatted/2で結果を表示するのに、第二引数に"_身長"が付いているのは
奇妙ですね。これは同姓同名の有り得ることを思い起こさせるための配慮と
考えてください。




643 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 05:06:03 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 05:09:15 ]
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:06:43 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/847
# 【 課題 】電話番号検索を行うjavaプログラムを、探索アルゴリズムを用いて作成せよ。
# 【 補足 】・最初に顧客番号(2桁の数字)、顧客名(Yamadaなど姓のみ)、
# 電話番号(09012345678の形式、ハイフンなし)という顧客データを10人以上プログラム中でセットし、
# 顧客番号または姓をもとに電話番号を調べるアルゴリズムを作成する。
#       ・顧客番号と顧客名の入力データ、電話番号データを両方表示させる機能をつけなければならない。
#       ・(もし可能なら)データリストへの顧客データの追加or削除機能を盛り込みたい


647 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:25:45 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/534
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 配列に
# Institute of Technology
# という文字列を代入し、ポインタを利用して
# ・各文字が格納されているアドレス
# ・そのアドレスに格納されている文字
# を表示するプログラムを作成せよ。

650 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:27:55 ]
>>649
% Prolog
% Prologではアドレス操作はできない。したがって、この問題は解けない。

651 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:48:06 ]
>>648 (>>646)
% Prolog さすがにちょっと乱暴だったか。

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

顧客データの削除(_顧客番号,_顧客名,_電話番号) :- retract(電話番号(_顧客番号,_顧客名,_電話番号)).


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



653 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 08:10:02 ]
>>642



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

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

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

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

という解を示してインタプリタが停止します。これがPrologプログラマをして
同姓同名への配慮が必要かどうか判断させる契機となるということです。

657 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 09:07:39 ]
>>656
変な"m"が混入してしまいました。

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

です。

658 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:18:07 ]
>>661 上半分がちぎれてしまった。
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:09:19 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:34:26 ]
>>666
% Prolog 旅費を算出するまでもない。

旅費(日本,食費,10000).
旅費(日本,宿泊費,30000).
旅費(日本,交通費,50000).
旅費(日本,合計,_旅費合計) :-
  旅費(日本,食費,_食費),
  旅費(日本,宿泊費,_宿泊費),
  旅費(日本,交通費,_交通費),
  _旅費合計 is _食費 + _宿泊費 + _交通費.
旅費(アメリカ,食費,10000).
旅費(アメリカ,宿泊費,30000).
旅費(アメリカ,交通費,300000).
旅費(アメリカ,合計,_旅費合計) :-
  旅費(アメリカ,食費,_食費),
  旅費(アメリカ,宿泊費,_宿泊費),
  旅費(アメリカ,交通費,_交通費),
  _旅費合計 is _食費 + _宿泊費 + _交通費.

668 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:30:28 ]
# pc12.2ch.net/test/read.cgi/tech/1248012902/848
# 【 課題 】クラスの継承 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 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:35:24 ]
>>668
% Prolog

動物(猫,吠える) :- write('ニャーニャーと鳴く!!'),!.
動物(犬,吠える) :- write('ワンワン吠えている!!'),!.
動物(_,吠える) :- write('動物が吠えている').

670 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:46:29 ]
>>668
% Prolog 主語が抜けた。

動物(猫,吠える) :- write('猫がニャーニャーと鳴く!!'),!.
動物(犬,吠える) :- write('犬がワンワン吠えている!!'),!.
動物(_,吠える) :- write('動物が吠えている').

671 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:43:22 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:45:56 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/549
# [1] 授業単元:プログラミング 1
# [2] 問題文(含コード&リンク):
# 球の体積をもとめよ。


675 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:03:34 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:06:10 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:19:32 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/551
# [1] 授業単元:プログラミング 1
# [2] 問題文(含コード&リンク):
# 二つの数列の和によってできる数列を表示したい。

678 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:52:22 ]
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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 04:16:37 ]
>>674
% Prolog 積分で、の意味かな。とりあえず球の体積の公式で。

球の体積(_半径,_球の体積) :-
  _球の体積 is ( 4 / 3 ) * pi * _半径 ^ 3.

681 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 12:53:34 ]
>>633
使用言語:J

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

'abaabab' f 'aab'
1
'abaabab' f 'abb'
_1

685 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 13:13:26 ]
>>625
使用言語:J

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

f 10
25

686 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 16:22:41 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 17:18:38 ]
>>686
使用言語:J

smoutput&>((0 i.~45 5 9|]){(;/'ABC'),<)"0>:i.100

688 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 05:34:48 ]
>>687
仮に45は反則ということにすると、どうなりますか?



693 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 07:05:25 ]
>>692 >>686
使用言語:J

smoutput&>((0 i.~[:(,~+/)5 9|]){(;/'ABC'),<)"0>:i.100

694 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 10:26:37 ]
>>693
ありがとうございます。

695 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 14:34:00 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/555
# [1]C言語とプログラミング
# [2] キーボードから3つの整数を受け取り大きさの小さい順に出力するプログラムを作りなさい。
# 但しmain関数内ではint変数一つだけが使えるものとします。またmain関数の再帰呼び出しも
# 出来ません。(main関数の引数、argc,argvをint変数として使用することも勿論禁止します)
# main関数のみで構成されるプログラムとして下さい。
# 入力される数は1から10までの範囲にあることを常にチェックし、それ以外の入力の場合は
# 再入力を促して下さい。

697 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 16:00:22 ]
>>696
% Prolog
% 述語make/0 で 述語main/0 のソースプログラムを生成する。

nojiriko.asia/prolog/c134_555.html

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

699 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 06:48:19 ]
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 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:40:36 ]
>>701
% Prolog SWI-PrologにはXPCEというグラフィックライブラリが
% 付いているのですが、私はうまく使うことができずにいます。
% それでこの課題はパス。



703 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:47:43 ]
>>702
>>698なんかも、これはPrologではできません!とした方が親切なんじゃないの?
多少とも、Prologを知らしめたいという願いがあるのなら。


704 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 11:48:09 ]
できるのにできないって言うのはただのネガキャンにしかなんねえだろ






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

前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