いろんな言語で宿題ス ..
519:デフォルトの名無しさん
09/07/19 13:34:31
スレリンク(tech板:213番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 下に示すように,キーボードから文字列を読み込み,その文字列が
# 回文(前から読んでも後ろから読んでも同じ)かどうかを判定するプログラムを
# 作成せよ.なお,入力する文字列は半角の英数字および記号のみと仮定してよい.
#
# 文字列を入力してください: abcba
# 回文です.
520:デフォルトの名無しさん
09/07/19 13:41:43
>>519
% Prolog
回文読み込み :-
get_char(C),
回文読み込み(C,[],X,X),
write('回文です\n').
回文読み込み('\n',X,X,[]).
回文読み込み(C,Y,X,[C|R]) :-
get_char(C2),
回文読み込み(C2,[C|Y],X,R).
521:デフォルトの名無しさん
09/07/21 03:00:05
連休見なかったらC/C++の宿題片付けますスレが60も進んでしまった トホホ
522:デフォルトの名無しさん
09/07/21 09:30:44
(labels ((str-input nil
(format t "文字列を入力してください: ")
(read-line)))
(do ((l (str-input) (str-input)))
((= (length l) 0))
(if (equal l (reverse l))
(format t "回文です~%")
(format t "回文ではありません~%"))))
こんな感じです
523:デフォルトの名無しさん
09/07/21 12:23:09
スレリンク(tech板:292番)
# [1] 授業単元:プログラミングI
# [2] 問題文(含コード&リンク):
# typedef struct node *Tree;
# typedef struct node{
# int data;
# Tree left_subtree;
# Tree right_subtree;
# }Node;
#
# 2分木の大きさ(節点の個数)を調べて返す関数
# int size(Tree t)を定義せよ
524:デフォルトの名無しさん
09/07/21 12:26:07
スレリンク(tech板:291番)
# [1] 授業単元:コンピュータリテラシー
# [2] 問題文(含コード&リンク):問題文と参考は以下です
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
# ・試験の過程を記録
# 1,番号、得点を入力したあと平均点を計算
# 2,番号順と得点順に並べ替え(ifを使いどちらか選択できるようにする)
# 3,番号、得点、平均との差を出力
# 以上のプログラムを作成
525:デフォルトの名無しさん
09/07/21 12:32:04
>>523
(define (nodenum t)
(cond ((not (pair? t)) 0)
((or (not (pair? (cdr t))) (not (pair? (cddr t)))) "error:not a binary tree")
(else (+ 1 (nodenum (cadr t)) (nodenum (caddr t))))))
(nodenum '(1 leaf leaf)) ;1
(nodenum '(1 'leaf)) ;error
(nodenum '(1 (2 leaf leaf) (3 leaf (4 leaf leaf)))) ;4
526:デフォルトの名無しさん
09/07/21 12:44:29
>>524
(define bt '((1 60) (3 75) (4 100) (2 80)))
(define (average bt) (exact->inexact (/ (fold + 0 (map cadr bt)) (length bt))))
(define (sorter kind bt)
(cond ((eq? kind 'bangou) (sort bt (lambda (x y) (< (car x) (car y)))))
((eq? kind 'tokuten) (sort bt (lambda (x y) (> (cadr x) (cadr y)))))
(else "designate sort kind")))
(define (output bt)
((lambda (ave)
(map (lambda (x)
(print "bangou:" (car x))
(print "tokuten:" (cadr x))
(print "heikin_diff:" (- (cadr x) ave))
(newline)) bt))
(average bt)))
(average bt)
(sorter 'bangou bt)
(sorter 'tokuten bt)
(output bt)
527:デフォルトの名無しさん
09/07/21 12:57:44
スレリンク(tech板:256番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# ファイルの1行目に2行目以降の各行に含まれる文字列の数が記述され,
# 2行目以降はその数の不定長文字列が空白で区切られているような入力
# ファイルを読み込み,各行を以下に示す構造体の単方向連結リストに
# 保存するプログラムを作成せよ.ここでは,attributes が1行分のデータ
# を保持する.
# struct t_list {
# char **attributes;
# struct t_list *next;
# };
# またにはソースファイルには,生成した単方向連結リストの内容を
# 標準出力に出力する関数 print_tlist を含むものとしprint_tlist により各行
# に含まれる文字列を出力するものとする.動作確認には,以下のテキストを用いよ.
# なお,入力ファイル名はコマンドライン
# 引数で指定するものとし,入力ファイルがオープンできなかった場合の処理も
# 含めること.また,プログラム自身を除く引数の数が0個,
# もしくは2個以上の場合は,何もせず適切なメッセージを出力して終了するものとする
# 入力ファイル:URLリンク(www.uploda.tv)
528:デフォルトの名無しさん
09/07/21 14:47:09
>>523
% Prolog
二分木の総節数([],0).
二分木の総節数(_節,_節の大きさ) :-
節(_節,_左枝,_右枝),
二分木の総節数(_左枝,_左枝の大きさ),
二分木の総節数(_右枝,_右枝の大きさ),
_節の大きさ is _左枝の大きさ + _右枝の大きさ + 1.
529:デフォルトの名無しさん
09/07/21 15:36:10
>>524
% Prolog
URLリンク(nojiriko.asia)
530:デフォルトの名無しさん
09/07/21 16:53:46
>>527
% Prolog
URLリンク(nojiriko.asia)
531:デフォルトの名無しさん
09/07/21 16:58:18
>>523
-- Haskell
data BTree a = Node (BTree a) a (BTree a) | Nil
size :: BTree a -> Int
size Nil = 0
size (Node tl _ tr) = 1 + (size tl) + (size tr)
main = print $ size node
where
node = Node (Node (Node Nil 2 Nil) 4 Nil) 0 (Node Nil 2 Nil)
532:デフォルトの名無しさん
09/07/21 17:35:39
>>524
import System.IO (hFlush, stdout)
import qualified System.IO.UTF8 as U
import Control.Monad.Writer
import Data.Function (on)
import Data.List (sortBy)
main = do
U.putStrLn "終了の際は0を二回押す"
grades <- execWriterT t524
U.putStr "(1)学籍番号順 (2)成績順: " >> hFlush stdout
s <- getLine
let cmp = case (read s) of
1 -> compare `on` fst
2 -> compare `on` snd
let av = average $ map snd grades
mapM_ (printer av) $ sortBy cmp grades
where
printer av (g,s) = U.putStrLn $ "学籍番号" ++ (show g) ++ " 成績" ++ (show s) ++ " 平均との差" ++ (show ((fromIntegral s) - av))
t524 :: WriterT [(Int,Int)] IO ()
t524 = do
liftIO $ U.putStr "学籍番号: " >> hFlush stdout
gakuseki <- liftIO getLine
liftIO $ U.putStr "成績: " >> hFlush stdout
seiseki <- liftIO getLine
let g = read gakuseki
let s = read seiseki
unless (g == 0 && s == 0) $ tell [(g,s)] >> t524
average :: [Int] -> Double
average = uncurry ((/) `on` fromIntegral) . foldl (\(s,l) x -> (s+x, l+1)) (0,0)
533:デフォルトの名無しさん
09/07/21 17:57:16
>>527
main = do
_ <- getLine -- just ignore
conn <- getContents
print $ map words $ lines conn
534:デフォルトの名無しさん
09/07/21 19:25:20
全くの初心者で、全然わからないんですがよろしくお願いします。アセンブラらしいです。
[課題] キーボードから10進数表示で2桁以下の正の整数を二つ受け取り,これらの積を求めGR1に保存するプログラムを作成しなさい。
ただし,以下の仕様を満たすこと。
掛け算は(上の例の方法ではなく)以下の(参考)の方法で行い,さらに副プログラム内で行うこと
キーボードから受け取った文字列を数値に変換する部分も副プログラムを用いて作成すること
キーボードからは10進数表示で2桁以下の正の整数が必ず入力されると仮定してよい(それ以外の文字列が入力された場合の対応を考えなくてよい)。
(参考) 二つの数の掛け算は,それぞれの2進数表現を考え,加算とシフトを用いることによって実現できる。たとえば,13x3 を計算するとき,13,3の2進数表現 1101,11 に対して通常の掛け算を筆算で行うように
と計算できる。すなわち,この例では
掛ける数の最下位(一番右)のビットが1なので,1101 を(0 ビットシフトして)(0に)加える。
掛ける数の右から2番目のビットが1なので,1101 を 1 ビットシフトして 11010 として1の結果に加える。
という手順により,二つの数の積を計算することができる。
掛ける数を1ビットずつ右にシフトしたとき,最下位ビットが1であればオーバーフローが発生する。
オーバーフローの発生はJOV命令でチェックできる(7/7の演習内容参照)ので,掛ける数の2進数表現においてどのビットが1であるかは直ちにわかる。
また右シフトを繰り返して0になるとZFフラグが1になるので,右シフトを停止するためにはJZE命令を使用すれば良い。
535:デフォルトの名無しさん
09/07/22 07:32:01
スレリンク(tech板:303番)
# [1] 授業単元:
# インタラクティブッコミュニケーション
# [2] 問題文(含コード&リンク):
# 外部変数を使用せずに、main()から関数を呼び出し、円をドルとユーロに換算し、
# main()内のprintf()で結果を出力するプログラムを作成せよ。
# 但し、1ドル = 118円, 1ユーロ = 160円とする。また、プログラムは
# 負の値が入力されるまで繰り返されるものとする。
#
# URLリンク(www.ncc-1701.jp)
# の一番下の演習。
# 最終的にはこの形に
# URLリンク(www.ncc-1701.jp)
536:デフォルトの名無しさん
09/07/22 07:59:46
>>535
% Prolog 題意とは違いますが為替レートはリアルタイムに取得しています。
URLリンク(nojiriko.asia)
537:デフォルトの名無しさん
09/07/22 11:29:25
スレリンク(tech板:300番)
# [1] 授業単元:プログラミング基礎
# [2] 繰り返しをwhileもしくはdo\uff5ewhile文を使って作成しなさい。
#
# 任意の数字を入力し、その数字分まで1つずつ加算して表示する。
# 入力した数字までいったら逆に1になるまで表示する。
#
# 例
# 8
#
# *
# **
# ***
# ****
# *****
# ******
# *******
# ********
# *******
# ******
# *****
# ****
# ***
# **
# *
538:デフォルトの名無しさん
09/07/22 11:50:49
>>537
% Prolog ちょっと捻ってみた(コウイウコトヲシテハイケナイ)。
t537(N) :- M is N - 1,length(Z,M),t537([*],Z).
t537(L,Z) :- append(L,_,Z),t537_w(L),t537([*|L],Z).
t537(L,Z) :- t537_w(L),fail.
t537([*],_) :- !.
t537_w(L) :- concat_atom(L,S),write_formatted('%t\n',[S]).
539:デフォルトの名無しさん
09/07/22 11:57:44
>>537 一部変更。
% Prolog
t537(N) :- length(L,N),L=[_|Z],t537([*],Z).
t537(L,Z) :- append(L,_,Z),t537_w(L),t537([*|L],Z).
t537(L,Z) :- t537_w(L),fail.
t537([*],_) :- !.
t537_w(L) :- concat_atom(L,S),write_formatted('%t\n',[S]).
540:デフォルトの名無しさん
09/07/22 12:41:10
スレリンク(tech板:297番)
# [1] 授業単元: 数値解析プログラミング
# [2] 問題文(含コード&リンク): ∫\u20801/1+xx の積分を
# 方形公式、台形公式、シンプソン公式を用いて数値計算するプログラムを作成せよ
541:デフォルトの名無しさん
09/07/22 14:30:31
>>540 (1)
% Prolog
f(X,Y) :- Y is 1 / (1 + x ^ 2).
シンプソンの公式(A,B,M,X) :-
D is (B - A) / (2 * M),
f(A,S),
N is 2 * M - 1,
シンプソン公式の二(1,N,A,D,S,S2),
f(B,Z),
X is (S2 + Z) * D / 3.
シンプソンの公式の二(M,N,_,_,X,X) :- M > N,!.
シンプソンの公式の二(M,N,A,D,Y,X) :-
U is A + M * D,
Mod is M mod 2,
シンプソンの公式の三(Mod,U,Y,Z),
M2 is M + 1,
シンプソンの公式の二(M2,N,A,D,Z,X).
シンプソンの公式の三(0,X,S,S2) :- f(X,Y),S2 is S + 2 * Y.
シンプソンの公式の三(1,X,S,S2) :- f(X,Y),S2 is S + 4 * Y.
542:541
09/07/22 14:42:49
>>541 訂正 X が x になっていた。
f(X,Y) :- Y is 1 / (1 + X ^ 2).
543:デフォルトの名無しさん
09/07/23 07:01:58
スレリンク(tech板:431番)
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):下記
# [3] 環境
# [3.1] OS:WindowsVista SP1
# [3.2] Visual stdio2008
# [3.3] 言語:C
# [4] 期限:2009年7月23日午前7時まで
# [5] その他の制限:できるだけ簡単に
#
# 倍精度浮動小数点型変数で数値を入力し,
# 小数点以下を切り捨て・切り上げ・四捨五入するプログラムを作成せよ.
# ただし, 条件式は使用せず, 型変換を必ず使用すること.
544:デフォルトの名無しさん
09/07/23 08:23:13
>>537
(define (f x)
(dotimes (i x) (dotimes (j (+ i 1)) (display "*"))(newline))
(dotimes (i x) (dotimes (j (- x i 1)) (display "*"))(newline)))
(port-for-each f read)
545:デフォルトの名無しさん
09/07/23 09:08:46
スレリンク(tech板:448番)
# [1] 授業単元:数値情報解析
# [2] 問題文:ニュートン法により代数方程式を解くプログラムを作りなさい。
# 適当な初期値を自分で設定し、3つの真解すべてを求めなさい。
# ただし、結果画面には(1)収束解(2)初期値(3)反復回数が表示されている
こと。
# このとき、1回の実行で3つの真解すべてを求める必要はない。
# 初期値を与え直しながら実行した結果画面が3枚示されていれば
# よいものとする。
# ・ 解くべき代数方程式 : x^3 - 6x^2 + 7x +2 = 0
# ・収束条件 : ε < 10^-10
# ・微分は自分で計算した結果(3x^2 - 12x + 7 = 0)をソースファイルに
# 直接入力してよいものとする。
546:デフォルトの名無しさん
09/07/23 12:39:50
>>545
(defun f (x)
(let* ((xx (* x x)) (xxx (* xx x)))
(+ xxx (* -6l0 xx) (* 7l0 x) 2l0)))
(defun d (x)
(let ((xx (* x x)))
(+ (* 3l0 xx) (* -12l0 x) 7l0)))
(defconstant err 1.0l-10)
(defun solv (x0)
(do ((n 0) (x x0) xtmp (endf nil))
(endf (format t "x = ~A x0=~A n=~A ~%" x x0 n))
(setf xtmp (- x (/ (f x) (d x))))
(if (< (abs (- x xtmp)) err)
(setf endf t))
(setf x xtmp
n (1+ n))))
(defun input (s)
(format t s)
(read))
(do ((x (input "初期値 x0? ") (input "初期値 x0? ")))
((not (numberp x)))
(solv x))
こんな感じ?
547:デフォルトの名無しさん
09/07/23 16:00:08
>>545
% Prolog
URLリンク(nojiriko.asia)
548:デフォルトの名無しさん
09/07/23 17:06:20
スレリンク(tech板:450番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 下に示す2 行3 列の行列a, b の差を求めて表示するプログラムを作成せよ.
#
# a =
# (
# 6 3 4
# 5 1 2
# )
# b =
# (
# 1 2 3
# 4 5 6
# )
549:デフォルトの名無しさん
09/07/23 17:10:15
>>548
% Prolog
a([[6,3,4],[5,1,2]]).
b([[1,2,3],[4,5,6]]).
t548 :-
a(A),b(B),行列の差(A,B,C),
write_formatted('%t\n',[C]).
行列の差([],[],[]) :- ! .
行列の差([A|R1],[B|R2],[C|R3]) :- 行列の差の一(A,B,C),行列の差(R1,R2,R3),!.
行列の差の一([],[],[]) :- !.
行列の差の一([A|R1],[B|R2],[C|R3]) :- C is A - B,行列の差の一(R1,R2,R3),!.
550:デフォルトの名無しさん
09/07/23 18:38:58
なんかこのスレ
コードばっかで良スレっぽいな
551:デフォルトの名無しさん
09/07/23 19:47:08
>>537
main = do
n <- getLine >>= return . read
mapM_ (putStrLn . flip replicate '*') [1..n]
mapM_ (putStrLn . flip replicate '*') $ reverse [1..n-1]
552:デフォルトの名無しさん
09/07/23 20:11:31
>>548
msub :: (Num a) => [[a]] -> [[a]] -> [[a]]
msub = zipWith (zipWith (-))
main = do
mapM_ print $ a `msub` b
where
a = [[6, 3, 4], [5, 1, 2]]
b = [[1, 2, 3], [4, 5, 6]]
553:デフォルトの名無しさん
09/07/23 21:22:33
>>543
% Prolog 条件式(Prologの場合,節の選択)なしで切り上げ、思いつきません!
切り下げ(_浮動小数点数,_切り下げられた整数) :-
_切り下げられた整数 is truncate(float_integer_part(_浮動少数点数)).
四捨五入(_浮動小数点数,_四捨五入された整数) :-
_四捨五入された整数 is truncate(0.5 + float_integer_part(_浮動少数点数)).
554:デフォルトの名無しさん
09/07/23 22:04:05
スレリンク(tech板:457番)
# [1] 授業単元 C++
#
# [2] 問題文(含コード&リンク)
# テキストファイルの中のタブコードをそれぞれ、空白N個に置き換えて、
# 新たなファイルに書き出しなさい。ただし、N≧0とする。
# コマンドパラメーター:入力ファイル名、出力ファイル名、N
#
# <解答例>
# Hello( )Bye←入力ファイル
# N=3の場合
# Hello( )Bye←出力ファイル
555:デフォルトの名無しさん
09/07/23 22:26:34
>>554
% Prolog (1/2)
t554(_入力ファイル,_出力ファイル,_空白文字数) :-
length(L,_空白文字数),
all(L,' '),
get_chars(_入力ファイル,Chars),
replace_chars(Chars,['\t'],L,Chars2),
put_chars(_出力ファイル,Chars2).
replace_chars([],_,_,[]) :- !.
replace_chars(L1,L2,L3,L4) :-
append(L2,R1,L1),
replace_chars(R1,L2,L3,L5),
append(L3,L5,L4),!.
replace_chars([A|R1],L2,L3,[A|R4]) :-
replace_chars(R1,L2,L3,R4).
556:デフォルトの名無しさん
09/07/23 22:28:55
>>554
% Prolog (2/2) ユーティリティ
get_chars(File,L) :-
open(File,read,Input),
get_char(Input,X),
get_chars(Input,X,L),
close(Input),!.
get_chars(Input,end_of_file,[]) :- !.
get_chars(Input,X,[X|R]) :-
get_char(Input,Y),
get_chars(Input,Y,R) .
put_chars(F,L) :-
open(F,write,Output),
stream_put_chars(Output,L),
close(Output),!.
stream_put_chars(_,[]) :- !.
stream_put_chars(Stream,[Char|R]) :-
put_char(Stream,Char),
stream_put_chars(Stream,R),!.
all([],_).
all([V|R],V) :- all(R,V).
557:デフォルトの名無しさん
09/07/23 22:30:45
>>554 書き直し
% Prolog (2/2) ユーティリティ
get_chars(File,L) :-
open(File,read,Input),
get_char(Input,X),
get_chars(Input,X,L),
close(Input),!.
get_chars(Input,end_of_file,[]) :- !.
get_chars(Input,X,[X|R]) :-
get_char(Input,Y),
get_chars(Input,Y,R) .
put_chars(F,L) :-
open(F,write,Output),
stream_put_chars(Output,L),
close(Output),!.
stream_put_chars(_,[]) :- !.
stream_put_chars(Stream,[Char|R]) :-
put_char(Stream,Char),
stream_put_chars(Stream,R),!.
all([],_).
all([V|R],V) :- all(R,V).
558:デフォルトの名無しさん
09/07/23 22:38:53
>>543
Haskell では RealFrac クラスに floor, ceil, round が定義されている
main = do
v <- getLine >>= return . read
mapM_ (print . ($ v)) [floor, ceiling, round]
559:デフォルトの名無しさん
09/07/23 23:01:29
>>554
import System.Environment (getArgs)
import System.IO
import Control.Exception (bracket)
main = do
[infile, outfile, n] <- getArgs
h <- openFile infile ReadMode
conn <- hGetContents h
let s = t554 (read n) conn
bracket (openFile outfile WriteMode) hClose $ flip hPutStr s
hClose h
t554 :: Int -> String -> String
t554 _ [] = []
t554 n ('\t':xs) = replicate n ' ' ++ t554 n xs
t554 n (x:xs) = x : t554 n xs
560:デフォルトの名無しさん
09/07/24 08:19:20
スレリンク(tech板:910番)
# コンピュータと人間か対戦する形で実行する3目並べのプログラムを作成せよ
#
# *先攻、後攻はゲーム毎に乱数で決定する
# *人間が手を打った場合、コマを置ける場所かどうかのチェックを行うこと
# *勝ち負けの判定を行うこと
# *コンピュータ側の手はランダムでも良いが、可能な範囲で工夫してみよ
561:デフォルトの名無しさん
09/07/24 16:59:03
スレリンク(tech板:473番)
# [1] 授業単元:プログラミング論
# [2] 問題文:入力ストリームから読み込んだデータ文字列を、
# データベースに格納する前にキューに一時的に格納するプログラムを
# 作成する。このとき、データをまとめたデータ文字列を一つずつ、キューへ
# エンキューしたり、デキューしたりする過程が分かるプログラムを作成する。
# なお、キューを実現するライブラリは、キューのための別のヘッダにまとめる。
# [そのほか]
# ・入力ストリームから読み込んだデータ文字列を、キューにエンキューしたり、
# デキューしたりするたびにデータベースに格納された全データを表示する。
# ・構造体オブジェクトは動的な記憶域に生成する。
# ・生徒の名前、試験の点数を構造体オブジェクトに格納することとする。
# ・関数の処理にコメントをつけて、キューをどのように実現しているか、
# そのプログラムの処理内容が分かるようにする。
# [このプログラムの流れ]
# (1)ファイルやキーボードなどの入力ストリームから
# データをデータ文字列として読み込む
# (2)このデータ文字列をキューに一時的に蓄える
# (3)キューからデータ文字列を取り出す
# (4)このデータ文字列からそれぞれデータを取り出して
# 文字列や数値データに変換する
# (5)変換したデータをデータベース(構造体の配列など)に格納してまとめて管理する
# (6)このデータベースからデータを参照し、ディスプレイに出力する
562:デフォルトの名無しさん
09/07/24 17:50:28
>>561
% Prolog
% 仕様通りだと面白くないので、要素を読み込む毎にキューに追加、
% 改行が来るとキューからすべて読み出すように変更した。
URLリンク(nojiriko.asia)
563:デフォルトの名無しさん
09/07/25 04:17:39
>>562
すみません。二ヶ所、述語名の付け違いがありました。
書き直しました。
564:デフォルトの名無しさん
09/07/26 11:25:17
スレリンク(tech板:535番)
# [1] C++
# [2] 問題文(含コード&リンク):
# (1) 演算子+,-,*,/と整数と浮動小数点数からなる計算式の文字列から
# 計算木を作成せよ。計算木は次のようなc_tree構造体を使うとする。
#
# struct c_tree
# {
# int type;
# union { int n_value; double d_value; };
# c_tree *left, *right;
# };
# typeは、'+', '-', '*', '/', 'n', 'd'のいずれか。
#
# (2) 優先順位に注意してc_tree構造体からなる計算木から
# 計算式の文字列を作成せよ。
565:デフォルトの名無しさん
09/07/26 13:48:46
>>564
ちょっと長くなったので codepad で
Parsec はすばらしい
Haskell
URLリンク(codepad.org)
566:デフォルトの名無しさん
09/07/26 14:23:08
(quote exp)
567:デフォルトの名無しさん
09/07/27 04:34:19
# [1] 授業単元: プログラミング
# [2]問題文:以下の2つの構造体を用い,sample_data2.txt を単方向連結リストに保存す
るプログラム extra8 を作成せよ.item_list 中の item は各行中の数値を保持し,t_li
st 中の itemset は1行分のデータを保持するものとする.
# struct item_list {
# int item;
# struct item_list *next;
# };
# struct t_list {
# struct item_list itemset;
# struct t_list *next
# };
# ソースファイルの名前は extra8.c とする.また,extra8.c には,
# 生成した単方向連結リストの内容を標準出力に出力する関数 print_tlist を
# 含むものとし,以下の実行例のように print_tlist により各行の内容を出力
# するものとする.
# なお,入力ファイル名はコマンドライン引数で指定するものとし,入力ファイルが
# オープンできなかった場合の処理も含めること.また,プログラム自身を除く
# 引数の数が0個,もしくは2個以上の場合は,何もせず適切なメッセージを出力して
# 終了するものとする.
# (実行例1)
# > .\extra8 sample_data2.txt
# Itemset: 1,3,9,13,23,25,34,36
# Itemset: 2,3,9,14,23,26,34,36,39,40,52,55,59
568:デフォルトの名無しさん
09/07/27 07:42:02
>>567
% Prolog
extra8 :-
user_parameters([File]),
get_lines(File,Lines),
findall(Item_list,(member(Line,Lines),split(Line,[','],Item_list)),T_list),
assertz(t_list(T_list)).
print_tlist :-
t_list(T_list),
member(Item_list,T_list),
print_tlist_format(Item_list,Format),
write_formatted(Format,Item_list),
fail.
print_tlist.
print_tlist_format(Item_list,Format) :-
length(Item_list,Len),
length(L,Len),
all(L,'%t'),
concat_atom(L,',',S),
concat_atom(['Items : ,S,'\n'],Format),!.
569:デフォルトの名無しさん
09/07/27 20:03:33
スレリンク(tech板:574番)
# [1] 授業単元:プログラミング序論演習
# [2] 問題文(含コード&リンク): CUI上で動くメーラーを作れ
570:デフォルトの名無しさん
09/07/27 20:08:29
スレリンク(tech板:559番)
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
# 電流I[A]: 0.3 0.4 0.5 0.6 0.7 0.8
# 電圧V[V]: 11.6 12.3 12.8 13.4 23.7 14.8
#
# この電流Iと電圧Vとの関係を最小二乗法によって、
# 以下に示す1次関数で近似したい
#
# V=a0+a1I
#
# この時の係数a0とa1 また相関係数を求めなさい。
571:デフォルトの名無しさん
09/07/27 20:12:00
スレリンク(tech板:53番)
# 【 課題 】
# 以下のURLから正規表現を用いてキーワードの部分のみ抽出する
# プログラムを作成せよ。
#
# URLリンク(www.google.co.jp)キーワード&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
572:デフォルトの名無しさん
09/07/27 22:08:42
スレリンク(tech板:580番)
# [1] 授業単元: 論理学
# [2] 問題文: 整数からなる配列を受け取り、その最大値を除いた配列を
# 出力するメソッドを定義せよ。
# ただし、配列の長さが3未満のときはnilを出力する。
573:デフォルトの名無しさん
09/07/27 22:13:29
>>572
% Prolog
t572(L,X) :- length(L,Len),Len < 3,!,write('nil\n').
t572(L,X) :-
max(L,Max),
ならびから削除(Max,L,X).
ならびから削除(_,[],[]) :- !.
ならびから削除(_削除する要素,[_削除する要素|_残り対象ならび],_削除されたならび) :-
ならびから削除(_削除する要素,_残り対象ならび,_削除されたならび),!.
ならびから削除(_削除する要素,[_要素|_残り対象ならび],[_要素|_残り削除ならび]) :-
ならびから削除(_削除する要素,_残り対象ならび,_残り削除ならび),!.
574:デフォルトの名無しさん
09/07/27 23:59:08
>>571
-- Haskell
import Text.Regex
import qualified System.IO.UTF8 as U
main = let Just [_,keyword] = matchRegex reg str in U.putStrLn keyword
where
reg = mkRegex "(\\?|&)q=([^&]+)"
str = "URLリンク(www.google.co.jp)キーワード&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a"
575:デフォルトの名無しさん
09/07/28 00:32:46
>>572
nil は [] で代用した
-- Haskell
import Data.List (delete)
t572 :: (Ord a) => [a] -> [a]
t572 xs | length xs < 3 = []
| otherwise = delete (maximum xs) xs
main = print $ t572 [1,3,2]
576:デフォルトの名無しさん
09/07/28 01:03:39
>>570
-- Haskell
leastSquares :: (Fractional a) => [a] -> [a] -> (a,a)
leastSquares xs ys = ((n*sxy-sx*sy)/(n*sxx-sx*sx), (sxx*sy-sxy*sx)/(n*sxx-sx*sx))
where
n = fromIntegral $ length xs
sx = sum xs
sy = sum ys
sxy = sum $ zipWith (*) xs ys
sxx = sum $ map (^2) xs
pearson :: (Floating a) => [a] -> [a] -> a
pearson xs ys = a / (sqrt b) * (sqrt c)
where
mx = (sum xs) / (fromIntegral (length xs))
my = (sum ys) / (fromIntegral (length ys))
a = sum $ zipWith (\x y -> (x-mx)*(y-my)) xs ys
b = sum $ map (\x -> (x-mx)^2) xs
c = sum $ map (\y -> (y-my)^2) ys
main = do
let (a,b) = leastSquares is vs
putStrLn $ "a0=" ++ show b ++ ", a1=" ++ show a
print $ pearson is vs
where
is = [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]
vs = [11.6, 12.3, 12.8, 13.4, 13.7, 14.8]
577:デフォルトの名無しさん
09/07/28 04:54:25
スレリンク(tech板:604番)
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
# 配列を引数とする再帰呼び出しによるマージソート
#
# 入出力配列を引数とする再帰的手続きを作成し、マージソートを実現せよ。
# ただし、各入力要素X[i]は整数値をとるものとする。関数として、
# 長さnの配列Xをマージソートによって小さい順に並べ替えた配列Yを求める
# msort(int X[],int n,int Y[]),すでに並べ替えられている長さn1の配列Y1と長さn2の
# 配列Y2を併合した配列Yを求めるmerge(int Y1[],int n1,int Y2[],int n2,intY[]),
# 長さnの配列Xの各要素のアドレス、ならびに内容を表示するshow_addr(int X[],int n)を用意する。
578:デフォルトの名無しさん
09/07/28 05:04:17
>>577
% Prolog
debug(off).
msort([],[]).
msort([X],[X]).
msort(_ならび,_sortされたならび) :-
ならびを分割(_ならび,_ならび1,_ならび2),show_list(分割,[_ならび,_ならび1,_ならび2]),
msort(_ならび1,_整列されたならび1),show_list(msort,[ならび1,_整列されたならび1]),
msort(_ならび2,_整列されたならび2),show_list(msort,[ならび2,_整列されたならび2]),
merge(_整列されたならび1,_整列されたならび2,_整列されたならび),show_list(merge,[_整列されたならび1,_整列されたならび2,_整列されたならび]).
ならびを分割([],[],[]).
ならびを分割([X],[X],[]).
ならびを分割([A,B|R1],[A|R2],[B|R3]) :- ならびを分割(R1,R2,R3).
merge([],X,X) :- !.
merge(X,[],X) :- !.
merge([A|R1],[B|R2],[A|R3]) :- A @< B,merge(R1,[B|R2],R3).
merge([A|R1],[B|R2],[B|R3]) :- A @>= B,merge([A|R1],R2,R3).
show_list(_,_) :- debug(off).
show_list(_述語,_ならびのならび) :- debug(on),write_formatted('%t: %t\n',[_述語,_ならびのならび]).
579:デフォルトの名無しさん
09/07/28 06:15:55
>>571
% Prolog は正規表現をサポートしないのでここでは汎用検索述語sub_atom/10を
% 使ってみる。
% sub_atom/10の定義はURLリンク(prolog.asia) 参照。
t571(URL,_キーワード) :-
sub_atom(URL,_,_,_,_,'?q=',G,_,_,_),
sub_atom(G,_,_,_,_キーワード,'&',_,_,_,_),!.
580:579
09/07/28 06:32:16
>>571 >>579 sub_atom/10のリンクを間違えました。再掲。
% Prolog は正規表現をサポートしないのでここでは汎用検索述語sub_atom/10を
% 使ってみる。
% sub_atom/10の定義はURLリンク(nojiriko.asia) 参照。
t571(URL,_キーワード) :-
sub_atom(URL,_,_,_,_,'?q=',G,_,_,_),
sub_atom(G,_,_,_,_キーワード,'&',_,_,_,_),!.
581:デフォルトの名無しさん
09/07/28 13:18:26
>>577
-- Haskell
import Data.Function (on)
merge :: (Ord a) => [a] -> [a] -> [a]
merge xs [] = xs
merge [] ys = ys
merge a@(x:xs) b@(y:ys) | x < y = x : merge xs b
| otherwise = y : merge a ys
msort :: (Ord a) => [a] -> [a]
msort [] = []
msort [x] = [x]
msort xs = uncurry (merge `on` msort) $ splitAt ((length xs) `div` 2) xs
main = print $ msort [4,1,2,7,5]
582:デフォルトの名無しさん
09/07/29 01:53:48
>>570
相関係数ってどう定義されてんの?
583:デフォルトの名無しさん
09/07/30 04:41:04
スレリンク(tech板:659番)
# [1] C言語
# [2] 入力された英字文字列(a~z,A-Z)に、どの文字がいくつ入っているかを
# 調べるプログラムcount_char.cを作成せよ。
#
# 実行例
# String: cbbbAcAccZ
# A: **
# Z: *
# b: ***
# c: ****
# %
584:デフォルトの名無しさん
09/07/30 04:43:43
スレリンク(tech板:660番)
# [1] C言語
# [2] 2つのファイルを比較し,内容が異なっている最初の行の行番号と内容を
# 標準出力に表示するプログラムを作成せよ。
# ファイル名はコマンドライン入力により受け取ることとする。
# [3] 環境
# [3.1] OS:Windows
# [3.2] コンパイラ:gcc 3.4
# [3.3] 言語:C
# [4] 期限:2009年7月31(金)
# [5] その他の制限:ポインタ履修済みです
585:デフォルトの名無しさん
09/07/30 05:00:03
>>584
% Prolog
t584 :-
user_parameters([File1,File2]),
get_lines(File2,L1),
get_lines(File2,L2),
append(L,[A|_],L1),
append(L,[B|_],L2),
\+(A=B),
length(L,Len),
_行番号 is Len + 1,
write_formatted('行番号=%t %t=%t %t=%t\n',[_行番号,File1,A,File2,B]).
586:デフォルトの名無しさん
09/07/30 06:08:46
>>583
% Prolog
t583(_文字列) :-
atom_chars(_文字列,Chars),
t583_1(Chars,[],QL),
member([U,Q-[]],QL),
concat_atom(Q,S),
write_formatted('%t: %t\n',[U,S]),
fail.
t583(_).
t583_1([],X,X).
t583_1([A|R],QL,X) :-
t583_2(A,QL,QL2),
t583_1(R,QL2,X).
t583_2(A,[],[[A,QA]]) :-
新しいキューを作る(Q),
キューに要素を追加する('*',Q,QA),!.
t583_2(A,[[A,QA]|R],[[A,QB],R]) :-
キューに要素を追加する('*',QA,QB),!.
t583_2(A,[U|R1],[U|R2]) :-
t583_2(A,R1,R2).
新しいキューを作る(X-X).
キューに要素を追加する(_要素,X-[_要素|Y],X-Y).
587:デフォルトの名無しさん
09/07/30 11:18:28
>>583
-- Haskell
import Data.Char (isAlpha)
import Data.Map (Map, fromListWith, toList)
countChar :: String -> Map Char Int
countChar = fromListWith (+) . flip zip (repeat 1) . filter isAlpha
main = getContents >>= mapM_ putStrLn . prettify . countChar
where
prettify :: Map Char Int -> [String]
prettify = map (\(k,v) -> k : ": " ++ (replicate v '*')) . toList
588:585
09/07/30 12:54:13
>>584 >>585 訂正
get_lines(File2,L1),
get_lines(File2,L2),
とありますが、上の行は get_lines(File1,L1), です。
589:デフォルトの名無しさん
09/07/31 07:42:41
スレリンク(tech板:688番)
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):本文が長すぎて書き込めないので下に
# 分けて書き込みます
スレリンク(tech板:689番)
スレリンク(tech板:690番)
スレリンク(tech板:691番)
590:デフォルトの名無しさん
09/07/31 07:46:16
スレリンク(tech板:704番)
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
# リストを用いた成績処理
# リストを用いて個人データを格納する表を作成
# 処理番号を入力して処理の切り替えを行う
# 1.成績一覧表示, 2.個人成績表示,
# 3.個人平均点表示,4.科目平均点表示,
# 0.終了
# リストに新たにデータを追加する時は学生番号順に並ぶように追加する.
# リスト構成する要素(セル)はmalloc関数でヒープ領域から確保するものとする.
#
# 入力する成績データ(この順番で入れる)
# 学番名前英語数学化学物理
# 106 tada 65 80 90 100
# 101 kouda 50 85 70 65
# 103 hanako 70 75 65 80
# 104 akane 60 95 80 75
# 102 tarou 90 80 85 65
# 105 nara 80 70 50 95
591:デフォルトの名無しさん
09/07/31 08:29:12
スレリンク(tech板:76番)
# 【 課題 】タートルグラフィックスを描写するプログラムを作成する。
# URLリンク(rg550.hp.infoseek.co.jp)
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 期限 】8/2
# 【 Ver 】 java version 1.6.0_14
# 【 補足 】どう手を付けたらいいのか分からない状態です…
# 実装するのはright left forwardの3つだけでいいみたいです。
# よろしくお願いします。
URLリンク(nojiriko.asia)
592:デフォルトの名無しさん
09/07/31 17:29:53
>>589
% Prolog (第1ステップ)
URLリンク(nojiriko.asia)
593:デフォルトの名無しさん
09/07/31 21:02:07
>>590
% Prolog
URLリンク(nojiriko.asia)
594:デフォルトの名無しさん
09/07/31 22:59:25
スレリンク(tech板:364番)
# 質問です。
#
# 入退室の時間を自分で打ち込んで、それをデータとして貯めるというシステムを作り
たいんですが、こういうシステムを
# 作る場合はPHPとMySQLで作れるんでしょうか。よろしくお願いします。
#
595:デフォルトの名無しさん
09/07/31 23:39:15
>>594
% Prolog (1/2)
入退室 :-
入退室管理ディレクトリ(Dir),
concat_atom(['ls -N ',Dir,'listing.*.pro'],S),
shs(S,L),
max(L,File),
reconsult(File).
入室(_氏名) :-
A is time,
localtime(A,B,_月,_日,_,_,_時,_分,_秒),
assertz(入退室(入室,_氏名,_年,_月,_日,_時,_分,_秒)),
入退室保存ファイル(_入退室保存ファイル),
tell(_入退室保存ファイル),
listing(入退室),
told,!.
退室(_氏名) :-
A is time,
localtime(A,B,_月,_日,_,_,_時,_分,_秒),
assertz(入退室(退室,_氏名,_年,_月,_日,_時,_分,_秒)),
入退室保存ファイル(_入退室保存ファイル),
tell(_入退室保存ファイル),
listing(入退室),
told,!.
596:デフォルトの名無しさん
09/07/31 23:42:55
>>594
% Prolog (2/2)
% システム運用の最初に/var/nyutaishitsu/listing.100000.proを生成して置きます
入退室管理ディレクトリ('/var/nyutsishitsu/').
入退室保存ファイル(F) :-
入退室管理ディレクトリ(Dir),
concat_atom(['ls -N ',Dir,'listing.*.pro'],S),
shs(S,L),
max(L,File),
sub_atom(File,_,6,4,A),
atom_to_term(A,N,_),
N2 is N + 1,
concat_atom(['/var/nyutaishitsu/listing.',N2,'.pro'],F),!.
597:デフォルトの名無しさん
09/07/31 23:58:20
>>594 >>595 >>596
不適切なところが少々ありました。訂正はこれらで。
URLリンク(nojiriko.asia)
598:デフォルトの名無しさん
09/08/02 09:56:28
スレリンク(tech板:743番)
# [1] 授業単元:プログラミング基礎
# [2] 問題文(含コード&リンク):
# 2つの整数をキーボードから入力し、それらの最大公約数を表示する
# プログラムを作成せよ。
# 最大公約数と、2つの数字を割り切る最大の整数のことである。
# 例えば12と18の最大公約数は6,24と48の最大公約数は24である。
599:デフォルトの名無しさん
09/08/02 10:01:52
>>598
% Prolog
t598 :-
write('最大公約数を求めます。一行にひとつ整数を入力してください : '),
get_line(Line1),atom_to_terms(Line1,N1,_),
get_line(Line2),atom_to_terms(Line2,N2,_),
appendを使って最大公約数を求める(N1,N2,X),
write_formatted('%tと%tの最大公約数は%tです\n',[N1,N2,X]).
appendを使って最大公約数を求める(N1,N2,X) :-
length(L1,N1),
length(L2,N2),
最大公約数(L1,L2,[_],[_],LX),
length(LX,X).
appendを使って最大公約数を求める(L1,L2,L,X,X) :-
not((append(L,_,L1),append(L,_,L2))),!.
appendを使って最大公約数を求める(L1,L2,L,_,X) :-
割り切れる(L1,L),
割り切れる(L2,L),
appendを使って最大公約数を求める(L1,L2,[_|L],L,X).
appendを使って最大公約数を求める(L1,L2,L,Y,X) :-
appendを使って最大公約数を求める(L1,L2,[_|L],Y,X).
割り切れる([],_) :- !.
割り切れる(L,DL) :-
append(DL,L3,L),
割り切れる(L3,DL).
600:デフォルトの名無しさん
09/08/02 12:05:02
>>598
-- Haskell では Prelude に gcd が含まれている
import Control.Monad (replicateM)
main = replicateM 2 readLn >>= print . foldl1 gcd
601:599
09/08/02 15:07:41
>>598 >>599
間違っていました。
途中、'最大公約数'/5 という述語が副目標として登場しますが、
これは、'appendを使って最大公約数を求める'/5 の間違えです。
URLリンク(nojiriko.asia) の方を見て下さい。
602:デフォルトの名無しさん
09/08/02 18:47:48
スレリンク(tech板:918番)
# 所謂覆面算で
# 英字一文字が一桁の数字(0-9)で表されるとき
# one
# + nine
# + twenty
# + fifty
# = eighty
# となる組み合わせを検索してください
# 各行の先頭の文字は0以外です
603:デフォルトの名無しさん
09/08/02 18:50:25
>>602
% Prolog
URLリンク(nojiriko.asia)
604:デフォルトの名無しさん
09/08/02 20:28:36
スレリンク(tech板:759番)
# [1] 授業単元:工学実験
# [2] 問題文(含コード&リンク):
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
#
# 課題内容: 組クラスを作成しなさい。組クラスは教員と学生からなる。
# 教員は1人で学生は最大40人とする。学籍番号で検索する機能をつけること。
# 学生には名前、住所、学籍番号(文字列型)という属性があり、教員には
# 名前、住所、教員番号(文字列型)という属性があるとする。
# 教員と学生の共通部分をまとめたクラスを定義し、それを継承する形で
# 教員クラスと学生クラスを定義せよ。
# それぞれの属性にはgetter、setter、表示関数を定義せよ。
# 継承した教員クラスで、名前を表示する関数では、「○○教授」、「○○助教授」
# などのように役職名を添えて表示する関数として、上書き定義せよ。
# これらの機能が正しく動作することを確認するmain関数(適当なサンプル)も
# あわせて作ること。
605:デフォルトの名無しさん
09/08/03 06:36:08
スレリンク(tech板:777番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# URLリンク(dl1.getuploader.com)
606:デフォルトの名無しさん
09/08/03 07:11:34
スレリンク(tech板:776番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 以下の機能を持った関数を含むプログラムを作成せよ.
# 1.正の整数n,rを読み込み,その組み合わせnCrを計算する関数を再帰呼び出しを用いて作成せよ.
# 2.正の整数n,rを読み込み,その組み合わせnCrを計算する関数を再帰呼び出しを用いないで作成せよ.
607:デフォルトの名無しさん
09/08/03 07:20:42
>>606 [2]
% Prolog 見かけ再帰を含みませんが、実はfor/3やconcat_atom/3は再帰なしには書けない・・・
t606_2(N,R,X) :-
findall(N1,for(N,N1,R+1),L1),
findall(N2,for(R,N2,1),L2),
concat_atom(L1,'*',S1),
concat_atom(L2,'*',S2),
atom_to_term(S1,Term1,_),
atom_to_term(S2,Term2,_),
X is Term1 / Term2.
608:607
09/08/03 08:05:18
>>606 >>607 また違っていたようです。
t606_2(N,R,X) :-
Y is N-R+1,
findall(N1,for(N,N1,Y),L1),
findall(N2,for(R,N2,1),L2),
concat_atom(L1,'*',S1),
concat_atom(L2,'*',S2),
atom_to_term(S1,Term1,_),
atom_to_term(S2,Term2,_),
X is Term1 // Term2.
609:デフォルトの名無しさん
09/08/03 18:40:06
スレリンク(tech板:786番)
# [1] 授業単元: プログラミング実習
# [2] 問題文(含コード&リンク):台形公式により関数y=x^2とx軸によって
# 挟まれる部分のx=0〜x=8までの範囲の面積を求めよ。
# 分割は4で計算せよ。
610:デフォルトの名無しさん
09/08/03 18:47:56
>>609
% Prolog
URLリンク(nojiriko.asia)
611:デフォルトの名無しさん
09/08/03 20:56:19
>>602
-- Haskell で.総当たり
import Data.List (permutations)
t602 = [xs | xs@[e,f,g,h,i,n,o,t,w,y] <- permutations [0..9],
o /= 0, n /= 0, t /= 0, f /= 0, e /= 0,
a [o,n,e] + a [n,i,n,e] + a [t,w,e,n,t,y] + a [f,i,f,t,y] == a [e,i,g,h,t,y]]
where
a xs = foldl (\s i -> 10*s + i) 0 xs
main = print $ head $ t602
612:デフォルトの名無しさん
09/08/03 21:18:14
>>606
-- Haskell で.foldl1 は末尾再帰だから許して
comb n r | r == 0 = 1
| n == r = 1
| otherwise = comb (n-1) r + comb (n-1) (r-1)
fact n = foldl1 (*) [1..n]
comb' n r = fact n `div` (fact r * fact (n-r))
main = print $ comb' 4 2
613:デフォルトの名無しさん
09/08/04 08:59:20
スレリンク(tech板:794番)
# 【質問テンプレ】
# [1] 授業単元:アルゴリズムとデータ構造
# [2] 問題文(含コード&リンク):ハッシュ(チェイン法)を使ってkeyを検索し、
# 該当するものがあればそのdataを表示する。
# (実際には検索してkeyとdataを返すまでです)
# 詳しくはこちらで URLリンク(ime.nu)
# URLリンク(kansai2channeler.hp.infoseek.co.jp)
614:デフォルトの名無しさん
09/08/04 09:02:27
>>613
% Prolog でハッシュといえば述語のこと。
t613(Key,Data) :- 'KeyAndData'(Key,Data).
615:デフォルトの名無しさん
09/08/05 12:35:12
スレリンク(tech板:812番)
# 続けて申し訳ありません
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
#
# 引数に度(degree)をとるsin_degree関数を作成しなさい。
# math.hで宣言されているsin関数を使用せずに自作すること。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4630日前に更新/314 KB
担当:undef