計算機数学演習 A 2015.5.11. Risa/Asir のプログラミング (ベクトル, リスト) 前回 : Asir における if 文. Asir における関数の定義, 呼び出し. 1. 階乗を計算する関数 fact.txt def fact(N) { S = 1; for (I = 1; I <= N; I++) { S = S * I; } return S; } end; 2. 階乗を計算する関数 fact の呼出 (Asir) (プログラム fact.txt を読み込み) [8] fact(5); 120 [10] fact(20); 2432902008176640000 ベクトル 1 Asir でのベクトルは, C 言語での配列に相当するデータ型である. 関数 newvect(データサイズ) で, 引数で指定され たデータの数を持つベクトルを生成する. C 言語の配列の場合と同様に, 変数名 [番号] のように添字を指定することで, そこのデータにアクセスできる. C 言語の配列と同様に, 添字は 0 から始まり, (データサイズ) − 1 までである. ベクト ルの各成分にはどのようなデータを入れてもよい. A = newvect(5); A[0] A[1] A[2] A[3] A[4] 0 0 0 0 0 サイズ 5 のベクトルを生成. 3. ベクトルの生成, ベクトルの各要素への参照, 代入 [1854] A=newvect(5); <-- サイズ 5 のベクトルを生成し, それを変数 A に代入 [ 0 0 0 0 0 ] [1855] A[0]=1; <-- ベクトルの第 0 成分に 1 を代入 1 [1856] A[1]=2; <-- ベクトルの第 1 成分に 2 を代入 2 [1857] A[2]=3; 3 [1858] A[3]=4; 4 [1859] A[4]=5; 5 [1860] A; <-- ベクトル A の表示 [ 1 2 3 4 5 ] [1861] length(A); <-- ベクトル A の長さ 5 [1862] A[3] = (x+1)^3; <-- 数だけでなく, 何でも代入できる x^3+3*x^2+3*x+1 [1863] A; [ 1 2 3 x^3+3*x^2+3*x+1 5 ] [1864] A[2]; <-- A[2] でベクトル A の第 2 成分を取り出す 3 例 1. 数列 an = n3 (n = 1, 2, 3, . . .) を考える. この数列の第 1 項から第 100 項までをベクトルに入れて, その値を表示 するプログラムは次のようになる. 4. 数列の表示 (seq.txt) A = newvect(101); for (I = 1; I <= 100; I++) { A[I] = I^3; } print(A); end; さらに, 関数を使って数列を計算するように変更する. 関数名は cseq で, 関数の引数 N で第 N 項まで計算と指定する. 1 5. 数列を計算する関数 (cseq.txt) 6. 数列を計算する関数 cseq の呼び出し (Asir) def cseq(N) { A = newvect(N + 1); for (I = 1; I <= N; I++) { A[I] = I^3; } return A; } end; (5. のプログラムを [31] cseq(10); [ 0 1 8 27 64 125 [33] B=cseq(20); [ 0 1 8 27 64 125 [34] B; [ 0 1 8 27 64 125 [35] B[10]; 1000 [36] B[11]; 1331 Asir で読み込んだ後) <-- 関数 cseq(10) を呼出. 数列 a_n=n^3 を第 10 項まで計算 216 343 512 729 1000 ] <-- 関数 cseq(20) を呼出し, その返り値であるベクトルを B に代入. 216 343 512 729 1000 1331 1728 2197 2744 3375 4096 4913 5832 6859 8000 ] 216 343 512 729 1000 1331 1728 2197 2744 3375 4096 4913 5832 6859 8000 ] <-- ベクトル B の第 10 番目を表示. これは a_10 = 10^3. <-- ベクトル B の第 11 番目を表示. これは a_11 = 11^3. 問題 2. 初項 F=100, 公比 R=2/3 が与えられているとする. この時, 等比数列 an の第 1 項から第 100 項までを計算し, 各項をベクトルに代入, 表示するプログラムをつくれ. (4. がヒント) 7. 等比数列の表示 (gseq.txt) F=100; R=2/3; end; さらに, 関数を使って等比数列を計算するように変更する. 関数名は gseq で, 関数の引数 F は初項, R は公比, N で第 N 項までの計算すると指定することにする. (5. がヒント) 8. 等比数列を計算する関数 (gseq2.txt) def gseq( { ) } end; 例 3. 漸化式 an+1 = 3an + 2 (n ≥ 1), a1 = 1 で定義される数列 an (n = 1, 2, 3, . . .) を考える. この数列の第 1 項から 第 100 項までをベクトルに入れて, その値を表示するプログラムは次のようになる. 9. 漸化式で定義される数列の表示 (rec.txt) A = newvect(101); A[1] = 1; for (I = 2; I <= 100; I++) { A[I] = 3*A[I - 1] + 2; } print(A); end; 問題 4. 漸化式 an+1 = 3an + 2 (n ≥ 1), a1 = 1 で定義される数列 an (n = 1, 2, 3, . . .) の第 1 項から第 N 項までをベ クトルに入れて, その値を表示する関数 rec を書け. ここで N は関数 rec の引数である. 問題 5. フィボナッチ数列とは, 漸化式 Fn+2 = Fn+1 + Fn (n ≥ 1), F1 = 1, F2 = 1 で定義される数列であった. フィボ ナッチ数列 Fn の第 1 項から第 N 項までをベクトルに入れて, その値を表示する関数 fib を書け. ここで N は関数 fib の引数である. 2
© Copyright 2024 ExpyDoc