Surface Science and Solid State Theory Laboratory

@surface


c言語で数値計算

Posted on 10月 17, 2009 by kimi

今日は「数値計算」の補講。土曜日に学校に出てくるんは、学生諸君もいやかもしれんが、こっちもめんどくさいんじゃ。

さて、普通「数値計算」というとFORTRANでやるのが通例で、特にfortran90/95からは初心者から上級者までみんなに使える言語になったので、できればこの講義もfortran90でやりたいと思うのだが、いかんせん電気電子の学生さんたちにとっては数値計算よりもシステム周りのプログラミングに向けたプログラミング言語習得の方が急務であり、なおかつ複数のプログラミング言語を習得するような、もしくは習得させるような余力は彼我ともにない。しかたなく数年前から「数値計算」の講義をc言語で行っている。

もちろん、c言語でも立派に数値計算はできるわけだが、この講義ではあえて「ポインタ」と「構造体」は使わない、入力はしない(ソースにべた書き)、forループしか使わない、ことをローカルルールにして講義している。結局のところプログラミングの初学者にアルゴリズムを教えるためのプログラミング言語として何を選ぶかは積年の積み残し課題なのである。かつてはそれしかないという理由でBASICが使用されたが、これは非構造化言語であるため論外。当時の実用性からFORTRANが使われた時代(私などはこの時代の学生)もあったが、その当時のFORTRANはFORTRAN77ですらなくこれも非構造化言語であるため不適。FORTRAN77は文番号さえなければいい言語なのだが、パソコンで使うにはコンパイラが非常に高価だったという別の問題もあった。時期は前後するがこういった問題を解決するべく教育界を席巻したのがPascalだが、PascalとPascal以外の言語と両方を使いこなせる人で実用プログラムを組むのにPascalを使うという人には未だお目にかかったことは無い。ただし、Turbo Pascalがこの用途(初学者に実用プログラムのアルゴリズムを教える)に果たした役割は特筆すべきである。私はといえばTurbo Pascalではなくてその隣に並んでいたTurbo Cに手を出してしまったため講義で教えるはめになるまでPascalとはあまり付き合いはなかった。

結局実用を考えると、最初っからcをやっとけってことなのだが、c言語は危険すぎる。現代はLinuxやfreeBSDのような安全なOSが簡単に手に入るようになっているのでよっぽどのことがないかぎり変なことは起こらないが、MSなんとかの上で初心者がcでポインタを使ったプログラムを組むなど危険きわまりない。かつて(私の世代がパソコンを触った頃)は、BASICでアルゴリズムを覚えるってのとアセンブリでアーキテクチャの知識を得るってのが同時進行で、c言語に出会う頃には構造化のご利益やアドレスやらポートやらの概念を理解していたので、c言語の習得にはさほど大きな困難はなかったが、今の学生さんたちにとってはいきなりcで、いきなり複雑かつ、高速かつ、大容量のシステムに挑むことになり、理解が不十分な者は一歩も前に進めず、生半可通には危険きわまりなく、本当に一握りの学生しかついて来れていないのが現実である。

今期から大学院生にpythonを教えてみているのだが、pythonの癖のある文法事項にばかり目がいっているようで、やはり合目的的ではない。今のところ「c言語 ポインタ構造体抜き」よりもうまい解を見つけていないのが現実である。1)

1) それってJavaじゃん。という突っ込みもあるかもしれんが。

Comments are closed.




↑ Top