Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
フレッシュマンセミナー
国島丈生(t.kunishi@gmail.com)
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
x2
dx =
�
1
3
x3
⇥1
0
=
1
3
例:定積分
コンピュータは不定積分のような
式変形は苦手
区分求積法
n = 1000 で 0.3338335
⌃ 1
0
x2
dx ⇥
n⇧
k=1
⇤�
k
n
⇥2
·
1
n
⌅
=
1
n3
n⇧
k=1
k2
プログラムの例
S = 0;

for (k = 1; k <= n; k ++) {

S = S + k * k;

}

S = S / (n * n * n);
⌃ 1
0
x2
dx ⇥
n⇧
k=1
⇤�
k
n
⇥2
·
1
n
...
フィボナッチ数列
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...
プログラム=漸化式
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,...
法則を見つける
今日は日曜日です。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, …
%:剰余を表す演...
プログラムにすると
void nannyoubi(int n)
{
if (n%6 == 0) {
printf(“月曜日¥n”);
} else if (n%6 == 1) {
printf(“水曜日¥n”);
} else if (n%6 ...
経験に基づく
プログラミング学習の
アドバイス
プログラミング学習は
語学学習に似ている
人の真似は大事
インプットがなければアウトプットはできない
まずは他人のコードの真似から
人のコードを読んで引出しを増やせ
Cと相性が悪くても
世の中には無数にプログラミング言語がある
プログラミングの根は共通
一つ言語をマスターすれば、他の言語に応用
が利く
本を読もう
経験に基づく仮説
国語力のある人はプログラミング能力も高い
プログラム=(プログラミング言語という)言
語で書かれた文章
文章に触れる機会を増やしてください(ジャンル
は問いません)
諸君の健闘を祈る
レポート課題
以下の2点についてA4用紙1枚程度にまとめ、
6/23(火)17:00までに提出せよ。(提出場所:
2610室)
ケーニヒスベルクの橋、もしくはハノイの塔
(解に至る経過も含めて)
今日の講義の感想
Upcoming SlideShare
Loading in …5
×

20090616 フレッシュマンセミナー

2009年6月16日に実施した、岡山県立大学情報工学部情報通信工学科1年次生向けの講義「フレッシュマンセミナー」の講演スライド

  • Be the first to comment

  • Be the first to like this

20090616 フレッシュマンセミナー

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

×