アルゴリズムとプログラミング (Algorithms and Programming)

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
ループで実行する文が一つならこれでもOK
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
4章 制御の流れ-3.
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
計算技術研究会 C言語講座 第3回 Loops (for文 while文).
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング基礎I(再) 山元進.
プログラミング基礎I(再) 山元進.
PHP 概要 担当 岡村耕二 月曜日 2限 平成21年度 情報科学III (理系コア科目・2年生)
コンパイラ 第9回 コード生成 ― スタックマシン ―
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
情報基礎A 第7週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
PHP 概要 担当 岡村耕二 月曜日 2限 平成20年度 情報科学III (理系コア科目・2年生)
トキのカタチ2016 電子工作(Arduino)講習
JAVA入門② 変数と型 式と演算子 制御文.
第7回 条件による繰り返し.
プログラムの制御構造 選択・繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
JAVA入門.
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
繰り返し計算 while文, for文.
関数の定義.
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
地域情報学演習 VBAプログラミング 第3回 2017年10月24日
暗号技術 ~JAVAプログラム①~ (5週目)
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
高度プログラミング演習 (05).
プログラムの制御構造 配列・繰り返し.
VBで始めるプログラミング 第三回 コードを書こう!! まきはた@ナーク ’04/05/21.
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
アルゴリズムとデータ構造1 2006年7月11日
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
アルゴリズムとプログラミング (Algorithms and Programming)
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報処理Ⅱ 第3回 2007年10月22日(月).
プログラミングⅡ 第2回.
アルゴリズムとプログラミング (Algorithms and Programming)
C言語,ソースファイルの作成,コンパイル,実行
C言語復習 来週もこの資料を持参してください.
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
プログラミングⅠ 平成30年12月10日 森田 彦.
C#プログラミング実習 第2回.
地域情報学 C言語プログラミング 第4回 while文、do~while文、switch文、 2次元配列、ポインタ 2017年11月10日
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
C言語講座 制御(選択) 2006年 計算技術研究会.
JAVA入門⑥ クラスとインスタンス.
プログラミング入門 第4回講義 選択(分岐) - if, switch/case - データ構造とアルゴリズム(2)
プログラミング基礎演習 第4回.
コンパイラ 2012年10月11日
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
プログラミング1 プログラミング演習I 第2回.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
情報処理Ⅱ 第3回 2004年10月19日(火).
情報処理Ⅱ 2006年10月20日(金).
C言語講座 四則演算  if ,  switch 制御文.
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
プログラミングの原理 データ構造とプログラミング (第4回).
ファーストイヤー・セミナーⅡ 第10回 if文による選択処理(2).
Presentation transcript:

アルゴリズムとプログラミング (Algorithms and Programming) 第3回:条件分岐と繰り返し (前回補足)文字型に関して 条件分岐  if() ~ else  switch ~ case 繰り返し for(;;) do ~ while() while()~ 講義資料等: http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html

条件分岐(1) if() - else (もし、()ならば~、そうでないなら~) 例) 関係演算子 式が真(True)となる条件 == 右辺と左辺が等しい != 右辺と左辺が等しくない > 左辺が右辺より大きい < 左辺が右辺より小さい >= 左辺は右辺より大きいか等しい <= 左辺は右辺より小さいか等しい 条件式 例) if ( i == 1 ) {    iが1と等しかったときの処理; } else {    そうでないときの処理; 中カッコで囲んで 複数の文を記述

if-else文の注意点 { }を省略すると、直後の1行のみが実行の対象となる。(1行のみでもなるべく中カッコを使った方がわかりやすい) インデントは文法的には無意味だが、見やすさ、わかりやすさのためには大変重要!! コメント文とインデントを効果的に活用しよう 例)実行結果は? i = 1 ; if ( i > 1 ) System.out.println( i ); System.out.println( 2 * i );

論理演算子 if ( i > 0 && i <= 10 ) { iが0より大きくかつ10以下の場合の処理; } else { 演算名 演算結果が真となる条件 & 論理積 左辺と右辺の両方が真 | 論理和 左辺と右辺のどちらか、または両方が真 ^ 排他的論理和 左辺と右辺のどちらか一つだけが真 ! 否定 真偽の反転 && &と同じだが左辺がfalseなら右辺の評価は行わない || |と同じだが左辺がtrueなら右辺の評価は行わない if ( i > 0 && i <= 10 ) {    iが0より大きくかつ10以下の場合の処理; } else {    そうでないときの処理;

(~の条件を満たした上でさらに、もし、~だったら..) if文のネスト(入れ子) (~の条件を満たした上でさらに、もし、~だったら..) if ( m > 0 && m <= 12 ) {    if ( d > 0 && d <=31 ) { System.out.println( “m= “ + m + “d= “ + d ); } else { System.out.println( “dの値が不正です” ); System.out.println( “mの値が不正です” );

複数の条件で条件分岐 ( else if ) (~ではなく、もし、~だったら..) if ( m > 0 && m <= 9 ) {    System.out.println( “m=0“ + m ); } else if ( m > 9 && m <=12 ){    System.out.println( “m=“ + m ); else { System.out.println( “mの値が不正です“ );

m=5のときの動作 m=05 if ( m > 0 && m <= 9 ) { True m=5 if ( m > 0 && m <= 9 ) {    System.out.println( “m=0“ + m ); } else if ( m > 9 && m <=12 ){    System.out.println( “m=“ + m ); else { System.out.println( “mの値が不正です“ ); 実行結果 m=05

m=10のときの動作 m=10 if ( m > 0 && m <= 9 ) { False m=10 if ( m > 0 && m <= 9 ) {    System.out.println( “m=0“ + m ); } else if ( m > 9 && m <=12 ){    System.out.println( “m=“ + m ); else { System.out.println( “mの値が不正です“ ); True 実行結果 m=10

m=15のときの動作 mの値が不正です False if ( m > 0 && m <= 9 ) {    System.out.println( “m=0“ + m ); } else if ( m > 9 && m <=12 ){    System.out.println( “m=“ + m ); else { System.out.println( “mの値が不正です“ ); False 実行結果 mの値が不正です

if else の省略表記(条件演算子?:) class Sample1804 { Sample1804.java class Sample1804 { public static void main(String[] args) { int i = 200 ; int j = (i > 100) ? 1 : 0 ; System.out.println(j); } int j ; if( i > 100) j = 1 ; else j = 0 ;

値で条件分岐 switch() case switch ( 条件式 ) { case ラベル1: 処理1 case ラベル2: 処理2 ... default: 処理 } 条件式とcaseラベルを上から順に比較していき、一致したところで処理の実行に入る 一旦実行に入ったら、caseラベルとの比較は行われず、上から順に文が実行されるのみ caseラベルは単にエントリーポイントを決めるだけ 処理から抜けるにはbreak文の挿入が必要 caseのどれとも一致しない場合はdefault:文が実行される(省略可)

switch caseのサンプル:i=3の場合 class Sample1805 { public static void main(String[] args) { int i = 3 ; switch( i ) { case 1: System.out.println( “one” ); break; case 2: case 3: System.out.println( “two or three” ); default: System.out.println( “Out of range” ); break; } i=3 iとの比較の結果、値が異なる!→次のcaseへ 値が異なる!→次のcaseへ移る 値が一致!→対応する処理を実行する switchの外へ抜ける

i = 2の場合 class Sample1805 { public static void main(String[] args) { int i = 2 ; switch( i ) { case 1: System.out.println( “one” ); break; case 2: case 3: System.out.println( “two or three” ); default: System.out.println( “Out of range” ); break; } i=2 iとの比較の結果、値が異なる!→次のcaseへ 値が一致!→ここから文の実行を開始する ラベルとの比較は行われず、文が逐次実行される switchの外へ抜ける

i = 1の場合 class Sample1805 { public static void main(String[] args) { int i = 1 ; switch( i ) { case 1: System.out.println( “one” ); break; case 2: case 3: System.out.println( “two or three” ); default: System.out.println( “Out of range” ); break; } i=1 値が一致!→ここから文の実行を開始する switchの外へ抜ける

switch case文の動作と注意点 caseラベルの値が上から順番に評価され、不一致なら次のラベルの評価へ飛ぶ.一致すれば実行開始. breakを入れないと、ラベルが不一致でも、次の文が実行される break文の後ろにもセミコロン ; が必要! caseのどれにも当てはまらない場合はdefaultが実行される。(省略可) caseで指定できる値 数値リテラル 文字リテラル 変数や、文字列リテラルは不可

繰り返し(1) for文 class Sample1901 {  繰り返したい内容; } class Sample1901 { public static void main(String[] args) { int i ; System.out.println(“ループに入ります”); for( i = 0 ; i < 10 ; i++ ){ System.out.println(“まわっています ” + i ); } System.out.println(“ループ終了しました!”);

public static void main(String[] args) { int i ; class Sample1901 { public static void main(String[] args) { int i ; System.out.println(“ループに入ります”); for( i = 0 ; i < 2 ; i++ ){ System.out.println(“まわっています ” + i ); } System.out.println(“ループ終了しました!”); True 実行結果 変数の値 ループに入ります i = 1 i = 0 i =  まわっています 0

public static void main(String[] args) { int i ; class Sample1901 { public static void main(String[] args) { int i ; System.out.println(“ループに入ります”); for( i = 0 ; i < 2 ; i++ ){ System.out.println(“まわっています ” + i ); } System.out.println(“ループ終了しました!”); False 実行結果 変数の値 ループに入ります i = 1 i = 2 まわっています 0 まわっています 1 ループ終了しました!

for文の中だけで見える変数を宣言 class Sample1902 { public static void main(String[] args) { System.out.println(“ループに入ります”); for( int i = 0 ; i < 10 ; i++ ){ System.out.println(“まわっています ” + i ); } System.out.println(“ループ終了しました!”); for文の外では変数iの値は参照・変更不可

for文のネスト class Sample1903 { public static void main(String[] args) { ファイル名:Sample1903.java class Sample1903 { public static void main(String[] args) { System.out.println(“ループに入ります”); for( int i = 0 ; i < 3 ; i++ ){ for( int j = 0 ; j < 2 ; j++ ){ System.out.println(“まわっています ” + “i=“ + i + “ j=“ + j ); } System.out.println(“ループ終了しました!”);

繰り返し(2) while文, do while文 繰り返し処理の内容 } do { 繰り返し処理の内容 }while(条件式); セミコロンを忘れない!! 条件式を評価するタイミング:    処理を実行する前か、一度実行した後か クイズ:for文はどちらに近いか?

while文の例 class Sample2001 { public static void main(String[] args) { int i = 0; System.out.println(“ループに入ります”); while( i < 10 ){ System.out.println(“i=” + i ); i++; } System.out.println(“ループ終了しました!”);

do while文の例 class Sample2002 { public static void main(String[] args) { int i = 0; System.out.println(“ループに入ります”); do { System.out.println(“i=” + i ); i++; } while( i < 10 ); System.out.println(“ループ終了しました!”); } 条件によらず必ず1度は実行される

(for, while, do whileループ中で使用可) 途中で強制的にループを抜ける (for, while, do whileループ中で使用可) break文:  breakが含まれているループの外へ強制脱出 continue文:  ループブロック内で、continueより後ろに残っている文の実行を中止(ループからは脱出しない)

break文のサンプル class Sample2003 { public static void main(String[] args) { int i = 0; System.out.println(“ループに入ります”); while( i < 10 ){ System.out.println(“i=” + i ); if( i == 5 ) break; i++; } System.out.println(“ループ終了しました!”); ループの外へ

continue文のサンプル class Sample2004 { public static void main(String[] args) { System.out.println(“ループに入ります”); for(int i = 0;i < 3; i++) { for(int j = 0;j < 3; j++) { if( j == 1 ) continue ; System.out.println(“i=” + i + “ j=“ + j ); } System.out.println(“ループ終了しました!”); continue文の実行により、forループの残りの 文がスキップされる。ループからは出ない。

まとめ 条件分岐 繰り返し if-else switch case 関係演算子、論理演算子 for while do while break, continue