next up previous contents index
: 常微分方程式の数値解 : 関数 : 実行中断   目次   索引

章末の問題

問題 8.3   次のプログラムの出力値を答えよ. プログラムの実行中のメモリ内での変数の様子を説明せよ.

def main() {
  I = 0;
  K=tenten(I);
  print([I,K]);
}
def tenten(I) {
  I = 10;
  return(I);
}
main();
end$

問題 8.4   次のプログラムの出力値を答えよ. プログラムの実行中のメモリ内での変数の様子を説明せよ.
def main() {
  I = 1;
  K=tenten(I);
  print([I,K]);
}
def tenten(N) {
  I = 2*N;
  return(I);
}  
main();
end$

問題 8.5   次のプログラムの出力値を答えよ. プログラムの実行中のメモリ内での変数の様子を説明せよ.
def main() {
  A = newvect(10);
  for (I=0; I<10; I++) A[I] = 0;
  tentenArray(A);
  print(A);
}
def tentenArray(B) {
  B[3] = 1000;
}  
main();
end$

問題 8.6   摂氏をカシに変換する関数をつくり, 変換表を印刷しなさい.

問題 8.7   [20] (この問題は unix 上のみで, asirgui ではできない.)
  1. 文字画面上の 点 (x,y) に * を印刷する関数をつくりなさい. カーソルを (X,Y) に移動するには,
    S=asciitostr([0x1b])+"["+rtostr(X)+";"+rtostr(Y)+"H"; print(S,0); とすればよい. スクリーンを消去するには
    S=asciitostr([0x1b])+"[2J"; print(S,0); とすればよい. 0x1b (エスケープコード) で始まる文字列をエスケープシーケンスと いい画面にこの文字列をおくり込むと, 画面を消去したり, 色をかえたり, カーソルを指定の位置へ移動できる. なお漢字コード等もエスケープコードを利用している. これについては第 10 章で説明する.
  2. この関数をもちいて, 2 次関数のグラフを * を用いて書くプログラムを つくれ.

問題 8.8   長さ N の ベクトルを二つうけとり, 内積を計算 する関数を書きなさい.

問題 8.9   Asir では diff(F,x) で, Fx についての 偏微分を計算することが可能である. x のあとに変数を続けて書くと, 偏微分をくりかえし行うことが可能である. たとえば, diff(F,x,y,y) $\frac{\partial^3 {\tt F}}{\partial x \partial y^2}$ は意味する. diff について詳しくは Asir のマニュアルを見よ.
diff を用いて, あたえられた変数変換の Jacobi 行列式を 計算するプログラムを作成しなさい.

問題 8.10   Taylor 級数を用いて $\sin x$ の近似値を計算する関数を作成しなさい.

参考 (by T): 関数を有効に利用することにより, プログラムを分割して開発していくことが 可能である. 過去に作成したプログラムや他人の開発したプログラムを利用しやすく なる. このような考えの一つの到達点が, オブジェクト指向プログラミングで あるが, 筆者(T)はオブジェクト指向を標榜するプログラミングを ``穴埋め式プログラミング'' とふざけて呼ぶことがある. 穴埋め問題というのはおなじみであるが, それのプログラム版である. 穴埋めしているうちにプログラムができてしまう. たとえば, Java AWT (Application Window Toolkit) でプログラミングするときは, あらかじめ与えらたプログラムを まさに穴埋めしながらプログラミングする. たとえば, mouseDown という関数を記述すれば, mouse を押したときの動作を定義できるが, 別に書かなくてもすむ. このとき mouseDown の''穴を埋めた''のである.

補足 (by N): C++ の場合, 「穴」と呼ぶべきものは「仮想関数」というもの であろう. この場合, 「穴埋め」= 「オーバーライド」である. 埋めるべき穴 がちゃんと見えている場合は問題ないが, そもそも自分が実現したい機能が仮 想関数として既に提供されているかどうかは, あるオブジェクトに関するマニュ アルを隅から隅まで読んでみないとわからない場合が多い. これをさらにやや こしくするのが「継承」という機能である. これは, 豊富な機能を持つオブジェ クトを, 基本的なオブジェクトへの機能追加によって階層的に作りだすという 操作を実現するためのものである. このため, 自分の実現したい機能があるオ ブジェクトのマニュアルになくても, さらに上(下?)の階層まで遡って調べる ことになる. 面倒になると, 探すのをあきらめて, 自分で書いてしまったりす る. こうして, C++ のスタイルに馴染めない old C プログラマ (N) は, 常に 「書かなくてもいいプログラムを書いてしまったのではないか」という不安を 感じながら Windows プログラミングをしているのだ.



Nobuki Takayama 平成15年9月12日