lecture 7 1. 2....

13
Lecture 7 コンピュータその7 1 1. 配列とデータファイル 2. 数値微分・数値積分 3. 素数判定 (C & Matlab) Tuesday, November 15, 16

Upload: others

Post on 15-Sep-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

Lecture 7

コンピュータその71

1. 配列とデータファイル2. 数値微分・数値積分3. 素数判定 (C & Matlab)

Tuesday, November 15, 16

Page 2: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

ファイルからのデータを配列に入れてみよう

i. http://mmc01.es.hokudai.ac.jp/~eginder/Data/sensor.txt からsensor.txtをダウンロードする.ii. データの長さを求めよ.iii.データを配列に保存する.iv. データを微分して画面に表示せよ.

データを取得し,Cプログラムをセットアップする.

2

1.

Tuesday, November 15, 16

Page 3: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

Black Boxmydata.dat

3

Tuesday, November 15, 16

Page 4: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

#include <stdio.h> #include <stdlib.h> #include <math.h> #define NUMDATA 7 void readdata(double *arr){ int i; FILE *fp; fp = fopen("mydata.dat","r"); if (fp == NULL) { // report an error if unable to open the file. printf("Unable to open mydata.dat for reading.\n"); exit(0); // requires the stdlib.h header file } for(i=0;i<NUMDATA;i++){ // READ DATA FROM FILE fscanf(fp,"%lf",&arr[i]); } fclose(fp); } int main(void){ int i; double a[NUMDATA]; readdata(a); for(i=0;i<NUMDATA;i++){ // WRITE DATA TO SCREEN printf("%lf\n",a[i]); } return 0; }

データの数

exit(0) . . .

ファイルを開くr = “read”

数を一つずつ読み込むファイルを閉じる

配列を定義するreaddata()を呼ぶ

配列のデータを画面に表示する.

4

Black Box

Tuesday, November 15, 16

Page 5: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

配列の復習

2.

a:

f(x)

1. 配列を作成.2. 配列にsensor.txtを格納する.3. 配列をGNUPLOTで表示する.4. 上のデータを関数として,[0,π] で数値積分しよう.但し,     とする.

0 L

5

ヒント:

Z b

af(x)dx ⇡

N�1X

i=0

f(xi)(xi+1 � xi)

x0(= a), x1, x2, ..., xN (= b)

Riemann sums

�x = ⇡/121

Tuesday, November 15, 16

Page 6: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

6

3.

素数判定

Pseudo code素数判定アルゴリズムを実行せよ.

Details

Tuesday, November 15, 16

Page 7: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

7

素数判定(Matlab)

ループ中にbreak;を使うと,内側のループを直ちに抜けることができる.

isPrimeを1にセット

あるj<kで割り切れたら,isPrimeに0を代入(割り切れない場合なにもしない)

n = 50 n = input('Please input a positive integer:')a. b.5. 5.

ヒント:help rem

Tuesday, November 15, 16

Page 8: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

8

素数判定(C言語)

ヒント:int n = 9;int m = 5;printf(“%d”,n%m)

Tuesday, November 15, 16

Page 9: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

x

2 + y

2 = z

2x, y, z 2 Z

9

x,y,z をそれぞれ 1 から n まで個別に変化させて, ピタゴラス数になるかどうかを調べる。

1. n を int 型変数とし,自然数値を代入する.2. x,y,z を int 型変数として定義する.3. x,y,z それぞれを for 文により 1 から n まで変化させる.(a) x,y,z の組が,ピタゴラス数かどうか if 文で判定する.(b) ピタゴラス数であれば,printf により出力する.

ピタゴラス数(Pythagorean triples)

5.

Pseudo code

Tuesday, November 15, 16

Page 10: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

10

ピタゴラス数(Pythagorean triples) 6. (C言語)

Tuesday, November 15, 16

Page 11: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

11

ピタゴラス数(Pythagorean triples) 7. Matlab

ヒント:>> help fprintf

Tuesday, November 15, 16

Page 12: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

12

エラトステネスの篩 (ふるい) (Sieve of Eratosthenes)

上のアルゴリズムを実行せよ.8.

Tuesday, November 15, 16

Page 13: Lecture 7 1. 2. 数値微分・数値積分mmc01.es.hokudai.ac.jp/.../courses/computer/lec/Lec7.pdf配列の復習 2. a: f (x) 1. 配列を作成. 2. 配列にsensor.txtを格納する.

13

!

エラトステネスの篩 (ふるい) (Sieve of Eratosthenes)

Tuesday, November 15, 16