言語の学習としてのプログラミング

Download Report

Transcript 言語の学習としてのプログラミング

Javaプログラミング
・言葉の学習としてのプログラミング学習
(構造化プログラミングとは?)
・流れ図とアルゴリズムの考え方
・検索のプログラムを作ってみよう
言語の学習としてのプログラミング

単語を覚えよう
– println, int, double, if, for ・・・

文法を覚えよう
– System.out.println(‘Hello, world’); ではだめなの?

基本文型を覚えよう
– 英語には「基本5文型」があります。
– プログラミング言語に基本文型はあるのでしょうか?

用例を積極的に利用しよう
– 単語や文法を覚えても英作文は出来ない。。
– 誰かが書いた英文を利用しよう!
– プログラミングも同じです!
言語の学習としてのプログラミング

基本文型を覚えよう
– 英語には「基本5文型」があります。
S+V
 S+V+C
 S+V+O
 S+V+O+O
 S+V+O+C

– プログラミング言語に基本文型はあるのでしょ
うか?

あります!
言語の学習としてのプログラミング

基本文型を覚えよう
– 「制御構造」とも呼ばれます。文(処理)の並べ方
の決まりです。次の3つです。

順次構造
– 順番に処理を実行していく構造。

選択構造
– もしAならば処理Bを実行し,そうでない場合処理Cを実行す
る。

繰り返し構造
– Aが成り立っている間,処理Bを繰り返し実行する。
– 全てのプログラムは,この3つの構造で書かれ
ています=「構造化プログラミング」
「構造」の表し方 ~流れ図~
選択構造(if文)
条件
真
処理1
処理1
条件
if(
偽
処理2
条件
処理1
}
else{
処理2
処理2
}
){
他の流れ図の描き方
選択構造

フローチャート以外にも様々な描き方があります。
真 処理1
偽
真
条件
条件
条件
処理1
フローチャート
処理2
偽 処理2
PAD
真
偽
処理1
処理2
TSチャート
「構造」の表し方 ~流れ図~
繰り返し構造(for文)
iは繰り返し回数をカウントする変数
iの値を1に設定
i の値は回数以下 ?
No
for(i=1;i<=回数;i++ ){
Yes
実行したい処理
実行したい処理
i の値を1増やす
}
他の流れ図の描き方
繰り返し構造
初期値設定
条件
Yes
実行する処理
No
繰り返し
条件
条件
処理
繰り返し条件の変更
フローチャート
処理
PAD
TSチャート
もう一つの繰り返し構造




繰り返す回数が最初に分かっていない場合が
あります。
この場合,for文ではプログラムが書けません。
このような時は,while文を使います。
while1a.javaを見てみましょう
–
–
–
–
while文はどのように書くのか?
そのフローチャートは?
for文との関係は?
while文でなければ書けないプログラムとは?

例:0が入力されるまで入力を繰り返し,入力された数値の
合計と平均を出力するプログラム
while文を使ったプログラム

決まり文句を覚えておきましょう。
最初の条件要素の設定
while( 繰り返し条件 ){
実行したい処理;
繰り返しの条件要素の再設定
}
アルゴリズムの考え方

では,どうやって「与えられた問題をこれら3つ
の構造で表現する」のでしょうか?

次のように考えましょう
– 与えられた課題の解析

例:「大きい順に並んでいるとはどういう状態か?」
– その状態を繰り返しと分岐でどのように表現する
か?
– 矛盾が生じている時(例:大きい順になっていない
時)にはどのようにするか?
ソートアルゴリズム


次の配列の内容が昇順になるようにソート
するプログラムを作成しなさい。
a[0], a[1], a[2], a[3], ………, a[n-1]
課題の解析
昇順にソートされているとはどういうことか
a[0]≦a[1]≦a[2]≦a[3]≦………≦a[n-1]

繰り返しと分岐を使って,この性質をどのよ
うに定義するか?(アルゴリズムの決定)
単純な並べ替え


性質の定義
a[i], 0≦i≦n-1, において
0≦i≦n-1 : a[0]が最小
1≦i≦n-1 : a[1]が最小
2≦i≦n-1 : a[2]が最小
…
n-2≦i≦n-1 : a[n-2]が最小
単純ソート

性質をフローチャートで記述
0≦i≦n-2
i~n-1において
a[i]がmin
Y
N
i~n-1において
minの要素a[k]を
検出
a[i]とa[k]を
交換する
基本バブルソート



性質の定義
a[i], 0≦i≦n-1, において,常に
次の関係が成り立つ。
a[i]≦a[i+1], 0≦i≦n-2
基本バブルソート

性質をフローチャートで記述
0≦k≦n-2
0≦i≦n-2
a[i]≦a[i+1]
Y
a[i]とa[i+1]
の交換
逐次検索法


検索キーとデータとを,順番に最初から比較して
いく方法です。
search1.javaを作成しましょう。
検索キーの入力
0≦i≦n-1
i番目のデータが
検索キーと一致し
たならば
Y
i番目のデータ
を出力
二分検索法




逐次検索法に比べ,比較の回数を大幅
に減少させることが出来る,高速な検索
アルゴリズムです。
まず最初にデータをソートしておきます。
中央要素と検索キーを比較します。
一致しない場合でも,その大小関係で,
次の検索範囲が右半分か左半分かが決
まります。急速に検索範囲が狭まります。
二分検索法の原理
search2.java
No.
データ
0
13
1
1
2
6
3
3
4
4
5
10
6
8
7
9
8
12
9
16
検索キーとして‘5’が入力されたとします。
No.
データ
0
1
1
3
2
4
3
6
4
8
5
9
6
10
7
12
8
13
9
16
検索範囲を左側のみとし
検索範囲を右側とし ‘5’よりも大きいので,‘5’は左側に
‘5’よりも小さいので,‘5’は右側に
あることになります。
中央値と‘5’と比較します
同じ処理を繰り返します。
処理を繰り返します。
あることになります。
中央値と‘5’と比較します