コンピュータの言語
Download
1 / 239

コンピュータの言語 - PowerPoint PPT Presentation


  • 78 Views
  • Uploaded on

コンピュータの言語. 2011 年度 秋学期 金曜1・2限 1限担当:山添大丈 2限担当:荻野正樹. コンピュータの言語 第六回. コンピュータのための処理手順 アルゴリズムの基礎 その2. 2. 2 . コンピュータのための 処理手順. アルゴリズムの基礎 データの探索と整列 様々なアルゴリズム. 第1回中間テストの結果. 1 時間目クラス. 2 時間目クラス. コンピュータと言語 2011  中間試験1回目. Q1. 14 通りの情報を表すには、( )ビット必要 ? a. 1, b. 2, c. 3, d. 4

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' コンピュータの言語' - armand-ryan


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

コンピュータの言語

2011年度 秋学期 金曜1・2限

1限担当:山添大丈

2限担当:荻野正樹


コンピュータの言語 第六回

コンピュータのための処理手順

アルゴリズムの基礎 その2

2


. コンピュータのための処理手順

アルゴリズムの基礎

データの探索と整列

様々なアルゴリズム


第1回中間テストの結果

1時間目クラス

2時間目クラス


コンピュータと言語2011 中間試験1回目

Q1. 14通りの情報を表すには、( )ビット必要? a. 1, b. 2, c. 3, d. 4

Q2. 2000通りの情報を表すには、( )バイト必要?  a. 1, b. 2, c. 3, d. 4

Q3. M(メガ)は、10の( )乗?  a. 3, b. 4, c. 5, d. 6

Q4. (2.25)10を2進数で表すと? a 1.01 b 10.001 c 1.001 d 10.01

Q5. (31.25)10を16進数で表すと? a 2F.2 b 2F.4 c 1F.2 d 1F.4

Q6. (101.01001)2を10進数で表すと?a 3.28125 b 5.28125 c 3.625 d 5.625

Q7. (101.01001) 2を16進数で表すと?a A.8F b 5.8F c A.48 d 5.48

注意:計算が大変だと思うので下記を参考にすること

1/2=0.5, 1/4=0.25, 1/8=0.125, 1/16=0.0625, 1/32=0.03125, 1/64=0.015625

Q8.アルファベット、数字を表現できる文字コードを( )バイト文字コードと呼ぶ。

a. 1, b. 2, c. 3, d. 4

Q9.漢字も表現できる文字コードを( )バイト文字コードと呼ぶ。a. 1, b. 2, c. 3, d. 4

Q10.世界中の文字を統一的に表すことを目指した文字コードとして、( )がある。

a. ASCII, b. EBCDIC, c. JIS, d. Unicode

Q11. 赤色を6桁の16進数で表すと(??)となる a. FF0000, b. 00FF00, c. 0000FF, d. FFFFFF

Q12. 紫色を6桁の16進数で表すと(??)となるa. FFFF00, b. 00FFFF, c. FF00FF, d. FFFFFF

Q13. (5A2)16を10進数で表すと?

Q14. (26)10 を2進数で表すと?



アルゴリズムとは(続き)

  • 計算などの問題を解くための手順

  • コンピュータの上で実行可能な処理手順

    • 曖昧な記述ではコンピュータが実行できない

  • アルゴリズムの表現

    ⇒ フローチャート(流れ図)

    • 順次処理が基本

    • 条件分岐

    • 繰り返し処理

フローチャートの例

開始

i = 7

No

i > 0

Yes

iの値を出力

i = i - 2

終了


アルゴリズムの構造化定理

  • どんな複雑な処理手順も3種類の基本構造から組み立てることができる

    • 1つの入口と1つの出口を持つすべてのプログラムは,「順次」「選択」「繰り返し」の3つの基本構造の組合せによって記述することができる

入口

プログラム

順次

選択

繰り返し

出口


変数

a

変数

a

変数

a

3

5

変数とは

  • 1つの値(数値や文字列)を一時的に保存する場所

    • 格納された値は,後から参照することができる

JavaScriptによるプログラム例

変数 a が利用できるようにする(変数 a を宣言する)

var a;

a = 3;

a = 5;

変数 a に数値3 を代入する

変数 a に数値5 を代入する(元の値3は参照できなくなる)


フローチャートの統一記号

開始

A=1?

(A増加ループ)

AをA+1に

A>=16

終了

ここに示したのは日本工業規格(JIS)で定められた統一記号の一部

10


カウンタ変数 iの変化

1回目 → (初期値) i = 22回目 → (1回目の値+3) i = 53回目 → (2回目の値+3) i = 84回目 → (3回目の値+3) i = 11

〔4回目は終了条件( i > 10 )が 成り立つので実行されない〕

カウンタ変数 i を2から始めて,3ずつ増やしながら処理を繰り返し,i が10より大きくなれば終了する

カウンタ変数を用いた繰り返し(例)

  • 「変数 : 初期値,増分,終了条件」を並べて示す

ループ名

条件が成り立てば終了する

ループA

i : 2 , 3 , i>10

カウンタ変数

終了条件

1回の繰り返しにおけるカウンタ値の増分

カウンタ変数の初期値

カウンタ変数の増分

処理

ループA


. コンピュータのための処理手順

アルゴリズムの基礎

データの探索と整列

様々なアルゴリズム


. コンピュータのための処理手順

アルゴリズムの基礎

データの探索と整列

様々なアルゴリズム


コンピュータの言語 第六回

コンピュータのための処理手順

アルゴリズムの基礎 その2

14


実用的なアルゴリズム

  • 整列(ならべかえ)アルゴリズム

    • 選択ソート (基本選択法)

    • クイックソート

  • 探索(指定のものがあるか探す)アルゴリズム

    • 逐次探索

    • 二分探索


5

4

3

0

1

2

配列とは

  • 複数の値を連続して保存する場所

    • ひとつひとつの保存場所 → 配列の要素

    • 保存場所を区別する数値 → 配列の添字

プログラム言語では配列の添字は0(ゼロ)から始まる

3

4

12

JavaScriptによるプログラム例

var data = new Array(6);data[0] = 3;data[1] = 4;data[3] = 12;

配列変数 data

6個の値が格納できる(添字 0~5)

4番目の要素(添字3)に 値12 を代入する


整列アルゴリズム

主にやるのは、

1.選択ソート(基本選択法)

2.クイックソート


いろいろな整列アルゴリズム

  • 選択法

    • 選択ソート(基本選択法),ヒープソート

  • 交換法

    • クイックソート,バブルソート(基本交換法),

  • 挿入法

    • 挿入ソート(基本挿入法),シェルソート(改良挿入法)

  • 併合法

    • マージソート

  • 基数法

    • ラディックスソート(基本整列法)


SelectionSort

整列アルゴリズム: 選択ソート (基本選択法)

  • 昇順の場合(1,2,3,4....という順番)

    • 全データの中から最も小さいデータを探して先頭のデータと入れ換える

    • 次に,2番目以降に並んでいるデータの中で最も小さいデータを取り出して2番目のデータと入れ換える

    • この操作を,末尾から2番目のデータと末尾のデータの比較が行われるまで続ける

  • 降順の場合(10,9,8,7....という順番)

    • 昇順の場合と同じ方法で,最も大きいデータと入れ換えるようにする


基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

28

3

3

17

25

24

10

3

10

17

25

24

28

17

入れ換える

3

10

17

25

24

24

28

残りの中から最小値を探す

3

10

17

24

25

25

28

3

28

17

25

24

10

10

入れ換える

3

10

17

24

25

28

選択ソートによる整列(昇順)

全体から最小値を探す


60基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

40

10

30

80

1

20

70

1

20

10

60

40

80

70

整列アルゴリズム2: クイックソート

整列したいデータの中から軸(基準)となる値を選ぶ

軸より小さなデータは全て左側へ,軸より大きなデータは全て右側へ移動させる

入れ替えが終了したらデータを2つに分けて,それぞれのデータに対して同じ操作を繰り返す

中央値を基準(軸)にする

軸より大

軸より小

軸より大

軸より小

(1)

移動させる

(2)

1

20

10

30

60

40

80

70

(3)

基準の中央の値で分けられた

左右のいずれかが0個または1個になると,その部分のデータは整列されている

軸より大きい部分

をクイックソート

軸より小さい部分

をクイックソート

1

10

20

40

60

70

80

1

20

10

10

1

1

20

20

1

10

20


探索アルゴリズム基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

ある数字や対象を探す

1.逐次探索

2.二分探索


逐次探索 基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける[同じものがない時]

  • 配列に格納されたデータを,先頭から1つずつ順番に調べる.

  • 目的の値(キー)に一致するデータが見つかれば処理を終了する

「大阪」は何番目にあるか?

注) 配列の添字は0から始まる

添字

配列

先頭から1つずつ調べていく

4番目に見つかった

違う

違う

違う


二分探索 <前提条件>基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

  • データが予め昇順か降順に整列していること

  • 整列(ソート)

    • データをある順番に並べること

    • 整列アルゴリズムは何種類も考えられている

  • 昇順と降順

    • 昇順: データを値の小さいものから順に並べること

      • 例 (1,2,3,4,5,6)

    • 降順: データを値の大きいものから順に並べること

      • 例 (6,5,4,3,2,1)


二分探索:並べてあるデータで探索基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

効率的に

  • 逐次探索の場合と比べて..

    • 逐次探索では先頭から順番に探索するため,データ数が多いほど探索時間は長くなる(効率的な探索ではない)

    • 順番に並べてあるデータでは、より効率的な探索方法として二分探索法がある(データ数が多くなっても効率が著しく低下しない!!)

  • 二分探索の手順

「キー」は目的のデータ

配列のほぼ中央にあるデータとキーを比較する

そのデータがキーと合致したら探索終了

合致しなければ,配列を半分にして中央のデータとキーの比較を行う

データが見つかるまでこの操作を繰り返す


OrderedArray基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

二分探索の例

データは予め整列していることが前提

重要

  • 配列中から値が10のデータを探す

中央値の添字には添字の最小値と最大値の平均値(小数点以下切捨て)を用いる

中央値

の添字

中央値

0 1 2 3 4 5 6 7 8 9 10

目的の値(10)は中央値(11)より小さい

中央値に対して大きいか小さいか

によって絞り込む

目的の値(10)は中央値(5)より大きい

データを半分ずつ絞り込んでいく

目的のデータ


それぞれのアルゴリズムと基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つけるフローチャート

カウンタ変数やフローチャートの書き方など

思い出していきましょう


整列アルゴリズム基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

主にやるのは、

1.選択ソート(基本選択法)

2.クイックソート


SelectionSort基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

整列アルゴリズム: 選択ソート (基本選択法)

  • 昇順の場合(1,2,3,4....という順番)

    • 全データの中から最も小さいデータを探して先頭のデータと入れ換える

    • 次に,2番目以降に並んでいるデータの中で最も小さいデータを取り出して2番目のデータと入れ換える

    • この操作を,末尾から2番目のデータと末尾のデータの比較が行われるまで続ける

  • 降順の場合(10,9,8,7....という順番)

    • 昇順の場合と同じ方法で,最も大きいデータと入れ換えるようにする


基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

28

3

3

17

25

24

10

3

10

17

25

24

28

17

入れ換える

3

10

17

25

24

24

28

残りの中から最小値を探す

3

10

17

24

25

25

28

3

28

17

25

24

10

10

入れ換える

3

10

17

24

25

28

選択ソートによる整列(昇順)

全体から最小値を探す


Data i

28基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

3

17

25

24

10

3

10

17

25

24

28

3

10

17

25

24

28

3

10

17

24

25

28

3

28

17

25

24

10

3

10

17

24

25

28

選択ソートでdata[i]配列を考える

N = 6 のとき

i番目の値を仮の最小値(min)とし,残りの i +1番目から N-1番目までで最小のデータを探す

開始

i を0から4(N-2)まで,1ずつ増やす

ループ1

i : 0, 1, i≧N-1

0

1

2

3

4

5

i = 0

3

i 番目からN-1番目までのデータから最小値minを探す

10

i = 1

17

i = 2

i 番目のデータdata[i]と

最小値minとを入れ換える

i = 3

24

i = 4

25

ループ1

終了


28基準となる先頭を1つずつずらしながら,順番が決定していないデータの中から最小値を見つける

3

17

25

24

10

3

10

17

25

24

28

3

10

17

25

24

28

3

10

17

24

25

28

3

28

17

25

24

10

3

10

17

24

25

28

選択ソートのフローチャート

min(最小値)

place(配列での

minの場所)

開始

??

??

ループ1

i : 0, 1, i ≧ N-1

ループ2

j : i+1, 1, j ≧ N

0

1

2

3

4

5

i = 0

3

min = data[i]

data[j]<min

No

10

i = 1

place = i

i = 2

17

Yes

並べ替え対象の先頭

min = data[j]

i = 3

24

minの場所

place = j

i = 4

25

data[i] と data[place]を

入れ替える

ループ2

ループ1

後の<練習問題>での観測点

終了


繰り返しのループが交差してはいけない(不適切な例)繰り返しのループが交差してはいけない(不適切な例)

ループ1

条件1

ループ2

条件2

処理 A

ループ1

処理 B

ループ2

繰り返しの入れ子(2重ループ)

繰り返しの中で,繰り返しを行うことも可能

ループ1

条件1

ループ2

条件2

処理 A

ループ2

処理 B

ループ1


<繰り返しのループが交差してはいけない(不適切な例)練習 2-13>選択ソートにおけるデータの様子

  • 基本選択法によって4個のデータ を整列させるとき,ループ2内で j の値が更新される直前に各変数の値がどのように変化するか以下の表に記入せよ

配列名 data は d と略記している


<繰り返しのループが交差してはいけない(不適切な例)練習 2-13> (解答)選択ソートにおけるデータの様子

  • 基本選択法によって4個のデータ を整列させるとき,ループ2内で j の値が更新される直前に各変数の値がどのように変化するか以下の表に記入せよ

配列名 data は d と略記している

60

40

30

2

30

3

10

10

10

60

30

40

2

30

30

3

40

30

10

30

60

40

2

3

40

40


60繰り返しのループが交差してはいけない(不適切な例)

40

10

30

80

1

20

70

1

20

10

60

40

80

70

整列アルゴリズム2: クイックソート

整列したいデータの中から軸(基準)となる値を選ぶ

軸より小さなデータは全て左側へ,軸より大きなデータは全て右側へ移動させる

入れ替えが終了したらデータを2つに分けて,それぞれのデータに対して同じ操作を繰り返す

中央値を基準(軸)にする

軸より大

軸より小

軸より大

軸より小

(1)

移動させる

(2)

1

20

10

30

60

40

80

70

(3)

基準の中央の値で分けられた

左右のいずれかが0個または1個になると,その部分のデータは整列されている

軸より大きい部分

をクイックソート

軸より小さい部分

をクイックソート

1

10

20

40

60

70

80

1

20

10

10

1

1

20

20

1

10

20


クイックソートの考え方繰り返しのループが交差してはいけない(不適切な例)

開始

軸の値を設定

(1)

軸を基準としたデータの入換え

(2)

軸より左側のデータ列に対して

クイックソート

(3)

クイックソート

軸より右側のデータ列に対して

クイックソートのアルゴリズムは,自分で自分自身を再帰的に呼び出す

終了


クイックソート繰り返しのループが交差してはいけない(不適切な例)

選択ソート

選択ソート

クイックソート

性能の比較


探索アルゴリズム繰り返しのループが交差してはいけない(不適切な例)

ある数字や対象を探す

1.逐次探索

2.二分探索


逐次探索 繰り返しのループが交差してはいけない(不適切な例)[同じものがない時]

  • 配列に格納されたデータを,先頭から1つずつ順番に調べる.

  • 目的の値(キー)に一致するデータが見つかれば処理を終了する

「大阪」は何番目にあるか?

注) 配列の添字は0から始まる

添字

配列

先頭から1つずつ調べていく

4番目に見つかった

違う

違う

違う


x 繰り返しのループが交差してはいけない(不適切な例)== data[1]

Yes

No

x == data[2]

Yes

No

より多くのデータを探索できるようにするには? (繰り返し構造を用いる)

逐次探索(データが3個の場合)

xは1つ目のデータ data[0] と等しいか?

  • 探索すべきデータを x とする

  • 3個のデータが配列 data に格納されている

開始

x == data[0]

Yes

No

data[0]data[1]

data[2]

データ数が3個のとき有効な添字は 0 ~ 2

探索成功

終了


逐次探索のフローチャート繰り返しのループが交差してはいけない(不適切な例)(カウンタ変数を用いた繰り返し)

開始

見つけるべきデータ x,

データ配列 data,

データ数 size を与える

初期値: 0

増分: 1

終了条件: i ≧ size

ループ1

i : 0, 1, i ≧ size

data[0]data[1]

data[2]

data[3]

・・・data[size-1]

x == data[i] が成り立つ

Yes

x == data[i]

size個

探索成功

No

ループ1

データ数がsize個のとき有効な添字は 0 ~ size-1

終了


前ページの逐次探索のフローチャートを,ループ端記号の代わりに選択構造を用いて書換える.右の空欄 (a) (b) に当てはまる内容を答えなさい

<練習 2-10> 逐次探索フローチャートでのループ書換

開始

(a)

(b)

No

Yes

Yes

x == data[i]

No

探索成功

i = i + 1

終了


配列の添字は 0 から始まる

i = 0

<練習 2-10> (解答)逐次探索フローチャートのループ書換

開始

(a)

探索が失敗した時,ここを通る

(b)

No

i < size

有効な添字は 0 ~ size-1

Yes

Yes

x == data[i]

No

探索成功

i = i + 1

ループ端記号を用いると繰り返しの処理(背景色が灰色部分)を簡潔に表すことができる

終了


二分探索 <前提条件>

  • データが予め昇順か降順に整列していること

  • 整列(ソート)

    • データをある順番に並べること

    • 整列アルゴリズムは何種類も考えられている

  • 昇順と降順

    • 昇順: データを値の小さいものから順に並べること

      • 例 (1,2,3,4,5,6)

    • 降順: データを値の大きいものから順に並べること

      • 例 (6,5,4,3,2,1)


二分探索:並べてあるデータで探索

効率的に

  • 逐次探索の場合と比べて..

    • 逐次探索では先頭から順番に探索するため,データ数が多いほど探索時間は長くなる(効率的な探索ではない)

    • 順番に並べてあるデータでは、より効率的な探索方法として二分探索法がある(データ数が多くなっても効率が著しく低下しない!!)

  • 二分探索の手順

「キー」は目的のデータ

配列のほぼ中央にあるデータとキーを比較する

そのデータがキーと合致したら探索終了

合致しなければ,配列を半分にして中央のデータとキーの比較を行う

データが見つかるまでこの操作を繰り返す


OrderedArray

二分探索の例

データは予め整列していることが前提

重要

  • 配列中から値が10のデータを探す

中央値の添字には添字の最小値と最大値の平均値(小数点以下切捨て)を用いる

中央値

の添字

中央値

0 1 2 3 4 5 6 7 8 9 10

目的の値(10)は中央値(11)より小さい

中央値に対して大きいか小さいか

によって絞り込む

目的の値(10)は中央値(5)より大きい

データを半分ずつ絞り込んでいく

目的のデータ


L (low)  : データを探索する配列の最小の添字

H (high) : データを探索する配列の最大の添字

M (mid) : 中央値の添字

M

M-1

M+1

data[M] の値 11 が中央値となる

配列の中央値

[x] は xを越えない整数を表す

(x が正の数なら切捨てと同じ)

M = [ (L+H) / 2 ]

L

H

配列 data


(3 < data[M] なので H = M-1)

L: 0

H: 1

(3)

1

2

  • L>H のとき探索対象データがない(探索失敗)

  • L<H または L=H の間は探索が成功する可能性がある

M: 0

(3 > data[M] なので L = M+1)

L: 1

H: 1

(4)

2

M: 1

(3 > data[M] なので L = M+1)

(5)

L: 2

H: 1

「3」の探索はL > H となって失敗する

二分探索による絞込みの例:13個のデータから「3」を検索

L: 0

M: 6

H: 12

(1)

data

(3 < data[M] なので H = M-1)

(2)

L: 0

H: 5

〔(L+H) / 2 の結果を切捨てる〕

添字 M = [ (L+H) / 2 ]

配列の中央値 data[M]

M: 2

「1」の探索なら成功!(このとき L < H )

「2」の探索なら成功!(このとき L = H )


< 練習問題> での観測点

x >= data[M]

x <= data[M]

x == data[M] が成り立つ

二分探索のフローチャート

ループ

L > H

開始

M = [(L+H) / 2]

L = 0

Yes

x < data[M]

H = size - 1

No

H = M - 1

No

x > data[M]

最大の添字は(データ数-1)

Yes

L = M + 1

見つけるべきデータ x,

データ配列 data,

データ数 size は予め与えられるものとする

探索成功

ループ

終了


二分探索によって,以下の9個のデータから「10」を探索する.中央値の添字 Mが計算された直後に,変数 L, M, Hの値がどのように変化するか以下の表に記入せよ

<練習 2-11> 二分探索(1)

L: 0

H: 8

data


< 練習 2-11> (解答) 二分探索(1)

  • 二分探索によって,以下の9個のデータから「10」を探索する.中央値 の添字Mが計算された直後に,変数 L, M, Hの値がどのように変化するか以下の表に記入せよ

(1)

L:0

H:8

4

M:4

0

1

3

(2)

L:0

H:3

2

2

3

M:1

(3)

L:2

H:3

M:2


以下の配列データから「6」を探索する.中央値 の添字Mが計算された直後の 各変数の値を以下の表に記入せよ.なお,該当しない繰り返しには「なし」と記入しなさい.

<練習 2-12> 二分探索(2)

L: 0

H: 5

data


< の添字練習 2-12> (解答) 二分探索(2)

  • 配列データから「6」を探索する

L: 0

H: 5

data

2

4

(1回目)

M: 2

3

4

5

5

6> data[M] なので L = M+1

L: 3

H: 5

5

5

5

7

なし

なし

なし

なし

(2回目)

M: 4

4回目の繰り返しに入る前に終了する

6> data[M] なので L = M+1

L: 5

H: 5

7

(3回目)

与えられた配列に存在するデータ「6」の探索に失敗したのはなぜか?

M: 5

6< data[M] なので H = M-1

L: 5

H: 4


Backup
Backup の添字


Obsolete
Obsolete の添字


前ページの逐次探索のフローチャートを,ループ端記号(前判定型)を用いて書換えなさい前ページの逐次探索のフローチャートを,ループ端記号(前判定型)を用いて書換えなさい

<練習 3-6> ループ端記号によるフローチャートの書換え

開始

キー x を入力

Nにデータ数を代入

i = 1

Yes

i < N

No

iの値を出力

終了


ループ1前ページの逐次探索のフローチャートを,ループ端記号(前判定型)を用いて書換えなさい

data[i] == x または i ≧ N

i = i + 1

ループ1

<練習 3-6> (解答) ループ記号によるフローチャートの書換え

開始

キー x を入力

Nにデータ数を代入

i = 1

繰り返しの終了条件

Yes

i < N

No

iの値を出力

終了


二分探索のフローチャート前ページの逐次探索のフローチャートを,ループ端記号(前判定型)を用いて書換えなさい

開始

ループ1

L > H

キー x を入力

中央より小さい方に絞り込む.最大値を (中央値-1)にする

M = [(L+H)] / 2

L = 0

Yes

x < data[M]

H = N-1

No

H = M - 1

Yes

x > data[M]

データがN個なのでHにNを代入する

No

L = M + 1

中央より大きい方に絞り込む.最小値を (中央値+1)にする

探索成功

探索に成功した場合の終了条件がないので,無駄な繰り返しが行われる

ループ1

終了


二分探索のフローチャート前ページの逐次探索のフローチャートを,ループ端記号(前判定型)を用いて書換えなさい(終了条件付き)

Fが0(ゼロ)になったら探索の繰り返しを終了

開始

ループ1

F == 0

キー x を入力

データが見つからなかった場合, L > H となる

M = [(L+H)] / 2

L = 0

Yes

x < data[M]

H = N-1

H = M - 1

No

No

F = 1

L > H

Yes

x > data[M]

Yes

No

Fの初期値を1に設定

探索失敗

L = M + 1

探索成功

F = 0

F = 0

ループ1

終了


フラグ前ページの逐次探索のフローチャートを,ループ端記号(前判定型)を用いて書換えなさい

  • アルゴリズムの中で,状態を記憶,参照するために使われるデータ(変数)のことをフラグ という

    • フラグ(旗): flag

  • 2種類の状態を区別する場合には,データに0か1を設定して用いることが多い

    • 前ページのフローチャートでは,探索できる状態かどうかを区別するために フラグFを用いた

      • Fの値が1の間は探索継続,0になったとき探索を終了する


二分探索のフローチャート前ページの逐次探索のフローチャートを,ループ端記号(前判定型)を用いて書換えなさい

開始

これ以上絞り込めないときに L > Hとなる

ループ1

L > H

x ← key

M ← [ (L+H) / 2 ]

L ← 1

H ← N

中央より大きい方に絞り込む最小値を (中央値+1) にする

x : T(M)

データがN個なのでHにNを代入する

H ← M -1

L ← M + 1

探索成功

ループ1

中央より小さい方に絞り込む最大値を (中央値-1) にする

探索に成功した場合の終了条件がないので,無駄な繰り返しが行われる

終了


二分探索のフローチャート前ページの逐次探索のフローチャートを,ループ端記号(前判定型)を用いて書換えなさい(終了条件付き)

Fが0(ゼロ)になったら探索の繰り返しを終了

開始

データが見つからなかった場合は L > H となる

ループ1

F = 0

x ← key

M ← [ (L+H) / 2 ]

F ← 1

L ← 1

H ← N

L : H

x : T(M)

探索失敗

Fの初期値

は1に設定

H ← M -1

L ← M + 1

探索成功

F ← 0

F ← 0

ループ1

探索が成功したときFを0(ゼロ)にする

探索が失敗したときFを0(ゼロ)にする

終了


コンピュータの言語前ページの逐次探索のフローチャートを,ループ端記号(前判定型)を用いて書換えなさい

2010年度 秋学期 金曜1・2限

1限担当:山添大丈

2限担当:米澤朋子


前ページの逐次探索のフローチャートを,ループ端記号(前判定型)を用いて書換えなさい. コンピュータのための処理手順

アルゴリズムの基礎

データの探索と整列

様々なアルゴリズム


出席などは今までとっていませんが、インフォメーションシステムを用いたこのような出席レポート(授業内外で提出)を求めます。

今回は、インフォメーションシステムを使ったことがない人のために、 課題提出の練習として、簡単な課題(レポート含まず)を出してもらいます。

提出期限:10月28日(木)

提出方法:テキストファイル

(kadai04学籍番号ローマ字名前.txt)

インフォメーションシステムを使った課題提出練習


コンピュータとは何か?

  • 従来の機械

    • 人間の身体的能力の限界を補うために作られた

    • 例: 電車,自動車,クレーン ・・・

  • コンピュータ

    • 人間に代わってアルゴリズムを自動的に実行する機械

    • 人間の脳みその役割を肩代わりする

    • 情報を「処理」する機械

  • 情報を「伝達」したり,「保存」するだけではない

    • 例: テレビ,ラジオ,電話,DVDレコーダ ・・・

    • ↑は人間が自分の脳みそで考えて使うものにすぎない


アルゴリズムとは

  • ある問題を解決する(解く)ために必要な処理と手順を表したもの

  • JISによる定義

    • 「明確に定義された有限個の規則の集まりであって,有限回適用することによって問題を解くもの」

問題

一連の処理と手順

アルゴリズム

結果


2 を足す

2を足す

2を足す

2を足す

アルゴリズムとは(続き)

  • ある問題を解くためのアルゴリズムは1通りではなく,いくつもの方法が存在する

問題: 2の4倍は?

0

2

+2

+2

+2

2×4

2

4

6

結果は8


アルゴリズムとは(続き)

  • 計算などの問題を解くための手順

  • コンピュータの上で実行可能な処理手順

    • 曖昧な記述ではコンピュータが実行できない

  • アルゴリズムの表現

    ⇒ フローチャート(流れ図)

    • 順次処理が基本

    • 条件分岐

    • 繰り返し処理

フローチャートの例

開始

i = 7

No

i > 0

Yes

iの値を出力

i = i - 2

終了


フローチャートの統一記号

開始

A=1?

(A増加ループ)

AをA+1に

A>=16

終了

ここに示したのは日本工業規格(JIS)で定められた統一記号の一部


アルゴリズムとは(続き)

  • 計算などの問題を解くための手順

  • コンピュータの上で実行可能な処理手順

    • 曖昧な記述ではコンピュータが実行できない

  • アルゴリズムの表現

    ⇒ フローチャート(流れ図)

    • 順次処理が基本

    • 条件分岐

    • 繰り返し処理

フローチャートの例

開始

i = 7

No

i > 0

Yes

iの値を出力

i = i - 2

終了


よいアルゴリズムとは

  • 当然アルゴリズムは正確に結果を導けるものでなくてはならない。しかし,,,,

正確で効率が良く分かりやすい

誤った答えが導かれる

複雑で分かりにくい

正確で効率が良く,分かりやすいプログラムを作成するには,アルゴリズムの設計が重要


アルゴリズムの構造化定理

  • どんな複雑な処理手順も3種類の基本構造から組み立てることができる

    • 1つの入口と1つの出口を持つすべてのプログラムは,「順次」「選択」「繰り返し」の3つの基本構造の組合せによって記述することができる

入口

プログラム

順次

選択

繰り返し

出口


アルゴリズムとプログラム

  • アルゴリズム

    • 具体的な記述方法によらない抽象的な解法の手順

  • プログラム

    • ある計算の実行方法を,ある記述方法(例えば,フローチャートやC言語などの)基本要素とその組合せによって示したもの

    • 特定のプログラム言語を用いて,ある解法の手順(アルゴリズム)を記述したもの

      • 1つのアルゴリズムでも異なるプログラム言語で記述できる

  • 今後、アルゴリズムを、フローチャートやプログラム記述によって説明していくことが増えます。


アルゴリズム要素1:順次構造

  • 1つの処理が終了したら,次の処理に順次進む

フローチャートによる記述

開始

処理1

aに3を代入

処理2

bに4を代入

処理3

a×b を出力

終了


変数 a を宣言し,その値として3を代入する

a*b の結果をダイアログ(小ウィンドウ)に出力する

例1: 演算結果の出力プログラム〔順次構造〕

JavaScriptによるプログラム例

フローチャート

var a = 3;

var b = 4;

alert(a*b);

開始

aに3を代入

bに4を代入

「b = 4」としてもよい.

(b と 4 が等しいという意味ではない)

a×b を出力

終了


変数

a

変数

a

変数

a

3

5

変数とは

  • 1つの値(数値や文字列)を一時的に保存する場所

    • 格納された値は,後から参照することができる

JavaScriptによるプログラム例

変数 a が利用できるようにする(変数 a を宣言する)

var a;

a = 3;

a = 5;

変数 a に数値3 を代入する

変数 a に数値5 を代入する(元の値3は参照できなくなる)


変数 a を宣言し,その値として3を代入する

a*b の結果をダイアログ(小ウィンドウ)に出力する

例1: 演算結果の出力プログラム〔順次構造〕

JavaScriptによるプログラム例

フローチャート

var a = 3;

var b = 4;

alert(a*b);

開始

aに3を代入

bに4を代入

「b = 4」とプログラムでは記述するが、

(b と 4 が等しいという意味ではなく、

あくまで代入の意味

a×b を出力

終了


Javascript
参考 : JavaScriptプログラムの実行

マウスでアイコンをダブルクリック

<html><head><title>プログラム例1</title></head><body><h1>プログラム例1</h1>

<script type="text/javascript"> var a = 3; var b = 4; alert(a*b);</script></body></html>

エディタで入力しeg1.html として保存


入力された文字列を数値に置き換える

説明(“aを入力”)を

文字入力ダイアログに表示する

例2: ユーザからの入力 〔順次構造〕

フローチャート

JavaScriptによるプログラム例

開始

aに数値を入力

var a = Number ( prompt("aを入力") );

var b = Number ( prompt("bを入力") );

alert(a*b);

bに数値を入力

a×b を出力

終了


b =

<練習2-1> 順次構造(1)

  • 買い物の合計金額(税別)が変数 a に入力されたとする.変数 b に2割引の金額,変数 c に消費税(5%)込みの支払い金額を代入し,最後にcの値が出力されるように,右のフローチャートの空欄を埋めなさい

    • ただし,1円未満の端数については考えなくてよい

開始

aに数値を入力

cの値を出力

終了


b =

<練習2-1> (解答)順次構造(1)

  • 買い物の合計金額(税別)が変数 a に入力されたとする.変数 b に2割引の金額,変数 c に消費税(5%)込みの支払い金額を代入し,最後にcの値が出力されるように,右のフローチャートの空欄を埋めなさい

    • ただし,1円未満の端数については考えなくてよい

開始

aに数値を入力

a × 0.8

c =

b × 1.05

cの値を出力

終了


< 練習2-2> 順次構造(2)

  • 右のフローチャートにおいて,変数 aに 3,bに 5 を入力したとき,最後に出力される a,b の値を答えなさい

開始

aに数値を入力

bに数値を入力

変数c に変数a の値を代入する

c = a

a = b

b = c

ここで出力される値は?

??

aの値を出力

??

bの値を出力

終了


3

変数

a

変数

c

変数

b

変数

c

変数

a

変数

b

変数

a

変数

c

変数

b

5

3

3

5

このフローチャートは変数a と bの値を入れ替える処理

(1) aの値を一時的にcに退避

(2) bの値をaに移す

(3) cに退避したaの値を bに移す

3

5

3

5

<練習2-2> (解答)順次構造(2)

aに3,bに5 を入力

「変数」は箱(入れ物)

「値」は入れ物の中身

開始

aに数値を入力

変数aの中身(値)を変数cの箱に移しても,aの値は変わらない

5

3

bに数値を入力

c = a

a = b

b = c

aの値を出力

bの値を出力

終了

aの値は5,bの値は3


アルゴリズム要素2:選択構造

  • ある条件によって2つの処理のどちらかを選択して実行する

  • x>y, x≧yなどで分岐

開始

年齢を入力

条件を満たさなければこちらの処理を実行

条件を満たせばこちらの処理を実行

No

年齢>12

Yes

大人運賃

の処理

小人運賃

の処理

No

条件

Yes

処理2

処理1

終了


文字列を連結して出力する

例3: 数値の判別 〔選択構造〕

フローチャート

JavaScriptによるプログラム例

var age = Number( prompt("年齢は?", "18") );

if (age>12) { alert( age + "歳は大人運賃です" );} else { alert( age + "歳は小人運賃です" );}

開始

ageを入力

age>12

No

Yes

大人運賃

の処理

小人運賃

の処理

終了


< 練習2-3> 選択構造(1)

  • ある学部の卒業要件では,講義科目を50単位以上,実習科目を12単位以上取得する必要がある.さらに,在籍年数は8年以下でなければならない.この条件に基づいて,卒業可能かどうかを判定する右のフローチャートを完成させなさい.

開始

講義科目の取得単位数 a を入力

実習科目の取得単位数 b を入力

在籍年数 c を入力

a

b

c

卒業可能

卒業できない

終了


開始

講義科目の単位数 a を入力

実習科目の単位数 b を入力

在籍年数 c を入力

No

Yes

a

< 50

No

No

Yes

b

< 12

No

No

Yes

c

> 8

No

卒業可能

卒業できない

終了

このフローチャートも誤りではないが,条件の与え方が直感的に分かりにくい

<練習2-3> (解答)選択構造(1)

開始

講義科目の単位数 a を入力

実習科目の単位数 b を入力

在籍年数 c を入力

講義科目を50単位以上取得したか?(50単位でも良いので ≧ となる)

a

≧ 50

Yes

b

実習科目を12単位以上取得したか?(12単位でも良いので ≧ となる)

≧ 12

Yes

c

≦ 8

在籍年数が8年以下か?

(不等号の向きに注意)

Yes

卒業可能

卒業できない

終了


< 練習2-4> 選択構造(2)

  • 大阪市のあるテーマパークの入場料は,65歳以上または12歳以下の大阪市民に対して特別割引,その他の大阪市民には優待割引が適用される.

  • この条件に基づいて,入場割引の種別を判定する、右のフローチャートを完成させなさい.

開始

年齢を変数 a に入力

大阪市民?

a

a

特別割引

優待割引

割引なし

終了


大阪市民として割引は受けられるが,さらに条件を絞込む大阪市民として割引は受けられるが,さらに条件を絞込む

<練習2-4> (解答) 選択構造(2)

  • 特別割引:

    • 大阪市民で

    • 65歳以上または12歳以下

  • 優待割引:上記以外の大阪市民

  • 割引なし:大阪市民でない人

開始

年齢を変数 a に入力

大阪市民?

No

Yes

a

≧ 65

No

Yes

a

≦ 12

No

Yes

特別割引

優待割引

割引なし

終了


コンピュータの言語 第五回大阪市民として割引は受けられるが,さらに条件を絞込む

コンピュータのための処理手順

アルゴリズムの基礎 その2

93


出席などは今までとっていませんが、インフォメーションシステムを用いたこのような出席レポート(授業内外で提出)を求めます。

今回は、インフォメーションシステムを使ったことがない人のために、 課題提出の練習として、簡単な課題(レポート含まず)を出してもらいます。

提出期限:10月28日(木)

提出方法:テキストファイル

(kadai04学籍番号ローマ字名前.txt)

インフォメーションシステムを使った課題提出練習


アルゴリズムとは(続き)

  • 計算などの問題を解くための手順

  • コンピュータの上で実行可能な処理手順

    • 曖昧な記述ではコンピュータが実行できない

  • アルゴリズムの表現

    ⇒ フローチャート(流れ図)

    • 順次処理が基本

    • 条件分岐

    • 繰り返し処理

フローチャートの例

開始

i = 7

No

i > 0

Yes

iの値を出力

i = i - 2

終了


アルゴリズムの構造化定理

  • どんな複雑な処理手順も3種類の基本構造から組み立てることができる

    • 1つの入口と1つの出口を持つすべてのプログラムは,「順次」「選択」「繰り返し」の3つの基本構造の組合せによって記述することができる

入口

プログラム

順次

選択

繰り返し

出口


変数

a

変数

a

変数

a

3

5

変数とは

  • 1つの値(数値や文字列)を一時的に保存する場所

    • 格納された値は,後から参照することができる

JavaScriptによるプログラム例

変数 a が利用できるようにする(変数 a を宣言する)

var a;

a = 3;

a = 5;

変数 a に数値3 を代入する

変数 a に数値5 を代入する(元の値3は参照できなくなる)


アルゴリズム要素3:繰り返し

  • 同じ処理を繰り返す

処理1


選択構造による繰り返し

  • ある条件が成り立つ間 処理を繰り返す

    • 条件が成り立たなくなったら次の処理に進む

No

条件

Yes

条件が成り立たなくなったら処理2に進む

処理1

処理2

条件が成り立つ間処理1を繰り返す


フローチャートの統一記号

開始

A== 1?

(A増加ループ)

AをA+1に

A>=16

終了

ここに示したのは日本工業規格(JIS)で定められた統一記号の一部

100


選択構造による繰り返し

前判定型: 条件を満たさなければ、処理1は1回も実行されない

後判定型: 条件を満たさなくても、処理1は1回は実行される

前判定型

後判定型

No

条件

処理1

Yes

No

条件

Yes

処理1

処理2

処理2

101


例4 -1: 選択構造による繰り返し(先に判定:前判定型)

sumに i を足してその結果を sum に代入する

i に 1 を足してその結果を i に代入する

1から10までの総和を求める

JavaScriptによるプログラム例

開始

i が10以下の間処理を繰り返す

sum = 0

i = 1

var sum = 0;var i = 1;

while (i<=10) { sum = sum + i; i = i + 1; }

alert(sum);

No

i ≦10

Yes

sum = sum + i

i = i + 1

終了

sumの値を出力

終了

102


例4 -2: 選択構造による繰り返し(後で判定:後判定型)

sumに i を足してその結果を sum に代入する

i に 1 を足してその結果を i に代入する

1から10までの総和を求める

JavaScriptによるプログラム例

開始

i が10以下の間処理を繰り返す

sum = 0

i = 1

var sum = 0;var i = 1;

do { sum = sum + i; i = i + 1; } while (i<=10);

alert(sum);

sum = sum + i

i = i + 1

No

i ≦10

終了

sumの値を出力

Yes

終了

103


< 練習2-5>選択構造による繰り返し(1)

  • (a) 右のフローチャートが終了するまでに,「iの値を出力」が何回実行されるか答えなさい

  • (b) 「iの値を出力」が最後に実行されたときの i の値を答えなさい

開始

i = 7

この地点で値を調べる

i > 0

No

Yes

iの値を出力

i = i - 2

終了


< 練習2-5> (解答)選択構造による繰り返し(1)

開始

i = 7

この地点で値を調べる

i > 0

No

-1

Yes

iの値を出力

i >0 が成り立たないので終了する (i の値は出力されない)

i = i - 2

  • 「i の値を出力」は4回実行される

  •  最後に実行されたときの値は 1

終了


< 練習2-6>選択構造による繰り返し(2)

  • 5から13までの奇数の総和を求める処理となるように,空欄(a)(b)にあてはまる変数 i への代入式を答えなさい

開始

sum = 0

(a)

No

i ≦13

Yes

sum = sum + i

(b)

sumの値を出力

終了


< 練習2-6> (解答)選択構造による繰り返し(2)

5から13までの奇数の総和を求める

開始

sum = 0

参考: JavaScriptによるプログラム例

i = 5

(a)

var sum = 0;var i = 5;

while (i<=13) { sum = sum + i; i = i + 2; }

alert(sum);

No

i ≦13

(a)

Yes

sum = sum + i

(b)

(b)

i = i + 2

sumの値を出力

終了


ループ端記号による繰り返し

  • ループに名前を付けて繰り返しの開始と終了の対応を示す

  • 終了条件が成り立つまで,処理を繰り返す

    • ループ終了条件は開始端・終了端のどちらか一方に書く

前判定型

後判定型

ループ名

終了条件

ループ名

処理

処理

終了条件

ループ名

ループ名


JavaScript によるプログラム例

var n = Number( prompt(“初期値?", "3") );

while ( n>0 ) { alert( "あと"+ n + "回"); n = n - 1; } alert( "終了");

nの値が0より大きい間 繰り返す(繰り返し条件)

要注意!

文字列の連結(数値の足し算ではない)

例5: ループ端記号による繰り返し

フローチャート

開始

n を入力

ループA

n <= 0

n の値を出力

n = n - 1

ループA

n の値が0と等しくなるか,負になったら繰り返しを終わる(終了条件)

メッセージを出力

終了


< 練習2-7>ループ端記号の終了条件

  • 右のフローチャートによる処理は終了することなく無限に繰り返される(無限ループとなる).繰り返し処理が終了するようにループ端記号の終了条件を訂正しなさい

開始

n = 5

ループA

n == 0

この地点で値を調べる

n = n - 2

ループA

終了


< 練習2-7> (解答)ループ端記号の終了条件

n == 0 (終了条件)が成り立たないのでいつまでも終了しない

開始

n の値が 0 と等しくなったら終了する

n = 5

ループA

n == 0

この地点で値を調べる

n = n - 2

-1

ループA

-3

終了

以下の条件で繰り返しを終了する

n==1 (nの値が奇数になった場合),または

n < 0 (nの値がある値を下回った場合)


カウンタ変数  iの変化

1回目 → (初期値) i = 22回目 → (1回目の値+3) i = 53回目 → (2回目の値+3) i = 84回目 → (3回目の値+3) i = 11

〔4回目は終了条件( i > 10 )が 成り立つので実行されない〕

カウンタ変数 i を2から始めて,3ずつ増やしながら処理を繰り返し,i が10より大きくなれば終了する

カウンタ変数を用いた繰り返し(例)

  • 「変数 : 初期値,増分,終了条件」を並べて示す

ループ名

条件が成り立てば終了する

ループA

i : 2 , 3 , i>10

カウンタ変数

終了条件

1回の繰り返しにおけるカウンタ値の増分

カウンタ変数の初期値

カウンタ変数の増分

処理

ループA


開始

sum = 0

i = 2

(a)

ループA

i : 2 , 3 , i>10

No

i ≦10

Yes

処理

sum = sum + i

ループA

(b)

i = i + 3

sumの値を出力

終了


JavaScript によるプログラム例

i に 1 を足してその結果を i に代入する

(i = i + 1 と同じ)

var sum = 0;

for ( var i=1; i<=10; i++ ) { sum = sum + i; }

alert(sum);

要注意!

for文では,繰り返し条件を記述( i が 10以下の間 繰り返す)

例6: カウンタ変数を用いた繰り返し〔繰り返し回数固定〕

開始

sum = 0

ループ

i : 1, 1, i>10

sum = sum + i

ループ

変数 iの値を初期値 1 から始めて,1 ずつ増やしながら,iが10より大きくなるまで繰り返す

sumの値を出力

終了


7: カウンタ変数を用いた繰り返し〔繰り返し回数変更可〕

0からk までの偶数の総和を求める

開始

JavaScriptによるプログラム例

k を入力

var k = Number( prompt( “kの値?", "3" ) );var sum = 0;

for ( var i=0; i<=k; i=i+2 ) { sum = sum + i; }

alert(sum);

sum = 0

ループ

i : 0, 2, i>k

sum = sum + i

i がk以下の間,i の値を2ずつ増やしながら繰り返す

ループ

i の値がkを超えるまで繰り返す

sumの値を出力

終了


< 練習2-8>カウンタ変数を用いた繰り返し

  • 5から13までの奇数の総和を求めるフローチャートとなるように空欄(a) を埋めよ

    • カウンタ変数 i を用いること

開始

sum = 0

ループ

(a)

sum = sum + i

ループ

sumの値を出力

終了


(a)

ループ

i : 5, 2, i>13

初期値: 5

増分: 2

終了条件: 13より大きい(13を含まない)

参考: JavaScriptによるプログラム例

var sum = 0;

for ( var i=5; i<=13; i=i+2 ) { sum = sum + i; }

alert(sum);

<練習2-8> (解答)カウンタ変数を用いた繰り返し

5から13までの奇数の総和を求める

開始

5から13までの奇数: 5,7,9,11,13

sum = 0

ループ

(a)

sum = sum + i

(a)

ループ

sumの値を出力

終了


JavaScript によるプログラム例

var max = 0;

while (true) { var n = Number(prompt(“値?”, “0”)); if (n>max) { max = n; }}

もし n の値がこれまでに入力された値(max)より大きければ,n を max に代入する

例8 最大値を求める 〔処理の繰り返し〕

それまでに入力された数値のうち最大値を求める

開始

max = 0

n を入力

n>max

No

Yes

このフローチャートでは処理が終了できない

max = n


JavaScript によるプログラム例

var max = 0;

while (true) { var n = Number(prompt(“値?”, “0”)); if (n<=0) { break; } if (n>max) { max = n; }}

alert(max);

n の値が0以下ならwhileループから抜け出す

例9 最大値を求める〔終了条件の追加〕

開始

入力された値 nが0または負の場合,最大値を出力して処理を終了する

max = 0

n を入力

n<=0

Yes

No

n>max

max を出力

No

Yes

終了

max = n


10 最大値を求める 〔前判定型ループ端記号を使った例〕

開始

JavaScriptによるプログラム例

var max = 0; var n = Number(prompt(“値?”, “0”));while (n>0) { if (n>max) { max = n; } n = Number(prompt(“値?”, “0”));} alert(max);

max = 0

n を入力

ループ1

n<=0

n の値が0または負となれば,繰り返しを終わる

Yes

n>max

No

max = n

n を入力

n を入力

nの値が正である限り,この処理を繰り返す

max を出力

ループ1

終了


< 練習2-9>後判定型の繰り返し

  • 例10(前ページ)のフローチャートを後判定型のループ端記号を用いて書き換え,例10と同じく最大値を求める処理となるように,右の空欄(a) を埋めよ

開始

max = 0

ループ1

(a)

後判定型ループでは,ループ内の処理を1度行ってから終了条件の判定が行われる

n<=0 となれば,繰り返しを終わる

max を出力

n<=0ループ1

終了


後判定型ループでは,ループ内の処理を1度行ってから終了条件の判定が行われる後判定型ループでは,ループ内の処理を1度行ってから終了条件の判定が行われる

開始

開始

max = 0

max = 0

n を入力

ループ1

n<=0

ループ1

n の値が0または負となれば,繰り返しを終わる

(a)

Yes

n>max

No

max = n

n を入力

n を入力

max を出力

max を出力

n<=0ループ1

ループ1

n<=0 となれば,繰り返しを終わる

終了

終了

122


JavaScript後判定型ループでは,ループ内の処理を1度行ってから終了条件の判定が行われるによるプログラム例

var max = 0; var n;do { n = Number(prompt(“値?”, “0”)); if (n>max) { max = n; }} while (n>0); alert(max);

ループ1

「n を入力」の処理が1箇所しかないことに注意

n を入力

Yes

n>max

No

max = n

nの値が正である限り,処理を繰り返す

n <= 0ループ1

<練習2-9> (解答)後判定型の繰り返し

後判定型ループでは,ループ内の処理を1度行ってから終了条件の判定が行われる

開始

max = 0

max を出力

n が0 または負となれば,繰り返しを終わる

終了


フローチャートの統一記号後判定型ループでは,ループ内の処理を1度行ってから終了条件の判定が行われる

開始

A=1?

(A増加ループ)

AをA+1に

A>=16

終了

ここに示したのは日本工業規格(JIS)で定められた統一記号の一部

124


後判定型ループでは,ループ内の処理を1度行ってから終了条件の判定が行われる11 最大値を求める〔定義済み処理を用いた例〕

開始

max = 0

Sub1開始

n を入力

ループ1

定義済み処理の呼び出し

n = Sub1

Yes

n>max

No

n<=0

ループ1

max = n

max を出力

n を返し終了

終了

定義済み処理は「サブルーチン」とも呼ばれる


後判定型ループでは,ループ内の処理を1度行ってから終了条件の判定が行われる11 最大値を求める (続き)〔定義済み処理を用いた例〕

JavaScriptによるプログラム例

データ入力と最大値の判定

(定義済み処理)

var max = 0; var n;do { n = Sub1( );} while (n>0); alert(max);

function Sub1( ) { n = Number(prompt(“値?”, “0”)); if (n>max) { max = n; } return n;}

Sub1

定義済み処理の呼び出し

n を入力

Yes

n>max

No

max = n

n を返す

定義済み処理の本体


出席などは今までとっていませんが、インフォメーションシステムを用いたこのような出席レポート(授業内外で提出)を求めます。

今回は、インフォメーションシステムを使ったことがない人のために、 課題提出の練習として、簡単な課題(レポート含まず)を出してもらいます。

提出期限:10月28日(木)

提出方法:テキストファイル

(kadai04学籍番号ローマ字名前.txt)

インフォメーションシステムを使った課題提出練習


インフォメーションシステムを使った 課題提出練習 (続き)

  • 10進数で75.25だと16進数ではなんと表すか??

  • 10進数で75.25だと2進数ではなんと表すか??

  • 2進数で101.0001101だと16進数ではなんと表すか??

  • 2進数で101.0001101だと10進数ではなんと表すか??

  • 16進数でB.2Aだと2進数ではなんと表すか??

  • 16進数でB.2Aだと10進数ではなんと表すか??

  • 淡いピンク色を6桁の16進数でどのように表すか??

       (正解複数)

128


繰り返し構造 のパターンを復習する練習問題を入れる

(繰り返し回数のカウント)

(終了条件の穴埋め) etc.

129


まとめ

  • どんな処理手順も3種類の基本構造で表せる(構造化定理)

    • 「順次構造」 1つずつ順番に処理を実行する

    • 「選択構造」 条件によって次に行う処理を変える

    • 「繰り返し構造」 一連の処理を繰り返す

  • アルゴリズムをフローチャートやプログラムとして記述する方法は一通りに限らない

    • 例: 繰り返し構造の記述

      • フローチャート → 条件分岐 または ループ端記号 を用いる

      • プログラム → while または for を用いる( JavaScript,Java,C言語の場合)



b =

<練習2-1> (解答)順次構造(1)

  • 買い物の合計金額(税別)が変数 a に入力されたとする.変数 b に2割引の金額,変数 c に消費税(5%)込みの支払い金額を代入し,最後にcの値が出力されるように,右のフローチャートの空欄を埋めなさい

    • ただし,1円未満の端数については考えなくてよい

開始

aに数値を入力

a × 0.8

c =

b × 1.05

cの値を出力

終了


3

変数

a

変数

c

変数

b

変数

c

変数

a

変数

b

変数

a

変数

c

変数

b

5

3

3

5

このフローチャートは変数a と bの値を入れ替える処理

(1) aの値を一時的にcに退避

(2) bの値をaに移す

(3) cに退避したaの値を bに移す

3

5

3

5

<練習2-2> (解答)順次構造(2)

aに3,bに5 を入力

「変数」は箱(入れ物)

「値」は入れ物の中身

開始

aに数値を入力

変数aの中身(値)を変数cの箱に移しても,aの値は変わらない

5

3

bに数値を入力

c = a

a = b

b = c

aの値を出力

bの値を出力

終了

aの値は5,bの値は3


開始

講義科目の単位数 a を入力

実習科目の単位数 b を入力

在籍年数 c を入力

No

Yes

a

< 50

No

No

Yes

b

< 12

No

No

Yes

c

> 8

No

卒業可能

卒業できない

終了

このフローチャートも誤りではないが,条件の与え方が直感的に分かりにくい

<練習2-3> (解答)選択構造(1)

開始

講義科目の単位数 a を入力

実習科目の単位数 b を入力

在籍年数 c を入力

講義科目を50単位以上取得したか?(50単位でも良いので ≧ となる)

a

≧ 50

Yes

b

実習科目を12単位以上取得したか?(12単位でも良いので ≧ となる)

≧ 12

Yes

c

≦ 8

在籍年数が8年以下か?

(不等号の向きに注意)

Yes

卒業可能

卒業できない

終了


大阪市民として割引は受けられるが,さらに条件を絞込む大阪市民として割引は受けられるが,さらに条件を絞込む

<練習2-4> (解答) 選択構造(2)

  • 特別割引

    • 大阪市民で

    • 65歳以上または12歳以下

  • 優待割引

    • 大阪市民

  • 割引なし

    • 大阪市民でない人

開始

年齢を変数 a に入力

No

大阪市民?

Yes

a

≧ 65

Yes

No

a

≦ 12

Yes

No

割引なし

優待割引

特別割引

終了


<大阪市民として割引は受けられるが,さらに条件を絞込む練習2-5> (解答)選択構造による繰り返し(1)

開始

i = 7

この地点で値を調べる

No

i > 0

-1

Yes

iの値を出力

i >0 が成り立たないので終了する (i の値は出力されない)

i = i - 2

  • 「i の値を出力」は4回実行される

  •  最後に実行されたときの値は 1

終了


参考大阪市民として割引は受けられるが,さらに条件を絞込む: JavaScriptによるプログラム例

var sum = 0;var i = 5;

while (i<=13) { sum = sum + i; i = i + 2; }

alert(sum);

(a)

(b)

<練習2-6> (解答)選択構造による繰り返し(2)

5から13までの奇数の総和を求める

開始

sum = 0

i = 5

(a)

No

i ≦13

Yes

sum = sum + i

(b)

i = i + 2

sumの値を出力

終了


<大阪市民として割引は受けられるが,さらに条件を絞込む練習2-7> (解答)ループ端記号の終了条件

n == 0 (終了条件)が成り立たないのでいつまでも終了しない

開始

n の値が 0 と等しくなったら終了する

n = 5

ループA

n == 0

この地点で値を調べる

n = n - 2

-1

ループA

-3

終了

以下の条件で繰り返しを終了する

n==1 (nの値が奇数になった場合),または

n < 0 (nの値がある値を下回った場合)


(a)大阪市民として割引は受けられるが,さらに条件を絞込む

ループ

i : 5, 2, i>13

初期値: 5

増分: 2

終了条件: 13より大きい(13を含まない)

参考: JavaScriptによるプログラム例

var sum = 0;

for ( var i=5; i<=13; i=i+2 ) { sum = sum + i; }

alert(sum);

<練習2-8> (解答)カウンタ変数を用いた繰り返し

5から13までの奇数の総和を求める

開始

5から13までの奇数: 5,7,9,11,13

sum = 0

ループ

(a)

sum = sum + i

(a)

ループ

sumの値を出力

終了


JavaScript大阪市民として割引は受けられるが,さらに条件を絞込むによるプログラム例

var max = 0; var n;do { n = Number(prompt(“値?”, “0”)); if (n>max) { max = n; }} while (n>0); alert(max);

ループ1

「n を入力」の処理が1箇所しかないことに注意

n を入力

Yes

n>max

No

max = n

nの値が正である限り,処理を繰り返す

n <= 0ループ1

<練習2-9> (解答)後判定型の繰り返し

後判定型ループでは,ループ内の処理を1度行ってから終了条件の判定が行われる

開始

max = 0

max を出力

n が0 または負となれば,繰り返しを終わる

終了


補足大阪市民として割引は受けられるが,さらに条件を絞込む


Javascript1
参考情報大阪市民として割引は受けられるが,さらに条件を絞込む: JavaScript

  • 「9.JavaScriptの文法」

    • ネットワークコンピューティング実習テキスト (2005)

  • 「速効! 図解プログラミング JavaScript」

    • 古旗一浩 著,毎日コミュニケーションズ (2003)

  • 「JavaScript プログラミング入門」

    • 大津 真 著,オーム社 (2002)

  • 「JavaScript 第3版」

    • デイビッド・フラナガン 著,オライリー・ジャパン (2000)

  • 「とほほのJavaScriptリファレンス」

  • 「JavaScript 講座」

初級

上級

http://pzxa85.hp.infoseek.co.jp/www/js/index.htm

http://www.site-cooler.com/kwl/javascript/


While for
ループ(大阪市民として割引は受けられるが,さらに条件を絞込むwhile と for)

while (式) 文  

では、まず式が計算される。式が 0 でないとき、文が実行され、式が再度評価される。 このサイクルは式が 0 になるまで続けられ、その時点で実行は文の後に移る。for文  for (expr1; expr2; expr3) 文 は、以下に等しい。

expr1;

while (expr2) {

  文  

expr3;

}

文法的には for の三つの要素は式である.一般的には式1と式3は代入または関数呼び出しであり、式2は関係式である.三つの部分のどれを省略してもよいが、セミコロンは省略してはならない


繰り返し構造大阪市民として割引は受けられるが,さらに条件を絞込む

  • ある条件が成り立つ間 処理を繰り返す

    • 条件が成り立たなくなったら次の処理に進む

後判定型

前判定型

処理をする前に終了判定をする

最低1回は実行される

条件

処理

No

条件が成り立つ間この処理を繰り返す

条件が成り立つ間この処理を繰り返す

Yes

Yes

条件

処理

No

処理をした後で終了判定をする

1回も実行されないこともある


繰り返し回数の指定大阪市民として割引は受けられるが,さらに条件を絞込む

変数 : 初期値,増分,終了値を並べて示す

変数が順次取る値を示す

ループ

i : 5, -1, 0

ループ

i = 1, 2, ・・・ , 10

処理

処理

ループ

ループ

変数 i を1から10まで1ずつ増やしながら10回繰り返す

i=5, 4, ・・・ 1, 0 と6回繰り返す


本日の授業大阪市民として割引は受けられるが,さらに条件を絞込む

  • 講師の自己紹介・研究紹介

  • 「コンピュータの言語」でやること

    • シラバスの説明 (授業の予定)

    • 受講する皆さんが目指すこと 

      • 大学での勉強の根幹を身につける

      • 基礎情報処理試験合格(2011春実施)

    • コンピュータの言語でお勧めの本紹介

    • 成績の評価方法・がんばりどころ

  • 第一回授業 「コンピュータのための情報表現」


講師紹介(1限・山添大丈)大阪市民として割引は受けられるが,さらに条件を絞込む

  • 基礎工学部出身

  • 現在(株)国際電気通信研究所=ATR 研究員。

  • 電子工作大好き

  • 画像処理研究・電子デバイス研究


講師紹介(2限・米澤朋子)大阪市民として割引は受けられるが,さらに条件を絞込む

  • 情報系学部出身

  • 現在(株)国際電気通信研究所=ATR 研究員。

  • 音楽・インタフェース・デジタルアート好き

  • ヒューマン・エージェント・インタラクション研究,ヒューマン・メディア処理研究


講師らの研究紹介@ATR大阪市民として割引は受けられるが,さらに条件を絞込む

  • 人の視線に反応する看板案内ロボット

  • 高齢者・障害者のTV対話を助けるぬいぐるみ


講義について大阪市民として割引は受けられるが,さらに条件を絞込む

1.履修の心構え・参考書紹介など

2.シラバス(授業計画)について

3.目標地点と成績評価


「コンピュータの言語」履修の心構え大阪市民として割引は受けられるが,さらに条件を絞込む

  • 「コンピュータの言語」では....【2つの目標】

  • これからの大学学業と研究の礎となります

    • コンピュータとその使い方や仕組みの基礎を学ぼう

      • プログラミングで、早い・効率がよいアルゴリズムを選べる 

      • 作りたいソフトを手順よく設計できる

  • 基本情報処理技術者試験の来年春受験を目指そう

    • だいたい皆さんの今後の勉強に必要な、コンピュータに関係する知識の基礎的な理解をカバー

      おすすめ参考図書:栢木先生の基本情報技術者教室

           平成22年度 イメージ&クレバー方式でよくわかる(技術評論社)

      >> 過去問集とは違い、授業でやる内容を、やさしいレベルからしっかり理解できます。

かやのき


基本情報処理技術者試験とは大阪市民として割引は受けられるが,さらに条件を絞込む

  • 春と秋の年二回開催

    • 情報処理推進機構(IPA)が開催・管理

  • その他の情報処理技術者試験

    • LEVEL0.ITパスポート試験 

    • LEVEL1.基本情報処理技術者試験

    • LEVEL2.応用情報処理技術者試験 

    • LEVEL3 高度情報処理技術者試験(項目別)

      • システムアーキテクト試験

      • ネットワークスペシャリスト試験

      • ITストラテジスト試験

      • 情報セキュリティスペシャリスト試験

      • ITサービスマネージャ試験


シラバスの内容(授業計画)大阪市民として割引は受けられるが,さらに条件を絞込む

  • 1.コンピュータのための情報表現(01~04回)

    • 情報とコンピュータ

    • 数値・文字・色の表現

  • 2.コンピュータのための処理手順(05~11回)

    • アルゴリズムの基礎

    • データの探索と整列

  • 3.プログラムの実行方式(12~14回)

    • プログラムの実行

    • 言語プロセッサ


履修にあたっての注意事項大阪市民として割引は受けられるが,さらに条件を絞込む

  • 教科書は基本使用しない

    • 基本は講義中にスライドを表示するのみ

    • 講義資料はWeb等で公開予定だが、未定

    • 参考書は随時紹介 (おすすめは今日の紹介)

  • 成績評価

    • 出席をとることがある

    • 課題レポートを課すことがある

    • 定期試験は参照不可


 「コンピュータの言語」シラバス(参考)大阪市民として割引は受けられるが,さらに条件を絞込む

(1)コンピュータと情報表現

(2)2進数と基数変換

(3)文字コードの体系

(4)RGBによる色の表現 

(5)アルゴリズムとフローチャート

(6)順次構造と選択構造

(7)繰り返し構造 (反復構造)

(8)逐次探索と二分探索

(9)整列アルゴリズム

(10)基数変換のアルゴリズム

(11) 再帰的アルゴリズム

(12) プログラムの実行方式

(13)言語プロセッサ

(14)まとめと復習

コンピュータの中での情報の形式

n進数:換算できるようになろう

ASCIIコードや漢字などの情報

デジタルメディアを理解する

コンピュータに考えさせる方法

「A⇒B⇒C」 or 「もしXならA」

100回「A処理」をする

全部探すか効率的探索か

順番に並べる(ソート)とは

..2回目に関係

階乗 n! など

様々なプログラムの実行方法

プログラム言語から機械語へ


1.コンピュータのための大阪市民として割引は受けられるが,さらに条件を絞込む情報表現

シラバス01:コンピュータと情報表現

シラバス02:2進数と基数変換

シラバス03:文字コードの体系

シラバス04:RGBによる色の表現

~ 数・文字・色などの情報 ~


コンピュータの言語 第一回大阪市民として割引は受けられるが,さらに条件を絞込む

シラバス01 「コンピュータと情報表現」

コンピュータの中での情報の形式


それが「情報」大阪市民として割引は受けられるが,さらに条件を絞込む

物理的には違いがないにも関わらず,

2通りの並び方を区別している何かがある

情報と物理の違い

  • 物理(学)の観点 「モノ」

    • 物質(材質,質量)やエネルギー(位置や温度の高低)による違いに着目する

  • 情報(学)の観点 「」

    • 以下の2つには大きな違いがある.それは何か?


コンピュータと情報表現大阪市民として割引は受けられるが,さらに条件を絞込む

  • コンピュータ内部での情報表現

    • 電気のオン・オフで表される    参考:モールス信号

    • 0と1の数字の列 (2進数) で表される

    • 機械だけに理解できる文字列(機械語)で表される

      • 機械語周辺のお話は後日またやります

  • コンピュータから人間への情報表現

    • 文字: 数字,アルファベット,ひらがな,カタカナ,漢字

    • 色: アイコン,イラスト,写真,動画

    • 音: 効果音,音楽

コンピュータで利用可能なこんな複雑な情報の表現も、全て内部表現(2進数)に基づいている


中央処理装置(大阪市民として割引は受けられるが,さらに条件を絞込むCPU)

主記憶装置(メモリ・HDD)

補助記憶装置(外付HDD)

入力装置(キーボード・マウス)

出力装置(ディスプレイ等)

コンピュータの5大機能

制御

情報の処理

演算

処理装置

情報の記録

記憶

コンピュータ

入力

周辺装置

情報の入出力

出力


CPU(中央処理装置)大阪市民として割引は受けられるが,さらに条件を絞込む

制御装置

データの流れ

演算装置

ハードウェアの5大装置: データの流れ

  • 演算装置記憶装置に保持されたデータ(2進数)に対して数値計算を行う

  • 制御装置ハードウェアの各装置に動作の開始・終了などを指示する

  • 入力装置ユーザからの入力を受取る

  • 記憶装置入力されたデータ,プログラム,演算結果などを記憶する

  • 出力装置ユーザに対してデータを出力する

記憶装置

入力装置

出力装置

主記憶装置(メモリ)

補助憶装置(外部記憶装置)

  • 磁気ディスク(ハードディスク)

  • 磁気テープ

  • 光ディスク,CD,DVD


情報量の単位:ビット大阪市民として割引は受けられるが,さらに条件を絞込む

  • ビット (bit: binary digit)

    • コンピュータ内部で 0または1 で表現される2進数の1桁

    • 1ビットで,2つの状態が区別できる

  • 例えば:

    • トイレが使用中かどうか

    • お酒を飲んでいいかどうか

0

情報表現の最小単位

1ビット

または

1


情報量の単位(続き)大阪市民として割引は受けられるが,さらに条件を絞込む

  • 2ビットでは,4つの状態が区別できる

0

0

例題:3ビットだと何個の状態区別??

    4ビットだと     〃    ?? 

または

答え:3ビット⇒ 8個の状態区別

    4ビット⇒16個の状態区別

つまり(2nビット)個の状態区別

0

1

または

2ビット

0

1

アルファベット(26文字),大文字・小文字,その他の記号(# $ % & )は区別し切れない..

(情報量が足りない)

  ⇒8ビットで256種類の情報(文字など)を区別

または

1

1


8ビットを1バイトとしてまとめて扱う大阪市民として割引は受けられるが,さらに条件を絞込む

  • バイト (byte)

    • 8ビットをひとまとまりとみなす

    • 1バイト(= 8ビット)

             表現できる情報は 28=256通り

  • ビットパターン

    • 複数のビットをひとまとめにしたもの

    • 例: 8ビット(8桁)で表される 0,1の列 「10011010」

0

1

0

0

1

1

0

1

1バイト(= 8ビット)

ちなみにこれは77

2×2×2×2×2×2×2×2 = 28 = 256種類


さらに大きな情報量を表す単位大阪市民として割引は受けられるが,さらに条件を絞込む

  • 1B (バイト) = 8ビット

  • 1KB (キロバイト) = 1,024B = 210 B

  • 1MB (メガバイト) = 1,024KB = 220 B

  • 1GB (ギガバイト) = 1,024MB = 230 B

  • 1TB (テラバイト) = 1,024GB = 240 B

  • ファイルの大きさを表す場合によく用いられる単位

    • バイト,キロバイト,メガバイト

  • 補助記憶装置(ハードディスクなど)でよく用いられる単位

    • メガバイト,ギガバイト,テラバイト


  • <大阪市民として割引は受けられるが,さらに条件を絞込む練習 1-1> 情報量の単位

    • (1) 12通りの状態を区別するには,最低何ビット必要か?

    • 2^4 =16, 2^3=8

    • (2) 常用漢字1945文字を区別するには何バイト/bit以上必要か?

    • 1945種類の情報を区別するには何bit?? 11bit

    • それは何byte?? 2byte


    10進数と2進数と16進数:大阪市民として割引は受けられるが,さらに条件を絞込む

    • 進数:桁が上がる数

    • 10進数

      • 0から9までの10種類の数値で表す

      • 最大の値(9)に1を加えたとき1つ桁上がりして10となる

    • 2進数

      • 0と1の2種類の数値で表す

      • 最大の値(1)に1を加えたとき1つ桁上がりして10となる

    • 16進数

      • 0 から15までの16種類の数値で表す

      • 10~15も1桁で表現する

        • 10=A,11=B,12=C,13=D,14=E,15=F

      • 最大の値(15)に1を加えたとき1つ桁上がりして10となる


    2進数の4桁が大阪市民として割引は受けられるが,さらに条件を絞込む16進数の1桁に相当している

    桁上がりのタイミング(進数ごと)

    10進数

    2進数

    16進数

    10進数と2進数では桁上がりのタイミングが異なる

    2進数と16進数は同時に桁上がりする


    入力された10進数はコンピュータが理解できる2進数に変換して処理される入力された10進数はコンピュータが理解できる2進数に変換して処理される

    人間は日常使用している10進数で入力する

    コンピュータ内部の処理を理解こととは,2進数,10進数,16進数を相互に変換する方法を知ることである!!

    基数変換

    • n進数からm進数への変換を行うこと

    10進数で「13」と入力

    2進数「1101」として処理


    基数入力された10進数はコンピュータが理解できる2進数に変換して処理される

    指数

    重み

    基数

    • 10進数は,10のべき乗(10n)に各桁の数値をかけた数の和で表わすことができる

    基数の指数乗

    4725 = 4 x 103 + 7 x 102 + 2 x 101 + 5 x 100

    • ある数値が何進数であるかは,数値の右下に基数を付記して区別する

      • 例: (11011)2 = (27)10 = (1B)16


    同じ 入力された10進数はコンピュータが理解できる2進数に変換して処理される312円 を異なる通貨体系で支払う

    16進数

    312 = 256×1 + 16×3 + 1×8

    160 = 1

    161 = 16

    162 = 256

       ・・・

    16

    1

    1

    1

    1

    256

    16

    16

    1

    1

    1

    1

    256円玉1枚

    16円玉3枚

    1円玉8枚

    基数変換: 通貨体系によるたとえ

    10進数

    312 = 100×3 + 10×1 + 1×2

    100 = 1

    101 = 10

    102 = 100

      ・・・

    100

    10

    1

    1

    100

    100

    100円玉3枚

    10円玉1枚

    1円玉2枚


    余り入力された10進数はコンピュータが理解できる2進数に変換して処理される

    2   ・・・ 1

    37

    2進数への変換では,2で割る

    18

    2・・・ 0

    余りを逆順に並べる

    9

    2  ・・・ 1

    (100101)2

    2  ・・・ 0

    4

    2

    2  ・・・ 0

    1

    2  ・・・ 1

    2で割った答(商)が0になるまで続ける

    0

    10進数からn進数への変換

    • 基数nで割った余りを逆順に並べる

    • 10進数 → 2進数

      • 例: (37)10


    <入力された10進数はコンピュータが理解できる2進数に変換して処理される練習 1-2> 10進数から16進数への変換

    • (3804)10を16進数に変換せよ


    1.コンピュータのための入力された10進数はコンピュータが理解できる2進数に変換して処理される情報表現

    シラバス01:コンピュータと情報表現

    シラバス02:2進数と基数変換

    シラバス03:文字コードの体系

    シラバス04:RGBによる色の表現

    ~ 数・文字・色などの情報 ~


    コンピュータの言語 第二回入力された10進数はコンピュータが理解できる2進数に変換して処理される

    シラバス02 「2進数と基数変換」より

    コンピュータの中での数値の形式


    前回やったこと入力された10進数はコンピュータが理解できる2進数に変換して処理される

    • コンピュータの中の表現:0と1(電気信号のON/OFF)

    • 0と1の表現の単位:ビット

    • 0と1の表現の列が並ぶと、○○ビットなどと数える

      • 区別できる情報の数を考える: 2のn乗(nビット)

    • 8ビット=1バイト とする単位があります

      • ビット数を計算後、区別する情報数に必要なバイト数の考察

    • 桁の繰り上げ単位を「○○進数」という

    • コンピュータの中で使われる表現:2進数、16進数

    • ヒトが使う数値の表現:10進数

      • 進数の基数変換の練習問題


    <入力された10進数はコンピュータが理解できる2進数に変換して処理される練習 1-1> 情報量の単位

    • (1) 12通りの状態を区別するには,最低何ビット必要か?

    • 2^4 =16, 2^3=8

    • (2) 常用漢字1945文字を区別するには何バイト/bit以上必要か?

      • 1945種類の情報を区別するには何bit??

        • 11bit

      • それは何byte??

        • 2byte


    16入力された10進数はコンピュータが理解できる2進数に変換して処理される 120 ・・・ 8

    余りを逆順に並べる

    167 ・・・ 7

    (78)16

    0

    <練習 1-2> 10進数から16進数への変換

    • (120)10を16進数に変換せよ


    各桁の数値に重みを乗じた値の総和を求める入力された10進数はコンピュータが理解できる2進数に変換して処理される

    = 12x4096 + 2x256 + 15x16 + 3x1

    = (49907)10

    C 2 F 3

    ・・・ 基数16の数値

    ・・・ 各桁の重み

    163

    162

    161

    160

    n進数から10進数への変換

    • 16進数 → 10進数

      • 例: (C2F3)16 =

    163 = (24)3

    = 24×3 = 212

    = 210×22

    = 1024×4

    = Cx163 + 2x162 + Fx161 + 3x160

    • 2進数 → 10進数

      • 例: (1101)2 = 1x23 + 1x22 + 0x21 + 1x20 = (13)10


    小数部入力された10進数はコンピュータが理解できる2進数に変換して処理される

    0.375

    2

    0.75

    2

    0.5

    2

    ×

    ×

    ×

    0.75

    1.5

    1.0

    小数点以下が0になるまで続ける

    積の整数部を並べる

    (0.0011)2

    小数点付き10進数からn進数への変換

    • 基数nをかけ続け,積の整数部を順に並べる

      • 整数部の変換は既に説明した通り

    • 小数点付き10進数 → 2進数

      • 例: (0.1875)10

    0.1875

    2

    ×

    0.375


    <入力された10進数はコンピュータが理解できる2進数に変換して処理される練習 1-3>小数点付き10進数から16進数への変換

    • (0.171875)10を16進数に変換せよ


    小数部入力された10進数はコンピュータが理解できる2進数に変換して処理される

    0.171875

    16

    0.75

    16

    ×

    ×

    2.75

    12.0

    小数点以下が0になるまで続ける

    (0.2C)16

    積の整数部を並べる

    <練習 1-3> (解答)小数点付き10進数から16進数への変換

    • (0.171875)10を16進数に変換せよ


    1入力された10進数はコンピュータが理解できる2進数に変換して処理される

    162

    1

    16

    = 15x1 + 2x + 12x

    = (15.171875)10

    小数点付きn進数から10進数への変換

    • 小数点付き16進数 → 10進数

      • 例: (F.2C)16 =

    F . 2 C

    ・・・ 基数16の数値

    ・・・ 各桁の重み

    160

    16-1

    16-2

    = Fx160 + 2x16-1 + Cx16-2

    小数点以下の数値について重みの指数を負の値とする


    <入力された10進数はコンピュータが理解できる2進数に変換して処理される練習 1-4>小数点付き2進数から10進数への変換

    • (1.01)2を10進数に変換せよ


    <入力された10進数はコンピュータが理解できる2進数に変換して処理される練習 1-4> (解答)小数点付きn進数から10進数への変換

    • (1.01)2を10進数に変換せよ

    (1.01)2 = 1×20 + 0×2-1 + 1×2-2

    = 1×1+ 0×0.5 + 1×0.25

    = (1.25)10


    同様に,3桁をひとまとめに考えれば,入力された10進数はコンピュータが理解できる2進数に変換して処理される2進数と8進数の相互変換も可能

    2進数と16進数の相互変換

    • 2進数の4桁が16進数のひと桁に対応していることを利用する

      • 2進数の4桁: 2×2×2×2 = 24 = 16

    • 2進数 → 16進数

      • 小数点を境として整数部と小数部をそれぞれ4桁ずつに区切り,それぞれを16進数に変換する

    • 16進数 → 2進数

      • 16進数のひと桁を,それぞれ4桁の2進数に変換する


    ・・・ 各桁の重み入力された10進数はコンピュータが理解できる2進数に変換して処理される

    23

    22

    21

    20

    23

    22

    21

    20

    23

    22

    21

    20

    4 + 1

    8 + 2 + 1

    4

    (5.B4)16

    11(B)

    4

    5

    ・・・ 16進数

    2進数から16進数への変換

    • 例: (101.101101)2

      • 4桁ずつに区切り,足りない桁は0を補う

    整数部

    小数部

    (0) 1 0 1 . 1 0 1 1 0 1 (0) (0)

    ・・・ 2進数


    <入力された10進数はコンピュータが理解できる2進数に変換して処理される練習 1-5>16進数から2進数への変換

    • (7.6E)16を2進数に変換せよ

      • 16進数のひと桁を,それぞれ4桁の2進数に変換する


    7 . 6 E (14)入力された10進数はコンピュータが理解できる2進数に変換して処理される

    ・・・ 16進数

    0 1 1 1

    0 1 1 0

    1 1 1 0

    ・・・ 2進数

    (111.0110111)2

    整数部

    小数部

    <練習 1-5> (解答)16進数から2進数への変換

    • (7.6E)16を2進数に変換せよ

      • 16進数のひと桁を,それぞれ4桁の2進数に変換する


    Windows

    電卓の入力された10進数はコンピュータが理解できる2進数に変換して処理される[表示]メニューで[関数電卓] に切り替わる

    参考: Windowsの電卓

    • Windows (C棟3階のパソコン教室)で

      • [スタート] → [プログラム] → [アクセサリ] で表示されるメニュから [電卓] を選ぶと普通の電卓が起動する


    Windows1
    Windows入力された10進数はコンピュータが理解できる2進数に変換して処理されるの電卓によるべき乗計算

    • べき乗キー [x^y]

      • x の y 乗

    例: 23 ⇒ [2] [x^y] [3] [=] のキーを順に押す


    Windows2

    (43)入力された10進数はコンピュータが理解できる2進数に変換して処理される10

    (43)16

    (43)2

    Windowsの電卓による基数変換


    コンピュータの言語入力された10進数はコンピュータが理解できる2進数に変換して処理される

    2010年度 秋学期 金曜1・2限

    1限担当:山添大丈

    2限担当:米澤朋子


    1.コンピュータのための入力された10進数はコンピュータが理解できる2進数に変換して処理される情報表現

    シラバス01:コンピュータと情報表現

    シラバス02:2進数と基数変換

    シラバス03:文字コードの体系

    シラバス04:RGBによる色の表現

    ~ 数・文字・色などの情報 ~


    コンピュータの言語 第三回入力された10進数はコンピュータが理解できる2進数に変換して処理される

    シラバス03 「文字コードの体系」

    シラバス04 「 RGBによる色の表現」より

    コンピュータの中での数値の形式


    これまでのまとめ:入力された10進数はコンピュータが理解できる2進数に変換して処理されるコンピュータの表現

    • ビットとバイト

      • 0か1の2通りの情報表現:bit(ビット)

      • 8ビット(28)=256通り

    • 何通りの表現があるかは、表したい情報による


    基数変換まとめ:入力された10進数はコンピュータが理解できる2進数に変換して処理される 10進数とn進数の間の基数変換

    • 10進数 → n進数

      • 整数部: 基数nで割り続け,余りを逆順に並べる

      • 小数部: 基数nをかけ続け,積の整数部を順に並べる

    • n進数 → 10進数

      • 整数部: 各桁の数値に重みをかけて総和を求める

      • 小数部: 各桁にかける重みの指数を負の値とする


    小数部入力された10進数はコンピュータが理解できる2進数に変換して処理される

    0.375

    2

    0.75

    2

    0.5

    2

    ×

    ×

    ×

    0.75

    1.5

    1.0

    小数点以下が0になるまで続ける

    積の整数部を並べる

    (0.0011)2

    小数点付き10進数からn進数への変換

    • 基数nをかけ続け,積の整数部を順に並べる

      • 整数部の変換は既に説明した通り

    • 小数点付き10進数 → 2進数

      • 例: (0.1875)10

    0.1875

    2

    ×

    0.375


    1入力された10進数はコンピュータが理解できる2進数に変換して処理される

    162

    1

    16

    = 15x1 + 2x + 12x

    = (15.171875)10

    小数点付きn進数から10進数への変換

    • 小数点付き16進数 → 10進数

      • 例: (F.2C)16 =

    F . 2 C

    ・・・ 基数16の数値

    ・・・ 各桁の重み

    160

    16-1

    16-2

    = Fx160 + 2x16-1 + Cx16-2

    小数点以下の数値について重みの指数を負の値とする


    基数変換まとめ:入力された10進数はコンピュータが理解できる2進数に変換して処理される 10進数とn進数の間の基数変換

    • 10進数 → n進数

      • 整数部: 基数nで割り続け,余りを逆順に並べる

      • 小数部: 基数nをかけ続け,積の整数部を順に並べる

    • n進数 → 10進数

      • 整数部: 各桁の数値に重みをかけて総和を求める

      • 小数部: 各桁にかける重みの指数を負の値とする


    もじこーど入力された10進数はコンピュータが理解できる2進数に変換して処理される


    「A」のキーを押す入力された10進数はコンピュータが理解できる2進数に変換して処理される

    A

    “01000001”

    “01000001”

    キーボードからの文字入力の流れ

    適切な文字コードで表示されなければ「文字化け」を起こす

    出力装置

    入力装置

    周辺装置

    同じコンピュータで入力され,出力される場合は,通常文字化けは起こらない

    “01000001”

    主記憶装置

    (メモリ)

    処理装置


    コード変換入力された10進数はコンピュータが理解できる2進数に変換して処理される

    (01000001)2

    EBCDIC コードでは

    コード体系

    • 文字を表現するためのビットパターンの体系

    • コード体系が異なると,同じビットパターンが異なる文字を表す

      • データのやりとりを行うにはコード変換が必要

    (11000001)2

    A

    ASCII コードでは


    文字データの表現入力された10進数はコンピュータが理解できる2進数に変換して処理される

    • 文字コード

      • キーボードなどの入力装置から入力された数字や文字(英数,カタカナ,記号など)は,コンピュータ内部ではあらかじめ決められたビットパターン(ビット列)で表される

      • 情報処理分野で使用される文字コードは,情報交換用符号と呼ばれる

    • 文字コードの種類

      • 国際標準化機構(ISO: International Organization for Standardization)によって定められた7ビットコードに準拠している

        • ASCIIコード,JISコード,JIS漢字コード,シフトJISコード ・・・

      • 1バイト文字コードと2バイト文字コード


    1バイト入力された10進数はコンピュータが理解できる2進数に変換して処理される

    b4

    b3

    b2

    b1

    b8

    b7

    b6

    b5

    上位ビット

    下位ビット

    1バイト文字コード

    • 1バイト: 28 = 256通りの文字を表現できる

      • アルファベットや数字は表現できるが,漢字を表現するには足りない

    A = 0 1 0 0 0 0 0 1

    2進数

    4

    1

    16進数

    JISコードの場合


    上位1バイト入力された10進数はコンピュータが理解できる2進数に変換して処理される

    下位1バイト

    上位ビット

    下位ビット

    上位ビット

    下位ビット

    b4

    b4

    b3

    b3

    b2

    b2

    b1

    b1

    b8

    b8

    b7

    b7

    b6

    b6

    b5

    b5

    2バイト文字コード

    • 2バイト: 216 = 65,536通りの文字を表現できる

      • アルファベットや数字の他に,漢字も表現できる

    亜 = 0 0 1 1 0 0 0 0

    0 0 1 0 0 0 0 1

    2進数

    3

    0

    2

    1

    16進数

    JIS漢字コードの場合


    コード体系の種類入力された10進数はコンピュータが理解できる2進数に変換して処理される


    Ascii
    ASCII入力された10進数はコンピュータが理解できる2進数に変換して処理されるコード

    • ASCII

      • American Standard Code for Information Interchange

    • 米国規格協会(ANSI)が1962年に制定

      • ANSI: American National Standards Institute

    • パソコンやデータ通信で幅広く利用されている

      • 27=128種類の文字しか表現できない

      • 7ビットコードだが,先頭にパリティビットまたは0を加えて,8ビットとして使われている


    Ascii1

    上位ビット入力された10進数はコンピュータが理解できる2進数に変換して処理される

    下位ビット

    Aは (41)16

    または

    (01000001)2

    下位ビット

    上位ビット

    制御コード

    JISコードでは \(バックスラッシュ)が¥(円マーク)になる

    ASCIIコード表

    b8 は常に0として考える


    <入力された10進数はコンピュータが理解できる2進数に変換して処理される練習 1-6> 文字コード

    • 以下の各文字をASCII コード(16進)で置き換えよ

      • Men


    <入力された10進数はコンピュータが理解できる2進数に変換して処理される練習 1-6> (解答)文字コード

    • 以下の各文字をASCII コード(16進)で置き換えよ

      • Men

    M = (4D)16

    上位ビット: (4)16  下位ビット: (D)16

    e = (65)16

    上位ビット: (6)16  下位ビット: (5)16

    n = (6E)16


    Jis xdump 1 3

    入力された10進数はコンピュータが理解できる2進数に変換して処理される0D」 → キャリジリターン

    「0A」 → ラインフィード

    制御コード

    2バイト文字(16進数2桁)

    文字列ダンプダイアログ

    参考: 文字列をシフトJISコードに変換するソフト (xdump 1.3)

    “xdump.exe”

    (ファイルの内容を16進数で表示)

    http://www.vector.co.jp/soft/win95/util/se197132.html


    Ebcdic
    入力された10進数はコンピュータが理解できる2進数に変換して処理されるEBCDICコード)

    • EBCDIC(エビスディック)

      • Extended Binary Coded Decimal Interchange Code

    • IBM社が自社の汎用大型コンピュータ(メインフレームコンピュータ)用に制定した8ビットコード

    • 1960~70年代は,IBM社のコンピュータが市場の半分以上を占めていた

      • そのため,IBM社以外のコンピュータメーカもIBM社と同じコード体系を採用した

      • メインフレームの世界ではデファクトスタンダード(事実上の標準)となっている


    Jis iso 2022 jp
    JIS入力された10進数はコンピュータが理解できる2進数に変換して処理されるコード (ISO-2022-JP)

    • 日本工業規格(JIS)がISOコードをもとに制定

      • JIS: Japanese Industrial Standards

    • 7ビットコード (最上位ビットは必ず0)

      • 1バイト文字(英数字)と2バイト文字(ひらがな/漢字)の区切りは特殊文字(エスケープシーケンス)で判別する

      • 半角カナは扱えない

    • 欧米で開発された初期の電子メールシステムはASCIIコード(7ビット)を前提としたため8ビット目が無視される

      • 電子メールによる日本語送受信には,JISコードが事実上の標準として用いられている

      • メールやネットニュースで半角カナが適切に送受信できないのは,JISコード(ISO-2022-JP)で半角カナが扱えないから


    Jis shift jis
    シフト入力された10進数はコンピュータが理解できる2進数に変換して処理されるJISコード (Shift_JIS)

    • 主にパソコン(Windows,Mac等)で用いられる

      • 半角カナも扱うことができる

    • JISコードよりも文字列の扱いが簡単

      • 文字の1バイト目を見るだけで漢字か1バイト文字(半角英数字)かを識別できる

      • ただし,ユーザ定義領域に機種依存の文字が定義されているので機種間の互換性に乏しい

      • 機種依存文字の例:

    Macでは,括弧 () 付きの文字に化けるものがある


    Euc unix
    EUC入力された10進数はコンピュータが理解できる2進数に変換して処理されるコード(拡張UNIXコード)

    • EUC: Extended Unix Code

    • 1985年にUNIXシステムで世界各国の文字を統一的に扱うために,AT&T社が制定したコード

      • EUCコード自体は8ビットだが,表現に2バイトを必要とする漢字コードは変換によって2バイトで表現される

    • 漢字などの各国独自の文字は決められた領域内に定義する

      • 世界各国の異なった言語にも対応できる

      • EUC-JP (日本語版),EUC-KR (韓国語版) ほか


    Unicode
    Unicode入力された10進数はコンピュータが理解できる2進数に変換して処理される

    • Unicodeは世界中の文字を統一的に表すことを目指している

      • Apple Computer社,IBM社,Microsoft社の提案に基づいて制定された

      • インターネットが普及し各国の文字コードが異なることが問題となった (メール送受信時の文字化け等)

    • UTF-8

      • Unicodeをビット列に対応付ける方式の1つ

      • ASCIIコードの1バイト部分の表記は従来通りとし,その他の文字を2バイトで表記する


    Web入力された10進数はコンピュータが理解できる2進数に変換して処理されるページにおける文字の符号化

    2進数のビットパターンをどの文字に対応付けて表示(文字コードによる判別が必要)

    ネットワーク(TCP/IP)で転送されるのは2進数のデータ

    (文字が何であるかは関係ない)

    Webブラウザ

    (文字コード)

    アマゾンのサイト

    www.amazon.co.jp

    Shift-JIS

    Unicode (UTF-8)

    関西大学のサイト

    www.kansai-u.ac.jp

    〔日本語サイト〕

    ウィキペディアのサイト

    wikipedia.org

    Unicode(UTF-8)

    〔多言語サイト〕


    Web入力された10進数はコンピュータが理解できる2進数に変換して処理されるページの文字化け

    • Webブラウザ

      • 世界中のWebサーバにあるHTMLファイルを表示する

      • 文字コードの切り替えができるソフトウエア

    • シフトJISを前提に作られたページを強制的に他の文字コード(EUC-JP等)で表示すると文字化けする

      • 日本語表示できない海外のコンピュータで,日本語のページを表示すると文字化けする


    Web入力された10進数はコンピュータが理解できる2進数に変換して処理されるブラウザでの文字コードの変更

    • アマゾン (http://www.amazon.co.jp)

      • Shift-JIS を前提に作成されたページ

    エンコーディング(符号化)を強制的にUTF-8 に変えると文字化けする


    いろのひょうげん入力された10進数はコンピュータが理解できる2進数に変換して処理される

    今日のテーマ


    色の表現入力された10進数はコンピュータが理解できる2進数に変換して処理される: RGBによる色指定

    • RGBとは,赤(Red),緑(Green),青(Blue)3色

      • これら3色(光)の組合せと強弱で様々な色をつくり出す

      • ( <赤色の強さ>,<緑色の強さ>,<青色の強さ> )

    • 赤,緑,青のそれぞれに256段階(0~255)の値を割り当てて色の強さを表す

      • 赤の強さが最大で,その他はゼロ: (255, 0, 0)

      • 緑の強さが最大で,その他はゼロ: (0, 255, 0)

      • 青の強さが最大で,その他はゼロ: (0, 0, 255)

      • 白: 全ての光の強さが最大: (255, 255, 255)

      • 黒: 全ての光の強さがゼロ: (0, 0, 0)


    16 rgb

    FF入力された10進数はコンピュータが理解できる2進数に変換して処理されるFFFF

    2つの16進数

    G

    B

    R

    16進数によるRGB値の指定

    • 256段階の数値(8ビット)は2つの16進数の積で表せる

      • 256 = 28 = 24×24 = 16×16

    • 理論的には24ビットで約1600万色が表現できる

      • 28×28×28= 224= 16,777,216色

    G

    B

    R

    Webフルカラー


    16入力された10進数はコンピュータが理解できる2進数に変換して処理される進コードによる色指定


    HTML入力された10進数はコンピュータが理解できる2進数に変換して処理されるでの色指定の例

    背景色を青

    文字色を白

    <html>

    <body style="background-color:#0000FF; color:#FFFFFF;">

    <b>このページの背景は青,文字色は白</b>

    </body>

    </html>


    加色法による色の混合入力された10進数はコンピュータが理解できる2進数に変換して処理される

    • RGB各色に対応する16進数の加算によって混合色が表現できる

    • 赤(Red)と緑(Green)を混ぜると黄色(Yellow)

    • 緑(Green)と青(Blue)を混ぜるとシアン(Cyan)

    (FF0000) +

    (00FF00) =

    (FFFF00)

    (00FF00) +

    (0000FF) =

    (00FFFF)


    RGB入力された10進数はコンピュータが理解できる2進数に変換して処理されるによる色加法

    • 光の3原色(赤・緑・青)を混合すると,加色法によってシアン・マジェンタ・黄色が生じる

      • すべて混ぜると白になる


    Web 216

    薄いオレンジ入力された10進数はコンピュータが理解できる2進数に変換して処理される

    ライムグリーン

    藍色

    Webセーフカラー 216色

    • 様々なOS(Windows, Unix, Mac OS ・・・)やブラウザ(IE, Netscape, Opera ・・・)で共通して使える216色

    • RGB各色を6段階で表す (6×6×6 = 216色)

      • 0,51,102,153,204,255 (10進数)

      • 00,33,66,99,CC,FF (16進コード)

      • 例:

    http://www.interq.or.jp/japan/goofy/color.html

    ただし,現在ほとんどのディスプレイはフルカラーに対応

    (セーフカラー相当のディスプレイは1%に満たない)


    Word 2007

    ライムグリーン入力された10進数はコンピュータが理解できる2進数に変換して処理される

    色設定の例: Word 2007


    参考 「色々の色」入力された10進数はコンピュータが理解できる2進数に変換して処理される

    • パソコン画面上の任意の点の色を識別して、色の名前やRGB値を表示するソフト

      • マウスカーソルのある場所の色を常時読み取って表示

      • 色弱・色盲の人がパソコン画面で色を見分けるのに有用

    http://www.hikarun.com/w/


    ドリルタイム入力された10進数はコンピュータが理解できる2進数に変換して処理される

    問題をメモして解いてみてね


    情報表現ドリル入力された10進数はコンピュータが理解できる2進数に変換して処理される

    • 26種類のアルファベットだけを表現するのに必要なbit数は??

      • 2^4(24)=16種類,2^5=32種類。よって5ビット。

    • 400台の車の種類を識別するのに必要なbit数は??

      • 2^6=64, 2^7=128, 2^8=256, 2^9=512

      • よって9ビット。

    • 同じく400台の車の種類を識別するのに必要なbyte数は??

      • 8ビット以内で区別できないので、1バイトでは無理。

      • 2バイト(16ビット)あれば区別できるので答えは2バイト。


    基数変換ドリル入力された10進数はコンピュータが理解できる2進数に変換して処理される

    • (F.2C)16を10進数に直せ

      • F=15, 2x16-1=0.125, Cx16-2=0.046875

    • (23.5479)10を16進数に直せ>>ごめん!!

      • 23/16=1…7 1/16=0…1 ->17

      • 小数点以下長すぎ!!

        • 0.5479x16= 8.7664, 0.7664x16= 12.2624, 0.2624x16= 4.1984, 0.1984x16= 3.1744, 0.1744x16= 2.7904, 0.7904x16= 12.6464, 0.6464x16=10.3424, 0.3424x16= 5.4784, 0.4784x16= 7.6544, 0.6544x16= 10.4704, …

        • きりがないのでこのへんで。答え:17.8C432CA57A …

    • (F.2C)16を2進数に直せ

      • F=1111, 2=0010, C=1100 よって 1111.001011


    文字や色表現ドリル入力された10進数はコンピュータが理解できる2進数に変換して処理される

    • 文字コードには_バイト文字コードと_バイト文字コードがある

      • ASCIIとは:(記述)

      • SJISとは:(記述)

    • 色表現は___といわれる_、_、_の光の三原色であらわされる。

    • 色は通常___段階であらわされるが、__段階にする場合もある。この時、各色は_段階であらわされる。


    ad