プログラミング 田浦健次朗.

Slides:



Advertisements
Similar presentations
アルゴリズムとデータ構造 第2回 線形リスト(復習).
Advertisements

情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
4章 制御の流れ-3.
プログラミング言語としてのR 情報知能学科 白井 英俊.
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
6/19 前回復習 for文による繰り返し計算 演習1:1から10まで足して画面に結果を表示する 提出者: 1人
6/26 前回復習 for文、while文による繰り返し計算
Lightweight Language Weekend ls-lRシェル
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
VBA H106077 寺沢友宏.
基礎プログラミングおよび演習 第8回.
Bottle/Pythonによる Webアプリ入門
C言語講座 第4回 ポインタ.
プログラミング言語論 第4回 手続きの引数機構 変数の有効範囲
第6章 2重ループ&配列 2重ループと配列をやります.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
第7回 条件による繰り返し.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
プログラミング言語入門 手続き型言語としてのJava
プログラムの制御構造 選択・繰り返し.
Cプログラミング演習 中間まとめ2.
B演習(言語処理系演習)第8回 評価器 田浦.
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
繰り返し計算 while文, for文.
第10回関数 Ⅱ (ローカル変数とスコープ).
プログラミング入門 電卓を作ろう・パートIV!!.
アルゴリズムとプログラミング (Algorithms and Programming)
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
プログラミング言語論 第5回 手続きの引数機構 変数の有効範囲
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
情報とコンピュータ 静岡大学工学部 安藤和敏
先週の復習: CPU が働く仕組み コンピュータの構造 pp 制御装置+演算装置+レジスタ 制御装置がなければ電卓と同様
B演習(言語処理系演習)第2回 田浦.
C言語 はじめに 2016年 吉田研究室.
プログラミング言語入門 2013 (C言語 初級) 演習期間 担当 参考資料 採点 10/24 - 1/23 (全10回) 松澤,鈴木,児玉
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
統計ソフトウエアRの基礎.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1.
第5回 プログラミングⅡ 第5回
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
情報処理Ⅱ 2006年11月24日(金).
情報処理Ⅱ 2005年10月28日(金).
1.Scheme の式とプログラム.
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
モジュール分割.
コンパイラ 2012年10月11日
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
pf-2. 条件分岐 (Python プログラミング基礎を演習で学ぶシリーズ)
情報処理Ⅱ 2005年11月25日(金).
プログラミング序論演習.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
第1章 文字の表示と計算 printfと演算子をやります.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
Presentation transcript:

プログラミング 田浦健次朗

動機 なんとなくコンピュータに計算をさせる際の「 考え方」「ノリ」はわかった(ことにしよう) そうであっても,機械語でプログラムを作る(CPU の命令を実際に並べる)のはひどく大変!

何が大変? x5の例: やるべきことはこれだけ(紙と鉛筆) y = 1 y = y * x y = y * x y = y * x y = y * x y = y * x 答え y 3 243 x y 3 1 3 3 3 9 3 27 3 81

それがこんなことに... ある値を覚えておく場所を自分で覚え ておかなくてはならない(○○は100番地, ○○はRX, ○○はRY, …) *, + などお馴染みの記法が使えない レジスタとメモリで(レジスタしか演算 できないという理由で)値を移さないと いけない load [100],RX add 0,1,RY mul RX,RY,RY store RY,[101] halt

プログラミング言語 人間に易しくプログラムを表現する記法(「言語 」) 言語処理系 その言語のプログラムを「対応する機械語に読 み替えて」実行してくれる 「読み替えて実行してくれる」のもまたプログ ラム!

いくつかの言語の実例(固有名詞) C, C++, Pascal, Fortran, Java, JavaScript, Python, Ruby, Perl, PHP, Lisp, Scheme, Haskel, ML, OCaml, Prolog, … 用途に応じて無数に提案されている 本講義では,シンプルさ(学習障壁の少なさ)を理由 に,Pythonで演習を行う

大部分のプログラミング言語に共通の事項(1) 変数(x, y, z, ...): 「方眼紙のマス目」に相当 「番地」を覚える必要は無く「自分の好きな名 前」をつけられる 式: 数学で良く使う記法や関数を自然にかける 計算方法は「処理系」が考えてくれる

大部分のプログラミング言語に共通の事項(2) 条件による分岐や,繰り返しをすっきりと書く記 法 if文,while文,for文 関数: プログラムの一部に相当 複数の関数を組み合わせてまた別の関数を作る ことができる

本質的な「ノリ」は同じ 方眼紙と鉛筆のアナロジー,繰り返しが重要,etc. 結局すべて「機械語の命令列を書きやすくした もの」だからある意味では当然

プログラミング言語の学び方 第一段階: 例から学ぶ どんな問題にどのような手段(変数,繰り返し,関数 ,...)が用意されているか 第二段階: 文法と規則をしっかり意識する (残念ながら)特に最初は,「プログラミング」 「間違いとの戦い」 プログラムを書いていて遭遇するエラーへの対 処ができるように

Pythonプログラミングを始める プログラムの作成・編集: テキストエディタ(mi, emacs, …) .py で終わるファイル名で保存

最初の例: 以下をa.py として作成 print 12345679 * 63 print 12345679 * 72 端末(コマンドライン)で以下を実行 結果 print 12345679 * 63 print 12345679 * 72 python a.py 777777777 888888888

起きたこと(プログラムの実行規則)の説明 プログラムは一般には,文を羅列したもの printも文の一種(print文) プログラムをpythonコマンドで実行すると,かか れた文を順に「実行」していく print 式を実行すると式の値が計算され,結 果が表示される

関数 (最重要コンセプト) プログラムは,あるまとまった計算をする断片を 「関数」という単位で書くのが基本 実行結果 def f(x, y): return 3*x+4*y print f(10, 20) 関数定義(def文) 110

def f (x, y): return 3*x+4*y 関数にまつわる文法と用語 パラメータ 関数への入力を受け取る変数名 関数名 def f (x, y): return 3*x+4*y print f(10, 20) 関数定義 本体(中身) 文の羅列(この例では一つ) 関数呼び出し

def文の実行規則 関数定義も文の一種(def文) def文を「実行」すると,その名前で関数が定義さ れる 後からそれを使う(「呼び出す」)ことができる 注:def文はあくまで関数を定義するだけ. その場 で本体が実行されるわけではない

関数呼び出し式の実行規則 関数呼び出しの値が計算される際, その「本体」(文の羅列)が実行される パラメータに値が渡される return ...も文の一種(return文)

return文の実行規則 関数の本体を実行中, return文 return 式 が実行されると, 式が計算され その関数呼び出しが終了し, 式の計算結果がその関数呼び出しの計算結果 となる return 式

式について 数(1, 2, 3, …) 演算子(3 + 4, 2 + 3 * 4, 123**10) 変数(x, y, hensu, etc. 関数の入力や代入文の左辺 に現れた名前) 関数呼び出し (def文で)定義したもの 組み込み関数: Pythonに元々備わっているもの (abs, sin, cos, log, random, etc.) 複素数の実部・虚部 式.real, 式.imag

組み込み関数を使う場合の注意 from math import * 数学関数(cos, sin, log, exp, など)を使えるように するためのおまじない 「mathから全部持ってくる」 from random import * 乱数関数(random, randint)などを使えるようにす るためのおまじない

プログラムの「雛形」 from math import * from random import * def f(x, y): … def g(x, y, z): … print f(10, 20) g(100, 200, 300) おまじない(必要ならば) 関数の定義. ここが中心. 本題 実際の「実行」

残り(文の全容) if文 代入文 繰り返し while文 for文 print文についてもう少し

if文 条件式が真ならthen節,偽ならelse節を実行 条件式は任意の式 then節,else節は任意個の任意の文 def my_abs(x): if x < 0: return -x else: return x def my_abs(x): if x < 0: return -x else: return x 条件式 then節 else節 if文

代入文 右辺の式を計算し,左辺の変数名の,「以降の値」 をそれに設定 def gojo(x): y = 1 y = y * x y = y * x y = y * x y = y * x y = y * x return y 代入文(yという「余白」に1と書く) 右辺(任意の式) 左辺(変数名)

繰り返し(while文) 条件式を計算.偽ならば終了.真ならば本体を実行し てもう一度繰り返し 言い換え: 条件式が偽になるまで本体を何度でも実 行 def njo(x, n): y = 1 ato_nankai = n while ato_nankai > 0: y = y * x ato_nankai = ato_nankai – 1 return y 条件式 while文 本体

繰り返し(for文) 指定された範囲の値を順に変数に代入して本体 を実行 何回繰り返すかが繰り返しの開始時にわかる場 合はwhileよりもforを使う方が簡単 def njo(x, n): y = 1 for i in range(0, n): y = y * x return y 範囲 for文 本体

print文についてもう少し 一般的な文法 print 式, 式, ... 複数の式を表示可能(空白で区切られる) 式として文字列(”hello”など)も許される 例 結果 print 式, 式, ... print x, ”+”, y, ”=”, x+y 10 + 20 = 30

 Python文法の特徴・注意点 要所でコロン(:) 要所で改行(コロン後に改行,1行に1文) 要所で「字下げ」 (def文の本体, ifのthen/else節, while/forの本体の 始まり) それらの文は同じだけ「字下げ」 def njo(x, n): y = 1 a = n while a > 0: y = y * x a = a – 1 return y while a > 0: y = y * x a = a – 1 while a > 0: y = y * x a = a – 1 

やってしまいがちなミス 何がやってしまいがちかよりも, 「やってしまうと何が起きるか」を理解するこ と(エラーメッセージの解読) エラーメッセージを見て直せること ミスをしないことは不可能

from math import * 忘れ print cos(1.57) 結果 どこで何をしようとしたときにエラーが起きたのか Traceback (most recent call last): File "c.py", line 2, in <module> print cos(1.57) NameError: name 'cos' is not defined 直接の問題(cosが定義されていない)

変数名,関数名の綴り間違い def f(x): return z + 1 print f(10) 結果 Traceback (most recent call last): File "c.py", line 4, in <module> print f(10) File "c.py", line 2, in f return z + 1 NameError: global name 'z' is not defined

関数のreturn忘れ def f(x): x + 20 print f(10) print f(10) + 40.5 結果 None Noneは関数呼び出しがreturnを実行せずに終了した場合に自動的に変えされる値 Noneがprint文でprintされている None Traceback (most recent call last): File "c.py", line 4, in <module> print f(10) + 40 TypeError: unsupported operand type(s) for +: 'NoneType' and 'float' None + 40.5 を実行しようとして失敗

無限whileループ def njo(x, n): y = 1 a = n while a > 0: y = y * x return y 結果(し~ん)