• 検索結果がありません。

計算機言語 I 第 8 回 関数

N/A
N/A
Protected

Academic year: 2021

シェア "計算機言語 I 第 8 回 関数"

Copied!
3
0
0

読み込み中.... (全文を見る)

全文

(1)

計算機言語 I 8 回 関数

この資料

: http://www.math.u-ryukyu.ac.jp/~suga/gengo/2019-1/08.pdf

レポートへのツッコミ 教科書 p.92, 6.6 節の補足

ヘッダ

(header)

ファイルに対する解説がありますが

,

少し補足しておきます

.

#include

, cpp(C

プリプロセッサ

)

への指示で

,

そのあとに続くファイルの内容をプログラムソースに取 り込みます

.

ほとんどの場合

,

教科書にあるようにヘッダファイルと呼ばれるものを取り込みますが

,

それ以外 のファイルを取り込まないわけではありません

. C

のソースファイルを取り込んでも構わないし

,

プログラム で利用するデータを取り込んでも構わないのです

.

この講義で利用している

stdio.h, math.h

はヘッダファイルと呼ばれます

.

多くの場合

,

ヘッダファイルに

,

次の

2

つを記述します

.

cpp

のマクロ置換を利用した定数の定義

プログラムソースに記述する関数のプロトタイプ宣言

大きなプログラムの作成では

,

ヘッダファイルに上のような関数のプロトタイプと定数定義を記述し

,

プロ グラムソース

(hogehoge.c)

,

「関数の実装」を書くようにすることが多いようです

.

このようにすることで

,

ヘッダファイルを読むだけで

,

どのようなプログラムを作成しているかの概要がわかるからです

.

教科書 p.93, 6.7 , 再帰 (recursion) の補足

再帰とは

,

関数の処理の途中で自分自身を関数呼び出しすることです

.

再び自分自身に帰ってくるので再帰 と呼ばれます

.

計算機概論

I

maple

の講義の回で

,

再帰の話を

1

度しました

.

その際にも述べたことですが

,

再帰の利点

,

欠点は次になります

.

プログラムの記述が簡潔で分かりやすく

(

読みやすく

)

なる

.

関数呼び出しの度にスタック領域と呼ばれるメモリを消費するので

,

処理によってはメモリが足りなく なる

.

関数呼び出しという動作が数多く起こるため

,

プログラムの動作が遅くなる

(

今回のレポート問題

).

今回のレポート問題にある様に

,

再帰を繰り返し処理で書けるのであれば

,

実行時間を考えると

,

繰り返し処

1

(2)

理で記述方が望ましいのがほとんどです

.

ただし

,

教科書の

Hanoi

の塔の様に再帰でしか書けないような処理もありますし

,

繰り返し処理に変換する

のが大変な場合もあります

.

後者の例としては

,

プログラム言語処理系の作成が良く取り上げられます

.

プログラム言語処理系では

,

次の動作をして実際にコンピュータで動作するプログラムを作り上げます

.

字句解析 プログラムのソースコードを「単語

(word)

」に分解して

,

それがキーワードであるか

,

数値である

,

識別子であるか

,

演算子であるかなどを調べる

.

構文解析 上の単語の並びから

,

実際にコンピュータでしなければならない動作を確定させる

.

例えば

, C

を例にとると

,

「数から始まる文字列」があれば

,

それは数値に変換されますし

,

アルファベットか ら始まる文字列なら

,

それは

,

キーワードか識別子のどちらかをチェックします

(

字句解析

).

また

, (x+y)*z

様な式があれば

, x + y

を計算してその結果に

z

を掛けるという動作をさせるように機械語を生成します

(

文解析

).

このような動作ができるようにプログラミング言語の文法が決まっているわけですが

,

それを記述するのに よく用いられるのが

,

拡張バッカスナウア記法

(Extended Backus–Naur form, EBNF)

です

. EBNF

で記述 されたプログラム言語の処理系を作成しようとすると

,

次のような複数の関数にまたがる再帰処理を書くのが 最も自然です

(

書く方も書きやすいし

,

読む方も読みやすい

).

func1() {

...

func2();

}

func2() {

...

func3();

}

...

funcN() {

...

func1();

}

2

(3)

レポート問題

締切

: 6

10

(

) 10:00(JST)

a

0

= a

1

= 1, a

n+1

= a

n

+ a

n1

, (n 1)

で定義される

Fibonacci(

フィボナッチ

)

の数列について

,

次の

2

つのプログラムを書き

,

そのプログラムを提出するとともに

, 3

番目の結果をレポートせよ

.

ただし

,

どちらの 関数も

, unsigned long long

(

符号無し

64bit

整数

)

の変数を利用して

, a

50の正しい値が表示できるよう にすること

. printf

での

unsigned long long

の出力の指定方法は

, %llu. (man 3 printf

を参照

).

1.

繰り返し

(for

でも

while

でも良い

)

を用いて

,

自然数

n

の入力に対して

, a

n を出力する関数

fibonacci(int n)

を書き

, main()

では

, a

50を出力するプログラム

.

件名

: gengo2019-1 report 8-1.

2.

再帰を利用して

,

自然数

n

の入力に対して

, a

nを出力する関数

fibonacci(int n)

を書き

, main()

, a

50を出力するプログラム

.

件名

: gengo2019-1 report 8-2

3.

上の

2

のプログラムの実行は終了するか

? 2

のプログラムが終了するなら

,

上の

1, 2

のプログラムにつ いて

time

コマンドでレポートされる内容を提出せよ

.

件名

: gengo2019-1 report 8-3.

time

コマンドは

, time ./a.out

, a.out

の実行に対して要した

CPU

の使用時間をレポートします

.

3

参照

関連したドキュメント

 第一の方法は、不安の原因を特定した上で、それを制御しようとするもので

熱力学計算によれば、この地下水中において安定なのは FeSe 2 (cr)で、Se 濃度はこの固相の 溶解度である 10 -9 ~10 -8 mol dm

そればかりか,チューリング機械の能力を超える現実的な計算の仕組は,今日に至るま

 「時価の算定に関する会計基準」(企業会計基準第30号

解析の教科書にある Lagrange の未定乗数法の証明では,

2 前項の規定は、地方自治法(昭和 22 年法律第 67 号)第 252 条の 19 第1項の指定都 市及び同法第 252 条の

計量法第 173 条では、定期検査の規定(計量法第 19 条)に違反した者は、 「50 万 円以下の罰金に処する」と定められています。また、法第 172

(3)使用済自動車又は解体自 動車の解体の方法(指定回収 物品及び鉛蓄電池等の回収 の方法を含む).