◎第3回 基本的な構造

下へ一覧へ
○テキスト第2章(2.2-)

○数値(と文字)を扱う 日常問題は実際は非常に複雑 行く、顔を洗うなどはできない ○コンピュータが直接に実行できることは何か アルゴリズムとは何か アルゴリズムを作るとはどういうことか 誰でも分かるように明確な作業手順を書く コンピュータにもわかるように書く コンピュータが直接に実行できることは何か ・記憶 数値を記憶すること ( 記憶場所が必要 ) ・転送 ( 代入 ) ある記憶場所から別の記憶場所へ数値を転送(コピー)すること ・演算 ( 数学関数 ) 記憶した数値どうしで演算を行なうこと ( その演算結果を記憶場所にしまうこと ) ・分岐 ( 制御の流れの変更 ) 演算結果により処理の順番(処理の流れ)を変えること ( 特別な場合として無条件に変えることも含む ) ( mule , mosaic , cp , sort , unix なども複雑な処理 みなこれらの作業 の組合せである )
下へ上へ ○変数 数学でいう変数とは少し違う 変数:数値または文字を記憶する場所 機械語では場所はアドレス(番地)で表す アドレス(番地)=記憶装置内の位置を表す数値 高級言語またはアルゴリズムでは変数につけた「名前」で表す ある値(一定の値、変数の値、計算結果)を変数に記憶させる。 ・転送(代入) 代入すると前の値は消える。そろばんのよう。 テキストでは := で表す。 多くのプログラミング言語では = で表す。 !等しいという意味ではない! (左辺) = (右辺) は、右辺の式を計算して、左辺の変数に代入することを 意味する。 i=j 変数 j の値を変数 i に代入する。 i=j+2 変数 j の値に2を加えた値を変数 i に代入する。 i=i+1 変数 i の値に1を加えた値を新たに変数 i に代入する。 i+1=j+2 左辺が変数でないので間違い(多くのプログラミング言語では) ・添字つき変数(配列) : 一連のデータを扱う ( 数学では下つき添字で表すことが多いが、 ここでは C の配列の表記 x[i] を用いる ) (配列の詳しい説明はあとで行なう)
下へ上へ ○題材 ・最大値、最小値を求める。 二つの数 三つの数添字つき変数の総和を求める。
○反復の詳細 初期化、初期設定 増分処理 後処理 繰り返し条件判断 前判定 (後判定) フローチャートによる表現前判定(後判定) ○よくある間違い 総和の場合 「初期設定忘れ」 「s=0 をしない」 「一つ違いの誤り」 「i=0 から始める」「i <n の間繰り返す」 ○手続き(詳しくはあとで) 一旦ある処理をするアルゴリズムを作ると それを他の処理の一部として使える。
下へ上へ アルゴリズムの定義 与えられた基本命令 転送(代入) 算術演算 論理演算(論理積論理和 否定) 大小相等の比較 と与えられた制御構造 逐次 選択 反復 (分岐) で構成されている アルゴリズムの要件 一般性 特定のデータだけで正しい答がでるようなものはだめ 明確性 いつだれがやっても同じデータに対しては同じ結果がでる。 停止性 基本命令の有限回の実行で終る
下へ上へ ○演習 以下の中から選択。PAD で描く。 ( 手で紙に描けばよい ) a) 三 つの数 L,M,N の 中央値(median)を求めるアルゴリズムを作れ。 (テキスト演習2.17)( ヒント ) b)三つの整数 L,M,N の最大値と最小値(4) を参考に四つの数 K,L,M,N の最大値と最小値を求めるアルゴリズムを作れ。 ( ヒント ) c) b) の方法を参考に n 個の数 x[1]〜x[n]の最大値と最小値を求める アルゴリズムを作れ。( ヒント ) d) a の n乗を計算するアルゴリズムを作れ。 e) n の 階乗を計算するアルゴリズムを作れ。(テキスト演習2.19)
一覧へ上へ ○レポート課題 (次回に紙で提出)(解答) 以下の手順をPADで描け。 ( pad2ps を用いてもよいし、手で描いてもよい。) 1. 次の2次方程式を解の公式を用いて解く手順を書け。 ( 第1回の課題 2 に対応する ) (a≠0) ( 具体的には判別式を用いて、解の種類を分類する。 複素数は、実部と虚部をそれぞれ求める。) 2.次にそれぞれの処理を行なうためのアルゴリズムについて、 PADの空欄を埋めてアルゴリズムを完成せよ。(いずれか一方を選択せよ。) a) x[i] の平均と標準偏差を求める。 (データ数を n とする。) b) 回帰直線を求める。 x[i],y[i]の n個のデータ点列から「適切な」直線(y=ax+b)の傾きa と切片bを求める。
一覧へ