スライド 1

Similar documents
Java講座

メソッドのまとめ

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

プログラミング入門1

プログラムの基本構成

PowerPoint Presentation

ガイダンス

Javaプログラムの実行手順

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

プログラミングA

プログラミング入門1

Microsoft PowerPoint - prog03.ppt

スライド 1

デジタル表現論・第6回

プログラミング入門1

プログラミング入門1

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

Formal Engineering Methods for Software Development --An Introduction to SOFL--

メソッドのまとめ

デジタル表現論・第4回

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

プログラミング基礎I(再)

Program Design (プログラム設計)

PowerPoint プレゼンテーション

Prog1_6th

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

Microsoft PowerPoint - CproNt02.ppt [互換モード]

プログラミング入門1

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

プログラミング入門1

JavaプログラミングⅠ

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Prog1_3rd

オブジェクト指向プログラミング・同演習 5月21日演習課題

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

Microsoft PowerPoint - ruby_instruction.ppt

JavaプログラミングⅠ

JavaプログラミングⅠ

JavaプログラミングⅠ

PowerPoint プレゼンテーション

Microsoft Word - VBA基礎(6).docx

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

Microsoft Word - 3new.doc

C#の基本2 ~プログラムの制御構造~

プログラミングA

プログラミング入門1

プログラミングA

情報実習Ⅱ

JavaプログラミングⅠ

Microsoft Word - no11.docx

Microsoft Word - no103.docx

Microsoft PowerPoint - 計算機言語 第7回.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - chap10_OOP.ppt

2

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

プログラミング実習I

JavaプログラミングⅠ

JavaScriptで プログラミング

プログラミング基礎

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

JAVA入門

Microsoft PowerPoint - prog04.ppt

Prog1_2nd

Microsoft PowerPoint - C_Programming(3).pptx

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

Microsoft PowerPoint ppt

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

JavaプログラミングⅠ

Javaによるアルゴリズムとデータ構造

Microsoft PowerPoint - prog09.ppt

C#の基本

Microsoft PowerPoint - prog09.ppt

PowerPoint プレゼンテーション

プログラミング入門1

Microsoft Word - VBA基礎(3).docx

Microsoft PowerPoint - 09.pptx

2

問題1 以下に示すプログラムは、次の処理をするプログラムである

cp-7. 配列

JavaプログラミングⅠ

Microsoft PowerPoint - program.ppt [互換モード]

< 目次 > 1. 練習ファイルのダウンロード 表計算ソフト Excel の基本 Excel でできること Excel の画面 セル 行 列の選択 セルにデータを入力する ( 半角英数字の場合 )

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Prog1_15th


Microsoft PowerPoint - 3.pptx

PowerPoint プレゼンテーション

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

JavaプログラミングⅠ

問題 01 以下は コンソールより年齢を入力させ その年齢にあった料金を表示するプログラムである 年齢ごとの金額は以下の通りである 年齢の範囲金額 0 歳以上 6 歳以下 120 円 7 歳以上 65 歳未満 200 円 65 歳以上無料 package j1.exam02; import java

Javaの作成の前に

プログラミング基礎

Transcription:

プログラミングにおける数学の魅力 劉少英 ( りゅうしょうえい ) 情報科学部 コンピュータ科学科 教授法政大学 HP:http://cis.k.hosei.ac.jp

授業計画 1. プログラミングの基本概念 2. プログラミング言語 Java の紹介と演習 3. プログラムの形式仕様の紹介と演習

1. プログラミングの基本概念 (1) プログラムとは 何? (2) プログラムの作成プロセスは 何? (3) プログラムと数学の関係は 何?

(1) プログラムとは 何? 入力 プログラム 出力 入力 料理の調理 出力

数学的には プログラムが関数のようなものです 関数 f : X -> Y ここで f は プログラムで X は 入力の範囲を決める 定義域 という Y は 出力の範囲を決める 値域 という

プログラムの構成 : プログラム = データ構造 + アルゴリズム データ構造とは データを保存する 箱 の構造で Java の 変数 で表す アルゴリズムとは 一連の行動或いは命令の並び Java の 命令文 で表現する

(2) プログラムの作成プロセスは 何? 何をして欲しい どうやってする プログラムの機能仕様の作成 変換 プログラムの作成 仕様言語 : (1) 自然言語 (2) 形式言語 仕様によってプログラムテスト プログラミング言語 : (1) 自然言語 (2) 形式言語

(3) プログラムと数学の関係は 何? ( あ ) プログラムの意味は 数学で定義する ( い ) プログラム自体は 数学の関数のような ものです ( う ) プルグラム機能仕様は 数学によって 設計された形式言語で表現します

2. プログラミング言語 Java の紹介と演習 Java 言語の構造 Java の開発環境について

このスライドの目標 簡単な入出力を持つ Java プログラムの構築が出来るようになる

Java 言語の基本的な構造 プログラムは以下の様な構造で記述されるクラス名以外はおまじないなのであまり気にしないクラス名には英数字を利用して記述できる public class クラス名 { public static void main(string[] args){ // ここにプログラムを記述する // 次のページからはこの部分を説明する } }

Java のクラスの最低限の構造 下のコードが Java 言語での実行できる最小のコード ( 実行出来るだけで 実行しても何も起きない ) public class MyTest{ public static void main(string[] args){ // 最低限の構造 } }

Java 言語のプログラミング記述 先のページでの main 関数の書き方に付いて説明を行う public static void main(string args[]){ // 変数の宣言 // 入力 // アルゴリズム // 出力 } 以上の 4 つの項目の組み合わせで様々なプログラムを記述できる 次のページからは各項目に関して説明を行なっていく

変数とは? 変数とは プログラムで用いる様々な値 ( 整数 実数 文字等 ) を一時的に記憶しておくために使う入れ物の様なものである

Java 言語 ( 変数宣言 ) Java 言語での変数の宣言は以下の様に行う // 初期化を行わない場合型名変数名 ; セミコロンを忘れずに // 初期化を行う場合型名変数名 = 値 ; 型名に関しては次ページで説明を行う

変数の種類 今回使用するのは主に下の 4 つの変数の型を用いる データの種類整数小数点文字列論理型 Javaでの型 int double String boolean

Java 言語での変数宣言例 Java 言語中では以下の様な形で変数の宣言を行うことが出来る Public static void main(string[] args){ int a; // 変数自体の宣言 a = 10; //10を変数 aに代入 int b = 100; //100を変数 bに代入 double c = 1.5; //1.5をcに代入 String str= test ; // 文字列 testをstrに代入する // で囲まれた部分を文字列とする boolean bool = true; // 真の値をboolに代入する }

Java 言語 ( 出力 ) プログラムにユーザーからの入力する方法をここでは学ぶ public static void main(string args[]){ JOptionPane.showMessageDialog(null, 文字列 ); } このコードを実行すると右の図の様な結果がえられる 文字列 を変更することで様々な物を表示することが出来る

出力 基本的にコンピュータの計算過程を覗くことは出来ない 計算の結果や過程を知るためには プログラムとして自分で出力するための命令を指定してあげる必要がある

出力に使うおまじない 今回は以下の命令を用いる 固定の文字を表示する場合 JOptionPane.showMessageDialog(null, 文字 ); 変数の内容を表示したい場合 JOptionPane.showMessageDialog(null, 変数名 );

実行すると GUI の画面がポップアップする 実行するコード public class OutPutTest { public static void main(string[] args) { JOptionPane.showMessageDialog(null, " 出力 "); } } 実行結果 出力の部分を変えると表示されるメッセージも変更されます a

Java 言語 ( 入力 ) コンピュータに処理 ( 計算など ) をさせるために必要なパラメータを入力する必要がある 必要なパラメータはコードに埋め込むことも出来るが 対話的にユーザに入力させる方法をここでは学ぶ

入力に使うおまじない一覧 入力に使うおまじないは 入力するデータによって変更される Int 型の場合 int integer = Integer.parseInt(JOptionPane.showInputDialog(" メッセージ ")); Double 型の場合 double dec = Double.parseDouble(JOptionPane.showInputDialog(" メッセージ ")); String 型の場合 String str = JOptionPane.showInputDialog(" メッセージ ");

入出力のクラス練習 整数 小数 文字列をそれぞれ入力し入力された値を表示するプログラム public class InputTest { public static void main(string args[]) { int i = Integer.parseInt(JOptionPane.showInputDialog(" 整数入力 ")); JOptionPane.showConfirmDialog(null, i); ")); } } double d = Double.parseDouble(JOptionPane.showInputDialog(" 小数入力 JOptionPane.showConfirmDialog(null, d); String str = JOptionPane.showInputDialog(" 文字列入力 "); JOptionPane.showConfirmDialog(null, str);

実行結果

アルゴリズム アルゴリズムとは 問題を解くための手順を一般的な形で示したもの コンピュータに解るようにアルゴリズムを指示するためにプログラミング言語を用いて実装を行う 今回はアルゴリズムを実装するのに必要な様々な演算 ( 四則演算等 ) 条件分岐 繰り返しについて説明を行う

Java の四則演算 計算だけを行う場合 計算対象演算子計算対象 ; 例 ) 10 + 10; //10+10 を計算 計算の保存をする場合 計算結果 = 計算対象演算子計算対象 ; 例 ) a = 10 + 10;// 10+10 の結果を変数 a に入力

Java の四則演算の演算子 以下のような演算子が用意されている 計算 Javaの演算子 足し算 + 引き算 - 掛け算 * 割り算 /

四則演算の簡単な計算 以下のように足し算 引き算 掛け算 割り算が実行できる また複雑な数式も実現することも出来る public class AddSubMulDiv { public static void main(string args[]) { int i = 10; double d = 2.0; double result = 0; result = i + i;// result に 20.0 が入る JOptionPane.showMessageDialog(null, result); result = i - d;// result に 8.0 が入る JOptionPane.showMessageDialog(null, result); result = i * d;// result20.0 が入る JOptionPane.showMessageDialog(null, result); result = i / d;// reuslt に 5.0 が入る JOptionPane.showMessageDialog(null, result); result = i * d / 3.0;// 3 項以上の計算を行うことも出来る result = (i + i) / d;// 計算順位の低い物を先に実行したい場合は括弧で囲む } }

条件分岐 ここまでのプログラムは上から順に実行するだけだったが 条件分岐を学ぶことで複雑なプログラムを構築できるようになる 記述方法

Java の条件分岐 Java の条件分岐として以下の 4 つのものが使用できる if 文 if else 文 if else if 文 switch case 文 今回は if 文または if else 文を使用する

条件式 Java には比較を行うために必要な演算が定義されている 演算子 意味 == 等しい!= 等しくない > 右辺より大きい >= 右辺以上 < 右辺より小さい <= 右辺以下

条件分岐のクラス練習 入力した整数が奇数か偶数かを判定するプログラムを作成せよ Java には割り算の余りを求める演算子として % が用意されている 簡単な使い方 20 % 3 == 2 2 % 3 == 2

条件分岐のクラス練習 実装してもらうコード public static void main(string args[]) { } int i = Integer.parseInt(JOptionPane.showInputDialog(" 整数入力 ")); if (i % 2 == 1) { JOptionPane.showMessageDialog(null, " 入力した数字は奇数です "); } else { } JOptionPane.showMessageDialog(null, " 入力した数字は偶数です ");

繰り返し 同じ処理を繰り返して行いたい場合 必要な回数だけ処理を書くことで処理を行うことができる しかし 次ページの様に 1~100 まで表示するプログラムをそのまま書いた場合 プログラムの記述量が多くミスをする原因にもなってしまう

繰り返しを使わない場合 1~100 まで表示するプログラムを作る場合

for 文 定められた回数だけループを行う文 ループの準備ループの条件式ループ後の処理 ループの準備を 1 度だけ行い それ以後条件式に合致した場合に繰り返し処理を行い ループ後の処理を行う

1~100 までの数字を表示するプログラ ム このプログラムは 27 ページ目で示したプログラムと同じ意味を持つ この様に繰り返しの処理を行う場合は public class ForTest { public static void main(string args[]){ for(int i = 1; i<=100;i++){ JOptionPane.showConfirmDialog(null, i); } } }

配列 複数の数値の平均を求める場合など 複数のデータをひとまとめにして扱いたい場合がある Java には 複数のデータをひとまとめにするための仕組みの一つとして 配列 がある

Java による配列の宣言方法 変数の宣言に似ている [] を付けて宣言することで配列が用意される 右辺の数字を変えることで配列の長さを変えることが出来る ( この場合は 0~4 までの 5 個 ) [] で配列であることを示す おまじない 配列の長さを定義

配列への代入 値の利用方法 配列に代入をするために添字 (0 以上の数字 ) を利用する 添字は 0~ 全体の長さ -1 まであるので注意する 添字

配列を使わなかった場合 5 教科のテストの合計点を求めるプログラムを作る場合 public class Sum { public static void main(string args[]) { int kokugo, sugaku, rika, shakai, eigo; kokugo = 100; sugaku = 80; rika = 75; shakai = 60; eigo = 50; int sum = kokugo + sugaku + rika + shakai + eigo; JOptionPane.showConfirmDialog(null, sum); } }

配列 + 繰り返し 配列に加えて繰り返しを加えた場合 public class Sum { public static void main(string args[]) { int sum = 0; int []points = new int[5]; points[0]=100; points[1]=80; points[2]=75; points[3]=60; points[4]=50; for(int i =0;i<5;i++){ sum = sum + points[i]; // この様に簡単に記述ができる } JOptionPane.showConfirmDialog(null, sum); } }

配列と繰り返しのクラス練習 5 教科 7 科目に対応できるように変更を行ってください 入力を作成する場合は数学 国語 英語 ( 物理 化学 生物の中から二つ ) と ( 政治経済 世界史 日本史 現代社会の中から二つ ) の入力を作成してください

解答 public static void main(string args[]) { int sum = 0; int[] points = new int[7]; } points[0] = Integer.parseInt(JOptionPane.showInputDialog(" 数学の点数を入力 ")); points[1] = Integer.parseInt(JOptionPane.showInputDialog(" 英語の点数を入力 ")); points[2] = Integer.parseInt(JOptionPane.showInputDialog(" 国語の点数を入力 ")); points[3] = Integer.parseInt(JOptionPane.showInputDialog(" 物理の点数を入力 ")); points[4] = Integer.parseInt(JOptionPane.showInputDialog(" 化学の点数を入力 ")); points[5] = Integer.parseInt(JOptionPane.showInputDialog(" 政治経済の点数を入力 ")); points[6] = Integer.parseInt(JOptionPane.showInputDialog(" 世界史の点数を入力 ")); for (int i = 0; i < 5; i++) { sum = sum + points[i];// この様に簡単に記述ができる } JOptionPane.showConfirmDialog(null, sum);

Java の開発環境 今回は Java の開発環境として eclipse を用いる

Eclipse IBM によって製作された統合開発環境 (IDE) 読み方はエクリプスか, イクリプス 主に Java 言語を開発するときに用いられる開発環境 ライセンスは Eclipse Public License 無料です!

Eclipse の使い方 ( 起動方法 1) スタートメニューから起動する Eclipse3.6.x を選択してクリック

Eclipse の使い方 ( 起動方法 2) 起動するとようこそ画面が開くので 赤丸の部分をクリックし これを閉じる

Eclipse の使い方 ( 起動方法 3) このような画面になれば起動は成功

Eclipse の使い方 ( プロジェクトの作成 ) Eclipse では プログラムをプロジェクトという単位で管理する ここでは,Java のプロジェクトの作成方法について学ぶ

プロジェクトの作成 パッケージエクスプローラー上で右クリック 新規 プロジェクトを選択

プロジェクトの作成 (2) プロジェクト名に SummerCampus と入力し完了をクリック

Eclipse の使い方 ( クラスの作成 ) Java はクラス単位でソースコードを管理することが出来る 今回は単に実行ファイルを個別に作る際に用いる

クラスの作成 プロジェクトを開き src を右クリックし メニューを開く 新規 クラス を選択する

クラスの作成 (2) 左の様な画面が開いたら 名前に任意の名前を入れる また 注意としてどのメソッド スタブを作成しますか? で Public にチェックを入れる 入れ終わったら完了する

クラスの作成 (3) この様な画面が表示されていれば OK

Eclipse の使い方 (Java ファイルの実行 ) Eclipse での Java の実行方法について ここでは学ぶ

プログラムの実行 今作ったプログラムを実行してみる 作成したプログラム上で右クリック 実行 Java アプリケーション で実行される 空なので何も発生しない

Eclipse のクラス練習 Eclipse を起動してみよう!

Java の構文 ( 目次 ) 出力方法 数学的な関数 計算方法 変数 入力方法 条件分岐 ループ処理 配列 メソッド

出力 コンピュータの計算は外部から覗くことは一般的には出来ない ユーザに対して適切に計算結果を出力をする必要がある ここではその方法を学ぶ

JOptinPane 短い文字列の入出力 YES/NOの判定 OK/Cancelの判定 等を行うときに使用するクラス ここでは短い文字列の出力を行うために利用する

JOptionPane の使い方 出力では以下の様に利用する 一番目には null を入れる で囲まれた値は文字列として認識される

クラス練習 (1) 文字列を自分の好きなメッセージに変えてみて表示されるかどうかを調べてみよう

コメントアウト ある行をコンピュータに読み取らせないようにすることが出来る 利用例としては ソースコードを読む人のための説明 コードを一時的に使わないようにする Java では行頭に // を付けることで可能となる

変数の種類 変数に入っているものが何か解らないと困ったことが発生する 例 ) abc + 123 = abc123 文字と文字なら連結 abc +123=? 文字と数字なら? 中に入っているものが何であるかを示す必要がある

変数の宣言方法 Java で変数を使用するときは 変数として宣言を行う必要がある 変数の宣言方法 型名変数名 ; 例 ) int a; //int 型 ( 整数 ) の変数 a を用意する 初期値付きの変数の宣言方法 型名変数名 = 値 ; 例 ) int a = 10; //int 型の変数 a を用意し 10 を代入する

数学的な計算 Java では 簡単な四則演算 (+,-,*,/) から平方根 指数対数 三角関数などの数学で用いる様々な関数が事前に用意されている ここでは四則演算を学び 残りは必要に応じて関数の説明を行う

クラス練習 (2) 変数の値を変更して様々な計算を試してみよう

入力方法 コンピュータでの計算方法を学んできたが ここまでの方法では事前にコードに打ち込んだ値しか計算ができない JOptionPane を用いて利用する 今回はテンプレートを用いるので特に利用はしない

使用方法 以下のような方法で使用できる 戻り値は String 型なので適宜変換する必要がある Integer.parseInt や Double.parseDouble など

クラス練習 (3) 直角三角形の面積をユーザから入力された値によって計算するプログラムを作成しなさい

3. プログラムの形式仕様の紹介と演習 Program (process) P: x P y

プロセス仕様 (Process specification) プロセスとは 入力によって出力を出す操作です プロセスの機能を次のような仕様で定義します process A (input) output ext external variable pre P post Q comment end_process;

事例 1 process P( 入力は整数 ) 出力は実数 pre 入力はゼロではない post 出力は 入力の 5 倍で入力プラス 10 を割った結果より大きい実数である end_process x P y

事例 1 の形式プロセス仕様 process P(x: int) y: real pre x > 0 post y > (x + 10) / x * 5 end_process x P y

課題 1 次のプロセス仕様を実装するプログラムを Java で 作成しなさい process Computing(x: int) y: real pre x > 0 post y > (x + 10) / x * 5 end_process x P y

次のテストデータを用いて 作成されたプログラムをテストしなさい テスト結果 (y の値 ) を次の表に記入 仕様の pre- and postconditions (pre and post) を評価 及び自作したプログラムにある誤りを除去しなさい 20 3000000 0-20 -3000000-4.56 x y pre post

テストでエラーを発見した条件 pre => not post

課題 2 次のプロセス仕様を実装しなさい process P(x: int) y: int ext rd s: int pre x > s post x > s + 5 and y = x + s or x = s + 5 and y < x or x < s + 5 and y > x + s * 10 end_process x P 1 s y

次のテストデータを用いて 作成されたプログラムをテストしなさい テスト結果 (yの値) を次の表に記入 仕様のpre- and postconditions (pre and post) を評価 及び自作したプログラムにある誤りを除去しなさい x s y pre post 500 30 4000000 5000000 0 0-500 -30-4000000 -5000000 35 20

課題 3 次のプロセス仕様を実装しなさい process P(x: int) y: int x ext wr s: int pre x > s post x > ~s + 5 and y = x + s or x = ~s + 5 and y < x and s > ~s + x or x < ~s + 5 and y > x + s * 10 end_process P 1 s y

次のテストケースを用いて 作成されたプログラムをテストしなさい テスト結果 (yとsの値) を次の表に記入 仕様のpre and postconditions (pre and post) を評価 及び自作したプログラムにある誤りを除去しなさい x ~s s y pre post 500 3000 4000000 5000000 0 0-500 -500-5000000 -4000000 35.58 20.50

課題 4 円の面積をユーザから入力された半径によって 計算するプログラムを作成しなさい 円周率は Math.PI で 3.14 より正確な近似値を知ることが出来る

SOFL 仕様 process Circle(radius: real) area: real pre radius > 0 post area = radius * radius * 3.14 end_process

課題 5 三角形の面積を求めるプログラムを作成しなさい

SOFL 仕様 process Triangle(x: int, y: int) area: int pre x > 0 and y > 0 post area = x * y / 2 end_process

課題 6 簡単なじゃんけんプログラムを完成させてみよう 1,2,3 の入力に対して それぞれ グー, チョキ, パー を割り振る コンピュータの値は乱数 Math.random() を用いる

SOFL 仕様 process Rps(user: int, cpu: int) str: string pre user > 0 and cpu < 4 post user = cpu and str = あいこ or ( user < cpu or user = 3 and cpu = 1) and str = コンピュータの勝ち or ( user > cpu or user = 1 and cpu = 3) and str = あなたの勝ち end_process

課題 7 5 教科 ( 数学, 英語, 理科, 社会, 国語 ) の平均値を求めるプログラムを書いてみよう

SOFL 仕様 process Average(array: seq of int) avg: int pre len(array) > 1 post avg = sum(array) / len(array) end_process function sum(array: seq of int): int post len(array) > 1 and sum = hd(array) + tl(array) or sum=hd(array) end_function

関数 ( メソッド ) ここではプログラム中の命令のまとまりを 関数 としてひとまとまりにする方法を述べる 今のところ小さなプログラムしか書いてないが 大きなプログラムを書くときによく用いる イメージ的には数学の関数をイメージすると良い f(x)=x+1 等 これまでに使った Math.sqrt(int) などもその内の一つ

関数の書き方 引数 ( 値の受け渡し ) がない場合 と書くことが出来る test の部分は好きなアルファベットと数字の組み合わせで書くことが出来る

関数の呼び出し方 関数の呼び出し方は以下のとおりである

関数の書き方 ( 値渡しがある場合 ) 数学での f(x) の関数のように 値の受け渡しを行うことも出来る 上図の場合は int 型の value の値を受け渡す場合の関数の書き方である

関数の呼び出し方 ( 値渡しがある場合 ) 計算に必要な値を入れて呼び出す

関数の書き方 ( 戻り値がある場合 ) 関数に計算させた結果を取得することも出来る 関数から戻ってくる値を戻り値と呼ぶ 戻り値の型をここに書く return のあとに戻り値を書く

関数の呼び出し方 ( 戻り値のある場合 ) 関数の戻り値を直接変数に代入することが出来る

課題 8 ( 高級 ) 次のCDFD(Condition Data Flow Diagram) を実装しなさい r c Buy x Show z mbox mbox: moneybox Figure 1 Get a e

module System_Moneybox var mbox: nat; /*nat は 自然数の型である */ behav CDFD_Figure 1; process Show(x : sign) z : nat ext rd mbox /* rd = read */ pre true /* This precondition can be omitted */ post z = mbox comment Show is executed on the availablility of event x, under no specific condition, and will generate the output z that is equal to the money in the money box mbox. end_process;

process Get(z : nat) c : nat e: string ext wr mbox : nat /*wr = write */ rd a: nat /*toy price*/ post if z >= a then c >= a and c <= z and mbox = z c else e = The money in the money box is not enough. and mbox = ~mbox comment If input z, the total money in the mbox, is not smaller than a (the price of the toy to buy), an estimated amount of money c necessary to buy the toy, must be greater than or equal to a but smaller than z, and mbox must be updated with c; otherwise, an error message is given. end_process;

process Buy(c : nat) r : nat ext wr mbox: nat rd a: nat post r = c a and mbox = ~mbox + r comment If money c is greater than or equal to the toy-price a, output r will represents the remaining money after buying the toy with the toy-price, and put the remaining money r back to the money box, which is expressed by the expression: mbox = ~mbox + r. end_process; end_module;

適当なテストデータを生成 作成されたプログラム をテストしなさい そのテスト結果によって 必要で あれば プログラムの誤りを除去しなさい

学生の議論 学生たちは 数学とプログラミングおよびそれら の関係について自由に議論してもらいます

Thank You!