第4回 プログラミング言語と擬似コード
◇下へ・一覧へ
○テキスト
3章(3.1,3.2)
擬似コードとはなにか?
PAD では書き切れない細かい点を表現するため
プログラム言語の制御構造の記述法と
自然言語による記述を組み合わせた「擬似」プログラム
(自然言語の部分を計算機のわかる形に直すとプログラムになる。)
簡単な例では、プログラムとほとんど変わらない。
日本語の曖昧さの例
プログラミング言語の理解がある程度必要
C言語のアルゴリズムの記述に関する部分について説明する。
C言語プログラムとして完成するためには、他に「宣言」が
必要である。(テキストで使用している PASCAL との対応(ps file)
とその対応例(主に擬似コード))
◇下へ・上へ
C言語では「式」は処理の基本的な要素である。
例えば、
0.5 * ( a + b )
sin( t )
s = s + x[i]
d = sqrt( 4.0*b*b + 2 * a * c )
などが典型的な式である。
Cでは 「代入」も「代入式」として扱われている。
(C言語の式の説明)
○処理の単位は「文」である。
「式」の後に ';'を つけると「文」になる。
たいてい「文」は、 「式」のあと ; (セミコロン) を
をつけたものである。
最も典型的な文は代入で、例えば
n = m + 10 ;
の形をしている。
( 代入以外の式も ; をつければ、文になるが、多くの場合は意味がない )
この ; (セミコロン)を書き忘れたり、 : (コロン)と間違えないように注意する。
他の文は制御構造に関係し、
if( 式 ) 文1 else 文2
while( 式 ) 文
のような形をしている。
◇下へ・上へ
○逐次構造
C言語では文を並べたものである。
文1
文2 (PAD
)
文3
文を並べて、{ } で括ったものを、「ブロック」と呼ぶ。
あるまとまったの逐次構造の文は、{ }で括ってブロックにする。
{
文1
文2
文3
}
一般に「文」はブロックでもよい。すなわち、ブロックはブロックを含んでよい
このような構造を入れ子構造(nest構造)と呼ぶ。
{
文1
{
文2
文3
}
文4
}
( 多くの場合 文は「 式 ; 」である。この「;」を忘れないよう気をつける )
◇下へ・上へ
○選択構造
if
形式1
if( 条件 ) 真の時の処理 (PAD
)
形式2
if( 条件 ) 真の時の処理
else 偽の時の処理 (PAD
)
条件は、「式」で、Cの場合、零 は偽、それ以外(例えば 1 )は真である。
例えば、
if( a > b ) max = a ; else max = b ;
それぞれの処理が、複数の時は、それらを { } でくくってブロックにする。
if( a > b ){ max = a ; min=b ; }
else { min = a ; max=b ; }
三つに分類するなどの時は、
if( 条件1 ) 処理1
else if( 条件2 ) 処理2
else 処理3
などとする。
( switch(スイッチ) はここでは説明しない。)
◇下へ・上へ
○反復構造
1.while
形式
while( 繰り返し条件 )繰り返し処理 (PAD
)
説明
繰り返し条件は「式」である。Cの場合、
零 は偽、それ以外(例えば 1 )は真である。
繰り返し処理は 文 である
例えば
while( r - d >=0 ) r = r - d ;
繰り返し処理ははブロックでもよい。
while( i<=n ) {
s = s + x[i] ;
i = i + 1;
}
大抵の場合 while の前に初期化処理があり、繰り返し処理の
最後には、増分処理がある。これをまとめたのが次の for 文である。
2. for
形式
for( 初期化処理 ; 繰り返し継続条件 ; 増分処理 )繰り返し処理
初期化処理、繰り返し継続条件、増分処理は、どれも式である。
繰り返し処理は文である。ブロックでもよい。
典型的な使い方は、
for( i=初期値 ; i<=最終値 ; i=i+1 )処理
の形である。
これは、while を使って置き換えることができる。
( もう一つの繰り返し形式 do-whileは
ここでは説明しない。 )
(主に 1.は不定回反復 2.定回反復)
◇下へ・上へ
○宣言と入出力
変数などの宣言と入出力は、ここでの主目的であるアルゴリズム本体にはあま
り関係ないが、実際にプログラムを作成してアルゴリズムを確認するには必要
なので、別項で簡単に説明する。
(実際にプログラムを作る時は
実際の C プログラムの書き方(限定版)も参考)
◇下へ・上へ
○字下げ indentation
反復される処理
選択される処理
まとめられた処理(ブロックの中身)
を少し行の先頭から下げて書く
これにより見やすくなる。すなわち誤りが起きにくくなる。
◇下へ・上へ
○コメント(注釈) /* コメント */
プログラム(または、アルゴリズム、
擬似コード)の内容に直接関係なく
人間が見やすさのために入れる文字
○擬似コード
C言語で「式」や「文」を、自然言語(日本語や英語)で記述したものを
「擬似コード」と呼ぶ。
( とくに C 言語に限らないがここでは、C言語の形を用いる。
テキストでは Pascal の形を用いている )
擬似コードはプログラム(コード)ではないので、コンピュータに実行できるわ
けではないが、アルゴリズムをプログラム(コード)にする過程で考えを整理す
る時に用いる。
( ここであげる様な簡単な例では、擬似コードとCプログラムが非常に
近いので、擬似コードの役割があまり明確でないかも知れない )
◇下へ・上へ
○コンパイルの方法
サンプルプログラムのコンパイルの方法
自分のプログラムのコンパイルの方法
コンパイルがうまくいかない時の対応
◇下へ・上へ
○演習
すでにでき上がったサンプルのプログラムを「読む」ことにより
C言語(およびC言語風擬似コード)を理解する。
1. ディレクトリ ~eenagai/ic2 にあるサンプルプログラム
を自分のディレクトリ(例えば ~/ic2 )にコピーして
コンパイルし、実行する。
サンプルプログラムのリスト
minmax.c 3数 l,m,n の最大値 max と 最小値 min を
求めて表示する。(単純版)pad(psfile)
minmax2.c 3数 l,m,n の最大値 max と 最小値 min を
求めて表示する。(洗練版)pad(psfile)
souwa.c 総和を求めて表示する。pad(psfile)
integral.c 数値積分 pad(psfile)
総和を計算するプログラムがわかれば
数学における定積分を近似的な値として
求めるプログラムを理解することは難しくない。
(計算法の説明 psfile)
2. 次の C プログラムの指定した各処理や条件判断が実行される順番を考えよ。
また、各プログラムは、
「~eenagai/ic2/c-order ファイル名」
で実行した部分が表示されるので確認せよ。
(a)~eenagai/ic2/c-order1.c(if について)
(b)~eenagai/ic2/c-order2.c(while について)
(c)~eenagai/ic2/c-order3.c(while と if について)
順番を示す部分は処理 P1-P8 まで、と条件 C1 と C2 である。
注意:式の中で、「a % b」 は 「a を bで割った余り」を求める演算を意味する。
3. 次に階乗を計算するアルゴリズムの PAD とそれを、
Cプログラムに直したものを示す。Cプログラムの空欄(「※1〜3」)を埋めて
プログラムを完成せよ。また、コンパイル・実行して、結果を確認せよ。
PAD (psfile)
Cプログラム
◇一覧へ・上へ
○レポート課題(解答)
1. 次の C プログラムのコメント/* pn */ および /* cn */のある行の
各処理、各条件判断が実行される順番を示せ。
だだし、Input Number に対しては、学籍番号を入力するものとする。
Cプログラム
(このプログラムは ~eenagai/ic2/c-order が利用できない)
2. 次にn個の並列抵抗の合成抵抗の計算をするアルゴリズムの PAD とそれを、
Cプログラムに直したものを示す。Cプログラムの空欄(「※1〜5」)を埋めて
プログラムを完成せよ。また、コンパイル・実行して、結果を確認せよ。
PAD (psfile)
Cプログラム