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/
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等 ループ文を使ってはいけないそうです
237 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 20:55:20 ] >>236 % Prolog 評価値(_点数,'A+') :- _点数>=90,_点数=<100. 評価値(_点数,'A') :- _点数>=80,_点数=<89. 評価値(_点数,'B') :- _点数>=70,_点数=<79. 評価値(_点数,'C') :- _点数>=60,_点数=<69. 評価値(_点数,'F') :- _点数>=0,_点数=<59. 評価値(_,error).
238 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 23:44:11 ] pc12.2ch.net/test/read.cgi/tech/1232627790/737 #【 課題 】適当な文字列を入力して、暗号化するプログラムを作る。 # 暗号キーは2桁で、暗号文は奇数番目と偶数番目の文字列を、 # 暗号キーの値だけ交互にずらして作成する。 # 使用する文字種は「!」から「z」までの90個とする(0x21~0x7A)。 # またを超えたら!に戻すこと。
239 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 23:46:10 ] >>238 % Prolog nojiriko.asia/prolog/t238.html
240 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 07:51:19 ] pc12.2ch.net/test/read.cgi/tech/1244449887/650 # [1] 授業単元: C # [2] 問題文(含コード&リンク):キーボードから入力された1以上の整数nについて、 # 次の例に示すように行番号と*を表示するプログラムを作成せよ。 # なお、*の数は、1行目はn個とし、1行毎に1ずつへっていくこととする。 # また、0や負の数が入力された場合はプログラムが終了するようにせよ。
241 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 07:58:05 ] >>240 % Prolog % 述語 同一要素ならび/3 は事実上の組込述語ですね t240(N) :- for(N,M,1),t240_1(M),N=1. t240_1(N) :- 同一要素ならび(*,L,N), concat_atom([N|L],S), write_formatted('%t\n',[S]). 同一要素ならび(_要素,List,Length) :- length(List,Length), 同一要素ならび(_要素,List) . 同一要素ならび(_,[]). 同一要素ならび(A,[A|R]) :- 同一要素ならび(A,R).
242 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 14:42:10 ] pc12.2ch.net/test/read.cgi/tech/1244449887/674 # [1] 授業単元:プログラム # [2] 4*3行列Aと 3*5行列B の各要素をキーボードから入力し、 # C = A*B を計算し、表示するプログラムを作成せよ。
243 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 14:43:51 ] >>242 % Prolog 少し前に一度あった。 nojiriko.asia/prolog/t242.html
244 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 14:47:02 ] pc12.2ch.net/test/read.cgi/tech/1244449887/669 # 内容: # [1] 授業単元: プログラミング論 # [2] 問題文(含コード&リンク): # 1からnまでの整数値の和を再帰的に求めるプログラムを作成する # [実行結果の例] # 1からnまでの整数値の和を計算します # nの値を入力してください:100 # 1から100までの整数値の和は5050です
245 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 04:31:12 ] >>149 >>150 % Prolog (下請け述語を改変) % pc12.2ch.net/test/read.cgi/tech/1235561034/289 参照 交互にならべた文字列(Str1,Str2,Str) :- atom_chars(Str1,Chars1), atom_chars(Str2,Chars2), 交互にならべた文字列_1(Chars1,Chars2,Chars3), atom_chars(Str,chars3). 交互にならべた文字列_1([],L,L) :- !. 交互にならべた文字列_1([A|R1],L2,[A|R]) :- 交互にならべた文字列_1(L2,R1,R).. ?- 交互にならべた文字列(abcde,opq,X). X = aobpcqde; no ?-
246 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 04:58:24 ] >>246 もっと一般化したら・・ 二つの文字列を交互に併合する(Str1,Str2,Str) :- atom_chars(Str1,Chars1), atom_chars(Str2,Chars2), 順併合(Chars1,Chars2,Chars3), atom_chars(Str,chars3). 順併合([],L,L) :- !. 順併合([A|R1],L2,[A|R]) :- 順併合(L2,R1,R).
247 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 05:37:07 ] >>246 順併合というソートと誤解されるかな。 二つの文字列を交互に併合する(Str1,Str2,Str) :- atom_chars(Str1,Chars1), atom_chars(Str2,Chars2), 交互併合(Chars1,Chars2,Chars3), atom_chars(Str,chars3). 交互併合([],L,L) :- !. 交互併合([A|R1],L2,[A|R]) :- 交互併合(L2,R1,R).
248 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 08:33:46 ] ということは、 >>238 >>239 文字コードによる暗号化/3 も以下がよい。 文字列の暗号化(_鍵整数,_元の文字列,_暗号文字列) :- integer(_鍵整数), _鍵整数>=10 _鍵整数=<99, atom_codes(_元の文字列,Codes), _奇数番目の鍵 is _鍵整数 // 10, _偶数番目の鍵 is _鍵整数 mod 10, 文字コードによる暗号化(_奇数番目の鍵,_偶数番目の鍵,Codes,_暗号Codes), atom_codes(_暗号文字列,_暗号Codes). 文字コードによる暗号化(_,_,[],[]) :- !. 文字コードによる暗号化(_鍵1,_鍵2,[A|R1],[B|R2]) :- 一文字の暗号化(_鍵1,A,B), 文字コードによる暗号化(_鍵2,_鍵1,R1,R2). 一文字の暗号化(_変位,_文字コード,_暗号化された文字コード) :- _文字コード+_変位 =< 122,!, _暗号化された文字コード is _文字コード+_変位. 一文字の暗号文字化(_変位,_文字コード,_暗号化された文字コード) :- _文字コード+_変位 >122,!, _暗号化された文字コード is _文字コード+_変位-90.
249 名前:248 mailto:sage [2009/06/20(土) 08:47:22 ] ごめんなさい。>>238 を更新してしまった。 これでは以前との比較ができない。もう一度復元しますから、少し待って。
250 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 09:01:05 ] >>249 >>239 の話でした。元々はこうなっていたはずです。 文字コードによる暗号化(_,_,[],[]). 文字コードによる暗号化(_奇数番目の鍵,_,[A],[C]) :- 一文字の暗号化(_奇数番目の鍵,A,C). 文字コードによる暗号化(_奇数番目の鍵,_偶数番目の鍵,[A,B|R1],[C,D|R2]) :- 一文字の暗号化(_奇数番目の鍵,A,C), 一文字の暗号化(_偶数番目の鍵,B,D), 文字コードによる暗号化(_奇数番目の鍵,_偶数番目の鍵,R1,R2).
251 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:19:22 ] pc12.2ch.net/test/read.cgi/tech/1232627790/750# 【 課題 】 # String a ="@test あいう@aaaおえてtest.com/ と"; # aから@から始まるアルファベットとURLを取り除く処理 # System.out.println(a); # # 出力結果 # あいうおえてと # # aから@から始まるアルファベットとURLを取り除く処理はどのように書けばいいのでし ょうか?
252 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:44:01 ] >>251 % Prolog t251(_文字列,_取り除いた文字列) :- atom_chars(_文字列,Chars), t251_1(Chars,L), atom_chars(_取り除いた文字列,L). t251_1([],[]) :- !. t251_1([@|R1],R2) :- t251_2(R1,R2),!. t251_1([h,t,t,p,:,/,/|R1],R2) :- t251_2(R1,R2),!. t251_1([A|R1],[A|R2]) :- t251_1(R1,R2). t251_2([],[]) :- !. t251_2([A|R1],R2) :- A @>=' ', A @=< z,!, t251_2(R1,R2). t251_2(L,R2) :- t251_1(L,R2).