講義:プログラミング基礎’2017 その15

講義:プログラミング基礎’2017 その15

目次


テクニック

ループを途中でやめる
  • break

Python チュートリアル

https://docs.python.jp/3/tutorial/index.html




本日の授業は、web の jupter notobook を使うと効率的です。

https://cocalc.com


授業のルール

  • 席は,空けずに詰めて座ること。
  • スマフォは鞄にしまうこと。
  • PC で,授業と関係ないことをしないこと。


素数を扱う

準備:前回の日付のフォルダをコピーして,今日の日付として,そこで作業する

サンプル

import time
t0 = time.time() #開始時刻記録

a = [] #見つかった素数を保管する配列

for n in range(2, 11): #範囲ループ:与えられた範囲を確認

    p_f = 1

    for i in range(2, n): #割れるかどうかループ:素数でないかを割り算をして調べる

        if n % i == 0: #素数でないことがわかる
          p_f = 0

    if p_f == 1: #素数なら,配列に追加
         a.append(n)

print a

t1 = time.time()
kiroku = t1 - t0
print kiroku, "sec"


課題その1

割れるかどうかループは,割り切れたとわかったら(素数でない)とわかったら,そこで終了してよい。

ループを終了する命令は,break である。それを利用して,割り切れるループを途中でやめるようにする。

20170727_01.py

課題その2

10 までの素数は,2, 3, 5, 7 である。素数でない数(合成数)は,4, 6, 8, 9, 10 である。ここで,合成数に注目すると,6 以上の倍数はない。割れるかどうかループで,i を 6 以上でやる必要はない。この原理を使って,break をいれ,ループを終了せよ。

ヒント:もし、i > n/2 ならチェックループ終了

課題その3

上記の課題において,さらに合成数に注目すると,それぞれ,2, 3, 2, 3, 2 の場合数である。ここに,4 以上の倍数は,ない。この原理を利用して,break をいれよ。

ヒント: 3**2 とすると、32 が計算できる

課題その4

 サンプルは,見つかった素数配列にしまっている。このやり方でなく,10までの素数をもとめるなら,先に,10個の要素の配列をつくり,そこに,a[2] = 1, a[3] = 1, a[4] = 0 ,,, のように,素数なら,1,そうでないなら,0 を入れるやり方でやりなさい。

2 の倍数なら,1をいれ,3 の倍数なら,1 を入れると繰り返せ。

 このやり方を,「エラトステネスのふるい」と言う。

 http://mathtrain.jp/eratosthenes

課題その5 (授業の範囲を超える)

 課題その4をもとに,並列処理で動かしなさい。2 の倍数か否か,3 の倍数で否か等を並列で確認する。


質問から

アンケート(アンケート用紙が配られたら,すぐに前後左右に人に書いてもらうこと)

配布された用紙に記入。紙は,縦長に使用すること。

日付,時限数,学生番号(下3桁),氏名

席の前後左右の人の名前(漢字とふりがな,その人に書いてもらう)とその人の「この試験でがんばる単位」

例:斎藤 末広(さいとう すえひろ) 有機化学

前:

後:

左:

右:

A 今日の授業でためになったこと

B 授業に関する質問

C 授業の充実度(1-5)