20090616 フレッシュマンセミナー
-
Upload
takeo-kunishima -
Category
Education
-
view
15 -
download
0
Transcript of 20090616 フレッシュマンセミナー
フレッシュマンセミナー国島丈生([email protected])
2009-06-17
経歴
1985-1994 1994-1997 1997-2009
担当講義
情報通信工学実験1B(2年)
プログラミング言語Ⅱ(2年)
コンパイラ(3年)
プログラミング言語Ⅲ(3年)
形式言語理論(修士1年)
ソフトに興味あり
データベース
テキスト処理、文書(XML)処理
プログラミング言語
Web技術
オートマトン理論
KUNISHI ON BOOKS
KUNISHI ON THE WEB
今日の内容
高校・大学時代の体験談
高校数学から情報科学へ
そしてプログラミングへ
高校・大学時代の 体験談
高校時代は
コンピュータとは無縁
数学が好き
物理・化学は… (>_<)
英語や国語の方が得意だったかも
パソコンは高嶺の花 NEC PC-9801VX01 (1987年)
CPU 8MHz
HDDなし(FDのみ)
Windows なし
353,000円(今だと50万円以上?)
関数電卓?
ポケットコンピュータ(ポケコン)
メモリ2~16KB
ディスクなし
BASICのプログラムが動いた
INTERNET 黎明期
1984 東大、東工大、慶応大
1988 大学・企業の研究所間
1992以降 個人へ普及
1990年代 携帯電話登場
大学選びは安直…
数学を生かしたい→当時の京大では選択肢3つ
理学部数学科:就職に困るらしい…
工学部数理工学科, 工学部情報工学科
パンフを読んでも違いが分からん!!→偏差値で情報工学科を選択
コンピュータはあまり意識せず
1985年 京都大学工学部情報工学科入学
誤 算
誤算その1
物理が結構必要だった…
誤算その2
大学の数学は難しかった…
誤算その3
専門では微積分はあまり使わなかった
「独特」の理論
ブール代数etc.
パズルに近い
結果オーライ?
もともとパズルは好き
数学よりプログラムの方が合っていたらしい
卒論でやったこと
C, C++で1,500行程度のプログラミング
念のため
プログラミングの達人では決してない
同期にももっと凄いのがいた
皆さんの中の凄腕プログラマのほうが実力は私より上のはず
高校数学から 情報工学へ
情報工学の二面性
ハードウェアを作る
ソフトウェアを作る
物理 連続系の数学
離散系の数学
連続系 VS 離散系
連続した数 (実数)
連続しない数 (整数, 0/1 etc.)
微分・積分
集合 剰余系 場合の数 数列
数学的帰納法
物理現象
情報数学
情報科学への橋渡し
ケーニヒスベルクの橋
図の7つの橋を各1度ずつ通って元の場所に戻ってくることができるか。ただし、同じ橋を2度以上通ってはならない。
関連:グラフ理論
ハノイの塔
台の上に3本の棒A, B, Cがあり、Aに n 枚の円盤がはまっている。円盤は下ほど半径が大きい。次のルールを満たしながら、円盤をすべてBに移すのに必要な手数を n で表せ。
一度に一枚の円盤しか移動できない
途中で円盤の大小を逆にしてはいけない
関連:再帰
そして プログラミングへ
誰だって難しい
まず敵(味方?)を知る
コンピュータは
複雑な処理は苦手
単純な処理の繰り返しが得意
中間結果をたくさん覚えても平気
例:定積分
人間は不定積分から計算
⇤ 1
0
x2dx =�13x3
⇥1
0
=13
例:定積分
コンピュータは不定積分のような式変形は苦手
区分求積法
n = 1000 で 0.3338335
⌃ 1
0
x2dx ⇥n⇧
k=1
⇤�k
n
⇥2
· 1n
⌅=
1n3
n⇧
k=1
k2
プログラムの例
S = 0;for (k = 1; k <= n; k ++) { S = S + k * k;}S = S / (n * n * n);
⌃ 1
0
x2dx ⇥n⇧
k=1
⇤�k
n
⇥2
· 1n
⌅=
1n3
n⇧
k=1
k2
フィボナッチ数列
F0 = 1, F1 = 1, Fn+2 = Fn+1 + Fn
1, 1, 2, 3, 5, 8, 13, 21, 34, …だが一般項は複雑
Fn =1⇥5
⇤�1 +
⇥5
2
⇥n
+
�1 −
⇥5
2
⇥n⌅
プログラム=漸化式
int F(int n) {
if (n == 0) return 1; else if (n == 1) return 1; else {
return F(n-1)+F(n-2); }
}
F0 = 1, F1 = 1, Fn+2 = Fn+1 + Fn
法則を見つける
今日は日曜日です。100日後は何曜日?
1日後は月、2日後は火、…100日後は火
法則を見つけよ
今日は日曜日。1億日後は何曜日?
とても数えられません
7の倍数日後はいつも日曜日。 1億÷7 = 14285714 あまり 2。∴火曜日
法則を見つけよ
今日は日曜日。10100日後は何曜日?
10100なんて計算できない
10100を7で割った余りも計算できない
10nを7で割った余りを、n=1, 2, …で計算してみよう
すると
100 % 7 = 1, 101 % 7 = 3, 102 % 7 = 2, 103 % 7 = 6, 104 % 7 = 4, 105 % 7 = 5, 106 % 7 = 1, 107 % 7 = 3, …
%:剰余を表す演算子
周期6で同じ数が出る(1, 3, 2, 6, 4, 5)
100 % 6 = 4 ∴木曜日
プログラムにすると
void nannyoubi(int n) { if (n%6 == 0) { printf(“月曜日¥n”); } else if (n%6 == 1) { printf(“水曜日¥n”); } else if (n%6 ==2) { /* 以下省略 */ }
経験に基づく プログラミング学習の
アドバイス
プログラミング学習は
語学学習に似ている
人の真似は大事
インプットがなければアウトプットはできない
まずは他人のコードの真似から
人のコードを読んで引出しを増やせ
Cと相性が悪くても
世の中には無数にプログラミング言語がある
プログラミングの根は共通
一つ言語をマスターすれば、他の言語に応用が利く
本を読もう
経験に基づく仮説
国語力のある人はプログラミング能力も高い
プログラム=(プログラミング言語という)言語で書かれた文章
文章に触れる機会を増やしてください(ジャンルは問いません)
諸君の健闘を祈る
レポート課題
以下の2点についてA4用紙1枚程度にまとめ、6/23(火)17:00までに提出せよ。(提出場所:2610室)
ケーニヒスベルクの橋、もしくはハノイの塔(解に至る経過も含めて)
今日の講義の感想