• 検索結果がありません。

第2回 配列を使ったプログ ラム

N/A
N/A
Protected

Academic year: 2021

シェア "第2回 配列を使ったプログ ラム"

Copied!
29
0
0

読み込み中.... (全文を見る)

全文

(1)

第2回 配列を使ったプログ ラム

~データをまとめて扱う方法~

(2)

学習目標

配列を使ったプログラムが書ける

配列を使う利点を説明できる

Java での配列の使い方を説明できる

配列と繰り返し文を使って賢いプログラムが書ける

情報を管理する簡単なアルゴリズムを考え、実 装できる

情報の追加アルゴリズムを考え、実装できる

情報の削除アルゴリズムを考え、実装できる

情報の検索アルゴリズムを考え、実装できる

(3)

2.1

配列と

for

2.1.1 コンピュータに得意な仕事をさせる

① 前回のプログラムの問題点

Java の文法⑤- for 文-

2.1.1 配列を使う

for 文だけでは問題解決しない

② 同じ意味のデータはまとめて扱う

Java の文法⑥-配列ー

③ 配列を利用したプログラム

④ 配列を利用する利点

(4)

2.1.1

コンピュータに 得意な仕事をさせる

前回までのプログラム

商品種類を追加する

取り扱っている商品種類を表示する

何が問題だったか?

(5)

前回のプログラムの問題点

変数を一つ一つ扱うのは大変

100個の商品種類を扱いたいときは、1 00個の変数を宣言しなければならない。

初期化や条件分岐も100個になってしま う。

人間の仕事ではない

(6)

解決するには

コンピュータは同じことを繰り返すの が得意。

繰り返し文 (for) を使おう!

(7)

Java

の文法⑤ー

for

文ー

仕事

i<10 no yes for(int i=0;i<10;i++){

仕事 ; }

i++

i=0

10

回仕事を

繰り返す時

(8)

①for

文だけでは問題解決しな い

for

文を使って、初期化することを考え ましょう。

  // 商品種類を保存するための変数を定義する int itemType01;

int itemType02;

int itemType03;

// 初期化する。 -1 を入ってないとする

   for(int i=0;i<3;i++){

ここになんて書けばいいの??

itemType+i = -1; とは書けないし。

}

(9)

② 同じ意味の

データはまとめて扱う

(1)

今までは、商品種類をたくさん入れる ために一つ一つの変数として扱ってい ました。

itemType01

itemType02

itemType03

itemType04 -1

-1

-1

-1

(10)

② 同じ意味の

データはまとめて扱う

(2)

同じ目的の変数が入る一つ一つの変数 をまとめて扱いたいときに配列が使え ます。

1まとめで名前をつけ、そこからは番号で たどります。

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

itemTypeArray( 配列全体の名前 )

あの人のうちは、

3 丁目の左から 4 番目だ よ!

(11)

配列と繰り返し

配列と繰り返しを使うことによって、

同じことを何度も書く必要がなくなり

 

ます。

// 商品種類を保存するための変数を定義する int[] itemTypeArray = new int[10];

// 初期化する。 -1 を入ってないとする

   for(int i=0;i<10;i++){

itemTypeArray[i] = -1;

}

(12)

Java

の文法⑥-配列-

int[] itemTypeArray = new int[10];// 大きさが 10 の配 列を作る

// 配列が作られた時点で、すべての要素には 0 が入 る。

// 配列の各要素の指定にはブラケット“ []” を用いる

itemTypeArray[0] = 103;//0 番地に 103 を挿入 itemTypeArray[1] = 22; //1 番地に 22 を挿入 itemTypeArray[2] = 51; //2 番地に 51 を挿入

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

0 0 0 0 0 0 0

0 0

0

103 22 51

(13)

③ 配列を利用したプログラム

// 追加と表示部分を抜粋 // 商品種類を追加する

itemTypeArray[0] = 1001;// コーラ itemTypeArray[1] = 1002;// ソーダ itemTypeArray[2] = 1003;// お茶 // 保存されている商品種類を表示する for(int i=0;i<10;i++){

if(itemTypeArray[i] != -1){// 商品が入っている

System.out.println(itemTypeArray[i]+" は販売中です ");

例題2-1

(Example2_1.java)

(14)

④ 配列を利用する利点・欠点

議論しよう

(15)

2.2

商品種類の管理

2.2.1

商品種類を管理するとは

① 目的の階層構造を考える

2.2.2

商品種類の管理プログラム

① 商品種類の追加

② 商品種類の検索

③ 商品種類の削除

2.2.3

今回のプログラムの問題点

(16)

2.2.1

商品種類を管理すると は

今までは、提示するだけでしたが、配列を 使って管理することを考えます。

商品種類を管理するとは、

取り扱う商品種類が増えたら、商品種類リストに 商品種類を追加する。

その商品種類を取りあつかっているかチェックす るために、商品種類リストから、商品種類の商品 番号を探す。

その商品種類を取り扱うのをやめたら、商品種類 リストから、商品種類を削除する。

(17)

今回プログラムすること

商品種類を追加すること

商品種類を検索すること

商品種類を削除すること

(18)

目的の階層構造で考える

自動販売機のプログラム

商品種類を管理する

商品種類を追加する

商品種類を検索する

商品種類を削除する

商品種類リストを提示する(前回やりました)

(19)

① 商品種類の追加

追加をさらに小さい目的に

“ 追加する”とはプログラムでどういう 手順で実現できるか?

1. まだ商品番号の入っていない箱を探す。

(-1 が入っている箱を探す。 )

2. 見つけたら、そこに商品番号を書き込む。

(20)

追加アルゴリズム

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

-1 -1 -1 -1 -1 -1 -1 0

0 0

1001 1002 1003

i 0123 1004

addId 1004

例題2-2

(Example2_2.java)

//--- 商品番号 1004(DD レモン ) を追加する --- int addId = 1004;

// 商品番号の入っていない箱を探す for(int i=0;i <10;i++){

if(itemTypeArray[i] == -1){// 見つけた

itemTypeArray[i] = addId;// 商品番号を書き込む break;

} }

(21)

② 商品種類の検索

検索のアルゴリズムを考えてみよう

ただし検索とは商品番号を指定し、

見つかったときに「見つかりました」と表示し

見つからなかったときに「見つかりませんでし た」と表示する

ということとする。

(22)

検索アルゴリズム(一例)

1. 検索する商品番号を指定する。

2. 配列を順番にたどり、検索する商品番号と、

配列に格納された商品番号の値が同じかどう か調べる。

3. 見つかったら、繰り返しを中止する。

4. 配列を辿った回数を保存しておき、

1. 配列を最後までたどった場合は、「見つかりませ んでした」と表示する

2. 配列を最後までたどらなかった場合は、「見つか りました」と表示する

(23)

検索プログラム

A

//--- 検索する --- int searchId = 1002;// ソーダを検索する

int i;// 配列を辿った回数を保存する for(i=0;i<10;i++){

if(itemTypeArray[i] == searchI d ){// 見つかった break;

} }

if(i == 10){// 最後まで辿ったが見つからなかった System.out.println(" 見つかりませんでした ");

}else{

例題2-3

(Example2_3.java)

(24)

検索プログラム

B

//--- 検索する --- int searchId = 1002;// ソーダを検索する

for(int i=0;i<10;i++){

if(itemTypeArray[i] == searchId){// 見つかった System.out.println(" 見つかりました ");

break;

}

if(i == 9){// 最後まで辿ったが見つからなかった System.out.println(" 見つかりませんでした ");

} }

例題2-4

(Example2_4.java)

(25)

③ 商品種類の削除

削除のアルゴリズムを考えてみよう!

(26)

削除アルゴリズム(一例)

まず、削除するものが何処にあるか、

検索する。

見つかったら、要素に

-1

を書き込む。

穴がないように、残りの要素をシフト する。

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]

0 0 0 0 0 0 -1

0 0

0

103 22 51 3434-18 83 345 187 -13 345 187 -1-1 34 を削除する例

(27)

削除のプログラム

//--- 削除する --- int deleteId = 1002;// ソーダを削除する

int i=0;// ループの回数を保存する for(i=0;i<10;i++){

if(itemTypeArray[i] == deleteId){// 見つかった

itemTypeArray[i] = -1;// 見つかったら、削除する(実は不要)

break;

} }

// 残りの要素をシフトする for(;i<9;i++){

itemTypeArray[i] = itemTypeArray[i+1];

例題2-5

(Example2_5.java)

(28)

穴がないようにするといいこ と

検索するときに、全部調べなくてすみ ます。

-1 があったら、その先を調べる必要があり ませんよね!

全部調べなくてすむアルゴリズムを考

えてみましょう。

(29)

2.2.3

今回の

プログラムの問題点

挿入のとき、配列が一杯だったらどう するか?

削除のとき、みつからなかったらどう するか?

データの重複をどうするか?

etc…

今回は考えなくてよいが、実際にはきちん と考えなければならないことがあります。

参照

関連したドキュメント

0.1uF のポリプロピレン・コンデンサと 10uF を並列に配置した 100M

第20回 4月 知っておきたい働くときの基礎知識① 11名 第21回 5月 知っておきたい働くときの基礎知識② 11名 第22回 6月

The author is going to discuss on morphological and phonological properties of, in traditional Japanese study KOKUGOGAKU, so-called auxiliary verb RAMU and related some

会議名 第1回 低炭素・循環部会 第1回 自然共生部会 第1回 くらし・環境経営部会 第2回 低炭素・循環部会 第2回 自然共生部会 第2回

第7回 第8回 第9回 第10回

16 単列 GIS配管との干渉回避 17 単列 DG連絡ダクトとの干渉回避 18~20 単列 電気・通信ケーブル,K排水路,.

第6回赤潮( Skeletonema costatum 、 Mesodinium rubrum 第7回赤潮( Cryptomonadaceae ) 第7回赤潮(Cryptomonadaceae). 第8回赤潮( Thalassiosira

製品の配送までをコンピューターを使って総合的に管理する経営手法)の観点から