C プログラミング(基礎と応用)
Windowsの基礎
●WindowsXPの基礎(pdfファイル)1.起動と終了 1.1 起動法 1.2 終了法 2.ウィンドウの基本操作 2.1 ウィンドウの各部名称 2.2 ウィンドウの移動 2.3 ウィンドウ・サイズの変更 2.4 ウィンドウの重なり 2.5 ウィンドウのスクロール 2.6 ウィンドウを閉じる 3.USBメモリ 4.トラブル対処法 4.1 強制終了 5.ファイル管理 5.1 階層構造 5.2 エクスプローラの使い方 5.3 ファイルの圧縮と展開●メモ帳の使い方(pdfファイル)
1.新規ファイルの作成 2.ファイルの修正 3.ファイルの編集 3.1 文字列削除 3.2 文字列コピー 3.3 文字列移動 4.ファイルの印刷●メールの送受信(pdfファイル)
1.Active!mailとは 2.Active!mailの起動 3.メールの受信 4.メールの送信 5.送信メールの確認 6.メールの削除 7.添付メール 7.1 送信 7.2 受信
UNIXの基礎
●UNIXの基礎Ⅰ(pdfファイル)1.ログイン・ログアウト 1.1 端末エミュレータ(PuTTY) 2.簡単なコマンド 3.ファイル処理 3.1 ファイル操作法 3.2 スクリーン・エディタ(vi)の使用法 3.2.1 新規ファイル作成 3.2.2 ファイルの編集 3.2.3 漢字入力●UNIXの基礎Ⅱ(pdfファイル)
4.便利なコマンド 4.1 コマンド:find 4.2 コマンド:grep 4.3 コマンド:man 4.4 コマンド:nkf 4.5 コマンド:script 4.6 コマンド:bc 5.環境変数 5.1 環境変数とは 5.2 環境変数の参照と設定 5.3 コマンドの実行と環境変数PATH 5.4 環境設定のためのファイル 6.パーミッション 6.1 パーミッションとは 6.2 ディレクトリのパーミッションと機能一覧 6.3 パーミッションの例●PuTTYの使い方(pdfファイル)
1.ログイン・ログアウト 2.設定の変更 3.PuTTY のインストール●WinSCPの使い方(pdfファイル)
1.ログイン・ログアウト 2.WinSCP のインストール
C言語の基礎
●C言語の基礎Ⅰ(pdfファイル)1.はじめに 1.1 簡単な例 1.2 C言語プログラムの翻訳と実行 2.条件分岐 2.1 if文 2.2 switch文 3.制御構造 3.1 while文 3.2 for文 3.3 do文 3.4 continue文,break文 4.変数、配列 4.1 変数 4.2 1次元配列 4.3 2次元配列 4.4 局所変数の有効範囲
1.ポインタ変数、構造体 1.1 ポインタ変数 1.2 ポインタ変数と配列 1.3 構造体 2.関数 2.1 戻り値がない場合 2.2 戻り値がある場合 2.3 引数について 3.問題 問題1 正整数を読み込み、含まれている数字のみを用いて最も小さい 正整数を出力せよ。 ただし、複数の正整数について行い、データの最後は0とする。 問題2 正整数を読み込み、この正整数に含まれない数字のみを用いて最も 小さい正整数を求めよ。 ただし、複数の正整数について行い、データの最後は0とする。 問題3 正整数を読み込み、異なる数字の個数を出力せよ。 ただし、複数の正整数について行い、データの最後は0とする。 問題4 ふたつの正整数の組を読み込み、両方に含まれている数字のみを 用いて最も小さい正整数を求めよ。そういう数字がない場合は、 0を出力すること。 ただし、複数の組について行い、データの最後は0 0とする。 問題5 ふたつの正整数の組を読み込み、一方または両方に含まれている 数字のみを用いて最も小さい正整数を求めよ。 ただし、複数の組について行い、データの最後は0 0とする。 問題6 ふたつの正整数の組を読み込み、どちらか一方にのみ含まれている 数字を用いて最も小さい正整数を求めよ。 そのような数字がない場合は、0を出力せよ。 ただし、複数の組について行い、データの最後は0 0とする。
C言語の応用
●文字列処理(pdfファイル)1.文字と文字定数 2.文字列、文字列定数、文字列配列 3.文字列の長さ 4.文字列の分離 5.文字列の連結 6.文字列関数 6.1 文字列の長さを求める関数 6.2 文字列を複写する関数 6.3 文字列を連結する関数 6.4 文字列を比較する関数 6.5 文字列から数値への変換 7 課題 7.1 課題1 7.2 課題2 7.3 課題3 7.4 課題4 7.5 課題5●ファイル処理(pdfファイル)
1.はじめに 2.ファイル内容の表示 3.ファイル内容の複写 3.1 文字単位 3.2 行単位 4.書式付き入出力 5.文字配列への入出力 6.ファイル圧縮・復元●ビット処理(pdfファイル)
1.ビット演算 1.1 論理積、論理和、排他的論理和 1.2 左シフト、右シフト 2.ビット列操作 2.1 char型変数の表示 2.2 int型変数の表示 2.3 int型変数のビット数 2.4 ビット単位の設定 3.応用 3.1 文字の詰め込みと取り出し 3.2 ビット反転 3.3 巡回シフト 3.4 集合表現●開発環境(pdfファイル)
1.C言語プログラムの翻訳と実行 1.1 プリプロセス 1.2 アーカイブファイルとのリンク 2.実行時間測定 2.1 clock関数 2.2 timeコマンド 3.makeコマンド 3.1 makeコマンドの動作確認(Makefile1) 3.2 不要なファイルを削除する機能を追加(Makefile2) 3.3 ヘッダファイルの依存性の自動化(Makefile3) 3.4 暗黙のルール 4.ファイルの比較と更新(diffコマンド、patchコマンド) 5.バックアップ●AWK入門(pdfファイル)
1.AWKとは
2.簡単な処理を行うプログラム
2.1 フィールドを選択して出力
2.2 レコードに行番号をつけて出力
2.3 指定した文字列を含む行のみ出力
2.4 指定した条件を満たす範囲の行を出力
2.5 入力ファイル名を出力
3.加減乗除(+−*/)
4.書式
5.条件分岐
6.繰り返し
6.1 for文
6.2 while文
7.パターン
7.1 BEGIN END
7.2 正規表現
8.配列
9.例題
9.1 例題1
9.2 例題2
9.3 例題3
9.4 例題4
9.5 例題5
プログラミングの基礎
●プログラミングの基礎Ⅰ(pdfファイル)
1.プログラムの作成
1.1 利息計算
問題1 元金a円、利率rで、何年預けると目標金額b円を越えるか。
ただし、if文、goto文を使うこと。
問題2 元金a円,利率rで、n年預けると元利合計がいくらになるか。
ただし、for文を使うこと。
問題3 元金a円,積立金t円,利率rで、n年預けると元利合計が
いくらになるか。ただし、配列を使うこと。
問題4 利率rで借りたa円を毎年一定額b円返し、n年で
返済するには、毎年の返済額をいくらにすればよいか。
ただし、配列を使うこと。
問題5 複利運用早見表を作成せよ。
ただし、利率は、1%から10%、期間は1年から10年とする。
1.2 市松模様
問題1 8×8の市松模様を作成せよ。
1.3 九九の表
問題1 10進数の九九の表を作成せよ。
問題2 16進数の九九の表を作成せよ。
1.4 整数の分解
問題1 整数を各桁の数字に分解し表示せよ。
1.5 分数の問題
問題1 分数(m/n 1≦m<n)を小数点以下40桁までの小数として
表せ。
問題2 分数(m/n 1≦m<n)を小数点表示したとき循環する部分を
求めよ。
●プログラミングの基礎Ⅱ(pdfファイル)
2.プログラムの作成
2.1 コラッツ問題
自然数nから出発して、nが偶数ならば、2で割り、nが奇数ならば、
3倍して1を足す操作を行う。この操作を繰り返すと最後に1になる
と予想されている。
問題1 自然数aの操作回数を求めよ。
問題2 自然数aからbまでのなかで、最大操作回数となる自然数を
求めよ。
2.2 耐久数
正整数の各桁の数字を掛け、得られた結果についても同様の操作を
繰り返す。すると、最後は1桁の数になる。
たとえば、77 -> 49 -> 36 -> 18 -> 8 より、操作回数は4となる。
この操作回数を耐久数という。
問題1 正整数nを複数個読み込み、それぞれの耐久数を求めよ。
ただし、データの終わりは0とする。
問題2 正整数b(≧10)以下の耐久数を求めよ。
2.3 ハッピーナンバー
正整数nの各桁の数を2乗し、その合計を求める。その合計の
各桁の数を2乗し、またその合計を求める。この計算を繰り返し
最終的に1となる正整数nをハッピーナンバーという。
問題1 正整数nがハッピーナンバーかどうか調べるプログラムを
作成せよ。
問題2 正整数a以上b以下のハッピーナンバーを求めるプログラム
を作成せよ。
2.4 ピタゴラス数
正整数a,b,cについて、a*a + b*b = c*c(1≦a≦b≦c)とする。
(このような正整数a,b,cをピタゴラス数という)
問題1 c*c≦nを満たすピタゴラス数をすべて求めよ。
2.5 反復するフィボナッチ数(キース数)
k桁の正整数nについて、そのk個の数字を並べたものから始めて、
直前のk個の数値を合計したものを付け加えるという操作を繰り
返す。このとき、正整数nが再び現れるという性質をもつ数を
反復するフィボナッチ数(キース数)という。
問題1 正整数aからbまでについてキース数を求めよ。
●数値計算の基礎(pdfファイル)1.情報落ち 計算のルールを「10進4桁、切り捨て」と仮定する。 2つの数の加算では、まず小数点が合わされ、大きい数が優先される。 したがって、12.34 + 0.005678 は 12.34 と計算される。このように、 絶対値の小さい数を絶対値の大きい数に加えてもほとんど影響を 与えない現象を情報落ちという。 2.オーバーフロー・アンダーフロー 計算結果の絶対値がコンピュータの処理できる最大の数を越えてしまう 現象をオーバーフローという。 計算結果の絶対値がコンピュータの処理できる最小数以下になる現象を いう。アンダーフローが生じると計算結果を0にすることが多い。 3.桁落ち 12.34 - 12.33 = 0.01 のように、同符号で絶対値のほぼ等しい2個の 数に対して、減算を行うと有効数字が著しく減ってしまう現象をいう。 4.丸め誤差の累積 コンピュータの内部で処理できる数値の桁数が決まっているため、 丸め(4捨5入、切り捨て、切り上げ)が起こる。このために生じる 誤差を丸め誤差という。 5.誤差回避の実例 スターリングの公式を考察する。
プログラムの開発
●最大値探索法の開発(pdfファイル)
1.開発過程1
目標1:4個のデータの最大値を求める。
目標2:4個のデータの最大値を求める。
改良 :多数のデータに対応するため、配列を使う。
目標3:n個のデータの最大値を求める。
改良 :コードを簡潔に記述するため、for文を使う。
目標4:n個のデータの最大値を求める。
改良 :プログラムをわかりやすくするため、関数を使う。
目標5:n個のデータの最大値を求める。
改良 :処理を速くするため、最大値の位置のみを求め、
データの移動は最後に1回行う。
移動するデータ量が多いときに有効。
2.開発過程2
目標1:n個のデータから、最大値とその次の値を求める。
方法 :a[1]に1番目のデータを格納、a[2]に2番目のデータを
格納する。
目標2:n個のデータの上位からm番目まで求める。
方法 :a[1]に1番目のデータを格納、a[2]に2番目のデータを
格納、…、a[m]にm番目のデータを格納する。
3.開発過程3
目標1:n個のデータの上位からm番目まで求める。
準備 :n個のデータ中、適当な値z以上の要素の集まりと、
z以下の要素の集まりに分割する。
目標2:n個のデータ中、1番目からm番目まで求める。
方法 :a[1]〜a[m]に1番目からm番目のデータを格納する。
必ずしも、a[1]≧a[2]≧…≧a[m]とならないことに注意。
●2項係数計算法の開発(pdfファイル)1.開発方法1(階乗を用いる方法) 2.開発方法2(配列を用いる方法) 2.1 開発方法2.1(2次元配列を用いる方法) 2.2 開発方法2.2(1次元配列を用いる方法) 3.開発方法3(指数と仮数で表現する方法) 4.開発方法4(再帰関数を用いる方法)●数字列探索法の開発(pdfファイル)
長さnの数字列(0から9までの数字をn個並べたもの)a中に、
長さmの数字列bが最初に現れる位置を見つける問題を考察し、
プログラムを開発する。
前者を数字列、後者を探索列と呼ぶ。
数字列:123 456 789
=== 4番目に見つけた。
探索列: 456
両者を配列で表し、数字列を配列a(a[i],1≦i≦n)、
探索列を配列b(b[i],1≦i≦m)に保存しておく。
1.開発過程1
方法:数字列と探索列の先頭を合わせ、先頭から対応する数字を
比較していく。途中で不一致が起こると、探索列を1文字分右
ずらし、再度、先頭から対応する数字を比較していく。
最悪の場合、n×mに比例した時間で処理が行われる。
2.開発過程2
方法:探索途中で不一致が生じたとき、探索列を1文字分右にずらし、
いつも探索列の先頭から比較を始めるのは無駄が多い。
そこで、不一致が起こったとき、探索列を右にずらす量を
あらかじめ求めておき、不一致が起こった位置から対応する
数字を比較していく。
改良:探索列を右にずらす量を効率よく求める。
3.開発過程3
方法:数字列と探索列の末尾から対応する数字を比較していく。
数字列と探索列の末尾で不一致が起こると、数字列中の
不一致文字xが、探索列中に現れる位置まで探索列を右にずらす。
数字列中の不一致文字xが、探索列中にない場合、探索列を
m文字分右にずらす。
この結果、比較回数を減らすことができ、うまくいくと、
n/mに比例した時間で処理が行われる。
改良:末尾から対応する数字を比較していく。番兵法を使って、
効率を上げる。
4.開発過程4
方法:探索列の数字をまとめて数値とし、対応する数字列の数値と
比較していく。このことから、数字列の長さnに比例した時間で
処理が行われる。
条件:m≦9 (整数が10桁程度のため)
改良:mについての条件(m≦9)を取り除いた。
●素数生成法の開発(pdfファイル)
正整数n以下の素数をすべて求める問題を考察する。
まず、素朴な方法を取り上げ改良していく。
つぎに、「ふるい」という考え方を適用すると、劇的に改良されることを示す。
1.素朴な素数生成法
方法1.1
素朴な方法である。素数の候補(3以上の奇数)pを用意し、
その候補に対して、3以上p-2以下の奇数dで割っていく。
どの数でも割り切れない場合、素数とし、いずれかの数で
割り切れた場合、合成数とする。
方法1.2
改良点:方法1.1において、除数dの範囲を小さくする。
素数の候補(3以上の奇数)pを用意し、その候補に対して、
3以上[√p]以下の奇数dで割っていく。どの数でも割りきれ
ない場合、素数とし、いずれかの数で割り切れた場合、
合成数とする。ここで、[x]は実数xの整数部分を意味する。
方法1.3
改良点:方法1.2において、候補pから3の倍数を除く。
素数の候補(3の倍数を除く奇数)pを用意し、その候補に
対して、5以上[√p]以下の奇数dで割っていく。
どの数でも割りきれない場合、素数とし、いずれかの数で
割り切れた場合、合成数とする。
方法1.4
改良点:方法1.3において、除数dとしてすでに得られた
素数を使う。
素数の候補(3の倍数を除く奇数)pを用意し、その候補に
対して、すでに得られた[√p]以下の素数dで割っていく。
どの数でも割りきれない場合、素数とし、いずれかの数で
割り切れた場合、合成数とする。
2.エラトステネスの方法
方法2.1
正整数 n 以下の素数をつぎの手順で生成する。
手順(0) 2 を素数とする。
手順(1) 数列 {3,5,7,...,n} を用意する。
手順(2) 数列の中の最小値pを素数とし、その数自身と
その数の倍数(2p,3p,4p,...)
取り除き、新しい数列を構成する。
手順(3) 新しい数列が空になるまで手順(2)を繰り返す。
方法2.2 エラトステネスの方法の改良
方法2.1の手順(2)、手順(3)を改良する。
2*p,3*p,4*p,...,(p-1)*pは、すでに数列から取り除かれて
いるはずだから省略できる。
手順(0) 2を素数とする。
手順(1) 数列 {3,5,7,...,n}を用意する。
手順(2) 数列の中の最小値pを素数とし、その数自身と
その数の倍数(p*p,p*(p+1),p*(p+2),...)を
数列から取り除き、新しい数列を構成する。
手順(3) p*p が n 以下の間、手順(2)を繰り返す。
方法2.3 エラトステネスの方法の改良
方法2.2の手順(2)を改良する。
pが奇数なので、p*(p+1),p*(p+3),p*(p+5),...は偶数になり
省略できる。
手順(0) 2を素数とする。
手順(1) 数列 {3,5,7,...,n}を用意する。
手順(2) 数列の中の最小値p素数とし、その数自身と
その数の倍数(p*p,p*(p+2),p*(p+4),...)を
数列から取り除き、新しい数列を構成する。
手順(3) p*p が n 以下の間、手順(2)を繰り返す。
方法2.4 エラトステネスの方法の改良
方法2.3の手順(2)を改良する。
手順(0)2を素数とする。
手順(1)数列 {3,5,7,...,n}を用意する。
手順(2)数列の中の最小値を素数pとし、その数自身と
その数の倍数を数列から取り除き、新しい数列を
構成する。
pが6k+1の形の素数とわかったとき、取り除く倍数を、
p*p,p*(p+4),p*(p+6),p*(p+10),p*(p+12),...とする。
pが6k+5の形の素数とわかったとき、取り除く倍数を、
p*p,p*(p+2),p*(p+6),p*(p+8),p*(p+12),...とする。
手順(3) p*p が n 以下の間、手順(2)を繰り返す。
●平方根計算法(pdfファイル)1.素朴な方法(1桁ずつ求める) 2.めのこ平方 3.漸化式 4.2分法 5.ニュートン法●順列生成の開発Ⅰ(pdfファイル)
1.順列生成(非再帰的方法) 1.1 非再帰的生成法1(多重ループを用いる方法) 1.2 非再帰的生成法2(配列を用いる方法) 1.3 非再帰的生成法3(辞書式順序を用いる方法) 1.4 非再帰的生成法4(階乗進数を用いる方法)●順列生成の開発Ⅱ(pdfファイル)
2.順列生成(再帰的方法) 2.1 再帰的生成法1(素朴な方法) 2.1.1 基本アルゴリズム 2.2 再帰的生成法2(挿入法) 2.2.1 基本アルゴリズム 2.2.2 スタック順列の生成 2.2.3 キュー順列の生成 2.3 再帰的解法3(交換法) 2.3.1 基本アルゴリズム●順列生成の開発Ⅲ(pdfファイル)
2.順列生成(再帰的方法)
2.4 再帰的解法4(部分順列の生成)
2.4.1 基本アルゴリズム
2.4.2 辞書式順序に従う生成
2.4.3 ランダム順列の生成
2.4.4 組合せの生成
3.各種順列生成問題
3.1 かく乱順列の生成
3.2 フィボナッチ順列の生成
●部分集合生成問題(pdfファイル)1.部分集合の個数 2.生成法1(再帰的方法) 3.生成法2(2進数への対応) 4.生成法3(グレイコード) 5.生成法4
プログラミングの応用
●シミュレーション(pdfファイル)1.一様乱数の生成 1.1 組み込み関数rand() 1.2 与えられた分布にしたがう乱数の生成 2.面積計算のシミュレーション 区間[0,1]の一様乱数を2個x,y生成し、円内(x*x+y*y≦1,0≦x,0≦y)に 入る頻度を求めれば、円の面積の近似値(π/4)が得られる。 3.破産問題のシミュレーション 10個の金貨から始める。1個の金貨を投資すると確率pで10個増える。 持ち金貨が20個か0個になったとき止めるとする。 pと破産する(持ち玉が0個)確率との関係を考察せよ。 4.幾何的確率のシミュレーションと解析 問題1 長さaの線分AB上に2点P,Qを互いに独立にとるとき、 距離PQが長さb(<a)以下になる確率を考察する。 問題2 x1+x2+x3=a(x1>0,x2>0,x3>0,a>0)のとき、 長さx1,x2,x3で三角形を構成する確率を考察する。 5.太郎次郎問題のシミュレーションと解析 太郎と次郎がコイン投げのゲームをした。コインを繰り返し投げ、 表がでたら1、裏がでたら0とする。このとき1と0の記号列ができるが、 先に111がでたら太郎の勝ち、一方先に101がでたら次郎の勝ちとする。 太郎の勝つ確率、次郎の勝つ確率を求めよ。 ただし、1も0もでる確率は同じとする。●あみだくじ(pdfファイル)
あみだくじについて考察する。
問題1 あみだくじ
(1)希望するあみだくじをつくる一般的な方法を考えよ。
例として、縦線の上にA,B,C,Dをこの順に並べ、縦線の下に
a,b,c,dを適当な順に並べる。そして、Aを選んだ場合aに
たどりつき、Bを選んだ場合bにたどりつき、Cを選んだ場合cに
たどりつき、Dを選んだ場合dにたどりつくようにせよ。
(2)希望するあみだくじをつくるプログラムを書け。
4 ←縦線の個数
2 1 4 3 ←最終配置
1 2 3 4
| | |--|
|--| | |
2 1 4 3
4 ←縦線の個数
4 3 2 1 ←最終配置
1 2 3 4
|--| | |
| |--| |
| | |--|
|--| | |
| |--| |
|--| | |
4 3 2 1
(3)あみだくじは初期配置を変換するルールと解釈できる。
初期配置:12...n から最終配置:b(1)b(2)...b(n) に
変換するのに必要な横線の個数について考察せよ。
問題2 あみだくじの公平性
あみだくじの公平性について考察せよ。
問題3 あみだくじの公平性
あみだくじの公平性について考察せよ。
●マッチ棒問題(pdfファイル)m×nの盤で辺に n(m+1)+(n+1)m=2mn+m+n 本のマッチ棒を並べる。 r本のマッチ棒を取り除いて、s個の正方形が残るようにする方法を考察する。 問題1 (1)m×nの盤の辺に番号をつけ、すべての長方形(正方形を含む)を 出力するプログラムを作成せよ。 (2)m×nの盤の辺に番号をつけ、すべての正方形を出力する プログラムを作成せよ。 (3)n個の要素からr個残す組合せをすべて生成するプログラムを 作成せよ。 (4)m×nの盤で辺にn(m+1)+(n+1)m = 2mn+m+n本のマッチ棒を並べる。 r本のマッチ棒を取り除いて、s個の正方形が残るようにする方法を すべて求めるプログラムを作成せよ。 ただし、残ったマッチ棒は、他のマッチ棒と両端でつながっている ものとする。 (5)m×nの盤で辺にn(m+1)+(n+1)m = 2mn+m+n本のマッチ棒を並べる。 マッチ棒を取り除いて、正方形を破壊する方法で、最小のマッチ 棒の本数とその方法の個数を求めるプログラムを作成せよ。 ただし、残ったマッチ棒は、他のマッチ棒と両端でつながっている ものとする。●カタラン数(pdfファイル)
1.カタラン数とは
2.カタラン数が現れる例
問題1 最短コース
道路が碁盤の目になっている町がある。切れているところは
通れないとして、左上隅の交差点aから右下隅の交差点bまでの
最短コースの数を求める問題を考察する。
問題2 バランスのとれたかっこ列
n個の左かっことn個の右かっこからなるバランスのとれた長さ2n
のかっこ列p(1)p(2)…p(2n)はつぎのように定義できる。
任意の部分列p(1)p(2)…p(k)(1≦k≦2n)において、
左かっこの個数≧右かっこの個数
が成り立つ。
(1)n個の左かっことn個の右かっこからなるバランスのとれた
長さ2nのかっこ列p(1)p(2)…p(2n)の個数は、カタラン数c(n)
になることを示せ。
(2)n個の左かっことn個の右かっこからなるバランスのとれた
長さ2nのかっこ列を列挙するプログラムを作成せよ。
問題3 カードを2段に並べる方法
1から2nまでの番号のつけられた2n枚のカードを上段にn枚、下段に
n枚並べる。ただし、並べられたカードは条件(a),(b),(c)を満たす
ものとする。
(a)上段に置かれたカードは左から右へ番号が増加している。
(b)下段に置かれたカードは左から右へ番号が増加している。
(c)上下のカードの番号は上が下より小さい。
(1)1から2nまでの番号のつけられた2n枚のカードを上段にn枚、
下段にn枚並べる。ただし、並べられたカードは条件(a),(b),
(c)を満たすものとする。
このとき、2n枚のカードの並べ方の数はカタラン数c(n)になる
ことを示せ。
(2)このようなカードの配置を列挙するプログラムを作成せよ。
問題4 三角形の分割
凸n角形を互いに交わらない対角線によって、三角形に分割する
方法を考察する。
問題5 円周上の2n個の点を線分で結ぶ方法
円周上に2n個の点をとり、2つずつを互いに交わらないように
線分で結ぶ方法を考察する。
(1)円周上に2n個の点をとり、2つずつを互いに交わらないように
線分で結ぶ方法はカタラン数c(n)になることを示せ。
●計算パズル集(pdfファイル)
問題1 小町算
1から9までの9個の数字をこの順に並べ数字の間に+と−を
うまくいれると、
100=123+45−67+8−9
=123+4−5+67−89
=123−45−67+89
=123−4−5−6−7+8−9
=12+3+4+5−6−7+89
=12+3−4+5+67+8+9
=12−3−4+5−6+7+89
=1+23−4+56+7+8+9
=1+23−4+5+6+78−9
=1+2+34−5+67−8+9
=1+2+3−4+5+6+78+9
=−1+2−3+4+5+6+78+9
のように、和を100にすることができる。このように与えられた
値nに対して、条件を満たす式をすべて求めるプログラムを作成せよ。
問題2 単位分数表現
1から9までの数字をちょうど1回ずつ使った分数で、1/2を
あらわす方法をすべて見つけるプログラムを作成せよ。
[ 1] 2 × 6729 = 13458 [ 2] 2 × 6792 = 13584
[ 3] 2 × 6927 = 13854 [ 4] 2 × 7269 = 14538
[ 5] 2 × 7293 = 14586 [ 6] 2 × 7329 = 14658
[ 7] 2 × 7692 = 15384 [ 8] 2 × 7923 = 15846
[ 9] 2 × 7932 = 15864 [10] 2 × 9267 = 18534
[11] 2 × 9273 = 18546 [12] 2 × 9327 = 18654
問題3 センチュリー・パズル
1から9までの数を1回ずつ使って帯分数を作り100を表す方法を
すべて求めるプログラムを作成せよ。
ただし、数字の並び方は任意でよい。
2148 1752 1428
96-------- 96-------- 96--------
537 438 357
5823 5742 1578
91-------- 91-------- 94--------
647 638 263
5643 3546 7524
81-------- 82-------- 91--------
297 197 836
69258 7524
3---------- 81--------
714 396
問題4 覆面算
アルファベットに数字をいれて計算式が成り立つようにするプログラム
を作成せよ。ただし、異なるアルファベットには異なる数字が入る。
問題5 虫食い算
問題6 分数式パズル
与えられた値mに対して、1から9までの数字を使って、次の計算式を
満たすものをすべて見つけるプログラムを作成せよ。ただし、1≦m≦10。
●マス目反転問題(pdfファイル)
m×nのチェス盤のマス目が適当に白と黒に塗られているとき、
1行または1列全部のマス目を反転(白→黒、黒→白)する操作のみで
すべてのマス目を白にする問題を考察する。
問題1 マス目反転問題の例
問題2 マス目反転問題
(1)4×4のチェス盤のマス目の中で1個のマス目が黒く塗られている。
すべてのマス目を白にすることはできないことを示せ。
(2)4×4のチェス盤のマス目の中で、奇数n(1,3,5,7,9,…,15)個の
マス目が黒く塗られている。
すべてのマス目を白にすることはできないことを示せ。
(3)2n×2nのチェス盤のマス目の中で、奇数個のマス目が黒く
塗られている。すべてのマス目を白にすることはできないことを
示せ。
(4)与えられたマス目の状態から、すべてのマス目を白にできるか
できないか判定し、できる場合、その方法を示すプログラムを
作成せよ。
問題3 マス目反転問題の解析
(1)すべてのマス目を白にできるならば、次の連立方程式が成り立つこと
を示せ。
x(1)+x(4) ≡ a(1,1)
x(2)+x(4) ≡ a(1,2)
x(3)+x(4) ≡ a(1,3)
x(1)+x(5) ≡ a(2,1)
x(2)+x(5) ≡ a(2,2)
x(3)+x(5) ≡ a(2,3)
x(1)+x(6) ≡ a(3,1)
x(2)+x(6) ≡ a(3,2)
x(3)+x(6) ≡ a(3,3)
(2)(1)の連立方程式を変形して、つぎの関係を導け。
x(1)+x(4) ≡ a(1,1)
x(2)+x(4) ≡ a(1,2)
x(3)+x(4) ≡ a(1,3)
x(4)+x(5) ≡ a(1,1)+a(2,1)
0 ≡ a(1,1)+a(2,1)+a(1,2)+a(2,2) (A)
0 ≡ a(1,1)+a(2,1)+a(1,3)+a(2,3) (B)
x(4)+x(6) ≡ a(1,1)+a(3,1)
0 ≡ a(1,1)+a(3,1)+a(1,2)+a(3,2) (C)
0 ≡ a(1,1)+a(3,1)+a(1,3)+a(3,3) (D)
(3)3×3のチェス盤のマス目の中で、いくつかのマス目が黒く
塗られている。
このとき、つぎの4種類のパターンA,B,C,Dと重なる部分が
それぞれ偶数個にならなければ、すべてのマス目を白にすることは
できない。その理由を説明せよ。
(4)4×4のチェス盤のマス目の中で、いくつかのマス目が黒く塗られ
ている。このとき、つぎの9種類のパターンと重なる部分が
それぞれ偶数個にならなければ、すべてのマス目を白にすることは
できない。このパターンを求めるプログラムを作成せよ。
再帰
●再帰処理Ⅰ(pdfファイル)1.階乗関数 2.基本演算 2.1 乗算 2.2 除算 2.3 剰余 3.最大公約数 4.フィボナッチ関数 5.べき乗関数 5.1 解法1 5.2 解法2 6.2項係数●再帰処理Ⅱ(pdfファイル)
7.二分探索
8.最大値探索
9.集合Tの再帰的定義
10.集合{1,2,…,n}上の部分集合生成
●再帰処理Ⅲ(pdfファイル)
11.ソート
11.1 挿入ソート
11.2 クイックソート
11.3 マージソート
●再帰処理Ⅳ(pdfファイル)
1.再帰曲線
1.1 ドラゴン曲線
1.2 ヒルベルト曲線
1.3 シェルピンスキー曲線
1.4 C曲線
データ構造
●配列処理Ⅰ(pdfファイル)1.配列要素の読込 1.1 読み込む要素数が未知の場合 1.2 読み込む要素数が既知の場合 2.配列要素の挿入 3.配列要素の削除 4.配列の反転 5.探索 5.1 素朴な方法 5.2 番兵法 5.3 二分探索 5.4 ハッシュ法●配列処理Ⅱ(pdfファイル)
6.ソート 6.1 挿入ソート 6.2 シェルソート 6.3 分配ソート 7.マージ●配列処理Ⅲ(pdfファイル)
1.グラフ表現 1.1 経路数 問題:隣接行列が与えられたとき、節点iから節点jへm回の 移動で移れる方法の数を求めよ。 1.2 最短距離 問題:距離行列が与えられたとき、節点iから節点jへの 最短距離を求めよ。 1.3 最小時間 問題:時間行列が与えられたとき、節点i(1≦i≦n-1)から節点nへの 最小移動時間を求めよ。 2.最適経路 x座標を正の方向へnステップ、y座標も正の方向へnステップ、 合計2nステップ動くことにより、格子点A(0,0)から格子点B(n,n)まで 行く経路を考える。 隣接する格子点Cから格子点Dへ移動するのに必要なコストがcost(C,D)で 与えられたとき、格子点Aから格子点Bまで移動するのに必要な最小 コストを考察する。●ポインタ変数(pdfファイル)
1.ポインタ変数と変数 2.ポインタ変数と配列 3.ポインタ変数と構造体 4.ポインタ変数と線形リスト 5.ポインタ変数配列 6.ポインタ変数と関数 6.1 引数とポインタ変数 6.2 引数と配列 6.3 戻り値とポインタ変数 7.問題●リストⅠ(pdfファイル)
1.再帰的なデータ構造によるリストの表現 1.1 リストの作成と表示 1.1.1 リストの先頭に追加する方法 1.1.2 リストの末尾に追加する方法 1.1.3 昇順を保存してリストに追加する方法 1.1.4 問題 1.2 リストの作成と表示(リストヘッドの利用) 1.2.1 リストの先頭に追加する方法 1.2.2 リストの末尾に追加する方法 1.2.3 昇順を保存してリストに追加する方法 1.2.4 問題●リストⅡ(pdfファイル)
2.基本的な操作 2.1 リストから要素の削除 2.2 リストの複写 2.3 リストの連結 2.4 リストの併合 2.5 問題●リストⅢ(pdfファイル)
3.応用 3.1 マージソート 3.2 グラフ表現 3.3 問題 問題1:素数生成 問題2:素数生成(高速化) 問題3:双方向リスト●スタックとキュー(pdfファイル)
1.スタック 1.1 配列によるスタックの実現 1.2 再帰的なデータ構造によるスタックの実現 2.キュー 2.1 配列によるキューの実現 2.2 再帰的なデータ構造によるキューの実現 3.スタックとキューの違い 4.応用問題 4.1 地図情報処理 4.2 グラフ問題●ヒープ(pdfファイル)
1.ヒープとは 2.ヒープ生成法 2.1 具体例 2.2 ヒープ生成法の手順 2.3 ヒープ作成・再帰版 2.4 ヒープ作成・非再帰版 3.ヒープの応用 3.1 ヒープソート・再帰版 3.2 問題●2分探索木Ⅰ(pdfファイル)
1.2分探索木とは 2.2分探索木の作成 3.2分探索木の走査 3.1 前走査 3.2 中走査 3.3 後走査 3.4 問題●2分探索木Ⅱ(pdfファイル)
4.2分探索木の操作 4.1 要素の探索 4.2 要素の挿入 4.3 直前の要素の探索 4.4 直後の要素の探索 4.5 要素の削除●2分探索木Ⅲ(pdfファイル)
5.応用問題 5.1 木の深さ、平均の深さ 5.2 2分探索木の図示
システムプログラミング
●シェルの作成Ⅰ(pdfファイル)1.シェルとは 2.シェルの作成 2.1 シェルA 2.1.1 fork関数 2.1.2 execl関数 2.1.3 シェルAプログラム 2.2 シェルB 2.2.1 文字列の分解 2.2.2 execv関数 2.2.3 シェルBプログラム 2.3 シェルC 2.3.1 組み込みコマンド 2.3.2 シェルCプログラム
ネットワークプログラミング
●クライアント・サーバプログラムⅠ(pdfファイル)1.プログラムの概要 2.コネクション型プログラム 2.1 方式1:反復サーバ 2.2 方式2:並行サーバ 2.3 方式3:複数の入出力を見張るサーバ 2.4 方式4:ホスト名、ポート番号を指定できるクライアント
バックトラックアルゴリズム
●チェス盤経路問題(pdfファイル)1.チェス盤経路問題 1.1 経路問題 1.2 最短経路問題 1.3 最長経路問題 1.4 n回曲がる最短経路問題●チェス盤最短経路問題(pdfファイル)
●チェス盤周遊問題(pdfファイル)
1.チェス盤周遊問題 1.1 周遊問題 1.2 ナイトの周遊問題●整数分割(pdfファイル)
問題1 正整数の和
加算の順序が異なるとき、異なるものと見なす場合、n=4では、4, 3+1,
1+3, 2+2, 2+1+1, 1+2+1, 1+1+2, 1+1+1+1 の8通りの表し方がある。
正整数nが与えられたとき、すべての表し方を求めるプログラムを
作成せよ。
問題2 整数分割
加算の順序が異なるとき、同じものと見なす場合、n=5では、5, 4+1, 3+2,
3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1 となり、7通りの表し方がある。
正整数nが与えられたとき、すべての表し方を求めるプログラムを
作成せよ。
n=d[1]+d[2]+…+d[k] d[1]≧d[2]≧・・・≧d[k]
問題3 整数分割
次の条件を満たす整数分割を求めるプログラムを作成せよ。
n=d[1]+d[2]+…+d[k] d[1]>d[2]>・・・>d[k]
問題4 整数分割
次の条件を満たす整数分割を求めるプログラムを作成せよ。
n=d[1]+d[2]+…+d[k] d[1]≧d[2]≧・・・≧d[k]
ただし、d[i](1≦i≦k)は奇数
問題5
r個の正整数からなる整数nの分割で、次の条件を満たすものを求める
プログラムを作成せよ。
n=d[1]+d[2]+…+d[r] d[1]≧d[2]≧・・・≧d[r]
問題6
r個の正整数からなる整数nの分割で、次の条件を満たすものを求める
プログラムを作成せよ。
n=d[1]+d[2]+…+d[r] d[1]>d[2]>・・・>d[r]
●コイン配置問題(pdfファイル)問題1 (1)3×3のマス目にコインをできるだけたくさん置く方法を示せ。 ただし、どの4個のコインも正方形や長方形になってはいけない。 (2)4×4のマス目にコインをできるだけたくさん置く方法を示せ。 ただし、どの4個のコインも正方形や長方形になってはいけない。 (3)5×5のマス目にコインをできるだけたくさん置く方法を示せ。 ただし、どの4個のコインも正方形や長方形になってはいけない。 (4)6×6のマス目にコインをできるだけたくさん置く方法を示せ。 ただし、どの4個のコインも正方形や長方形になってはいけない。 (5)m×nのマス目に置けるコインの最大数を求めるプログラムを 作成せよ。 ただし、どの4個のコインも正方形や長方形になってはいけない。●畳敷詰問題Ⅰ(pdfファイル)
問題1 畳の敷き方
(1)2×nの部屋に1×2の畳を敷く方法a(n)について、
a(n) = a(n-1) + a(n-2) (n≧2),a(1)=1,a(0)=1
が成り立つことを示せ。
(2)3×2nの部屋に1×2の畳を敷く方法b(n)について
b(n) = 4b(n-1) - b(n-2) (n≧2), b(1)=3, b(0)=1
が成り立つことを示せ。
(3)m×nの部屋に1×2の畳を配置したとき、配置の個数 f(m,n) を
求めるプログラムを作成せよ。
●畳敷詰問題Ⅱ(pdfファイル)
問題2 縦方向・切断線
(1)m×nの部屋に1×2の畳を配置したとき、縦方向に線を引くことを
考える。畳と交わらずに線が引けたとき、縦方向の切断線という。
m×nの部屋に1×2の畳を配置したとき、縦方向の切断線を持たない
配置の個数をg(m,n)とする。g(m,n)を求めるプログラムを作成せよ。
(2)f(m,n)とg(m,n)の関係を求めよ。
f(m,n)は、m×nの部屋に1×2の畳を配置したとき、配置の個数を
意味する。
(3)4×nの部屋の敷き方の個数をc(n)とする。c(n)が満たす漸化式を
求めよ。
問題3 縦横方向・切断線
縦横方向の切断線をもたない配置を考察する。
(1)m×nの部屋に1×2の畳を配置したとき、縦方向の切断線と横方向の
切断線を持たない配置の個数を求めるプログラムを作成せよ。
(2)8枚の畳を正方形に敷くことを考える。
どのような敷き方に対しても、切断線があることを示せ。
(3)3×2n(n≧1)の部屋に1×2の畳を敷くことを考える。
どのような敷き方に対しても、切断線があることを示せ。
(4)4×n(n≧1)の部屋に1×2の畳を敷くことを考える。
どのような敷き方に対しても、切断線があることを示せ。
●Nクイーン問題(pdfファイル)1.Nクイーン問題 1.1 バックトラックに基づく解法 1.2 バックトラックに基づく解法の改良 1.3 順列生成に基づく解法 2.超Nクイーン問題 3.反射するNクイーン問題●かっこ列生成問題(pdfファイル)
問題1
'('がa個、')'がb個ある文字列をすべて生成するプログラムを作成せよ。
問題2
'('がa個、')'がb個ある文字列をランダムに生成するプログラムを
作成せよ。
問題3
バランスのとれたa対のかっこ列をすべて生成するプログラムを作成せよ。
問題4
かっこ列をランダムに生成するプログラムを作成せよ。
●渡河問題(pdfファイル)
問題1 農夫の渡河問題
一そうのボートを使って、農夫がオオカミとヤギとキャベツを向こう
岸に運ぶことになった。ところで、ボートには農夫のほかに最大1つ
乗せることができる。また、農夫がいないとオオカミはヤギをヤギは
キャベツを食べてしまう。農夫が無事に、オオカミとヤギとキャベツ
を向こう岸に運ぶ方法を考察せよ。
農夫渡河問題を解くプログラムを作成せよ。
ただし、ボートには農夫のほかに最大1つ乗せることができる。
問題2 宣教師と人食い人種の渡河問題
n人の人食い人種とn人の宣教師が川を渡ろうとしている。
ボートはboat人乗りで人食い人種と宣教師のどんな組合せでもこぐ
ことができる。ただし、宣教師の数が川の両岸、またボートの中でも
人食い人種より少なければ食べられてしまう。
人食い人種と宣教師が全員無事に川を渡る方法を考察せよ。
人食い人種と宣教師が全員無事に川を渡る方法をすべて見つける
プロクラムを作成せよ。
問題3 ボートに制限のある渡河問題
3人の男(A,B,C)がそれぞれ砂金を持って川を渡ろうとしている。
ところが、ボートには2人の男または1人の男と砂金1袋しか乗れない。
Aは15㎏の砂金、Bは8㎏の砂金、Cは7㎏の砂金を持っている。
両岸、ボートの中で自分の持ち分以上の砂金を持つと逃げてしまう。
3人が川を渡るにはどうすればよいか考察せよ。
3人が最小の移動回数で川を渡る方法をすべて見つけるプロクラムを
作成せよ。
●ポリオミノ(pdfファイル)
いくつかの同じ形の正方形が辺を接して結びついているものをポリオミノという。
回転して一致したり、裏返して回転して一致するものは同じとみなす。
点だけで接していたり、辺の一部で接していたり、重なっているものは
ポリオミノではない。n個の正方形から構成される場合、n-ミノという。
n-ミノをすべて求めることを目標にする。
問題1
(1)m×nの盤からマス目r個分の選び方をすべて求めるプログラムを
作成せよ。
2×3の盤の場合、マス目4個分の選び方は15通りある。
■■■ ■■□ □■■ ■■□ ■□□ □□■
■□□ □■■ ■■□ ■□■ ■■■ ■■■
■■■ ■□■ □■■ ■■□ ■□■ □■□
□■□ ■■□ ■□■ ■■□ □■■ ■■■
■■■ ■□■ □■■
□□■ ■□■ □■■
(2)m×nの盤からマス目r個分の領域(マス目の辺同士が隣接する)
をすべて求めるプログラムを作成せよ。
3×3の盤の場合、マス目3個分の領域は22通りある。
■■■ ■□□ □■□ □□□ □□□ □□□
□□□ ■□□ □■■ ■■■ □■■ □□■
□□□ ■□□ □□□ □□□ □■□ □■■
■■□ □■■ □■□ □□□ □□□ □□□
■□□ □■□ □■□ ■■□ □■■ □□□
□□□ □□□ □■□ ■□□ □□■ ■■■
■■□ □■■ □□■ □□□ □□□
□■□ □□■ □■■ ■■□ □■□
□□□ □□□ □□□ □■□ ■■□
■□□ □■□ □□■ □□□ □□□
■■□ ■■□ □□■ ■□□ □■□
□□□ □□□ □□■ ■■□ □■■
(3)m×nの盤からマス目r個分の領域(マス目の辺同士が隣接する)で
m×nの盤の上辺と左辺に接するものをすべて求めるプログラムを
作成せよ。
3×3の盤の場合、上辺と左辺に接するマス目3個分の領域は
6通りある。
■■■ ■■□ ■■□ ■□□ ■□□ □■□
□□□ ■□□ □■□ ■■□ ■□□ ■■□
□□□ □□□ □□□ □□□ ■□□ □□□
これらから、反転や回転で重なるものを取り除かなければならない。
(4)m×nの盤からマス目r個分の領域(マス目の辺同士が隣接する)で
m×nの盤の上辺と左辺に接し、反転や回転で重なるものが
取り除かれたものをすべて求めるプログラムを作成せよ。
(ヒント)
元の図形から反転と回転を組み合わせて7通りの図形を
構成できる。その操作を①から⑦とする。
たとえば、次の図形を元の図形とすると、
操作①から操作⑦で7通りの図形はつぎのようになる。
■■■
■
操作①:元の配置を反転し、時計回りに180°回転。
■
■■■
操作②:元の配置を反転。
■■■
■
操作③:元の配置を時計回りに180°回転。
■
■■■
操作④:元の配置を反転し、時計回りに270°回転。
■
■
■■
操作⑤:元の配置を、時計回りに270°回転。
■
■
■■
操作⑥:元の配置を、時計回りに90°回転。
■■
■
■
操作⑦:元の配置を反転し、時計回りに90°回転。
■■
■
■
●ナンバープレイス(pdfファイル)ナンバープレースというパズルを考察する。 ナンバープレイスとは、9×9盤のマス目に数字1から9を書き込むパズルである。 ただし、次の条件を満たす。 (条件1)縦の列、横の行に1から9までの数字がひとつずつ入る。 (条件2)3×3の正方形ブロック内に1から9までの数字がひとつずつ入る。 問題1 4×4の盤のマス目に数字1から4を書き込む。 ただし、次の条件を満たすこと。 (条件1)縦の列、横の行に1から4までの数字がひとつずつ入る。 (条件2)2×2の正方形ブロック内に1から4までの数字がひとつずつ 入る。 上の条件を満たす配置をすべて求めるプログラムを作成せよ。 □□□□ □□□□ □□□□ □□□□ 問題2 4×4の盤のマス目に数字1から4を書き込む。 ただし、次の条件を満たすこと。 (条件1)縦の列、横の行に1から4までの数字がひとつずつ入る。 (条件2)2×2の正方形ブロック内に1から4までの数字がひとつずつ 入る。 1234 34□□ □□□□ □□□□ 上の条件を満たす配置をすべて求めるプログラムを作成せよ。 問題3 9×9の盤のマス目に数字1から9を書き込む。 ただし、次の条件を満たすこと。 (条件1)縦の列、横の行に1から9までの数字がひとつずつ入る。 (条件2)3×3の正方形ブロック内に1から9までの数字がひとつずつ 入る。 1□□7□□4□□ □2□□8□□5□ □□3□□9□□6 7□□4□□1□□ □8□□5□□2□ □□9□□6□□3 4□□1□□7□□ □5□□2□□8□ □□6□□3□□9 上の条件を満たす配置をすべて求めるプログラムを作成せよ。●白玉黒玉交換問題(pdfファイル)
問題1 2n+1個のマス目がある。左のn個のマス目に白玉n個、右のn個のマス目に 黒玉n個を並べる。つぎの4条件(ア)〜(エ)を満たしながら白玉と黒玉 を交換する方法を考察する。 (ア)白玉、黒玉は同時に1個しか動かせない。 (イ)白玉は右にだけ、黒玉は左にだけ移れる。 (ウ)白玉は右隣の空いたマス目か黒玉を1個だけ飛び越え空いた マス目に移れる。 (エ)黒玉は左隣の空いたマス目か白玉を1個だけ飛び越え空いた マス目に移れる。 (1)2n+1個のマス目がある。左のn個のマス目に白玉n個、右のn個の マス目に黒玉n個を並べる。4条件を満たしながら白玉と黒玉を 交換する方法をすべて見つけるプログラムを作成せよ。 (2)2n+1個のマス目がある。左のn個のマス目に白玉n個、右のn個の マス目に黒玉n個を並べる。4条件を満たしながら白玉と黒玉を 交換するとき、最小移動回数とその方法をすべて見つける プログラムを作成せよ。 問題2 (1)2n+1個のマス目がある。左のn個のマス目に白玉n個、右のn個の マス目に黒玉n個を並べる。4条件を満たしながら白玉と黒玉を 交換するとき、白玉と黒玉の総移動回数を考察する。 総移動回数≧n(n+2) (2)a+b+1個のマス目がある。左のa個のマス目に白玉a個、右のb個の マス目に黒玉b個を並べる。4条件を満たしながら白玉と黒玉を 交換するとき、白玉と黒玉の総移動回数を考察する。 総移動回数≧ab+a+b (3)a=1のとき、解の個数がフィボナッチ数になることを示せ。●物差し問題(pdfファイル)
長さnの目盛りのついていない物差しがある。1からnまでのすべての
長さが測れるようにするには、1からn-1までのすべての目盛りがつけられて
いる必要はない。最小何個の目盛りをつけたらよいか。
また、目盛りのつけ方は何通りあるかを考察する。
ただし、物差しの両端は目盛りの個数から除く。
問題1 物差し問題
(1)集合{1,2,…,n}上のすべての部分集合を生成するプログラムを
作成せよ。
(2)物差し問題を解くプログラムを作成し、長さn(1≦n≦40)について、
目盛りの最小個数rとその方法の総数を求めよ。
(3)物差し問題プログラム(m121.c)において、すべての目盛りが
測定可能かどうか調べる部分には、工夫の余地がある。
実行時間が短かくなるように改良せよ。
●ハノイの塔問題(pdfファイル)
1.塔3本のハノイの塔問題
3本の塔a,b,cと大きさの異なるn枚の円盤が与えられたとき、
つぎの規則にしたがって、塔aから塔bへ円盤を移動する方法を考察する。
規則(1)1回に1枚の円盤のみ塔から塔へ移動できる。
規則(2)塔の一番上の円盤のみ移動できる。
規則(3)大きい円盤が小さい円盤の上にならない。
問題1 3本の塔のハノイの塔問題を解くプログラム(ha111.c)を
作成せよ。
2.塔4本のハノイの塔問題
4本の塔a,b,c,dと大きさの異なるn枚の円盤が与えられたとき、
つぎの規則にしたがって、塔aから塔bへ円盤を移動する方法を考察する。
規則(1)1回に1枚の円盤のみ塔から塔へ移動できる。
規則(2)塔の一番上の円盤のみ移動できる。
規則(3)大きい円盤が小さい円盤の上にならない。
問題2(1)4本の塔のハノイの塔問題を解くプログラム(ha211.c)を
作成せよ。
問題2(2)塔が4本、円盤がnmax枚のとき、円盤の移動回数を求める
プログラム(ha221.c)を作成せよ。
3.塔5本のハノイの塔問題
問題3(1)塔が5本、円盤がnmax枚のとき、解法1による円盤の
移動回数を求めるプログラム(ha311.c)を作成せよ。
問題3(2)塔が5本、円盤がnmax枚のとき、解法2による円盤の
移動回数を求めるプログラム(ha321.c)を作成せよ。
4.塔t本のハノイの塔問題
問題4(1)正整数mをr個の正整数に分割するプログラム(ha411.c)を
作成せよ。
問題4(2)塔が5本の時の解法2の考え方を拡張して、塔がtmax本、
円盤がnmax枚のとき、円盤の移動回数を求めるプログラム
(ha421.c)を作成せよ。
シェルプログラミング
●cshプログラミングの基礎(pdfファイル)
1.cshとは
1.1 シェルスクリプトファイルの書き方
1.2 シェルスクリプトファイルの実行方法
2.簡単なシェルスクリプト
2.1 date, cal
2.2 echo
2.3 リダイレクション パイプ エイリアス
3.シェル変数と演算
3.1 文字列の代入
3.2 数値の代入と演算
4.特別な変数
4.1 argv
4.2 $? $#
4.3 $$ $<
4.4 ワイルド・カード文字
5.コマンド置換
6.入力の埋め込み
7.割り込み
8.条件分岐
8.1 if文
8.2 switch文
9.制御構造
9.1 while文
9.2 repeat文
9.3 shift文
9.4 foreach文
10.トレース
●cshプログラミングの応用(pdfファイル)
1.課題
課題1:与えられたパス名からディレクトリ名とファイル名を分離し
出力せよ。
課題2:オプション(-in)の後に続く文字列とオプション(-out)
の後に続く文字列をそれぞれまとめる。オプションの指定が
なく文字列から始まるとき、-inを仮定する。
課題3:複数のファイルから与えられたパターンとマッチする文字列
を含む行を取り出せ。ただし、パターンは、'で囲むこと。
課題4:ファイルをコピーせよ。
課題5:標準入力からの入力をファイルに保存せよ。
課題6:あるディレクトリの直下にあるファイルをすべて表示せよ。
ディレクトリが指定されない場合、現ディレクトリとする。
課題7:あるディレクトリ以下の木構造をスタックを使って表示せよ。
課題8:コマンドを再帰的に呼び出すことができる。
再帰動作の確認をせよ。
課題9:指定されたディレクトリ以下の木構造を表示(再帰呼び出し
による)せよ。
課題10:指定されたディレクトリ以下の木構造を表示(再帰呼び出し
による)し、通常のファイルの場合、最初の20行を表示せよ。
また、不要なファイルは削除できること。
関連知識
●エスケープシークエンスの応用(pdfファイル)
1.はじめに
2.基本機能
2.1 画面のクリア
2.2 カーソルの位置指定と文字の色指定
2.3 領域
3.簡単なスクリーン・エディタ
3.1 カーソルの制御、文字入力機能
3.2 1文字挿入・削除、1行挿入・削除機能
3.3 スクロール機能
4.課題
4.1 課題1
●高精度演算(pdfファイル)1.はじめに 2.アーカイブファイル 3.定義される関数 3.1 display関数、set関数 3.2 add関数 3.3 sub関数 3.4 mul関数 3.5 divi関数 3.6 move関数 4.高精度計算実行例 4.1 アーカイブファイルの作成 4.2 高精度計算 5.課題 5.1 課題1 5.2 課題2●Mule入門(pdfファイル)
1.Muleの起動と終了
2.新規ファイル作成
2.1 日本語処理
3.ファイルの編集
4.ファイル操作
4.1 ファイル読込み
4.2 ファイル挿入
4.3 ファイル保存
5.モード
5.1 シェルモード
5.2 Diredモード
5.3 拡張モード
5.4 mailモード
5.5 rmailモード
5.6 viモード
5.7 w3モード
6.バッファの操作
7.電子ニュース
7.1 電子ニュースの読み方
7.2 電子ニュースの書き方
7.3 電子ニュースに対する返事の書き方
8.新しい関数の定義と実行
9.muleのインストール
9.1 かんなによる日本語入力
9.2 たまごによる日本語入力
●Mathematica入門(pdfファイル)1.はじめに 2.数値計算 2.1 四則演算と定数 2.2 組み込み関数 2.3 数の表示 2.4 代入 2.5 Print文 2.6 Do文 2.7 For文 2.8 While文 2.9 If文 2.10 和と積 2.11 関数の定義 [例2.1]1+1/2+1/3+…+1/n+…の計算 [例2.2]πの計算 [例2.3]2^n−1の素数 3.ファイル処理 3.1 ファイルからコマンド入力 3.2 ファイルへ結果の出力 [例3.1]ファイル処理の例 4.数式処理 4.1 方程式 4.2 式の展開、因数分解、部分分数展開、簡約化 4.3 級数、微分、定積分 4.4 漸化式 5.リスト処理 5.1 リスト 5.2 素数 5.3 集合 [例5.1]素数に関する問題 [例5.2]ピタゴラス数 [例5.3]リスト処理 6.グラフィックス 6.1 関数のグラフ 6.2 データのグラフ 6.3 データファイルの読込み [例6.1]グラフィックスの例 7.課題 7.1 課題1 7.2 課題2 7.3 課題3 7.4 課題4
その他