フローチャート · フローチャートの書き方 •...

32
フローチャート フローチャート フローチャートとは、プログラムの処理の流れを整理 し、図的に順序立てて描いたもの。 流れ図 流れ図ともいう。 始め 終わり 半径R 面積S←πR 2 S 端子 端子開始、終了、停止などを示す 手操作入力 手操作入力キーボードなどから手で 操作して入力することを示す 処理 処理あらゆる種類の処理を示す 表示 表示ディスプレイ表示を示す 例: このようにフローチャートでは、記号 形状自体が処理の意味を示している。

Upload: others

Post on 14-Oct-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

フローチャートフローチャート– フローチャートとは、プログラムの処理の流れを整理し、図的に順序立てて描いたもの。流れ図流れ図ともいう。

始め

終わり

半径R

面積S←πR2

S

端子端子:開始、終了、停止などを示す

手操作入力手操作入力:キーボードなどから手で操作して入力することを示す

処理処理:あらゆる種類の処理を示す

表示表示:ディスプレイ表示を示す

例:

このようにフローチャートでは、記号形状自体が処理の意味を示している。

このようにフローチャートでは、記号形状自体が処理の意味を示している。

Page 2: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

•• 端子端子:フローチャートの開始、終了の端子を意味する。

•• 処理処理:一般的な処理を意味する。

•• 準備準備:初期値設定などの準備を意味する。

•• 手操作入力手操作入力:キーボードからの手操作入力を意味する。

•• 表示表示:画面への情報表示を意味する。

主なフローチャートの図記号主なフローチャートの図記号

Page 3: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

•• 判断判断:比較・判断を意味する。

•• 結合子結合子:フローチャートの他の処理への出口、または他の処理からの入口を意味する。

•• 繰り返しループ繰り返しループ:反復処理の始まりと終わりを意味する(for文の

ときに使用)。

Page 4: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

フローチャートの書き方フローチャートの書き方

• フローチャートの流れは基本的に上から下、左から右に進行する。それ以外の場合は、流れ線に矢印を入れる。

• 流れ線は交差してもよい。交差しても合流は意味しない。

• 結合子には番号や名前を入れ、相互に結合していることを示す。

合流なし 合流あり

1

1

Page 5: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

• 条件分岐のフローチャートは下記のようなバリエーションがある

A>0

A A

A:0

Yes

No <

=

>

1 2 3 その他 123

その他

Page 6: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

命令1

命令2

命令3

順次処理

条件

命令1 命令2

Yes

No

選択処理

条件

命令1

Yes

No

反復処理

順次処理、選択処理、反復処理順次処理、選択処理、反復処理のフローチャートのフローチャート

Page 7: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

例:例: 絶対値を求めるプログラムのフローチャート

始まり

終わり

実数値 val

val < 0

val←-val

val

Yes

No

キーボードから実数値を入力し、変数valに書き込む

val < 0 が成り立てば、valの符号を反転して変数valに書き

戻す。条件が成立しなければ、valの値はそのまま。

変数valの値を画面に表示

Page 8: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

練習問題練習問題11

• 次のプログラムのフローチャートを記述せよ。

• キーボードから入力した整数値が10であったら「10です」、10以外であったら「10以外

です」と表示するプログラム。

Page 9: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

選択処理選択処理

ifif文文((pp.45pp.45--4747、、pp.138pp.138--143143))例題例題11::キーボードから実数値を入力し、その絶対

値を表示するプログラムを作成せよ。

#include <stdio.h>main( ){

double val;scanf("%lf", &val);if(valif(val < 0){< 0){

valval = = --valval;;}}printf("val = %f¥n", val);

}

ifの括弧内の条件が成り立って

いる場合は、中括弧{ }内の処理を行う。

Page 10: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

ifif文文の書式の書式とフローチャートとフローチャートif(式){

文;}– 式が成立した時は、{ }内の文を実行し、

成立しない場合は文を実行しない。– 式が成立した場合を条件が真真(True)(True)である

といい、成立しない場合を条件が偽偽(False)(False)であるという。

– { }内は字下げすると見やすくなる。

– 文が一つの場合は、中括弧を省略できる。例:先ほどのプログラムのif文は、中括弧を省略して次のように書くことができる:if(val < 0) val = -val;

– 文が複数ある場合は、括弧は省略不可。if(val > 0){

val = -val;printf("val=%f¥n", val);

}}

No

Yes

Page 11: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

関係演算子と関係演算子と等値演算子等値演算子((pp.110pp.110--112112))• 関係演算子:値の大小関係を比較する演算子

– 「<」、「<=」、「>」、「>=」がある。

– 「=<」や「=>」は間違い。等号は必ず後ろにつく。

• 等値・否定演算子:値が等しいか等しくないかを比較する演算子– 「==」:値が等しいかどうかを比較する

– 「!=」:値が等しくないかどうかを比較する

例:よくある間違いif(a = b){ ..... }「=」は代入演算子なので、等価を示すときは「==」を使わないといけない!この例では、bの値をaに代入し、その値で条件判断をすることになる。C言語の場合、aの値が00以外の場合は全て真以外の場合は全て真となってしまう。

Page 12: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

if if -- elseelse文文 ((pp.138pp.138--142142))例題例題22::キーボードから入力した値が10であったら「10です」、10以外であったら「10以外です」と表示するプログラムを作成せよ。

#include <stdio.h>main( ){

int val;scanf("%d", &val);if(valif(val == 10){== 10){

printf("printf("1010ですです¥¥n");n");}}else{else{

printf("printf("1010以外です以外です¥¥n");n");}}

}

if文の括弧内の条件が成立す

れば次の中括弧内の命令を実行し、条件が成立しなければ、elseに続く中括弧内の命令を実

行する

Page 13: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

if(式){文1;

}else{

文2;}• 式が成り立つ場合は文1を実行し、成り立たない場合は文2を実行する。

• 文1もしくは文2が1文の場合、それを囲む中括弧は省略できる。

文1

No

Yes

文2

ifif--elseelse文文の書式の書式とフローチャートとフローチャート

Page 14: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

else ifelse if文の使い方文の使い方

if (式1){文1;

}else if (式2){

文2;}• 式1が成り立つ場合は、文1を実行し、成り立たない場合は、式2を評価する。そこで、式2が成り立つ場合は、文2を実行する。

式1

文1 式2

文2

Yes

No

Yes

No

Page 15: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

else ifelse if文の意味文の意味

else if(式2){文2;

}と

else{if(式2){文2;

}}は等価である。

Page 16: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

例題例題33::テストの点数を入力し、60点以上で100点以下なら「good」、60未満なら「no good」と表示するプログラムを作成せよ。ただし、100点を超

える点数が入力された場合は、「データの誤り」と表示する。

始め

得点入力 score

score > 100

score > =60データの誤り

good

終わり

Yes

No

Yes

No

60≦score≦100

score≦100

score<60

no good

Page 17: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

#include <stdio.h>main( ){

int score;printf("得点は:");scanf("%d", &score);if(scoreif(score > 100){> 100){

printfprintf("("データの誤りデータの誤り¥¥n");n");}}else else if(scoreif(score >= 60){>= 60){

printf("goodprintf("good¥¥nn");");}}else{else{

printf("noprintf("no goodgood¥¥n");n");}}

}

変数scoreの値が100よりも大きい場合は、画面に「データの誤り(改行)」と表示し、100以下の場合は、次のelse if文を実行する。

tenの値が60以上の場合(つまり、scoreの値が100以下60以上の場合)、画面に「good(改行)」と表示

する。

60未満の場合は、次のelse文を実行する。

Page 18: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

ifif--elseelse文の入れ子構造文の入れ子構造if(式1){

if(式2){文1;

}else{文2;

}}• 式1が成立し、かつ式2が成立

する場合は、文1を、式1が成立し、かつ式2が成立しない場合は文2を実行する。

• if-elseブロック内にさらにif-elseブロックを入れられる(入れ子)。

式1

式2

文1 文2

Yes

No

Yes

No

Page 19: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

例題例題44::西暦年数を入力させ、うるう年の判定をせよ。

うるう年の判定:400で割り切れる年数

または、4で割り切れ、かつ100で割り切れない年数

うるう年の判定:400で割り切れる年数

または、4で割り切れ、かつ100で割り切れない年数

複数の条件が組み合わされて、1つの

条件となっている

論理演算子を利用すると良い

Page 20: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

論理演算子の利用論理演算子の利用((pp.110pp.110--112112))• 論理演算:複数の条件(式)を組み合わせて表現する演算

例: a は b より大きく、かつ b は c より大きい。

• 論理演算子:論理演算を行うために用意された演算子

論理積:条件1が成立し、かつ条件2が成立するとき、全体の演算結果を真とする演算。記号は「&&」を使用。例: (a > b) && (b > c)論理和:条件1が成立するか、または条件2が成立するとき、全体の演算結果を真とする演算。記号は「||」注:「|」パイプ記号は「delete」キーの左隣のキー

例: (a > b) | | (b > c)否定:条件が成立しない場合、演算結果を真とする演算。記号は「!」例: !(a > b)

Page 21: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

例題例題44を論理演算子を用いて解を論理演算子を用いて解いてみるいてみる

• うるう年の条件:

(400で割り切れる年数) または (4で割り切れる年数で、かつ100で割り切れない年数)

• 上記の条件をif文で表現(nに西暦年が入っているとする)

if((n % 400 == 0) || ((n % 4 == 0) && (n % 100 != 0)))printf("うるう年¥n");

elseprintf("うるう年ではない¥n");

• 処理範囲と処理順を明確にするために、各条件と処理の固まりは括弧で括った方がわかりやすい。

Page 22: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

switchswitch文文 (pp.154(pp.154--158)158)

switchswitch文の文の形式とフローチャート形式とフローチャートswitch(整数式){

case 定数式1:文1;break;

case 定数式2:文2;break;

....default:文;break;

}

整数式

文1 文2 文n 文…

定数式1 定数式2 定数式n default

Page 23: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

• 整数や文字の値に応じて多方向分岐が必要な処理では、switch文を使うと便利。

•• switchswitch文の構造説明文の構造説明

– switchに続く( )内に分岐の指標となる整数式を書く。

– case に続く定数式の値(整数)が、switchの括弧内の式の値と一致した時、case以降に続く文を実行する。

– case内にbreakがある場合は、そこで、switchのブロッ

クから抜け出す。

– default に続く文は、式の値がcase文のどの定数式に

も当てはまらない場合に実行される。この場合、default文がない場合は、switchのブロックから抜ける。

– caseの記述順序は拘らない(全てのcase内にbreakを含む場合のみ)。ただし、上のcase文から評価される。

– case文の定数式の値は各々異なっている必要がある。

Page 24: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

• switchに続く( )内には整数式(結果的に整数となる式や値、文字でも良い)を書く。

良い例良い例11: int data=2;switch(data){...}

良い例良い例22: char moji='A';switch(moji){...}

悪い例悪い例: double real=3.4;switch(real){...} /* 実数値は使用不可 */

Page 25: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

• case文内にbreak文がないと、処理は次のcase文に移ってしまう。

例:例: switch(data){case 20:

printf("data = 20¥n");case 21:

printf("data = 21¥n");.......

}dataの数値が20の場合は、両方のprintf文が実行され、数値が21の場合は下のprintf文だけが実行される。

break文がないと、次のcase文が実行

される

Page 26: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

• 異なる式の値でも同一の文を実行させる例

switch(data){case 1:case 2:

printf("%d is 1 or 2¥n", data);break;

....}

このようにcase 1に何の命令文も書かないと、dataの値が1の場合は、自動的に、case 2に実行が移る。従って、dataの値が1でも2でも、同一の文を実行することになる。

dataが1のときも2のときもこのprintf文が実行される

Page 27: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

例題例題55::キーボードから整数値を入力し、入力値が1または2なら「A」、3なら「B」、それ以外なら「C」を表

示するプログラムを作成せよ。フローチャートフローチャート

始め

終わり

num

num

A B C1または2 3 default switch文

で表現可能

Page 28: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

switch(num){case 1: case 2:

printf("A¥n");break;

case 3:printf("B¥n");break;

default:printf("C¥n");break;

}

プログラムプログラムの主要部分の主要部分

numには評価をしたい整数値が入っている

numの値が1または2の場合、次のprintf文を実行する

このbreakでswitchのブロックから抜ける

numの値が3の場合は、次のprintf文を実

行する

numの値が上記のcaseに合致しない場合

Page 29: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

まとめまとめ11•• ifif文文 :: 式が成り立った場合に中括弧内の文を実

行する。if(式){文;}

•• if if -- elseelse文:文:式が成り立った場合にはif文の次の中括弧内の文を実行し、成り立たない場合はelse文の次の文を実行する。if(式){文1;}else{文2;}

• 式の部分には関係演算子関係演算子(<, <=, >, >=)や等価等価演算子演算子(==, !=)を入れて数値の比較が可能。

Page 30: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

まとめまとめ22• if-elseブロック内にさらにif-elseブロックを挿入可能

• else ブロック内に ifブロックが入る場合は、else ifと記述可能

• 条件式が複数ある場合は、論理演算子を用いて一つの条件式にまとめることが可能な場合あり。

– 論理積:日本語の「かつ」に相当。記号「&&」

– 論理和:日本語の「または」に相当。記号「||」

– 否定:日本語の「~でない」に相当。記号「!」

Page 31: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

まとめまとめ33• 整数や文字の値に応じて多方向分岐が必要な処理では、

switch文を使うと便利。

•• switchswitch文の一般形:文の一般形:

switch(整数式){case 定数式:文;break;....

default:文;break;

}

Page 32: フローチャート · フローチャートの書き方 • フローチャートの流れは基本的に上から下、左から右に 進行する。それ以外の場合は、流れ線

参考文献参考文献• 「学生のためのC」 東京電機大学出版

ISBN4-501-52310-7• ポケットコンピュータ SHARP PC-G850V

取り扱い説明書

• 「はじめてのC」 技術評論社

ISBN4-7741-1264-X