Powered by SmartDoc

「解析学とコンピュータ」での質問(2002/06/10)
Ver. 1.0

2003年6月10日
栗野 俊一
kurino@math.cst.nihon-u.ac.jp
http://edu-gw2.math.cst.nihon-u.ac.jp/~kurino/2003/analysis/analysis.html
「解析学とコンピュータ」でのQ and A

Q and A

  1. [質問]

    気が付いたら、画面上で、何時も表示されているアイコンがなくなってしまいました。

    どうすれば、また、他の人と同じように、アイコンが表示されるようになるのでしょうか(2003/10/21) ?

    [回答]
    次のような手順で、最初の状態に戻すことができます。
    • とりあえずlogoutしてください。
    • login時に、「ディスクトップ」を"twm"にして、loginしてください。

      いつもと、異り、画面はシンプルで、shell window (ターミナルエミュレータ)が一つ出ているだけになると思います。

    • 次のコマンドを実行していください。これによってファイルを消します。
      Gnome の設定ファイルの削除
      [stmXXXX@axx stmXXXX]$ \rm -r ~/.g*
      
    • 次のコマンドで、logoutします。
      logout
      [stmXXXX@axx stmXXXX]$ exit
      
    • login時に、「ディスクトップ」を"Gnome"にして、loginしてください。

      最初の状態に戻っていると思います。

    [説明]

    皆さんは、普段Gnome(1)という名前のwindow managerを利用しています。

    Gnomeは、ディスクトップのアイコンの位置などを管理しており、また、変更があると、logout時に、その変更結果を、ファイルに保存し、次回のlogin時に、その変更結果をファイルから読み出すことによって、変更内容を復元するようになっています。

    その変更内容が入っている場所が"~/.g*"で表される場所なわけです。

    今回の問題では、その内容が、思わぬものに書き換わってしまい、元にもどせないかという問題です。

    もし、「最初の状態に戻す(2)」というのであれば、「Gnomeが設定ファイルがない場合に、自動的に標準的な設定に書き換える(これが最初の状態)」という挙動を利用することができます。

    つまり、「現在の設定を無くしてしまえ」ば、後は、Gnomeが勝手に、標準状態にしてくれるわけです。

    そこで、「現在状態を無くす」つまり「状態を保存しているファイルを削除する」命令が、"rm -r ~/.g*"だったわけです。

    ただし、この方法を取ると、当然のことながら、積極的に自分が設定変更してきた内容も失しなわれてしまいます。例えば、壁紙を変更している人は、元の何もない背景に戻ってしまいます。したがって、この方法を適用する場合は、そこの処を考えてみてください(3)

  2. [質問]

    福井先生の解析学とコンピュータの課題で、textに記載されている、ヤコビ法で、固有値を求めるプログラムを入力しました。

    ところが、このプログラムをコンパイルしようとすると、「"matrix.h"がありません」といわれて困っています。どうしたら良いのでしょうか(2003/10/21)。

    [回答]
    文字とおり、「"matrix.h"がない」からです。"matrix.h"の内容は、text p.69にありますので、これを入力していください(過去に問題を解いていれば、すでに、このファイルはあるはずなのですが.. )。
    [説明]

    互いに関係のあるプログラムを作成していると、プログラム間で共通な記述がでてきます。もちろん、これを、全部、毎回同じ内容で入力してもよいのですが、それは、単純に考えても面倒ですし、それのみならず、同じ入力のつもりで、間違って、異なる入力をしてしまうと、それが原因で、プログラムが思いどおりに動かなくなってしまう可能性もあります。

    そこで、同じ内容であることを保障し、入力の手間を減らすための仕組みが、includeです。

    このtextでは、行列に関る記述が多いため、その行列を利用するプログラムで共通な内容をmatrix.hにまとめておき、様々な処から利用しているために、今回のようなことになったわけです。

  3. [質問]
    演習室のComputerで、C言語を利用する場合に、数学関数( sin, cos etc.. )を使用する時に気を付けることを教えてください(2003/10/21)。
    [回答]

    まず、プログラムの先頭に#include <math.h>をいれましょう。#include <stdio.h>の下あたりがよいと思います。

    また、コンパイル時にcc xxxx.c -lmと、コンパイルオプションとして-lmを最後につけてください。

    [説明]

    数学関数を利用するには、その関数の宣言(コンパイル時に必要)と、関数の定義(実行時に必要)の二つを共に、指定する必要があります。

    関数の宣言は、math.hの中にあるので、プログラムの中でinclude文でそれを指定します。

    また、関数の定義は、/usr/lib/libm.aの中にあるのですが、これをccコマンドの-lmで指定しています。

  4. [質問]
    (竹澤先生のクラスで..)プログラムと(文字化けした)実行結果を、一つのe-mailの中に混在( Cut & Past )させて、送ろうとすると、「送信」ボタンをおした瞬間に、(シルフィードが)落ちてしまいます。
    [回答]
    実行結果が文字化けしないように、プログラムの漢字のコードをShift JISに変換(4)してから、コンパイル実行しましょう。
    [説明]

    どうやら、シルフィードは、送信するメールの中に、不正な文字コードが入っていると、落ちてしまうようです。

    このようなことがおきないように、正しい漢字コードで表現された内容を送ることにしましょう( 2003/06/24 )。

  5. [質問]
    lcpadの実行Window (あの背景黒いWindow )が、画面一杯にひろがっちゃったですが... ( 2003/06/10 )
    [回答]
    [Alt]+[Enter] ( [Alt] Keyを押した状態で[Enter] Keyをポンと一度、押す)で元にもどります。
    [説明]

    コマンドプロンプトWindow (あの背景の黒いWindow )は、もともと、昔、Window Systemがなかったころの状況で利用するToolをWindows Systemの一部となるようなWindowとして実現したものです。

    このため、Windows Systemの一部だけでなく、Display全体を専有していたころの(つまり昔と同じ.. )状態にする仕組が備わっているわけです。

    この画面全体を専有する状態(「全画面表示」と呼びます.. )にするための命令( Key入力)が、[Alt] + [Enter]となっています。そして、もとの状態に戻す命令も[Alt] + [Enter]なわけです。

  6. [質問]

    C言語のProgramを作成し、無事コンパイルが済んだので、実行しようとしたら、「mainがない」といわれました。

    main のないプログラム
    [kurino@a46 /tmp]$ cc a.c
    /usr/lib/crt1.o: In function `_start':
    /usr/lib/crt1.o(.text+0x18): undefined reference to `main'
    collect2: ld returned 1 exit status
    [kurino@a46 /tmp]$ 
    

    どうしてでしょうか?

    [回答]
    C言語のProgramを実行するにはmain関数が必要なのにもかかわらず、それがないのでしょう。main関数を作成してください。
    [説明]

    おそらく、教科書のProgramを入力したのではないかと思いますが、教科書のProgramは(本来は、当然、こうすべきものであるのですが、[中身もわからずに、丸写しする人には都合がわるくも.. ] ) main関数から呼出すように、独立したProgramになっています。なぜなら、この方が、本質的な部分が説明しやすいし、また、必要ならば、これを他に転用できるからです。

    そして、(当然のことながら、紙面の都合で、あまり本質的でない.. ) main関数は、取り除かれています。

    したがって、(最悪、テキストを丸写しする人であっても.. ) main関数を追加する必要があるわけです。

  7. [質問]
    Note-PC用のコンパイラが欲しいのですが。
    [回答]
    Note-PC用のCコンパイラを望んでいる場合は、申し出てください。
    [説明]

    高橋先生のソフトウェア概論では、

    LSI C-86 Ver. 3.30c試食版( LSI-C Japan 社製)とCPad for LSI C-86( きときとさん作成) (共に、フリーウェアです)を利用して演習を行っています。

    希望があれば、このファイルを配布しますので、Note-PCを持参して、申し出てください。

    これは、Internet経由で、自分で入手できるので、計算機に自信のある方は、是非、御自分で。なお、自宅でC言語学習の環境を作成するなどが、参考になると思います。

  8. [質問]
    実行結果をe-mailで送るには、どうすればよいですか?。
    [回答]

    実行結果の表示量が少い場合は、Cut & Pastを利用しますが、量が多い場合は、リダイレクションを使いましょう。

    通常の場合は、./a.outとすれば、画面に実行結果が表示されます。

    普通の実行
    [kurino@a46 kurino]$ ./a.out
    ... 実行結果が表示される ...
    [kurino@a46 kurino]$
    

    次に、">" (リダイレクション)を利用して、その出力を、好きな名前のファイル(以下の例では、result.txt )へ送り、そのファイルに保存することができます。

    リダイレクションを使う実行
    [kurino@a46 kurino]$ ./a.out > result.txt
    [kurino@a46 kurino]$		-- あたかも何も表示されないようみえる
    [kurino@a46 kurino]$ cat result.txt
    ... 実行結果が表示される ...
    [kurino@a46 kurino]$
    

    後は、e-mail側で、そのファイルを読み込むように指示すればよいわけです。

    [説明]
    unix (実は、Windows PCのDOSプロンプトでも、おなじことができます)では、このように、画面への出力を、必要に応じて、ファイルに書き出すことができるので、そのファイルを加工することによって、更に、色々な用途に利用することができます。
  9. [質問]
    studio.hがないとコンパイラがいいます。
    studio.h がない
    [kurino@a46 /tmp]$ cc a.c
    a.c:1: studio.h: そのようなファイルやディレクトリはありません
    [kurino@a46 /tmp]$ 
    
    [回答]
    studio (スタジオ)ではなくstdio ( STanDard I/O )です。おそらく#include <studio.h>とかかれた行があると思われますが、そのstudioをstdioと書き直してください( 2003/06/10 )。
    [説明]

    昔の計算機は、記憶容量が不足していたので、長い名前を短く縮めていました。このためにstdioのような意味不明な単語が多数出てきます。

    これは、覚えるしかないので、覚えてください。

  1. ノーム:最初のgは発音しない。

    ただ、unixのX windowのwindow managerであることを明確にするために、あえて、「グノム」とか、「ジーノーム」と発音することもある。

    「ノーム」は、本来は、ヨーロッパの御伽話に出てくる、妖精や怪物の類の名前。

  2. 本来は、これらの内容を書き換える操作があるのですが、それをここで、説明するのは、この資料の範囲をこえるので、申し訳ないのですが、検索エンジンなどを利用して「Gnome」「X11」「設定」などのキーワードで検索してみてください。
  3. つまり、ちゃんと、調べれば、自分の望んだ変更は生き残り、望まない変更は元にもどす方法もあるということです。
  4. まず、ステータス行( emacsの下から二行目にEUCとある[実際には、SJISでない..]ことを確認しましょう)

    emacsで漢字コードを変換するには、C-x C-m fの後にshift_jis-unix [Enter]としたあと(ここで、ステータス行の表示がSJISに変化します)に、変更を加えて(新しい行を加えて、それを消す.. )から保存( C-x C-s )しましょう。