2001 年度「計算機基礎論3B」 2001-10-30

前回の続きですが、 「前回分が終わってしまった人はこれをやる。 そうでない人は前回のに取り組む」 というようにしましょう。 メールの設定をしていない人はそれもやってください。

補足

「ls -lt」とすると、ファイルは日付順に新しいものから表示されます。 ファイルが多くなってきたらこれも便利です。

標準入力(キーボード)を読んで処理し、 標準出力(画面)に書くプログラムを 「フィルター」ということが(ときどき)あります。

演習(の一例)

リダイレクト・パイプ

unix についてくる more というコマンドは、 長いファイルを一画面ずつ読むものです。 「more file名」としても使えるし、 「cat file名 | more」 「ls -lt | more」のようにフィルターとしても使えます。 「-- 継続 --」が下に出たらスペースで次の画面へ、 「q」で終了です。 「b」で前画面に戻れる場合もあります。 「more *.c」という使いかたもできます。

「man コマンド名」で、コマンドのマニュアルが読めます。 「man more」などとしてみてください。 マニュアルが一画面に収まらない場合、 more が起動されるようですので、 more と同様に操作してください。

head というコマンドは最初の数行を、 tail というコマンドは最後の数行を表示します。 「ls -lt | head」という使いかたも便利です。

「ls」と「ls | more」では、出力のしかたが違います。 これは、ls が特別にできていて、 「いま自分はパイプで別のプログラムにつながっているから 出力のしかたを変えよう」と判断するようです。 これは、 今学期に学んでいるプログラミングとは別のレベルの話なので、 気にしないようにしましょう。

「Mail メールアドレス」でもメールが送れます。 メールのソフトを立ち上げていなくてもいいし、 ファイルの中身をメール作成画面に切り貼りする必要もないので楽です。 最初に「Subject: 」と出るので「件名」を打ち、 次の行から本文を打って、終わったら Ctrl+D です。 リダイレクトやパイプを利用するなら、 ファイルにメール本文を打っておき、 「Mail メールアドレス < ファイル名」です。 本文が日本語を含む場合は 「nkf -j ファイル名 | Mail メールアドレス」として JIS コードに直してから送らねばなりません。 リダイレクトやパイプを利用する場合でもしない場合でも、 本文の行頭に「~」があると特別の意味に解釈されるので注意してください。 なお、日本語を含むメールをこれで送った場合、 厳密にいうと礼儀に反するスタイルで着く、という説もあります。 また、間違って「Mail」とだけ打って起動した場合、 新着メールがきているとメールの一覧が出てプロンプトに戻りません。 このときは「x」と打ってリターンを押してください。

プログラミング

九九の表

次のプログラムは九九の表を出力する。 for を二重に使っていること以外は、 いままでに習ったことでわかると思う。

== kuku.c =====================================================================
#include <stdio.h>

main()
{
    int i, j;

    for (i = 1; i <= 9; ++i) {
        for (j = 1; j <= 9; ++j) {
            printf(" %d", i*j);
        }
        printf("\n");
    }
}
===============================================================================
桁をそろえてきれいに表示されるように改良せよ。次に、
   |  1  2  ...  9
---+--------...----
 1 |
 2 |
 : :
 9 |
のように、 被乗数・乗数を左と上に出力するようにしてみよ。

Z/nZ の掛け算の表

2 以上の自然数 n を一つ固定する。 “数”としては 0, 1, 2, ..., n-1 だけを考え、 足し算、掛け算は結果が n 以上になったら n で割った余りをもって答えとする。 この掛け算の表を出力するプログラムを書け。 C言語での割算の余りはまだ習っていないが、 「a % b」のように書けばよい。 10 % 3 は 1 となる。 n はプログラム中では「#define N 12」のようにし、 容易に変更できるようにせよ。 そして、いろいろな n に対しての出力結果を見ながら、 「一番上の行・一番左の列を除く各行・各列に 0, 1, 2, ..., n-1 がすべて現れるのは n がどのような数の場合か?」という数学の問題を考えてみよ。

(念のために注意:こうやっていろいろ試すのは実験である。 実験は証明の代用にはならないが、時には有用である。)

この“数”を数学では Z/nZ, Z/n, Zn などと書き表す。 三つめの記号は別のものを表すこともあるのであまり勧めない。

テキストエディタ emacs/mule

まだ時間が余っている人は、 昨年度のページを見てテキストエディタ emacs/mule の使い方を学べ。


岩瀬順一