計算とプログラム

  1. コンピュータによる計算
    1. コンピュータと問題解決
      • 問題解決の方法が不明な作業はコンピュータにはできない。
      • 「一般的な問題解決の方法を解明する」という問題を解決する方法はない。
    2. 計算の要素

      例題1: 年利率 r の複利計算で3年後までの元利合計の元金に対する比率を求める。

      解答1-1:

      R0 = 1
      R1 = 1 + r
      R2 = (1 + r)*(1 + r)
      R3 = (1 + r)*(1 + r)*(1 + r)
      解答1-2
      R0 = 1
      R1 = R0*(1 + r)
      R2 = R1*(1 + r)
      R3 = R2*(1 + r)
      解答1ではどのような順番で求めてもよいが、解答2では R0, R1, R2,, の順に求めなければならない。解答2の方が計算の回数が少なくなる。
      計算の要素: *(1 + r)
      順序付け
    3. 反復計算

      解答1-3:

      R0 = 1
      Ri = Ri-1*(1 + r) ... i = 1,2,3,,,
      反復
      1. 決められた回数だけ繰り返す。
      2. 指定された条件が成立している間、繰り返す。
      例題2. 年利率 r の複利計算で元利合計が最初の元金の 1.5倍以上になる最初の年数を求める。

      解答2

      R0 := 1
      i := 0
      while Ri <= 1.5 do
      i := i + 1
      Ri := Ri-1*(1 + r)
    4. 選択計算
      例題3 整数 x の絶対値を求める。

      解答3

      if x > 0 then x else -x
      例題4 次の2種類の複利計算において、1年半後の元利合計が大きいのはどちらか。
      (A) 年利率7%の1年複利。但し1年未満の半端な期間については3%の単利。
      (B) 年利率6%の3ヶ月複利。3ヶ月未満の半端な期間については3%の単利。 解答4
      a := (1 + 007) * (1 + 0.03*6/12)
      b := 1
      i := 0
      while i < 18 do
      i := i + 3
      b := b*(1 + (0.06/12*3))
      "ここで比較をおこなう"
      if a > b then "A方式が有利"
      else "B方式が有利"
    5. 計算要素の役割
      計算が順序付けられること
      計算の過程が明確に把握できる
      途中の結果を再利用することで計算の能率を高める
      反復計算
      定型処理の反復実行によって短時間での処理を行う (計算プログラムの行数を節約できる)
      選択計算
      判断=知的処理を可能にする。
  2. 計算とプログラム
    1. プログラムとアルゴリズム
      プログラム
      計算実行のやりかたを計算要素とその組み合わせで示したもの
      アルゴリズム
      解法の手順を重視し、抽象的な解法についての議論を行う。
      アルゴリズムを特定の記述形式で書き表したものがプログラム。 解の求まらないものはアルゴリズムとは呼ばないが、解の求まらないプログラムを 書くことはできる。
    2. プログラムの基本記法
      • 値をあらわす記号 ... 名前
      • 等号, 不等号, 代入, 演算記号
      • 反復 while 継続条件 do 反復内容
        for変数:=初期値to最終値do反復内容
      • 選択 if選択条件then成立時の計算else不成立時の計算
    3. 計算に対する名前づけ
    4. プログラミング

  3. 状態と変数
    1. 順序付けと状態
    2. プログラムの状態 プログラムに現れる変数の値の組で規定される
  4. プログラム言語 Pascal
    1. プログラム言語 プログラムを記述するための(人工)言語。記法約束事項(文法)
    2. 値、名前、式
      • :整数、実数、論理値、文字
      • 名前 英字で始まる英数字の列
      • 語記号 while, do, if, then, else,,,
      • 演算子
      • 式の評価
    3. 変数と定数
    4. 実行の制御
    5. データの構造化
    6. プログラムの構造化 サブルーチン、副プログラム、手続き、関数
    7. 入力と出力
    8. Pascalプログラム
      1. プログラム頭部 プログラム名や入出力の指定など
      2. 宣言・定義部 各種の宣言を行う。定数定義、変数宣言、手続き・関数宣言
      3. 実行部ひとつの複合文の形をしている。
      4. 末尾部ピリオド
  5. 計算の実行
    1. 言語処理系
      インタプリタ
      逐次解釈実行
      コンパイラ
      機械語への翻訳 (ソースプログラムから目的プログラムへ)
    2. プログラム作成の支援 ファイル、エディタ、文法チェック、デバッガ
    3. オペレーティングシステム

練習問題

  1. 次のプログラムについて以下の問いに答えよ。
    program p(input, output);
    var n, a, s, x, y: integer;
    begin
    read(n); read(a);
    x := 0; s := 0;
    while s+a < n do
    begin s := s+a; x := x+1 end;
    y := n-s;
    write(x); write(y);
    writeln
    end.
    1. 二つの正の整数25と7を入力した場合の、各変数の値の変化を追跡せよ。
    2. xyには最終的に何が求まるか。任意の正の入力値について答えよ。
    3. このプログラムは止まらないことがある。どのような場合か。
    4. 反復文の条件判定の直後において、3変数 a,s,x の値の間に どのような関係が成立しているかを示せ。
  2. 3個の代入文
    x:=y, y:=z, z:=x
    について考える。
    1. 実行の順番が任意であるとして、何通りの実行順序があるか。
    2. それぞれの実行順序について、x,y,z の最終的な値を示せ。 ここで、x,y,x の初期値を、それぞれ X,Y,Z とする。