計算機プログラミングI 担当: 増原英彦 • • • • 第1回 履習にあたって プログラミングとは? プログラムの作成・コンパイル・実行・修正 練習 1 計算機プログラミングI (増原) 2003年度 履習にあたって • Webページ参照 2 計算機プログラミングI (増原) 2003年度 プログラミングとは • プログラム • プログラミング – アルゴリズム • プログラミング言語 – 機械語・高級言語・Java言語 – コンパイル・インタプリタ・仮想機械 3 計算機プログラミングI (増原) 2003年度 プログラムとは 計算機に情報を処理させる手順の記述 • cf. ソフトウェアとほぼ同義 – ソフトウェアはプログラムの他にデータも含む – 「ソフト」でないプログラムもある (e.g., ファームウェア) • コンピュータのある所には必ず プログラムがある 4 計算機プログラミングI (増原) 2003年度 プログラミングとは • 狭義: ある手順を計算機に行わせる プログラムを記述すること • 広義: 与えられた問題の解決方法を考え, それを行うプログラムを作ること ※ アルゴリズム: 問題を解決するための 自明でない手順 – 計算機だけが対象ではない – e.g., ガウスの消去法、ドント方式、…… 5 計算機プログラミングI (増原) 2003年度 プログラミング言語とは プログラムを記述するための人工言語 • 言語なので文法・意味が決められている • 計算機が実行できる • 沢山ある: 1976年時点で米国防省で 使われていたプログラミング言語の 種類はいくつ? Audrey A. Hook, “A Survey of Computer Programming Languages” (1995) • Java言語はプログラミング言語のひとつ 6 計算機プログラミングI (増原) 2003年度 プログラミング言語とは プログラムを記述するための人工言語 • 言語なので文法・意味が決められている • 計算機が実行できる • 沢山ある: 1976年時点で米国防省で 使われていたプログラミング言語の 種類はいくつ? 450以上 Audrey A. Hook, “A Survey of Computer Programming Languages” (1995) • Java言語はプログラミング言語のひとつ 7 計算機プログラミングI (増原) 2003年度 プログラミング言語の種類 2種類に大別できる • 機械語 (machine languages): 計算機のCPUが直接実行できる 単純な命令の羅列 • 高級言語 (high-level languages): 人間が理解しやすいように 設計された言語 Java言語も高級言語の1つ 8 計算機プログラミングI (増原) 2003年度 機械語 2: 3: 4: 5: 6: 7: 8: xorl %eax,%eax xorl %edx,%edx addl %edx,%eax incl %edx cmpl $99,%edx jle 4 leave 計算機のCPUが 直接実行できる 単純な命令の羅列 • 人間には読み書きしづらい EAXの値を0にせよ EDXの値を0にせよ EAXの値をEDXだけ増やせ EDXの値を1増やせ EDXの値と99を比較せよ EDXの方が小さかったら4へ行け 退避していたEBPの値を戻せ (e.g., 数式は四則演算に分解; 文字列は文字コードを並べて表現) • CPUごとに違う 異なる種類の計算機で 同じプログラムを動かすことは難しい 9 計算機プログラミングI (増原) 2003年度 高級言語 人間が理解しやすいように設計された言語 • 複雑な処理・データを簡単に書ける (e.g., 数式・文字列) • 計算機は直接実行できない 翻訳(コンパイル)して実行 通訳プログラム(インタプリタ)を通して実行 Java言語は? 10 計算機プログラミングI (増原) 2003年度 高級言語の例 (Java言語) /** 最初のプログラムの例 */ public class T21 { public static void main(String[] args){ TurtleFrame f; //変数 f の型宣言 f = new TurtleFrame(); //TurtleFrameを作成しfに代入 Turtle m = new Turtle(); //Turtle を作成し,m の初期値として代入 Turtle m1 = new Turtle(); //もう1つ作成し,m1 の初期値として代入 f.add(m); //f に m を追加 f.add(m1); //f に m1 を追加 m.fd(100); //m よ前に 100 進め m.rt(90); //m よ右に 90 度回れ m.fd(150); //m よ前に 150 進め m1.rt(90); //m1 よ右に 90 度回れ m1.fd(100); //m1 よ前に 150 進め } } 11 計算機プログラミングI (増原) 2003年度 プログラムの実行方式 作成 機械語 プログラム 12 計算機プログラミングI (増原) 2003年度 プログラムの実行方式 作成 高級言語 プログラム 機械語 プログラム 機械語 プログラム (オブジェクト コード) 13 計算機プログラミングI (増原) 2003年度 プログラムの実行方式 作成 高級言語 プログラム 機械語 プログラム 機械語 プログラム (オブジェクト コード) 通訳プログラム (インタプリタ) 14 計算機プログラミングI (増原) 2003年度 プログラムの実行方式 機械語 プログラム 作成 機械語 プログラム (オブジェクト コード) 高級言語 Java言語 プログラム 通訳プログラム (インタプリタ) 仮想機械語 プログラム 実行 仮想機械 プログラム 15 計算機プログラミングI (増原) 2003年度 プログラムのコンパイルと実行 • ライブラリプログラムのコピー • コンパイル • 実行 16 計算機プログラミングI (増原) 2003年度 プログラムの編集 • • • • • すでにあるプログラムをコピー エディタを使って編集 コンパイル 実行 誤りの修正 (デバグ) 17 計算機プログラミングI (増原) 2003年度 課題 18 計算機プログラミングI (増原) 2003年度
© Copyright 2024 ExpyDoc