2 Software Engineering STRUCTURED PROGRAMMING 13 GO TO

  • Slides: 20
Download presentation
2 ソフトウェア 学 Software Engineering 構造化プログラミング STRUCTURED PROGRAMMING

2 ソフトウェア 学 Software Engineering 構造化プログラミング STRUCTURED PROGRAMMING

動機(1/3) GO TO 文:機械語の分岐命令に対応した制御文 ■ 2 の N 乗を計算する流れ図 (flowchart) START (初期の頃の) BASIC言語のプログラム READ

動機(1/3) GO TO 文:機械語の分岐命令に対応した制御文 ■ 2 の N 乗を計算する流れ図 (flowchart) START (初期の頃の) BASIC言語のプログラム READ N X← 1 N=0 true false X ← 2*X N ← N-1 PRINT X END 10 20 30 40 50 60 70 80 READ N LET X=1 IF N=0 THEN GOTO 70 LET X=2*X LET N=N-1 GOTO 30 PRINT X END

動機(3/3) GO TO 文有害説 E. Dijkstra: Go To Statement Considered Harmful, Communications of the

動機(3/3) GO TO 文有害説 E. Dijkstra: Go To Statement Considered Harmful, Communications of the ACM, vol. 11, no. 3, pp. 147 -148, 1968. (ダイクストラ, 1968)

構造化プログラミング(2/6) 3つの基本構造 順次 (sequence) 選択 (selection) S 1 C S 2 S 1; S

構造化プログラミング(2/6) 3つの基本構造 順次 (sequence) 選択 (selection) S 1 C S 2 S 1; S 2 反復 (iteration) false C true S 1 false true S 2 if C then S 1 else S 2 構造化プログラミング言語 S while C do S

構造化プログラミング(6/6) やや複雑な変換 Flag←false while. . do. . true C 1 or Flag false A

構造化プログラミング(6/6) やや複雑な変換 Flag←false while. . do. . true C 1 or Flag false A C 2 false B D true Use a flag true false Flag A C 2 if. . then. . else. . false Flag←false B true Flag←true 必ずしもわかりやすくなるわけではない true false D

構造の視覚的表現(2/6) PAD (Problem Analysis Diagram) Pascal によるプログラム read(m, n) m=m-n m ≠ n m>n

構造の視覚的表現(2/6) PAD (Problem Analysis Diagram) Pascal によるプログラム read(m, n) m=m-n m ≠ n m>n n=n-m print(m) 木構造により表現 (日本人が考案し世界標準化) read(m, n); while m<>n do if m>n then m=m-n else n=n-m; print(m);

演習問題 2 つぎのCプログラムの構造を (1) NSチャート (2) PAD (3) 字下げ により,それぞれ表示しなさい。 while((start < strlen(line)) &&

演習問題 2 つぎのCプログラムの構造を (1) NSチャート (2) PAD (3) 字下げ により,それぞれ表示しなさい。 while((start < strlen(line)) && !alpha(line[start])) start++; if(start >= strlen(line)) return -1; else {printf("%c", line[start]); start++; while((start < strlen(line)) && (alpha(line[start])||num(line[start]))){ printf("%c", line[start]); start++; } printf("n"); return start; }