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

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

新・明解Javaで学ぶアルゴリズムとデータ構造

新・明解C言語で学ぶアルゴリズムとデータ構造

JavaプログラミングⅠ

C言語によるアルゴリズムとデータ構造

情報処理Ⅰ

新・明解Javaで学ぶアルゴリズムとデータ構造

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

Java講座

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

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

プログラミング入門1

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


Prog1_3rd

解きながら学ぶJava入門編

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(Java) サンプル問題 知識科目 第 1 問 (

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

2

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

スライド 1

Microsoft Word - NonGenList.doc

Microsoft Word - VBA基礎(3).docx

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

2

Microsoft PowerPoint - prog03.ppt

デジタル表現論・第4回

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

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

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

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

kantan_C_1_iro3.indd

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

Microsoft Word - NonGenTree.doc

新版 明解C++入門編

JavaプログラミングⅠ

Microsoft Word - java a.doc

JavaプログラミングⅠ

明解Java入門編

プログラミング入門1

Prog1_10th

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

プログラミング入門1

JavaプログラミングⅠ

8 if switch for while do while 2

Prog1_6th

メソッドのまとめ

プログラミング基礎

Prog2_9th

新・明解Java入門

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

JavaプログラミングⅠ

プログラミングA

JavaプログラミングⅠ

プログラミングA

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

プログラミングA

PowerPoint プレゼンテーション

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

プログラミング入門1

Prog1_15th

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

プログラミング入門1

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

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

デジタル表現論・第6回

Prog1_2nd

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

プログラミング実習I

Microsoft Word - keisankigairon.ch doc

グラフと組み合わせ 課題 7 ( 解答例 ) 2013/5/27 1 列挙 n 個の文字の集合 { } S = a, a,, an の全てからなる文字列 つまり同じ文字を含まない 長さ n の文字列を列挙する 方法を考える 1. 何通りの文字列があるかを答えなさい また そのことが正しい

マークアップ言語

8 / 0 1 i++ i 1 i-- i C !!! C 2

JavaプログラミングⅠ

JAVA入門

PowerPoint プレゼンテーション

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

JavaプログラミングⅠ

解きながら学ぶC++入門編

Microsoft PowerPoint - prog04.ppt

情報実習Ⅱ

微分方程式 モデリングとシミュレーション

プログラムの基本構成

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

JavaプログラミングⅠ

プログラミング入門1

マークアップ言語

Microsoft PowerPoint - lec06 [互換モード]

Assignment_.java 課題 : 転置行列 / class Assignment_ public static void main(string[] args) int i,j; int[][] array = 1,,,,,,,,,,,,,1,1,; 行 列行列 i

メソッドのまとめ

JavaプログラミングⅠ

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

Microsoft Word - CompA-Ex doc

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

Javaプログラムの実行手順

ガイダンス

System.out.println("char : " + (int)character.min_value + "~" + (int)character.max_value); System.out.println("float : " + Float.MIN_VALUE + "~" + Flo

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

K227 Java 2

文字列操作と正規表現

Transcription:

1 algorithm List 1-1 a, b, c List 1-1 // import java.util.scanner; class Max3 { public static void main(string[] args) { Scanner stdin = new Scanner(System.in); int a, b, c; int max; // Chap01/Max3.java a1 Ÿ b3 Ÿ c2 Ÿ 3 System.out.println(""); System.out.print("a"); a = stdin.nextint(); System.out.print("b"); b = stdin.nextint(); System.out.print("c"); c = stdin.nextint(); max = a; if (b > max) max = b; if (c > max) max = c; System.out.println("" + max + ""); max a b max max b c max max c flowchart Fig.1-1 4 4 4 4 4 4 if

max = a; if (b > max) max = b; if (c > max) max = c; 上から下へと流れていく 開始 a max b > max No Yes b max b > c> a である場合に通る経路 1-1 c > max Yes Fig.1-1 No c max 終 了 b > max c > max a max a max フローチャートの記号は p.8 で解説します a, b, c 1, 3, 2 a, b, c 1, 2, 3 3, 2, 1 5, 5, 5 5, 3, 5 a, b, c 6, 10, 7-10, 100, 10 b c a List 1-2a, b, c 3

1 List 1-2 Chap01/Max3m.java // class Max3m { //--- a, b, c ---// static int max3(int a, int b, int c) { int max = a; if (b > max) max = b; if (c > max) max = c; return max; // public static void main(string[] args) { System.out.println("max3(3,2,1) = " + max3(3,2,1)); System.out.println("max3(3,2,2) = " + max3(3,2,2)); System.out.println("max3(3,1,2) = " + max3(3,1,2)); System.out.println("max3(3,2,3) = " + max3(3,2,3)); System.out.println("max3(2,1,3) = " + max3(2,1,3)); System.out.println("max3(3,3,2) = " + max3(3,3,2)); System.out.println("max3(3,3,3) = " + max3(3,3,3)); System.out.println("max3(2,2,3) = " + max3(2,2,3)); System.out.println("max3(2,3,1) = " + max3(2,3,1)); System.out.println("max3(2,3,2) = " + max3(2,3,2)); System.out.println("max3(1,3,2) = " + max3(1,3,2)); System.out.println("max3(2,3,3) = " + max3(2,3,3)); System.out.println("max3(1,2,3) = " + max3(1,2,3)); max3(3,2,1) = 3 max3(3,2,2) = 3 max3(3,1,2) = 3 max3(3,2,3) = 3 max3(2,3,2) = 3 max3(1,3,2) = 3 max3(2,3,3) = 3 max3(1,2,3) = 3 // abc // abc // acb // acb // cab // abc // abc // cab // bac // bac // bca // bca // cba Column 1-1 3 method max3 int a, b, c int ここでは 三値の最大値を求めるアルゴリズムが正しいことを 論理的に確認するとと もに プログラムの実行結果からも確認したわけです 四値の最大値を求めるメソッドを作成せよ ( もちろん それをテストするプログラム=クラスを作成しなければならない ) static int max4(int a, int b, int c, int d)

三値の最小値を求めるメソッドを作成せよ static int min3(int a, int b, int c) 四値の最小値を求めるメソッドを作成せよ static int min4(int a, int b, int c, int d) Column 1-1 三値の大小関係の組合せ 13 種類は 下図 によって列挙できます ( このような木を と呼びます ) 左端の枠から始めて 枠内 の条件が成立すれば上側の黒線を 成立しな ければ下側の青線をたどっていきます 右端 の枠内が大小関係です なお 最大値 最小値とは異なり 中央値 を求める手続きは複雑であり 右のようにな ります ( 各 return に与えられた注釈,, は下の図と対応しています ) static int med3(int a, int b, int c) { if (a >= b) if (b >= c) return b; else if (a <= c) return a; else return c; else if (a > c) return a; else if (b > c) return c; else return b; A B F G D E H C I J K L M 1-1 a b Yes No a>b a c b c b c a>c b c b>c a c b>c H 3 2 2 c>a=b I 3 2 1 b>a>c J 3 2 2 b>a=c b>c M 3 2 1 c>b>a A 3 2 1 a>b>c B 3 2 2 a>b=c a>c E 3 2 1 c>a>b F 3 3 2 a=b>c G 3 3 3 a=b=c K 3 2 1 b>c>a L 3 3 2 b=c>a C 3 2 1 a>c>b D 3 3 2 a=c>b

1 List 1-3 Fig.1-2 List 1-3 // import java.util.scanner; class JudgeSign { Chap01/JudgeSign.java 5 Ÿ public static void main(string[] args) { Scanner stdin = new Scanner(System.in); System.out.print(""); int n = stdin.nextint(); -5 Ÿ if (n > 0) System.out.println(""); else if (n < 0) System.out.println(""); else System.out.println(""); 0 Ÿ n 4 4 4 4 Fig.1-2 開 始 a n > max 0 No Yes それは正です a n < max 0 No Yes それは負です それは0です 終 了

if List 1-3 if (n == 1) System.out.println(""); else if (n == 2) System.out.println(""); else if (n == 3) System.out.println(""); n 1 2 3 if if ( ) else if ( ) else List 1-3 n 4 5-10 1 2 if 1-1 if (n == 1) System.out.println(""); else if (n == 2) System.out.println(""); else if (n == 3) System.out.println(""); else ; // List 1-3 if Column 1-2 プログラミング言語の世界では + や - などの演算を行う記号を(operator) と呼び 演算の対象となる式のことを(operand) と呼びます たとえば 大小関係の比較を行う式 a > b において 演算子は > であって オペランドは a と b です このように二つのオペランドをもつ演算子を(binary operator) と呼びます Java には 2 項演算子のほかにも オペランドが一つの(unary operator) と オペランドが三つの(ternary operator) があります? : 演算子は Java で唯一の3 項演算子です 式 a? b : c が評価されると 式 a を評価した値が真であれば b の値を生成し 偽であれば c の値を生成します

1 flowchart データ 処理 定義済み処理 判断

名前 名前 1-1 端子 List 1-2 を参考にして 三値の大小関係 13 種類すべてに対して中央値を求めて表 示するプログラムを作成せよ 中央値を求める手続きは 以下のようにも実現できるものの Column 1-1 中に 示した med3 と比較すると実行効率が悪い その理由を考察せよ static int med3(int a, int b, int c) { if ((b >= a && c <= a) (b <= a && c >= a)) return a; else if ((a > b && c < b) (a < b && c > b)) return b; return c;

101 1 n n 2 1 + 2 n 3 1 + 2 + 3 1 + 2 + + n Fig.1-3 List 1-4 Fig.1-3 開 始 0 sum 1 i ここを通過する際の i と sum の値の変化 i n Yes sum + i sum i + 1 i No i sum 1 0 2 1 3 3 4 6 5 10 6 15 終 了 while while ( 式 ) 文

11 List 1-4 // 1, 2,, nwhile import java.util.scanner; class SumWhile { public static void main(string[] args) { Scanner stdin = new Scanner(System.in); Chap01/SumWhile.java 1n n5 Ÿ 1515 1-2 System.out.println("1n"); System.out.print("n"); int n = stdin.nextint(); int sum = 0; int i = 1; // while (i <= n) { // in sum += i; // sumi i++; // i System.out.println("1" + n + "" + sum + ""); true 文 while 文では 最初に を評価した結果が false であればループ本体は一度も実行され ません この点が を実現する do 文 (p.14) と大きく異なります sum 0 i 1 i n i n i n i sum 複合代入演算子 += は右辺の値を左辺に加えます 単項演算子である増分演算子 ++ はオ ペランドの値を一つ増やします i n while i n n + 1 List 1-4 の while 文終了時点における変数 i の値が n + 1 となることを確認せよ ( 変 数 i の値を表示するプログラムを作成せよ )

121 while for for List 1-5 List 1-5 // 1, 2,, nfor import java.util.scanner; class SumFor { public static void main(string[] args) { Scanner stdin = new Scanner(System.in); Chap01/SumFor.java 1n n5 Ÿ 1515 System.out.println("1n"); System.out.print("n"); int n = stdin.nextint(); int sum = 0; // for (int i = 1; i <= n; i++) sum += i; // sumi System.out.println("1" + n + "" + sum + ""); Fig.1-4 loop limit Fig.1-4 開 始 0 sum 合計 i : 1, 1, n 合計 i : 1, 1, n sum + i sum i の値を 1 から始めて n になるまで一つずつ増やしながら繰り返す 終値増分初期値変数名 合計 終 了

13 i 1, 2, 3, 1 n 1 sum += i; Fig.1-5 for 1-2 for (for 初期化式 ; 式 1; 式 2) 文 for 初期化式 式 1 true 文 文 式 2 Fig.1-5 合計 i : 1, 2,, n sum + i sum 合計 for 初期化式 式 1 式 2 のいずれも省略でき ます ( セミコロンは省略できません ) また for 初期化式中で宣言された変数は その for 文の中でのみ利用できるものであり for 文の終了とともに消えてしまいます 4 4 4 for 文の実行が終了した後にも値が必要で あれば 以下のように for 文に先立って変 数を宣言しなければなりません int i; for (i = 1; i <= n; i++) sum += i; List 1-5 のプログラムをもとにして たとえば n が 7 であれば 1 から 7 までの和は 28 です ではなくて 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 と表示するプログラムを作成せよ ガウスの方法 ( たとえば 1 から 10 までの和であれば (1 + 10) * 5 によって求める ) を用いて和を求めるプログラムを作成せよ 整数 a, b を含め その間の全整数の和を求めて返す以下のメソッドを作成せよ static int sumof(int a, int b) なお a と b の大小関係に関係なく和を求めること たとえば a が 3 で b が 5 であれば 12 を a が 6 で b が 4 であれば 15 を返すこと

141 List 1-5 n -5 1-5 0 n List 1-6 List 1-6 Chap01/SumForPos.java // 1, 2,, ndon import java.util.scanner; class SumForPos { public static void main(string[] args) { Scanner stdin = new Scanner(System.in); int n; 1n n-6 Ÿ n0 Ÿ n10 Ÿ 11055 System.out.println("1n"); do { System.out.print("n"); n = stdin.nextint(); while (n <= 0); int sum = 0; // for (int i = 1; i <= n; i++) sum += i; // sumi System.out.println("1" + n + "" + sum + ""); n 0 n do do 文 while ( 式 ); while 文や for 文などとは異なり 構文の末尾にセミコロン ; が付きます

15 do Fig.1-6 Fig.1-6 1-2 読込み n を入力 n を入力 Yes n 0 No n > 0 読込み n の値は正になっている n の値は正になっている n 0 do n 右に示すように 二つの変数 a, b に整数値を読み込んで b - a の値を表示するプログラムを作成せよ なお 変数 b に読み込んだ値が a 以下であれば再入力させること a6 Ÿ b6 Ÿ a b8 Ÿ b - a2 正の整数値を読み込んで その値の桁数を表示するプログラムを作成せよ たとえば 135 を読み込んだら その数は 3 桁です と表示し 1314 を読み込んだら その数は 4 桁です と表示すること

161 List 1-7 List 1-7 // public class Multi99Table { public static void main(string[] args) { System.out.println("----- -----"); for (int i = 1; i <= 9; i++) { for (int j = 1; j <= 9; j++) System.out.printf("%3d", i * j); System.out.println(); Chap01/Multi99Table.java ----- ----- 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 Fig.1-7 i j for i 1 9 for j 1 9 1 i 1 j 1 9 1 * j i 2 j 1 9 2 * j i 3 j 1 9 3 * j 以下省略 i 1 9

17 Fig.1-7 開始 行ループ i : 1, 1, 9 列ループ j : 1, 1, 9 i * j を表示 列ループ 改行 行ループ 終了 変数 i と j の変化 i 1 j 1 2 3 4 5 6 7 8 9 2 1 2 3 4 5 6 7 8 9 3 1 2 3 4 5 6 7 8 9 4 1 2 3 4 5 6 7 8 9 5 1 2 3 4 5 6 7 8 9 6 1 2 3 4 5 6 7 8 9 7 1 2 3 4 5 6 7 8 9 8 1 2 3 4 5 6 7 8 9 9 1 2 3 4 5 6 7 8 9 j の値を1から9まで増やして繰り返す 1-2 j 1 9 右のように 九九の表の上と左に 掛ける数を表示するプログラムを作成せよ 表示には マイナス記号 - プラス記号 + 縦 線記号 を用いること 1 2 3 4 5 6 7 8 9 ---+--------------------------- 1 1 2 3 4 5 6 7 8 9 2 2 4 6 8 10 12 14 16 18 3 3 6 9 12 15 18 21 24 27 4 4 8 12 16 20 24 28 32 36 5 5 10 15 20 25 30 35 40 45 6 6 12 18 24 30 36 42 48 54 7 7 14 21 28 35 42 49 56 63 8 8 16 24 32 40 48 56 64 72 9 9 18 27 36 45 54 63 72 81 九九の掛け算ではなく足し算を行う表を表示するプログラムを作成せよ 右図のように 読み込んだ段数を一辺としてもつ正方形 を * 記号で表示するプログラムを作成せよ 5 Ÿ ***** ***** ***** ***** *****

181 * List 1-8 Fig.1-8 List 1-8 Chap01/TriangleLB.java // import java.util.scanner; public class TriangleLB { public static void main(string[] args) { Scanner stdin = new Scanner(System.in); int n; System.out.println(""); do { System.out.print(""); n = stdin.nextint(); while (n <= 0); for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) System.out.print('*'); System.out.println(); 5 Ÿ * ** *** **** ***** n 5 for i 1 n for j 1 i i 1 j 1 1 * * i 2 j 1 2 * ** i 3 j 1 3 * *** i 4 j 1 4 * **** i 5 j 1 5 * ***** 1 n i i * n n *

19 Fig.1-8 開始 行ループ i : 1, 1, n 列ループ j : 1, 1, i * を表示 列ループ 改行 変数 i と j の変化 ( 変数 nの値が5である場合 ) i j 1 2 1 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 j の値を1から i まで増やして繰り返す 1-2 行ループ 終了 直角三角形を表示する部分を独立させて 以下の形式のメソッドとして実現せよ static void trianglelb(int n) // さらに 直角が左上側 右上側 右下側の三角形を表示するメソッドを作成せよ static void trianglelu(int n) // static void triangleru(int n) // static void trianglerb(int n) // n 段のピラミッドを表示する関数を作成せよ ( 右図は 4 段の例 ) static void spira(int n) 第 i 行目には (i - 1) * 2 + 1 個の * 記号を表示して 最終行である第 n 行目には (n - 1) * 2 + 1 個の * 記号を表示すること * *** ***** ******* 右図のように n 段の数字ピラミッドを表示する関数を作成せよ static void npira(int n) 第 i 行目に表示する数字は i % 10 によって得られる 1 222 33333 4444444