いろんな言語で宿題スレat TECH
いろんな言語で宿題スレ - 暇つぶし2ch159:デフォルトの名無しさん
09/06/13 09:42:06
>>135
% Prolog 一応書き上げました。使えるユーティリティを含みますが出来は悪い。
URLリンク(nojiriko.asia)

160:デフォルトの名無しさん
09/06/13 09:47:14
>>74
% Prolog これは忘れてました。
URLリンク(nojiriko.asia)

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


162:デフォルトの名無しさん
09/06/14 04:33:08
>>161
# >>701
# URLリンク(rg550.hp.infoseek.co.jp)
#
# >捌き率は標準偏差の3倍の範囲を考慮する正規分布に従うものとする。
# ここだけ意味分からなかったから、自分でGateModel#getDepartureInterval()を適当に書き換えて。

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


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

165:デフォルトの名無しさん
09/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\nURLリンク(a.pic.to) のような美しい表を作るにはポストスクリプト
命令述語を使う必要がありますね\n').

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


167:デフォルトの名無しさん
09/06/14 07:24:21
スレリンク(tech板:276番)
#[1] 授業単元:プログラミング演習
#[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
#               ほとんど英文です。訳そうとしたんですが自分でも意味がわからなくなったんでそのままにしました。すいません。

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




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

170:デフォルトの名無しさん
09/06/15 06:12:20
>>166
% Prolog
URLリンク(nojiriko.asia)

171:デフォルトの名無しさん
09/06/15 08:18:42
>>167
% Prolog
URLリンク(nojiriko.asia)

172:デフォルトの名無しさん
09/06/15 19:00:47
スレリンク(tech板)
[1] 授業単元:For文
[2] 問題文:整数1~10までの累計(1+2+3・・・・9+10=55)
 [3.1] OS: XP
 [3.2] Turbo C++
 [3.3] C++

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

173:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/15 19:19:30
>>172
スレリンク(tech板:408番)
です

175:デフォルトの名無しさん
09/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
09/06/15 19:59:05
N is trancate(X) ではなく N is truncate(X) ですね。

177:デフォルトの名無しさん
09/06/15 20:41:47
スレリンク(tech板:405番)
[1] 授業単元:プログラミング実習I
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
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:デフォルトの名無しさん
09/06/15 20:42:46
>>177
% Prolog
木の高さ([],-1).
木の高さ(_根,_高さ) :-
枝(_根,_左,_右),
木の高さ(_左,_左の高さ),
木の高さ(_右,_右の高さ),
max([_左の高さ,_右の高さ],_高さの二),
_高さ is _高さの二 + 1.

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

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


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

182:デフォルトの名無しさん
09/06/16 06:19:04
>>167
% Prolog (完全日本語版)
URLリンク(nojiriko.asia)

183:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/16 09:12:06
>>181
% Prolog
URLリンク(nojiriko.asia)

185:デフォルトの名無しさん
09/06/16 09:20:22
ひどい宣伝だな

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

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

188:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/16 18:29:42
スレリンク(tech板: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:デフォルトの名無しさん
09/06/16 19:49:14
>>191
% Prolog
URLリンク(nojiriko.asia)

193:デフォルトの名無しさん
09/06/16 21:45:48
スレリンク(tech板:482番)
#[1] 授業単元:プログラミング基礎
#[2] 問題文
#
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
# for文やif文を使用して下図のように出力せよ
#
# ★   ★
#  ★ ★
#   ★
#  ★ ★
# ★   ★
#


194:デフォルトの名無しさん
09/06/16 21:49:07
>>193
% Prolog
URLリンク(nojiriko.asia)

195:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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
09/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:デフォルトの名無しさん
09/06/17 04:09:41
スレリンク(tech板:505番)
#[1] 授業単元: C言語
#[2] 問題文
# (1)
# 文字列を受け取る関数(charポインタを使用)
# その文字列の一番最後の文字を消去する関数を作る。
# (2)
# 文字列を受け取る関数(charポインタ使用)
# その文字列の一番最初の文字を消去する関数を作る。
# (3)'文字列を入力し、ある文字を入力。その文字列の中にその入力した文字がいく
つあるかを数える関数。
# 例 文字列 asdfgvbfdcaa 文字aと入力したら 3となる
# その関数は二つのパラメータをもち、一つ目は文字列へのポインタ、二つ目は数えた文
字の数である。

200:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/17 06:19:02
スレリンク(tech板:925番)
# 123456789の順に数字を並べて,数字の間に+,-を補うことで式を作り, その値が100になる# 組み合わせをすべて求め,その式を出力するプログラムを作成しなさい.
# お願いします


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

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

207:デフォルトの名無しさん
09/06/17 10:55:36
>>206
% Prolog
URLリンク(nojiriko.asia)

208:デフォルトの名無しさん
09/06/17 16:53:31
>>206 一部書き直しました。
% Prolog
URLリンク(nojiriko.asia)

209:デフォルトの名無しさん
09/06/17 17:09:49
>>206
-- Haskell
URLリンク(ja.pastebin.ca)

210:デフォルトの名無しさん
09/06/17 18:05:15
スレリンク(tech板: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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/17 20:13:52
>>210
-- Haskell
URLリンク(ja.pastebin.ca)

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

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


214:デフォルトの名無しさん
09/06/18 04:16:40
スレリンク(tech板:580番)
#[1] 授業単元: プログラミング演習
#[2] 問題文: 人の名前(ローマ字)を検索(部分一致)することができるプログラムを作成せよ。

215:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/18 06:38:52
スレリンク(tech板:560番)
#[1] 授業単元: C
#[2] 問題文(含コード&リンク):アルファベットの小文字を大文字に変換するプログラムを作成せよ
# ヒント: 'a'~'z'は連続した文字コードが割り当てられている。'A'~'Z'も連続した文字コードが割り当てられている。すなわち、'a'の文字コード
#      にある定数を足す(または引く)と'A'になり、'b'にその定数を足す(または引く)と'B'になる。この定数さえ求められれば、簡単に計算できることがわかる。
#      定数は、'a'や'A'を使えば計算できる。

220:デフォルトの名無しさん
09/06/18 07:01:41
>>219
% Prolog 敢えて、出題の題意通りやってみる。

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


221:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/18 07:29:55
>>221
すみません。これだとやっぱりだめだ。
char_code/2を使う以上は、変数の有無だけは検査しないといけないのかな。
ちょっと考えます・・・

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

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

223:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/18 09:33:49
スレリンク(tech板: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:デフォルトの名無しさん
09/06/18 09:39:35
スレリンク(tech板:554番)
# [1] 授業単元: c言語演習
# [2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)

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

228:デフォルトの名無しさん
09/06/18 14:56:57
>>227
できますた
これでいいですか?

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


229:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/18 17:46:05
>>228
ニュートン・コーツ とか
区分求積法 でググれ

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

234:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/18 18:40:39
>>233 訂正
% Prolog
入力した文字の種類を表示するプログラム(_文字) :-
  文字の範疇(_文字の範疇,_文字),

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

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

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


236:デフォルトの名無しさん
09/06/18 20:51:57
スレリンク(tech板: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:デフォルトの名無しさん
09/06/18 20:55:20
>>236
% Prolog
評価値(_点数,'A+') :- _点数>=90,_点数=<100.
評価値(_点数,'A') :- _点数>=80,_点数=<89.
評価値(_点数,'B') :- _点数>=70,_点数=<79.
評価値(_点数,'C') :- _点数>=60,_点数=<69.
評価値(_点数,'F') :- _点数>=0,_点数=<59.
評価値(_,error).

238:デフォルトの名無しさん
09/06/18 23:44:11
スレリンク(tech板:737番)
#【 課題 】適当な文字列を入力して、暗号化するプログラムを作る。
# 暗号キーは2桁で、暗号文は奇数番目と偶数番目の文字列を、
# 暗号キーの値だけ交互にずらして作成する。
# 使用する文字種は「!」から「z」までの90個とする(0x21~0x7A)。
# またを超えたら!に戻すこと。

239:デフォルトの名無しさん
09/06/18 23:46:10
>>238
% Prolog
URLリンク(nojiriko.asia)

240:デフォルトの名無しさん
09/06/19 07:51:19
スレリンク(tech板:650番)
# [1] 授業単元: C
# [2] 問題文(含コード&リンク):キーボードから入力された1以上の整数nについて、
# 次の例に示すように行番号と*を表示するプログラムを作成せよ。
# なお、*の数は、1行目はn個とし、1行毎に1ずつへっていくこととする。
# また、0や負の数が入力された場合はプログラムが終了するようにせよ。

241:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/19 14:42:10
スレリンク(tech板:674番)
# [1] 授業単元:プログラム
# [2] 4*3行列Aと 3*5行列B の各要素をキーボードから入力し、
# C = A*B を計算し、表示するプログラムを作成せよ。

243:デフォルトの名無しさん
09/06/19 14:43:51
>>242
% Prolog 少し前に一度あった。
URLリンク(nojiriko.asia)

244:デフォルトの名無しさん
09/06/19 14:47:02
スレリンク(tech板:669番)
# 内容:
# [1] 授業単元: プログラミング論
# [2] 問題文(含コード&リンク):
# 1からnまでの整数値の和を再帰的に求めるプログラムを作成する
# [実行結果の例]
# 1からnまでの整数値の和を計算します
# nの値を入力してください:100
# 1から100までの整数値の和は5050です

245:デフォルトの名無しさん
09/06/20 04:31:12
>>149 >>150
% Prolog (下請け述語を改変)
% スレリンク(tech板: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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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
09/06/20 08:47:22
ごめんなさい。>>238 を更新してしまった。
これでは以前との比較ができない。もう一度復元しますから、少し待って。

250:デフォルトの名無しさん
09/06/20 09:01:05
>>249 >>239 の話でした。元々はこうなっていたはずです。

文字コードによる暗号化(_,_,[],[]).
文字コードによる暗号化(_奇数番目の鍵,_,[A],[C]) :-
  一文字の暗号化(_奇数番目の鍵,A,C).  
文字コードによる暗号化(_奇数番目の鍵,_偶数番目の鍵,[A,B|R1],[C,D|R2]) :-
  一文字の暗号化(_奇数番目の鍵,A,C),
  一文字の暗号化(_偶数番目の鍵,B,D),
  文字コードによる暗号化(_奇数番目の鍵,_偶数番目の鍵,R1,R2).

251:デフォルトの名無しさん
09/06/20 19:19:22
スレリンク(tech板:750番)# 【 課題 】
# String a ="@test あいう@aaaおえてURLリンク(test.com)と";
# aから@から始まるアルファベットとURLを取り除く処理
# System.out.println(a);
#
# 出力結果
# あいうおえてと
#
# aから@から始まるアルファベットとURLを取り除く処理はどのように書けばいいのでし
ょうか?


252:デフォルトの名無しさん
09/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).


253:デフォルトの名無しさん
09/06/21 04:51:24
スレリンク(tech板:708番)
# 入力件数nをキーボードより入力し、n人分のテストデータを入力する。
# その際、合計点、最高点、最低点を求め、最後に平均点を計算しそれぞれを出力するプログラムを作成せよ。
# ただし、平均点は実数型とし小数点第2位まで出力する。
# 平均点以外の変数は整数型とする。
#
# 問②棒グラフ出力プログラム
# 値2つを入力し、*を横に並べて棒グラフ状に出力するプログラム。
# 大きい値の方の棒グラフが上に来るようにすること。
# (値として0~50までしか入力されないものとする)

254:デフォルトの名無しさん
09/06/21 05:43:15
>>253 問②棒グラフ出力プログラム
% Prolog

t253_2(A,B) :-
  t253_2_make_list(50,A,B,L),
  t253_2_print(L).

t253_2_make_list(0,_,_,[]).
t253_2_make_list(N,A,B,[[X1,X2]|R]) :-
  ( N > A,X1=' ';N =< A,X1='*'),
  ( N > B,X2=' ';N =< B,X2='*'),
  N2 is N - 1,
  t253_2_make_list(N2,A,B,R).

t253_2_print([],[]).
t253_2_print([F|R1],[B|R2]) :-
  write_formatted(' %t %t\n',F),
  t253_2_print(R1,R2).

255:デフォルトの名無しさん
09/06/21 05:47:01
>>254 間違えた。t253_2_printを直すの忘れてた。
% Prolog

t253_2(A,B) :-
  t253_2_make_list(50,A,B,L),
  t253_2_print(L).

t253_2_make_list(0,_,_,[]).
t253_2_make_list(N,A,B,[[X1,X2]|R]) :-
  ( N > A,X1=' ';N =< A,X1='*'),
  ( N > B,X2=' ';N =< B,X2='*'),
  N2 is N - 1,
  t253_2_make_list(N2,A,B,R).

t253_2_print([]).
t253_2_print([L|R]) :-
  write_formatted(' %t %t\n',L),
  t253_2_print(R).

256:デフォルトの名無しさん
09/06/21 06:25:06
スレリンク(tech板:742番)
# [1] 授業単元: C
# [2] 問題文(含コード&リンク):年r%の複利でy円を借り、n年後に一括返済する場合の返済額を計算するプログラムを作成せよ
#               ただしr%の複利でn年借りた場合の利率を計算する部分を関数として作成すること。
# 表示結果の例
#     利率(r):7.5
#     金額(y):1000000
# 期間(n):2
# 返済金額は1155625
# ヒント:返済金額はy(1+r/100)のn乗円である。r%の複利でn年間の利率(1+r/100)のn乗を計算する関数
#     float interest(float r, int n)を作る。そしてmain()からinterest()を呼び出し、返された値にyを掛けて返済額を求める。

257:デフォルトの名無しさん
09/06/21 12:51:45
スレリンク(tech板:748番)
#【 課題 】URLリンク(rg550.hp.infoseek.co.jp)
#【 形態 】Javaアプリケーション(main()で開始)
# URLリンク(rg550.hp.infoseek.co.jp)
上記仕様は意味不明のところがあり、
入力ファイルを以下のように変更しましょう。

売上明細ファイル
1)支店コード(数値3byte)
2)販売日(yyyymmdd)
3)販売先コード(数値6byte)
4)売上金額(数値8byte)

支店名ファイル
1)支店コード(数値3byte)
2)支店名(文字10byte)

販売先名ファイル
1)販売先コード(数値6byte)
2)販売先名(文字30byte)

258:デフォルトの名無しさん
09/06/21 15:00:09
>>251 >>252 URLのチェックの認識部分を修正
% Prolog
t251(_文字列,_取り除いた文字列) :-
  atom_chars(_文字列,Chars),
  t251_1(Chars,L),
  atom_chars(_取り除いた文字列,L).

t251_1([],[]) :- !.
t251_1([' '|R1],R2) :-
  t251_1(R1,R2),!.
t251_1([@|R1],R2) :-
  t251_2(R1,R2),!.
t251_1(L,R2) :-
  url_check(L,R1),
  t251_2(R1,R2),!.
t251_1([A|R1],[A|R2]) :-
  t251_1(R1,R2).

url_check([h,t,t,p,:,/,/|R],R) :- !.
url_ckeck([h,t,t,p,s,:,/,/,|R],R) :- !.
url_check([f,t,p,:,/,/|R],R) :- !.
url_check([f,i,l,e,:,/,/|R],R) :- !.

t251_2([],[]) :- !.
t251_2([A|R1],R2) :-
  A @>' ',
  A @=< z,!,
  t251_2(R1,R2).
t251_2(L,R2) :-
  t251_1(L,R2).

259:デフォルトの名無しさん
09/06/21 19:17:19
スレリンク(tech板:765番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 診断プログラムを作ろう
# 「計算ドリル」。質問文全てを一つの文字列配列に格納し、その順番に表示しましょう
。正解するたびに、
# tokuten を増やすことで、最後に「あなたは 5 問正解です」みたいな結果を表示させ
ることが出来ます。
# char questions[6][100]={
# “12×(3+4)=”, “(1+1÷9)×9=”,
# “(29‐5)÷(17‐11)=”, “2の10乗=”,
# “(3×9+44÷2)のルート=”, “8の階乗=”};
# ソースプログラム、変数の意味、工夫した点を書きなさい


260:デフォルトの名無しさん
09/06/21 19:21:42
>>259
% Prolog
計算ドリル :-
  write('五問出題します。すぐに答えてください\n'),
  質問(L1),
  正解(L2),
  計算ドリル(L1,L2,0,X),
  write_formatted('%t問正解です\n',[X]).

計算ドリル([],_,N,N) :- !.
計算ドリル([A|R1],[B|R2],N,X) :-
  write(A),
  get_line(S),
  atom_to_term(S,B),
  M is N + 1,
  計算ドリル([A|R1],[B|R2],M,X),!.
計算ドリル([_|R1],[_|R2],N,X) :-
  計算ドリル(R1,R2,N,X).

質問(['12×(3+4)=',
'(1+1÷9)×9=',
'(29‐5)÷(17‐11)=',
'2の10乗=',
'(3×9+44÷2)のルート=',
'8の階乗=']).

正解([84,10,4,1024,7,40320]).

261:260
09/06/21 20:08:59
% 正解かどうかを示すタイミングは
計算ドリル([],_,N,N) :- !.
計算ドリル([A|R1],[B|R2],N,X) :-
  write(A),
  get_line(S),
  atom_to_term(S,B),
  write('正解です!\n'),
  M is N + 1,
  計算ドリル([A|R1],[B|R2],M,X),!.
計算ドリル([_|R1],[B|R2],N,X) :-
  write('残念でした!! 正解は%tですね\n',[B]),
  計算ドリル(R1,R2,N,X).

262:デフォルトの名無しさん
09/06/21 20:37:25
% 一般的には以下のような定義にします。これだと不正解の時にもSを表示できます。
計算ドリル([],_,N,N) :- !.
計算ドリル([A|R1],[B|R2],N,X) :-
  write(A),
  get_line(S),
  正誤の判定(S,B,N,N2),
  計算ドリル(R1,R2,N2,X).

正誤の判定(S,B,N,N2) :-
  atom_to_term(S,B1),
  B1 = B,
  write('正解です!\n'),N2 is N + 1,!.
正誤の判定(S,B,N,N) :-
  atom_to_term(S,B1),
integer(B1),
not(B1=B),
write_formatted('残念でした!! 正解は%tですね\n',[B]),!.
正誤の判定(S,B,N,N) :-
  atom_to_term(S,B1),
  not(integer(B1)),
  write_formatted('入力に形式的な誤りがあったようです\nあなたは%tと入力しました\n',[S]).

263:デフォルトの名無しさん
09/06/21 22:02:23
>>256
% Prolog

interest(R,N,X) :-
  X is (1+R/100)^N.

返済額(Y,R,N,,X) :-
  interrest(R,N,Z),
X is Y * Z.

264:デフォルトの名無しさん
09/06/22 04:34:04
スレリンク(tech板:580番)
# 【質問テンプレ】
# [1] 授業単元: プログラミング演習
# [2] 問題文: 人の名前(ローマ字)を検索(部分一致)することができるプログラム
を作成せよ。


265:デフォルトの名無しさん
09/06/22 14:46:14
>>264
% Prolog こういう処理のためのユーティリティ sub_atom/10 を提案する。
URLリンク(nojiriko.asia)

266:デフォルトの名無しさん
09/06/22 17:23:44
スレリンク(tech板:878番)
#エラトステネスの篩
#(コードは煩雑そうに見えるが、速度が圧倒的に速い。
# 大きな数までの素数表が必要な場合に必要な方法。)
% 宿題には見えないんだが・・

267:デフォルトの名無しさん
09/06/22 17:27:40
>>266
% Prolog

素数生成(N,X) :-
  findall(M,for(2,M,N),L),
  エラトステネスの篩(L,X).

エラトステネスの篩([],[]) :- !.
エラトステネスの篩([A|R1],[A|R2]) :-
  エラトステネスの篩(A,R1,L),
  エラトステネスの篩(L,R2).

エラトステネスの篩(_,[],[]) :- !.
エラトステネスの篩(N,[A|R1],R2) :-
  0 is A mod N,
  エラトステネスの篩(N,R1,R2),!.
エラトステネスの篩(N,[A|R1],[A|R2]) :-
  エラトステネスの篩(N,R1,R2).

268:デフォルトの名無しさん
09/06/22 22:55:11
スレリンク(tech板:842番)
# [1] C言語
# [2]1~5の数字の組み合わせをを2次元配列index[][]に格納し、表示しなさい。


269:デフォルトの名無しさん
09/06/22 22:59:07
>>268
% Prolog
t268(X) :- 組合せ([1,2,3,4,5],2,X).

組合せ(X,1,[A]) :-
member(A,X) .
組合せ([A|Y],N,[A|X]) :-
N > 1,
M is N - 1,
組合せ(Y,M,X) .
組合せ([_|Y],N,A) :-
N > 1,
組合せ(Y,N,A) .

270:デフォルトの名無しさん
09/06/22 23:01:19
>>268
% Prolog
t268(X) :- 組合せ([1,2,3,4,5],2,X).

組合せ(X,1,[A]) :- member(A,X) .
組合せ([A|Y],N,[A|X]) :- N > 1,M is N - 1,組合せ(Y,M,X) .
組合せ([_|Y],N,A) :- N > 1,組合せ(Y,N,A) .

271:デフォルトの名無しさん
09/06/22 23:05:33
スレリンク(tech板:837番)
# キーボードから入力した数値の段数を持つ逆ピラミッドを表示するプログラム。
#
# 例えば3と入力した時、
#
# *****
# ***
# *
#
# となるようなプログラムです。
# どうか早急にお願いします。

272:デフォルトの名無しさん
09/06/22 23:08:00
>>271
問題が面白くないっす
やる気起きないっす


273:デフォルトの名無しさん
09/06/22 23:17:35
% Prolog
:- op(250,xfx,対).

t271(N,1 対 M) :-
  for(N,N2,1),
  N3 is (N2 - 1) * (M - 1) + 1,
  for(1,N4,N3),write(*),N3=N4,
  N=N2.

274:デフォルトの名無しさん
09/06/23 04:33:24
スレリンク(tech板:851番)
# あいうえお
# /*かきくけこ*/
# さしす/*せそ
# なにぬ*/ねの
#
# というファイル(test.txt)から文字数、改行数、コメント文字数をカウントし、出力するプログラムです。
# お願いいたします。

275:デフォルトの名無しさん
09/06/23 05:03:46
>>274
% Prolog
t274(_文字数,_改行数,_コメント数) :-
  get_chars('test.txt',Chars),
  length(Chars,_文字数),
  改行数を数える(Chars,_改行数),
  コメント数を数える(Chars,_コメント).

改行数を数える(Chars,_改行数) :-
  findall(_,append(_,['\n'|_],Chars),L),
  length(L,_改行数).

コメント文字数を数える(Chars,_コメント文字数) :-
  append(_,['/','*'|L2],Chars),
  append(_コメント文字候補,['*','/'|_],L2),
  not(append(_,['/','*'|_],_コメント文字候補)),
  改行を取り除く(_コメント文字候補,_改行を取り除いたコメント文字候補),
  length(_改行を取り除いたコメント文字候補,_コメント文字数).

改行を取り除く([],[]).
改行を取り除く(['\n'|R1],R2) :-
  改行を取り除く(R1,R2),!.
改行を取り除く([A|R1],[A|R2]) :-
  not(A='\n'),
  改行を取り除く(R1,R2).

276:デフォルトの名無しさん
09/06/23 05:11:18
>>274 >>275
% Prolog (訂正) コメント数 ではなく コメント文字数 です。
t274(_文字数,_改行数,_コメント文字数) :-
  get_chars('test.txt',Chars),
  length(Chars,_文字数),
  改行数を数える(Chars,_改行数),
  コメント文字数を数える(Chars,_コメント文字数).

改行数を数える(Chars,_改行数) :-
  findall(_,append(_,['\n'|_],Chars),L),
  length(L,_改行数).

コメント文字数を数える(Chars,_コメント文字数) :-
  append(_,['/','*'|L2],Chars),
  append(_コメント文字候補,['*','/'|_],L2),
  not(append(_,['/','*'|_],_コメント文字候補)),
  改行を取り除く(_コメント文字候補,_改行を取り除いたコメント文字候補),
  length(_改行を取り除いたコメント文字候補,_コメント文字数).

改行を取り除く([],[]).
改行を取り除く(['\n'|R1],R2) :-
  改行を取り除く(R1,R2),!.
改行を取り除く([A|R1],[A|R2]) :-
  not(A='\n'),
  改行を取り除く(R1,R2).

277:デフォルトの名無しさん
09/06/23 05:19:10
スレリンク(tech板:861番)
# 以下のように出力されるプログラムを作成せよ
# 年齢を入力してください
# 16
# 生まれた年を入力してください
# 1986
# 好きな数字を入力してください
# 7
# あなたは1986年生まれの16才で、7が好きですね

278:デフォルトの名無しさん
09/06/23 05:30:30
>>277
% Prolog
t277 :-
  質問文(L),
  findall(U,(member(A,L),write(A),nl,get_line(U)),VL),
  write_formatted('あなたは%t年生まれの%才で、%tが好きですね\n',VL).

質問文([年齢を入力してください,生まれた年を入力してください,好きな数字を入力してください]).


279:デフォルトの名無しさん
09/06/23 05:41:29
スレリンク(tech板:879番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)

280:デフォルトの名無しさん
09/06/23 07:00:07
>>279
% Prolog
t279(M,N,StartX,StartY,_壁衝突回数,_ポケットX,_ポケットY) :-
  t279(M,N,StartX,StartY,1,1,0,_壁衝突回数,_ポケットX,_ポケットY),!.

t279(M,N,X,Y,_,_,Count,Count,X,Y) :-
  member([X,Y],[[M,0],[0,N],[N,0],[M,N]]),!.
t279(M,N,X1,Y1,VX,VY,Count1,Count,X,Y) :-
  member(X1,[0,M]),
  VX1 is (-1) * VX,
  Count2 is Count1 + 1,
  X2 is X1 + VX1,
  Y2 is Y1 + VY,
  t279(M,N,X2,Y2,VX1,VY,Count2,Count,X,Y).
t279(M,N,X1,0,VX,VY,Count1,Count,X,Y) :-
  member(Y1,[0,N]),
  VY1 is (-1) * VY,
  Count2 is Count + 1,
  X2 is X1 + VX,
  Y2 is Y1 + VY1,
  t279(M,N,X2,Y2,VX,VY1,Count2,Count,X,Y).
t279(M,N,X1,Y1,VX,VY,Count1,Count,X,Y) :-
  X2 is X1 + VX,
  Y2 is Y1 + VY,
  t279(M,N,X2,Y2,VX,VY,Count1,Count2,X,Y).


281:デフォルトの名無しさん
09/06/23 07:26:37
スレリンク(tech板:849番)
# [1]授業単元:プログラミング演習課題3
# [2]問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)
# ファイルに登録された成績コードを読み、構造体列にデータを編集し指定された項目で
# ソート処理を行って、画面に一覧(見出しと明細データ)を出力する。
# ソートの順序は降順とし、10行毎に見出しを入れる。
#
# 成績ファイル:
# コード(6桁),氏名(20桁),国語(3桁),算数(3桁),理科(3桁),社会(3桁)
#
# 構造体の定義:
# struct seito {
# char cd[7];
# char simei[21];
# int kokugo;
# int sansu;
# int rika;
# int syakai;
# };
#
# ソート項目は、コード、氏名、国語、算数、理科、社会が選択できるようにする。


282:デフォルトの名無しさん
09/06/23 15:12:50
>>281
% Prolog
URLリンク(nojiriko.asia)

283:デフォルトの名無しさん
09/06/23 15:20:30
スレリンク(tech板:890番)
# [1] 授業単元:数理物理
# [2] 問題文(含コード&リンク):URLリンク(www.mns.kyutech.ac.jp)
sub8.html
#   の課題3のプログラムで解くところまで
# 課題(3)
#
# 次の力が働いているときの、運動方程式を解く。
#
# F = -x - v ^ 3 + 1 + cos(t)
#
# 初期条件:t=0の時、x(0)=1.0、速度v(0)=‐0.5
# として解き、0<t<10までをgnuplot(など)で、プロットせよ。
#
# ヒント:
# 6章の減衰振動のプログラム(C言語)
# URLリンク(www.mns.kyutech.ac.jp)

284:デフォルトの名無しさん
09/06/23 20:03:38
スレリンク(tech板:905番)
# [1]c++
# [2]2次元配列n[10][10]のすべての要素に1を代入してから、その内容を表示しなさい。

# また、対角要素だけを1を代入し、ほかはすべて0を代入してから、表示しなさい。
# ただし、対角要素は左上隅から右下隅への対角線上の要素とする。次の図は実行例であ
る。
#  --- (2)配列nの内容 ---
#
# 100000000
# 010000000
# 001000000
# 000100000
# 000010000
# 000001000
# 000000100
# 000000010
# 000000001


285:デフォルトの名無しさん
09/06/23 20:27:54
>>284
% Prolog
t284_1 :-
  findall(L,(for(1,M,10),findall(1,for(1,N,10),L)),LX),
  member(U,LX),
  concat_atom(U,A),
  write_formatted('%t\n',[A]),
  fail;
  true.

t284_2 :-
  findall(L,(for(1,M,10),findall(B,(for(1,N,10),
        (N=M,B=1;not(N=M),B=0))),LX),
  member(U,LX),
  concat_atom(U,A),
  write_formatted('%t\n',[A]),
  fail;
  true.


286:デフォルトの名無しさん
09/06/24 04:35:26
>>284
% Prolog for/3を使いたくない場合。表示は省略。
t284_2(X) :- length(L,10),findall(L,一つだけ1で他は全部零(L),X).
一つだけ壱で他は全部零(L) :- append(L1,[1|R],L),零ならび(L1),零ならび(R).
零ならび([]).
零ならび([0|R]) :- 零ならび(R).


287:デフォルトの名無しさん
09/06/24 04:52:46
>>284 一ヶ所間違えた。
% Prolog for/3を使いたくない場合。表示は省略。
t284_2(X) :- length(L,10),findall(L,ひとつだけ壱で他は全部零(L),X).
ひとつだけ壱で他は全部零(L) :- append(L1,[1|R],L),零ならび(L1),零ならび(R).
零ならび([]).
零ならび([0|R]) :- 零ならび(R).

288:デフォルトの名無しさん
09/06/24 08:30:30
>>287
forループがlengthの中に閉じ込められているんだね。

これぞ宣言型プログラミング!


289:デフォルトの名無しさん
09/06/24 12:04:36
>>257
% Prolog
URLリンク(nojiriko.asia)

290:デフォルトの名無しさん
09/06/24 19:14:07
スレリンク(tech板:953番)
# [1] 授業単元: ピラミッドアート
# [2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
課題「ピラミッドアート」

数値を一つ入力し、その個数分の'*'を1辺とする
①ダイヤ型、②八角形、③星型 などを描画する

実行画面例①ダイヤ型
数字(2~9)を入力してください:3
*
***
*****
***
*

実行画面例②八角形
数字(2~9)を入力してください:2
**
****
****
**

実行画面例③星型
数字(2~9)を入力してください:7
* * *
* * *
***
*******
***
* * *
* * *

291:デフォルトの名無しさん
09/06/24 19:16:01
>>290
空白がうまく表示できなかった。
URLリンク(ime.nu)
で確認してください。

292:デフォルトの名無しさん
09/06/24 20:15:45
>>290
% Prolog
URLリンク(nojiriko.asia)

293:デフォルトの名無しさん
09/06/26 16:58:48
スレリンク(tech板:75番)
# [1] 授業単元: C
# [2] 問題文(含コード&リンク):
# キーボードから入力された1以上の整数nについて、次の例に示すように行番号と*を表示するプログラムを作成せよ
# 。また、0や負の数が入力された場合はプログラムが終了するようにせよ。
# 表示結果の例
# 正の整数:6
# 1******
# 2 *****
# 3  ****
# 4   ***
# 5    **
# 6 *


294:デフォルトの名無しさん
09/06/26 17:14:14
>>293
% Prolog 最後6の表示が間違ってるが。

t293(N) :-
  length(L,N),
  append(L1,L2,L),
  not(L2=[]),
  all(L1,' '),
  all(L2,'*'),
  length(L1,N),
  N2 is N + 1,
  concat_atom(L,S),
  write_formatted('%t %t\n',[N2,S]),
  fail;
  true.

all([],_).
all([A|R],A) :- all(R,A).

295:デフォルトの名無しさん
09/06/26 17:16:07
>>294
  all(L1,' '), はスペース2個だと思ってください。

296:デフォルトの名無しさん
09/06/26 18:11:51
スレリンク(tech板:83番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 自分の名前の英字名のASCIIコードを順番に表示するプログラムを作りなさい。

297:デフォルトの名無しさん
09/06/26 18:13:37
>>296
% Prolog

t296(Name) :-
  sub_atom(Name,S,1,R,A),
  not(A=' '),
  char_code(A,C),
  N is S+1,
  write_formatted('%2d: %t\n',[N,C]),
  fail;
  true.

298:デフォルトの名無しさん
09/06/26 18:41:30
スレリンク(tech板:85番)
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)

299:デフォルトの名無しさん
09/06/26 19:17:51
>>298
% Prolog

phon(_フォネティックコードファイル,_文字列) :-
  assertz_フォネティックコード(_フォネティックコードファイル),
  sub_atom(_文字列,_,1,_,A),
  フォネティックコード(A,B),
  write_formatted('%t ',[B]),
  fail;
  true.

assertz_フォネティックコード(_フォネティックコードファイル) :-
  abolish(フォネティックコード/2),
  get_lines(_フォネティックコード,Lines),
  member(Line,Lines),
  split(Line,[','],[A,B]),
  assertz((フォネティックコード(A,B) :- !)),
  fail;
  assertz((フォネティックコード(A,A))).

300:デフォルトの名無しさん
09/06/26 19:32:49
>>298
-- Haskell

import IO
import Data.Char (isAlpha, toLower)
import Data.Maybe (fromJust)

main = do
fname <- getLine
h <- openFile fname ReadMode
phon <- readPhon h
str <- getLine
putStrLn $ t298 phon str
hClose h

readPhon :: Handle -> IO [(Char,String)]
readPhon h = hGetContents h >>= return . map parse . lines
where
parse :: String -> (Char,String)
parse (c:',':p) = (c,p)

t298 :: [(Char,String)] -> String -> String
t298 phon [] = []
t298 phon (x:xs) | isAlpha x = (fromJust $ lookup (toLower x) phon) ++ ' ' : t298 phon xs
| otherwise = x : t298 phon xs

301:デフォルトの名無しさん
09/06/26 19:49:43
>>299 違ったみたい。どこが違ってたか捜してみて下さい。
% Prolog

phon(_フォネティックコードファイル,_文字列) :-
  assertz_フォネティックコード(_フォネティックコードファイル),
  atom_chars(_文字列,Chars),
  phon_1(Chars,XL),
  phon_2(XL).

phon_1([],[]) :- !.
phon_1([A,B|R1],[C,' '|R2]) :-
  フォネティックコード(A,C),
  フォネティックコード(B,_),
  phon_1([B|R1],R2).
phon_1([A,B|R1],[C,' '|R2]) :-
  フォネティックコード(A,C),
  not(フォネティックコード(B,_)),
  phon_1([B|R1],R2).
phon_1([A,B|R1],[A,' '|R2]) :-
  not(フォネティックコード(A,_)),
  フォネティックコード(B,_),
  phon_1([B|R1],R2).
phon_1([A,B|R1],[A|R2]) :-
  not(フォネティックコード(A,_)),
  not(フォネティックコード(B,_)),
  phon_1([B|R1],R2).

phon_2([]).
phon_2([A|R]) :-
  write(A),
  phon_2(R).


302:デフォルトの名無しさん
09/06/26 19:56:51
>>301 さらに訂正。
phon_1([],[]) :- !. の後に、
phon_1([A],[C]) :-
  フォネティックコード(A,C),!.
phon_1([A],[A]) :-
  not(フォネティックコード(A,_)),!.

の2節を追加してください。
URLリンク(nojiriko.asia)
に書き直しておきます。

303:299
09/06/26 20:35:21
なぜこうまでも全編の書き直しを余儀なくされたかというと、
123abc の場合の 123 Alfa ... 3とAlfaの間のスペースを入れることが
難しかったと言うことです。sub_atomで次の文字をこっそり見てしまえば
いいだけの事なのですが、潔しとせずと言うところでしょうか。

304:デフォルトの名無しさん
09/06/26 20:44:07
>>303
前後関係を検査しやすいパターンで記述するので正解じゃないか。
ご苦労様ですw


305:デフォルトの名無しさん
09/06/26 22:04:55
スレリンク(tech板:46番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):入力した数を2の何乗より大きいかを求めるプログラム。

306:デフォルトの名無しさん
09/06/26 22:15:19
>>305
% Prolog

t305(N,X) :-
for(1,M,N),
2 ^ M > N,
X is M - 1.

307:デフォルトの名無しさん
09/06/26 22:29:32
>>305
-- Haskell

import Data.List (find)
main = do
n <- getLine
let Just m = find ((read n <=) . (2^)) [1..] in print (m-1)

308:デフォルトの名無しさん
09/06/28 14:57:43
「いろんな言語で宿題スレ」の中で
スレリンク(tech板:168番)
スレリンク(tech板:225番)
といったProlog向き問題が未回答となっています。
どなたか、よろしくお願いします。

309:308
09/06/28 14:59:04
「Prologでまったり」スレに書き込んだつもりでした。失礼しました。

310:デフォルトの名無しさん
09/06/29 04:55:03
スレリンク(tech板:162番)
# [1] 授業単元:数値計算
# [2] 問題文(含コード&リンク):の連立1次方程式の解をガウスの消去法用いて解くプログラムを作成しなさい。
#    (この行列を使用してください
#      {{10,-9,0,0,0,0,0,0},
#   {-9,17,-8,0,0,0,0,0},
#   {0,-8,17,-9,0,0,0,0},
# {0,0-9,13,-4,0,0,0},
# {0,0,0,-4,12,-8,0,0},
# {0,0,0,0,-8,10,-2,0},
#   {0,0,0,0,0,-2,2,7}})



311:デフォルトの名無しさん
09/06/29 11:08:26
スレリンク(tech板:856番)
# 【 課題 】百ます計算プログラムの作成
# 足す数、足される数は実行毎にランダムな順番にする。
# スタートボタンを押すと同時に問題が表示され、答えをキー入力しおわるとストップボタンを押す。
# 終了までの時間と、正解数を表示する。

百ます計算ってなんですか? ゲームに参加した人が行、列の先頭から
数字を得て百桝計算し終わるまでの時間でも競うのですか?

312:デフォルトの名無しさん
09/06/29 13:29:06
スレリンク(tech板:184番)
# [1] 授業単元:アルゴリズム
# [2] 問題文(含コード&リンク):
#   URLリンク(kansai2channeler.hp.infoseek.co.jp)


313:デフォルトの名無しさん
09/06/29 13:30:41
>>312
% Prolog
t312(StackIn,StackOut) :-
  new_stack(StackIn,NewStack),
  get_chars(Chars),
  t312_1(Chars,NewStack,StackOut,_).

t312_1([],X,X,true).
t312_1([A|R1],Stack1,Stack2,Return) :-
  stack(A,Stack1,Stack3,Return1),
  t312_2(Return1),
  t312_1(R1,Stack3,Stack2,Return).

t312_2(true) :- !.
t312_2(C) :- write(C).

new_stack(Var,[]) :- var(Var),!.
new_stack([],[]) :- !.
new_stack(Stack,Stack).

stack_1('/',[A|R2],R2,A) :- !.
stack_1(C,Stack1,[C|Stack1],true).

314:デフォルトの名無しさん
09/06/29 13:45:08
>>313 まちがえた。stackという述語のところ。stack/4 stack_1/4
と出てきますが、stack_op/4にします。
% Prolog

t312(StackIn,StackOut) :-
  new_stack(StackIn,NewStack),
  get_chars(Chars),
  t312_1(Chars,NewStack,StackOut,_).

t312_1([],X,X,true).
t312_1([A|R1],Stack1,Stack2,Return) :-
  stack_op(A,Stack1,Stack3,Return1),
  t312_2(Return1),
  t312_1(R1,Stack3,Stack2,Return).

t312_2(true) :- !.
t312_2(C) :- write(C).

new_stack(Var,[]) :- var(Var),!.
new_stack([],[]) :- !.
new_stack(Stack,Stack).

stack_op('/',[A|R2],R2,A) :- !.
stack_op(C,Stack1,[C|Stack1],true).

315:デフォルトの名無しさん
09/06/30 03:45:34
スレリンク(tech板:222番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# URLリンク(kansai2channeler.hp.infoseek.co.jp)

316:デフォルトの名無しさん
09/06/30 10:02:40
>>315
% Prolog
URLリンク(nojiriko.asia)

317:デフォルトの名無しさん
09/06/30 10:50:45
スレリンク(tech板:234番)
# [1] 授業単元:確率論
# [2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)


318:デフォルトの名無しさん
09/06/30 14:50:16
スレリンク(tech板:243番)
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)

319:デフォルトの名無しさん
09/06/30 17:28:19
スレリンク(tech板:244番)
# 〔1〕授業単元:C言語
# 〔2〕問題文:URLリンク(kansai2channeler.hp.infoseek.co.jp)


320:デフォルトの名無しさん
09/07/01 04:08:33
スレリンク(tech板:273番)
# 1] 授業単元: 数理計画法
# [2] 問題文(含コード&リンク): シンプレックス法のプログラムを作成せよ。
# [3] 環境
#  [3.1] OS: Windows
#  [3.3] 言語: C
# [4] 期限: 2009年7月1日
# [5] その他の制限: プログラムの授業で習うことはすべてやりました。
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
# のようなプログラムをつくたんですがこの先が悩んでいます。どなたかお願いします。

321:デフォルトの名無しさん
09/07/01 04:10:11
スレリンク(tech板:275番)
# [1] 授業単元:C言語の基礎
# [2] 問題文:年(西暦)、月、日を入力し、入力した、日時の曜日及び、経過した日数を表示したプログラムを作成せよ。

322:デフォルトの名無しさん
09/07/01 16:45:23
>>321
% Prolog
URLリンク(nojiriko.asia)

323:デフォルトの名無しさん
09/07/01 22:46:07
>>318
% Prolog
URLリンク(nojiriko.asia)

324:323
09/07/02 05:34:22
>>318
すみません。間違いが多かったので大幅に書き換えてupしました。
URLリンク(nojiriko.asia)

325:デフォルトの名無しさん
09/07/02 05:47:42
>>319
% Prolog
swap(A,B,L,LX) :-
append(L1,[A|L2],[B|L3],L),
append(L1,[B|L2],[A|L3],LX),!.
swap(A,B,L,LX) :-
append(L1,[B|L2],[A|L3],L),
append(L1,[A|L2],[B|L3],LX),!.

326:デフォルトの名無しさん
09/07/02 08:49:55
>>319
% Prolog

t319_2(X) :-
  findall(U,(for(1,N,52),t319_2_1(N,U)),X).

t319_2_1(N,U) :-
  M is N mod 13,
  t319_2_2(M,U).

t319_2_2(1,'A') :- !.
t319_2_2(10,'T') :- !.
t319_2_2(11,'J') :- !.
t319_2_2(12,'Q') :- !.
t319_2_2(0,'K') :- !.
t319_2_2(N,N).

327:デフォルトの名無しさん
09/07/02 09:03:32
>>319
% Prolog

t319_3(X) :-
  findall(U,(for(1,N,52),t319_3_1(N,U)),X).

t319_3_1(N,U) :-
  M is N mod 13,
  M2 is (N - 1) // 13,
  t319_2_2(M,U1),
  t319_2_3(M2,U2),
  atom_concat(U1,U2,U).

t319_2_3(0,s).
t319_2_3(1,h).
t319_2_3(2,d).
t319_2_3(3,c).

% どこでswapを使うのかわからない!
% これからカードを「切る」課題でも出てくるのだろうか。

328:デフォルトの名無しさん
09/07/02 09:21:08
>>319
% せっかくだからN回切るのをやってみよう。
% Prolog

t319_cut(N,L) :-
  t319_3(L1),
  t319_cut(N,L1,L).

t319_cut(0,L,L) :- !.
t319_cut(N,L,X) :-
  M1 is (random mod 52) + 1,
  M2 is (random mod 52) + 1,
  swap_nth(M1,M2,L,L1),
  N2 is N - 1,
  t319_cut(N2,L1,X).

swap_nth(M,N,L1,L2) :-
  list_nth(M,L1,A),
  list_nth(N,L1,B),
  swap(A,B,L1,L2).

329:デフォルトの名無しさん
09/07/02 09:55:49
>>319
失礼しました。問題文を読み落としていました。
すべて最初に「切る」ことが指定されていました。
最初に切ってしまうなら、swap_nthではなく、swapでも処理できます。

t319_xx(X) :-
  findall(N,for(1,N,52),L),
  t319_cut(100,L,L1),
   ... ,
のような進行になります。

330:デフォルトの名無しさん
09/07/02 10:54:28
>>319
% Prolog
URLリンク(nojiriko.asia)

331:デフォルトの名無しさん
09/07/03 07:12:07
スレリンク(tech板:472番)
# [1] 授業単元:C言語実習
# [2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
/joyful/img/9658.txt
# {5,21,4,14,12},
# {25,20,15,3,7},
# {24,11,6,1,13},
# {16,2,17,19,8},
# {23,18,22,9,10}
#
# の横の各行を小さい順に並び替えた後、縦の各列を小さい順に並び替え(上が小さくな
るように)
# 結果を出力
#
# 結果は
#
# 5 21 4 14 12
# 25 20 15 3 7
# 24 11 6 1 13
# 16 2 17 19 8
# 23 18 22 9 10
#
# のような形で出力

332:デフォルトの名無しさん
09/07/03 07:32:08
>>331
% Prolog

t331(_行列1,_行列2) :-
  各行を整列する(_行列1,_行列3),
  各列を整列する(_行列3,_行列2),
  member(L,_行列2),
  concat_atom(L,' ',S),
  write_formatted('%t\n',[S]),
  fail;
  true.

各行を整列する([],[]) :- !.
各行を整列する([_行|R1],[_整列された行|R2]) :-
  sort(_行,_整列された行),
  各行を整列する(R1,R2).

各列を整列する(_行列1,_行列2) :-
  行列の転置(_行列2,_行列3),
  各行を整列する(_行列3,_行列4),
  行列の転置(_行列4,_行列2).


333:デフォルトの名無しさん
09/07/03 15:49:25
スレリンク(tech板:511番)
# [1] 授業単元:情報基礎B
# [2] 問題文(含コード&リンク):試験の点数10人分をキーボードから入力し、以下の内容を出力するプログラムを作成せよ。
# 平均点、標準偏差、得点の高い順の点数リスト(出来れば、バブルソート以外のアルゴリズムでお願いします。)

334:デフォルトの名無しさん
09/07/03 16:21:10
>>333
% Prolog (1/2)

t333(_点数ならび,_平均点,_標準偏差,_点数順ならび) :-
  算術平均(_点数ならび,_平均点),
  標準偏差(_点数ならび,_標準偏差),
  quicksort(_点数ならび,_点数順ならび).

算術平均([],N,S,M) :- M is S / N,!.
算術平均([A|R],N,S,M) :- S1 is S + A,算術平均(R,N,S1,M) .

算術平均(L,M) :- length(L,N),算術平均(L,N,0.0,M).

標準偏差([],N,M,S,V) :- V is sqrt(S / (N - 1)),!.
標準偏差([A|R],N,M,S,V) :- S1 is (A - M) ^ 2,S2 is S + S1,標準偏差(R,N,M,S2,V).

標準偏差(L,V) :- length(L,N),算術平均(L,M),標準偏差(L,N,M,0.0,V) .


335:デフォルトの名無しさん
09/07/03 16:22:29
>>333
% Prolog (2/2)

quicksort([],[]) :- !.
quicksort([X|Xs],Ys) :-
  partition(Xs,X,Littles,Gigs),
  quicksort(Littles,Ls),
  quicksort(Bigs,Bs),
  append(Ls,[X|Bs],Ys).

partition([],Y,[],[]) :- !.
partition([X|Xs],Y,[X|Ls],Bs) :- X @=< Y,partition(Xs,Y,Ls,Bs).
partition([X|Xs],Y,Ls,[X|Bs]) :- X @> Y,partition(Xs,Y,Ls,Bs).


336:335
09/07/03 16:56:05
>>333
点数の高い順だと、
partition([],Y,[],[]) :- !.
partition([X|Xs],Y,[X|Ls],Bs) :- X @>= Y,partition(Xs,Y,Ls,Bs).
partition([X|Xs],Y,Ls,[X|Bs]) :- X @< Y,partition(Xs,Y,Ls,Bs).
ですね。

337:デフォルトの名無しさん
09/07/03 17:15:43
スレリンク(tech板:423番)
# [1] 授業単元: 情報処理
# [2] 問題文(含コード&リンク):
#   
#  2つの正整数 m とn とを引数として受け取り、m と n の最大公約数を戻
# り値として返す関数gcd()を作成する。この関数を用いることにより、キー
# ボードから入力した3つの正整数 a, b, c の最大公約数を求めるプログラム
# を書け。
#
# 注意: 最大公約数を計算するには次のような「ユークリッドの互除法」を
# 用いるとよい。
#
# 「ユークリッドの互除法」
#  2つの正の整数 m、n(m>n)の最大公約数を求めるには、m を n で割っ
# て余り r1 を求め、次に n を r1 で割って余り r2 を求め、・・・、この
# ように大きい方を小さい方で割って余りを求め、最後に割り切れたときの除
# 数が求める最大公約数である。
#
# 例)440/380=1余り60 
#   380/60=6余り20  
#   60/20=3 余りなし
#  したがって、440と380の最大公約数は20 

338:デフォルトの名無しさん
09/07/03 17:19:24
>>337
% Prolog

最大公約数をユークリッドの互除法で求める(M,N,N) :-
  0 is M mod N,!.
最大公約数をユークリッドの互除法で求める(M,N,X) :-
  Mod is M mod N,
  最大公約数をユークリッドの互除法で求める(N,Mod,X).

339:デフォルトの名無しさん
09/07/03 19:18:20
>>310
% Prolog
URLリンク(nojiriko.asia)

340:デフォルトの名無しさん
09/07/03 20:37:32
スレリンク(tech板:534番)
# [1] 授業単元:情報処理
# [2] 問題文(含コード&リンク):
# 例えば下図に示すように,通行可能なマス目に'0'が,
# 障害物があって通行不能なマス目に'+'が記されている盤がある.
# 盤の左上をスタート地点,右下をゴール地点として,経路を表示する
# プログラムを作りなさい.
# 盤の例
# 0 0 + 0 +
# + 0 0 0 +
# 0 + + 0 0
# 0 0 + 0 0
# + 0 0 0 0
#
# 例えばこのようなアルゴリズムが考えられる.
#
# 1) 現在位置を表示の後、進行方向に対して,右に進めるなら右に,
# そうでなければ直進,それもだめなら左に,さらにそれもダメなら後退する.
# 2) 1を繰り返してゴールに達したらその旨を表示する.
# ただし,マス目の数分だけ移動してもゴールに達しない場合はその時点で終了する.
#
# 入力形式は、
#
# %> ./a.out 00+0+ +000+ 0++00 00+00 +0000
#
# とする.


341:デフォルトの名無しさん
09/07/03 20:41:34
>>340
% Prolog
URLリンク(nojiriko.asia)

342:デフォルトの名無しさん
09/07/04 03:47:01
スレリンク(tech板:536番)
# [1] 授業単元: C言語演習
# [2] 問題文(含コード&リンク): 乱数を使って配列に値を代入するようにせよ。サイズを変化させて時間を計測してみせよ。
# サイズが十倍になると計算結果は何倍になるか?

343:デフォルトの名無しさん
09/07/04 03:59:15
>>342
% Prolog
t342(X,Y,Z) :-
  findsum(U1,(for(1,N1,100),U1 is random // 100),X),
  findsum(U2,(for(1,N2,1000),U2 is random // 100),Y),
  Z is Y / X.

findsum(_選択項,_項,_合計値) :-
  findall(_選択項,_項,_値ならび),
  sum(_値ならび,_合計値),!.

sum([],0.0) :- !.
sum([A|R],X) :- sum(R,Y),X is A + Y.


344:デフォルトの名無しさん
09/07/04 04:06:59
スレリンク(tech板:538番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)

345:デフォルトの名無しさん
09/07/04 04:24:42
>>344 課題1
% Prolog
space(_文字列,_スペースを挿入された文字列) :-
  atom_chars(_文字列,Chars),
  concat_atom(Chars,' ',_スペースを挿入された文字列).

concat_atom([],_,'') :- !.
concat_atom([A],_,A) :- !.
concat_atom([A|R],S,X) :-
  concat_atom(R,S,Y),
  atom_concat(A,S,B),
  atom_concat(B,Y,X).

346:デフォルトの名無しさん
09/07/04 04:36:04
>>344 課題2
% Prolog

inpro([],[],0) :- !.
inpro([A|R1],[B|R2],X) :-
  inpro(R1,R2,Y),
  X is A * B + Y.


347:343
09/07/04 05:07:58
>>342 間違ってたので直します
% Prolog

t342(X,Y,Z) :-
  findsum(U1,(for(1,N1,100),U1 is random mod 100),X),
  findsum(U2,(for(1,N2,1000),U2 is random mod 100),Y),
  Z is Y / X.

findsum(_選択項,_項,_合計値) :-
  findall(_選択項,_項,_値ならび),
  sum(_値ならび,_合計値),!.

sum([],0.0) :- !.
sum([A|R],X) :- sum(R,Y),X is A + Y.


348:デフォルトの名無しさん
09/07/04 05:16:30
スレリンク(tech板:547番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 下に示すように,非負の整数値を読み込んで,その数を逆順に表示するプログラムを作成せよ。
# なお,負の値を読み込んだ場合は,再入力を促すメッセージを表示すること。
#
# 非負の整数を入力してください: 1963
# 1963 を逆から読むと3691 です.

349:デフォルトの名無しさん
09/07/04 05:32:40
>348
% Prolog

t348 :-
  整数の入力(N),
  number_chars(N,L),
  reverse(L,L1),
  number_chars(N2,L1),
  write_formatted('逆に表示すると %t\n',[N2]).>348

整数の入力(N) :-
  write('非負の整数を入力してください(入力後ピリオドと改行) : '),
  read(N),
  integer(N),
  N >= 0,!.
整数の入力(N) :-
  write('入力されたのは非負の整数ではありませんでした\n'),
  整数の入力(N).

350:デフォルトの名無しさん
09/07/04 05:36:51
スレリンク(tech板:552番)
# [1] 授業単元:情報処理
# [2] 問題文(含コード&リンク):
# (1)
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
# (2)
# URLリンク(kansai2channeler.hp.infoseek.co.jp)

351:デフォルトの名無しさん
09/07/04 05:40:36
>>350 (2)
% Prolog

:- op(450,xfx,分の).

分数の積(A 分の B,C 分の D,X 分の Y) :-
  X is A * C,
  Y is B * D.

352:デフォルトの名無しさん
09/07/04 06:03:29
スレリンク(tech板:559番)
# [1] 授業単元:アルゴリズム
# [2] 問題文(含コード&リンク):url.txtに書き込まれている"http://~をhttp://~に書き換えresult.txtに出力せよ

353:デフォルトの名無しさん
09/07/04 06:13:37
>>352
# python2.x
fin = file('url.txt')
fout = file('result.txt','w')
for line in fin.readlines():
fout.write(line.replace('http://','http://'))
fout.close()
fin.close()


354:デフォルトの名無しさん
09/07/04 06:17:58
>>352
% Prolog

t352 :-
  get_chars('url.txt',Chars),
  t352(Chars,Chars2),
  put_chars('result.txt',Chars).

t352([],[]) :- !.
t352(['h','t','t','p',':','/','/'|R1],['h','t','t','p',':','/','/'|R2]) :-
  t352(R1,R2),!.
t352(['t','t','p',':','/','/'|R1],['h','t','t','p',':','/','/'|R2]) :-
  t352(R1,R2),!.
t352([A|R1],[A|R2]) :-
  t352(R1,R2).

355:354
09/07/04 06:20:33
>>352
% Prolog
>>352
また間違い。訂正,Chars -> Chars2 のところがある。

t352 :-
  get_chars('url.txt',Chars),
  t352(Chars,Chars2),
  put_chars('result.txt',Chars2).


356:354
09/07/04 06:55:43
>>352
% Prolog ' は要らなかった。

t352 :-
  get_chars('url.txt',Chars),
  t352(Chars,Chars2),
  put_chars('result.txt',Chars2).

t352([],[]) :- !.
t352([h,t,t,p,:,/,/|R1],[h,t,t,p,:,/,/|R2]) :-
  t352(R1,R2),!.
t352([t,t,p,:,/,/|R1],[h,t,t,p,:,/,/|R2]) :-
  t352(R1,R2),!.
t352([A|R1],[A|R2]) :-
  t352(R1,R2).

357:デフォルトの名無しさん
09/07/04 08:30:39
スレリンク(tech板:586番)
# [1] 授業単元:C+
# [2] 問題文(含コード&リンク):
# URLリンク(kansai2channeler.hp.infoseek.co.jp)

358:デフォルトの名無しさん
09/07/04 08:33:18
>>357
% Prolog
% 1.
% sum1toN(n)と呼び出すと(nは正の整数)、戻り値として 1 から n までの
% 和が返ってくる関数sum1toNを作成せよ。(関数の部分のみ書くこと。)

sum1toN(1,1) :- !.
sum1toN(N,X) :- M is N - 1,sum1toN(M,Y),X is N + Y.


359:デフォルトの名無しさん
09/07/04 08:35:53
>>357
% Prolog
% 2.
% 円の半径をキーボードから入力し、円周の長さと面積を求めて表示する プログラムを次のように作成した。
% 円周の長さと面積を求める部分は関数 circleを使用している。この関数を書け。
% 円周率は#defineで定義している PAI を使ってよい。

% #include <stdio.h>
% #define PAI 3.14159
% 関数circleのプロトタイプ宣言 (省略)
% int main(void ){
% double r, enshu, menseki;
% printf("半径を入力 >>");
% scanf("%lf", &r);
% circle(r, &enshu, &menseki);
% printf("円周 = %f 面積 = %f\n"
% , enshu, menseki);
% return 0;
% }
%
% │ │
% │    関数 circle │
% │ │

pi(3.14159).

circle(_半径,_円周,_面積) :-
  pi(PI),
  _円周 is 2 * _半径 * PI,
  _面積 is _半径 ^ 2 * PI.

360:デフォルトの名無しさん
09/07/04 08:49:25
>>357
% Prolog
% 3.
% 大きさ8のint型配列aに初期値として
% 1 2 3 4 5 6 7 8
% を設定する。これを
% 0 0 1 2 3 4 5 6
% のように要素を右に2つシフトして a[0],a[1]には 0 を入れ、
% その後配列の各要素を
% a[0]=0
% a[1]=0
% <略>
% a[7]=6
%
% のように表示するプログラムを書け。
t357_3 :-
  右にシフト(2,[1,2,3,4,5,6,7,8],_シフトされたならび),
  表示(1,_シフトされたならび).

表示(_,[]) :- !.
表示(N,[A|R]) :-
  M is N - 1,
  write('a[%t]=%t',[M,C]),
  N2 is N + 1,
  表示(N2,R).

右にシフト(0,X,X) :- !.
右にシフト(N,L,X) :-
  append(Y,[_],[0|L]),
  M is N - 1,
  右にシフト(M,Y,X).

361:デフォルトの名無しさん
09/07/04 08:53:20
>>357
% Prolog
% 4.
% 文字列(最大80文字)をキーボードから読み込み、
% その文字列中で文字コードが最大の文字とその文字コードを
%
%   文字コード最大はY <89>
%
% (Yが最大の文字、89がその文字コードを意味する。)
% のように表示するプログラムを次のように作成した。空欄を埋めてプログラム
% を完成せよ。

最大の文字コード(_文字列,_最大の文字コード) :-
  atom_codes(_文字列,[C|R]),
  最大の文字コード(R,C,_最大の文字コード).

最大の文字コード([],X,X) :- !.
最大の文字コード([C|R],_現在の最大コード,_最大の文字コード) :-
  C > _現在の最大コード,
  最大の文字コード(R,C,_最大の文字コード),!.
最大の文字コード([C|R],_現在の最大コード,_最大の文字コード) :-
  C =< _現在の最大コード,
  最大の文字コード(R,_現在の最大コード,_最大の文字コード),!.


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch