cs-4. さまざまなプログラミング言語,
コンピュータでの計算の誤差,プロ グラミングの基礎(式,変数,条件
分岐,繰り返し)
(コンピューターサイエンス)
URL: https://www.kkaneko.jp/cc/cs/index.html
1
金子邦彦
今日の内容
プログラミングの初心者を想定して,プログラミングの基 礎を教える
• さまざまなプログラミング言語
• プログラミングとは
• コンピュータでの計算の誤差
• プログラム開発環境
• 式,変数,条件分岐や繰り返しによる処理
2
4-2 さまざまな
プログラミング言語
(コンピューターサイエンス)
URL: https://www.kkaneko.jp/cc/cs/index.html
3
金子邦彦
プログラミング 言語は複数ある
•
複数のプログラミング言語を学 ぶことは大事.
賛成できますか?
•
「1つを知っていれば,どの言 語も大体似ているので,応用が 利く」という考え方もある.
•
「やりたいこと,学びたいこと に向いた言語を,そのときどき で選ぶのが,一番良い」とも.
•
人によって「好きな言語が違 う」ということも
4
さまざまなプログラミング言語
• Python
• C
• Java
• JavaScript
• R
• Octave
• Scheme
など
5
ここで行う作業
1.20 より大きければ「big」、
さもなければ「small」と表示 2.0 + 1 + 2 + 3 + 4 + 5 を求める
なぜプログラミング言語は たくさんあるのでしょうか?
6
それぞれ 特徴があ
る
Java
どのコン ピュータ でも同じ プログラ ムが動く.
普及度は トップレ
ベル.
Python
初心者向 け.その おかげで,
多数の拡 張機能も.
C / C++
コン ピュータ の性能を 最大限引 き出す.
R
「データ 処理」に 特化した コマンド
言語
SQL
「データ ベース」
に特化し たコマン
ド言語
MATLAB / Octave
「数値計 算」,
「信号処 理」など に特化し たコマン
ド言語
Python プログラム見本
x = 100 if (x > 20):
print("big") else:
print("small") s = 0
for i in [1, 2, 3, 4, 5]:
s = s + i print(s)
7
• すぐに実行できる
• さまざまな「パッケージ」で 機能を拡張できる
• Windows でも Linux でも,ほ ほ同じプログラムで動く
Java プログラム見本
public class Main {
public static void main(String[] args) throws Exception { int x = 100;
if (x > 20) {
System.out.printf("big¥n");
} else {
System.out.printf("small¥n");
}
int s = 0;
for(int i = 1; i <= 5; i++) { s = s + i;
}
System.out.printf("%d¥n", s);
}
} 8
• Windows でも Linux でも
Android アプリでも,同じプロ グラムで動く
C プログラム見本
#include <stdio.h>
int main(void){
int x, s, i;
x = 100;
if (x > 20) {
printf("big¥n");
} else {
printf("small¥n");
}
s = 0;
for(i = 1; i <= 5; i++) { s = s + i;
}
printf("%d¥n", s);
return;
} 9
・コンピュータの決め細かなコ ントロール
・高速実行できるチューニング
JavaScript プログラム見本
process.stdin.resume();
process.stdin.setEncoding('utf8');
var util = require('util');
var x = 100;
if (x > 20) {
process.stdout.write('big¥n');
} else {
process.stdout.write('small¥n') }
var s = 0;
for(var i = 1; i <= 5; i++) { s = s + i;
}
process.stdout.write(util.format('%d¥n', s));
10
Webアプリに向く
R プログラム見本
x <- 100 if (x > 20) {
print("big") } else {
print("small") }
s <- 0
for (i in c(1,2,3,4,5)) { s <- s + i
}
print(s)
11
データ専門家向け
Octave プログラム見本
x = 100 if (x > 20)
printf("big¥n") else
printf("small¥n") endif
s = 0
for i = [1 2 3 4 5]
s = s + i endfor
printf("%d", s)
12
行列計算,信号処理など に向く
Scheme プログラム見本
(define (decide x) (cond
((> x 20) "big") (else "small"))) (define (sum n)
(cond
((= n 0) 0)
(else (+ (sum (- n 1)) n)))) (begin
(print (decide 100)) (print (sum 5)))
13
関数型言語
4-3 プログラミングとは
(コンピューターサイエンス)
URL: https://www.kkaneko.jp/cc/cs/index.html
14
金子邦彦
アウトライン
•プログラミング,プログラム
•
ソースコード
•
プログラムの実行
15
プログラミング
(programming)•
コンピュータは、プログラムで動く
•
プログラミングは、プログラムを設計、製作 すること
•
何らかの作業を、コンピュータで実行させる ために行う
16
プログラムの ソースコード
プログラムの 実行結果
ソースコード
(source code)•
プログラムを,何らかのプログラミング言語 で書いたもの
•
「ソフトウエアの設計図」ということも.
人間も読み書き、編集できる
•
複数のプログラミング言語を使うことも
17
import picamera
camera = picamera.PiCamera() camera.capture("1.jpg")
exit()
Raspberry Pi で,カメラを使って
撮影し,画像を保存するプログラムの ソースコード
Python
プログラムの実行手順例
•
プログラムの起動は,シェル
(Windowsのコマン ドプロンプトなど)から,コマンドで行える
18
Python プログラムのソース コードを,foo.py のような ファイル名で保存しておく
•
ソースコード
プログラミングで気を付けること
•
コンピュータは「万能のマシン」と言われる こともある
•
プログラムで行わせたい「作業」について,
深い理解が必要
•
プログラム中の誤り(バグ)を,コンピュー タが自動で発見してくれるわけではない.
•
「プログラムが期待通りに動いているか」を 検証する、テストが必要
19
まとめ
•
プログラミングは,プログラムを設計,製作する こと
20
4-4 コンピュータでの 計算の誤差
(コンピューターサイエンス)
URL: https://www.kkaneko.jp/cc/cs/index.html
21
金子邦彦
コンピュータで「1÷3」 を求めるとどうな ると思いますか
1. 0.333333333333333333333333333333
と無 限に表示される
2.
計算できない
3.
正確な値が表示されない(誤差を含む)
22
•
コンピュータを使うからといって,計算が完璧 に正確というわけではない
23
Paiza.IO
24
さまざまなプログラミング言語の体験,
演習ができるオンラインサービス
① ウェブブラウザで次の URL を開く https://paiza.io/ja
② 「コード作成を試してみる」をク リック
③ 言語を選ぶ.この授業では Python 3
1/3 は?
① 次のソースコードを実行.結果を確認
print(1/3)25
0.00000000000000003333333333 3333333333333333333333333...
が誤差!
1/6, 1/9 は?
② 「
1/6」
,「
1/9」を計算
26
③ 半径が
3の円の面積は
3×
3×
(円周率
)コンピュータで求めてみた結果例
27
④ 次のソースコードを実行.結果を確認
import mathprint(3 * 3 * math.pi)
28
これも正確な値ではあり ません
3倍
⑤ 次のソースコードを実行.結果を確認
print(0.33333 * 3)※
「
3」は
5個.(すべて半角文字)
⑥ 次のソースコードを実行.結果を確認
print(0.3333333333 * 3)※
「
3」は
10個.(すべて半角文字)
29
3倍
⑦ 次のソースコードを実行.結果を確認
print(0.333333333333333 * 3)※
「
3」は
15個.(すべて半角文字)
⑧ 次のソースコードを実行.結果を確認
print(0.33333333333333333333 * 3)※
「
3」は
20個.(すべて半角文字)
誤差がある 誤差がある 30
コンピュータの計算では,誤差が出てくる ことがある
「
0.333333333333333」以外でも,桁数や「
3」を 変えていろいろ試してみなさい
31
★ 全員が納得し,実感するのを待ちます
4-5 プログラム開発環境
(コンピューターサイエンス)
URL: https://www.kkaneko.jp/cc/cs/index.html
32
金子邦彦
プログラム開発環境
プログラム開発環境は、プログラミングにおけ るさまざまなことを支援する機能をもったプロ グラム
• プログラムの作成、編集(エディタ)
• プログラム中の誤り(バグ)の発見やテストの支援
(デバッガ)
• プログラムの実行
• マニュアルの表示
• プログラムが扱うファイルのブラウズ
• プログラムの配布(パッケージ機能など),共有,
共同編集
• 公開,共有,共同編集
• バックアップ,バージョン管理
※ これらが簡単に行えるようになる
33
オンラインのプログラム開発環境
•
プログラム開発環境の操作は,ウエブブラウザで できる
•
自分のパソコンに,特別なソフトをインストール する必要がない
•
機能制限がある場合が多い
•
利用登録の有無と内容,利用条件,料金について は,利用者で確認のこと
34
プログラム作成ができるウエブサービス
(オンラインの開発環境)の例
35
http://pythontutor.com/
Python Tutor
https://www.onlinegdb.com/
GDB online
プログラム作成ができるウエブサービス
(オンラインの開発環境)の例
36
https://repl.it/
repl.it
https://paiza.io/
Paiza.IO
プログラム作成ができるウエブサービス
(オンラインの開発環境)の例
37
https://colab.research.google.com/
Google Colaboratory
https://www.tutorialspoint.com/
codingground.htm
Coding Ground
• Python Tutor http://www.pythontutor.com/
• Python, C, Java, JavaScript
• ステップ実行,オブジェクトの表示がビジュアルに
38
• paiza.IO https://paiza.io/?locale=ja-jp
• Python, C, Java, JavaScript, R の他にも SQL など多数 の言語
• 操作が簡単.表示は日本語.
• 一定の条件下でファイル操作も可能
39
• Coding Ground
https://www.tutorialspoint.com/codingground.htm
• Python, C, Java, JavaScript, R, Octave/MATLAB の他にも ,
SQL, bash, アセンブリ言語など多数の言語
• ファイル作成,ファイル読み書きの実習も簡単にできる
• 複数プログラムファイルの組み合わせも簡単にできる
• Google Colaboratory
https://colab.research.google.com/
• Python の開発環境
• 多数のパッケージがインストール済み
• ノートブックにより,記録が簡単に残せる.ビジュアルな 表示も簡単に可能
• プログラムの共有も簡単
40
まとめ
•
プログラム開発環境は,プログラミングにおける さまざまなことを支援する機能をもったプログラ ム
41
4-6 式と変数
(コンピューターサイエンス)
URL: https://www.kkaneko.jp/cc/cs/index.html
42
金子邦彦
Python
•
プログラミング言語の1つ
•
無料で使うことができる言語である
• Python
には,バージョン
2,バージョン
3などが ある.
※
この授業では,バージョン
3を使用
43
Paiza.IO
44
さまざまなプログラミング言語の体験,
演習ができるオンラインサービス
① ウェブブラウザで次の URL を開く https://paiza.io/ja
② 「コード作成を試してみる」をク リック
③ 言語を選ぶ.この授業では Python 3
式
① 次のソースコードを実行.結果を確認
print(100*200)45
すべて半角文字
「*」は掛け算の記号
② 次のソースコードを実行.結果を確認
print(2*4*3*5)46
すべて半角文字
「*」は掛け算の記号
変数
•
変数は,値を覚えておくためのメモリ
③ 次のソースコードを実行.
x = 100
④ 次のソースコードを実行.結果を確認
x = 100print(x)
47
実行ボタンを押しても,
何も表示されない のは OK
x の値が表示される
⑤ 次のソースコードを実行.結果を確認
a = 10 b = 20
print(a + b) print(a * b)
print((a + 10) * b)
48
⑥ 底辺が2.5で,高さが5のとき,
三角形の面積は,面積: 6.25 次のソースコードを実行.結果を確認
teihen = 2.5 takasa = 5
print(teihen * takasa / 2)
49
⑦ 面積が9の正方形について,辺の長さを求める.
次のソースコードを実行.結果を確認
import math
print(math.sqrt(9))
50
4-7 条件分岐,繰り返し
(コンピューターサイエンス)
URL: https://www.kkaneko.jp/cc/cs/index.html
51
金子邦彦
条件分岐
•
条件分岐では,変数の値によって,結果が変 わるなどの判断を行う
age
の値が
12以下
→ 500 yen 13以上
→ 1800 yen52
条件分岐のプログラム例
53 age = 18
if age <= 12:
print(500) else:
print(1800)
if (age <= 12)
の直後に「
:」
elseの直後に「
:」
(どちらも,コロン)
字下げも正確に!
print の前に,「タブ (Tab)」を 1つだけ
ノートページ
字下げ
54
正しくない字下げ 正しい字下げ
Paiza.IO
55
さまざまなプログラミング言語の体験,
演習ができるオンラインサービス
① ウェブブラウザで次の URL を開く https://paiza.io/ja
② 「コード作成を試してみる」をク リック
③ 言語を選ぶ.この授業では Python 3
結果を確認
56
実習
• 18
を
7に書き換えて,実行し,結果を確認
57
条件分岐
•
次のプログラムを作成
58
① weight と料金の関係は次の通りです
weight の値が 100未満 → 0 yen
100以上 → 1000 yen
② weight = 80 のとき、料金はいくらになりますか
正解の例は次のページにありますが,
なるべく見ずに,自分で考える
59
配列
•
データの並びで,0から始まる番号(添字)が付 いている
60
180 20 250 40 0 1 2 3
ノートページ
配列データ
•
4つの価格について,1.08倍を求める
61
180 20 250 40 0 1 2 3
•
次のソースコードを実行.結果を確認
p = [180, 20, 250, 40]
for i in p:
print(i * 1.08)
62
月の日数
•
次のソースコードを実行.結果を確認
days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
print( days[6] ) print( days[7] )
63
6 月は 30日まである.7 月は 31日まである.
ポイント:月の日数についてのデータを作る
※ うるう年のことは考えないことにする
実習3.物体の落下
•
次のソースコードを実行.結果を確認
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for t in x:
print( (9.8 / 2) * t * t )
64
for を使って計算を繰り返している
for による繰り返し
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for t in x:
print( (9.8 / 2) * t * t )
65
ノートページ
繰り返す処理
t