Creation and Use of Functions

(関数の作り方と使い方)

Computing Practice I

5th lecture, May 12, 2016

http://www.sw.it.aoyama.ac.jp/2016/CP1/lecture5.html

Martin J. Dürst

Today's Schedule

 

ミニテスト

 

C 言語の応用: Linux

 

前回の演習結果

04A1 04A2 04A3 04B1 04B2 04C1
100点 70 64 66 53 11 1
60点 18 24 22 34 70 23
部分点 - - - - - 36
エラー - - - 1 3 11
未提出 1 1 1 1 5 18

 

前回の演習問題について

 

Example Solutions for 04C1

 

Importance of Functions

 

プログラム言語の関数と数学の関数

 

関数関係の概念

 

関数の考え方の基本

関数の作る方と使う方を全く別のこととして考える!

 

Declarations and Definitions

Distinguished for functions (and global variables)

Attention: Our coursebook uses a lot of unnnecessary declarations:

int main(void); // this declaration is unnecessary

int main(void)

{...

 

関数の抽出の手順

(Refactoring: Improving the Design of Existing Code, Martin Fowler et al., Addison-Wesley, 1999 の「メソッドの抽出より」)

 

Refactoring

 

A Function Calling Itself

Very simple example: Calculating the sum of integers from 1 to n (∑ni=0 i):

int sumN (int n)
{
if (n <= 0)
return 0;
else
return n + sumN(n-1);
}

Mathematical justification: ∑ni=0 i = n + ∑n-1i=0 i (for n>0); ∑0i=0 i = 0

 

Execution Example for sumN

Result: 6

 

Recursive Functions

 

One More Example of a Recursive Function

Convert a number i to n-ary representation:

void printNary (int i, int n) {
static char letters[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

if (i < n)
putchar (letters[i]);
else {
printNary (i/n, n);
putchar (letters[i%n]);
}
}

 

Execution Example for printNary

Result: 215

 

再帰的関数の要点

 

Parts of a Recursive Function

  1. Non-recursive base case
  2. Actual recursion

 

Recursion Patterns

[recursion: recursive function call; processing: data processing local to the function]

 

プログラム開発のコツ

(advice for program development)

 

問題再利用の目的

 

演習問題の概要

仮名の関数、名前が無意味の関数など減点対象

ヒント: 入力の関数の戻り値をうまく利用

(05C1 以外は全部非常に短い)

 

次回の準備

 

Glossary

function
関数
declaration
宣言
definition
定義
function extraction
関数の抽出
refactoring
リファクタリング
recursion
再帰
recursive function
再帰的関数
mathematical induction
数学的帰納法
stack overflow
スタック・オーバーフロー
tail recursion
末尾再帰
tower of Hanoi
ハノイの塔