プログラム作成の基本 プログラム作成とemacs, ls, lpr

プログラミング入門及び演習 第3回目
・ファイル操作1
3.1 UNIXファイルシステムの概要
3.2 ディレクトリツリー:pwd(再)
3.3 絶対パス,相対パス
・ファイル操作2
3.4 作業ディレクトリの変更:cd
3.5 ファイルの表示:ls(再)
3.6 ファイルの中身を見る:cat(再), more
・プログラミングの考え方 1
3.7 プログラミング概要
3.8 処理,条件分岐(判断),繰り返し(ループ)
3.9 入れ物(配列,変数)
・プログラミングの考え方 2
3.10 論理的に考える(最大値の求め方)
3.11 論理的に考える(1~10の和を求める)
・ソースプログラムを読む
3.12 プログラム(C言語)の基本的な構造
3.13 ソースプログラムを読む
3.2 ディレクトリツリー
サーバにloginして下さい.
ユーザ名@端末名[1]:
(以後,ユーザ名@端末名:とする)
のような,表示となっていることを確認する.現在,自分はディレクトリツリーのどの場所
にいるのでしょうか?次のように入力してみる.
ユーザ名@端末名: pwd
そうすると,次のような応答が返ってくるはずで る.
ユーザ名@端末名: pwd
/home0~3/h25/u266***
この行の最後に る「u266***」が今自分のいるディレクトリである.このコマンドpwdは現
在いるディレクトリを表示するために用いる.また,このログイン時にいるディレクトリを
ホームディレクトリという.このホームディレクトリは今後,自分が作成したファイルやディ
レクトリを置いておく場所になる.また,ここで示された「/home0~3/h25/u266***」は
rootディレクトリ(/)からホームディレクトリ(u266***)までの道のりを表している.このよう
に,目的地までの道のりを表したものをパス名という.
上で述べたように,このホームディレクトリ内にはディレクトリやファイルを新しく作成で
きる.今,ディレクトリ「u266***」内に新しいディレクトリ「p-nyuumon」を作ったとしよう.
このディレクトリ「p-nyuumon」の中に新しくファイルを作る場合,ホームディレクトリにい
るよりも作業するディレクトリ「p-nyuumon」に移動した方が作業しやすい場合が出てく
る(移動の仕方cdは後で練習する).このように自分が作業するディレクトリを作業ディ
レクトリ,または,作業時にいるディレクトリなのでカレントディレクトリと呼んでいる.
ファイル操作2
3.4 作業ディレクトリの変更:cd
作業ディレクトリを変更するには,cdコマンドを使用する.今,ディレクトリ「h25」を作業
ディレクトリにするとしよう.その場合,
ユーザ名@端末名: cd /home0~3/h25
と入力する.これはroot(/)からの指定なので,絶対パス指定と言うことになる.本当に変
更されたか調べてみよう.
ユーザ名@端末名: pwd
/home0~3/h25/
と表示されればOKである.また,
ユーザ名@端末名: cd
とパス名を入力しない場合はどうなるであろうか.この場合は自分のホームディレクトリ
に移動する.ホームディレクトリに移動したところで,再度ディレクトリ「h25」に移動して
みよう.今度は,
ユーザ名@端末名: cd ..
と入力すると,ディレクトリ「h25」に移るはずで る.これは,自分のホームディレクトリの
親ディレクトリが「h25」であることを意味している.
ファイル操作1
3.1 UNIXファイルシステムの概要(T, 23-28)
これまでの授業で,私たちはファイルとフォルダが存在し,ファイルはフォルダごとに整
理されていることを学んだ.UNIXファイルシステムも同様で,フォルダはUNIXではディ
レクトリに相当する.このディレクトリは図に示すような木構造のディレクトリツリーと呼ば
れる形で整理されている.一番上に る「/」をroot(ルート)ディレクトリと言い,そこからい
くつものディレクトリに枝分かれしている.そして,枝分かれする基のディレクトリを親ディ
レクトリ,枝分かれした複数のディレクトリを子ディレクトリという.
3.3 絶対パス,相対パス
今,自分はディレクトリ「p-nyuumon」で作業をしているとしよう.ということは,ディレクト
リ「p-nyuumon」がカレントディレクトリである.このとき,ディレクトリ「u266***」の道のり
(パス)を知りたいとしよう.先ほどコマンドpwdで調べたように,rootからのパスは
「/home0~3/h25/u266***」である.また,カレントディレクトリ「p-nyuumon」から見た場合,
ディレクトリ「u266***」は一つ上のディレクトリという事がわかる.この場合のパス名を「..」
と書く.したがって,この「..」は,親ディレクトリを表す.このように,同じディレクトリ(ファイ
ル)を表すパスは2種類の表し方がある.rootからのパスは絶対パス,カレントディレクトリ
からのパスは相対パスと呼ばれている.
3.5 ファイルの表示:ls(再)
作業ディレクトリ内のファイル一覧を表示するには,lsコマンドを用いる.それでは,自
分のホームディレクトリに移り,
ユーザ名@端末名: ls
と入力しよう.何か表示されましたか.今のところ,ファイルを作成していないので何も表
示されないはずです.次に,
ユーザ名@端末名: ls -a
と入力する.先ほどと違い,「.」が付いたファイルが表示される.
./
../
.Xdefaults .cshrc
.emacs
.xemacs
この,「-a」はオプションで り,すべてのエントリを出力する.さらに,
ユーザ名@端末名: ls -al
とすると詳細な情報が表示される.
・ファイルの種類:ディレクトリなら「d」,通常のファイルなら「-」が表示される.
・アクセスモード:ファイルに対し
て,読み出し「r」,書き込み「w」,
実行「x」ができるかを表示する.
最初から3文字ごとに,所有者,
グループ内のユーザ,他人という3
種類のユーザで区別されている.
・リンク数:そのファイルに,他の
ファイル(ディレクトリやファイル)
がいくつリンクされているかを表
示する.
1
3.6 ファイルの中身を見る:cat, more
今度はファイルの中身を見てみよう.まず,自分のホームディレクトに移動する.
【練習】自分のホームディレクトリに戻るには?
ホームディレクトリ内の全てのファイルを調べる.
【練習】ホームディレクトリ内の全てのファイルを調べるには?
今のところ,
./
../
.Xdefaults .cshrc
.emacs
.xemacs
と表示されるはずである.この中の,ファイル「.cshrc」の中身を見てみよう.
ユーザ名@端末名: cat .cshrc
を入力しよう.
以上のように,このコマンド「cat」はファイルの中身を表示することができる.この他にも
ファイルを見る(閲覧)するコマンドには,more, less, pgなどが ある.
(1)材料(たまねぎ,にんじん,ジャガ
イモ,カレー粉,ライス)と機材(皿,な
べ)を準備する.
(2)材料(たまねぎ,にんじん,ジャガ
イモ)を切り,水の入ったなべに入れ
煮る.
(3)なべが沸騰したら,カレー粉を入
れてしばらく煮る.沸騰していない場
合は待つ.
(4)なべからカレーをすくい,ライスに
かける.これを5皿に対し繰り返す.
プログラミングの考え方 1
3.7 プログラミング概要
プログラミングの最終的な目的は,機能を満足するアプリケーションを作成することで
ある.そのアプリケーションを作る工程は千差万別で り,作成するためのツール,記述
言語,プログラミング手法など作業者毎にいろいろ変わってくる.しかし,どのようなツー
ル,工程を選択したとしても変わらないものがある.それは,作業者が最終的なアプリ
ケーションをどのように作るか,頭の中できちんと論理的にその工程を組み立てられる
か,ということである.そのため,これから主に頭の中で論理的にプログラミングすること
を学習していくが,その中で,開発環境の使い方やプログラミング文法などプログラミン
グに最低限必要な事項も学習していく.
プログラミングもアプリケーションを作るという意味では,様々な生産活動と共通すると
ころがある.例えば,カレーライスを5人分作る場合を考えよう.作り方はいろいろ あると
思うが,以下のような工程をとるものとする.
簡単であるが,これで5人分のカレーライスができるはずで る.「カレーライスを5人分作り
なさい」と言われた場合,このようなことがイメージできたで ろうか?プログラミングも同様
で, る仕様が与えられた場合,どのようにしたら最終的に仕様を満足するアプリケーショ
ンができるか,自分の頭でその工程をイメージできなければ実際にプログラミングするこ
とはできない.そのためには,最初は簡単でいいから自分の頭を使って数多くプログラム
を書くことが重要で る.それと同じく,教科書,参考書などに るプログラムのソースコード
をきちんと理解する練習をすることが重要である.
3.8 順次処理,条件分岐(判断),繰り返し(ループ)
先ほどのカレーライスの作り方を再度考えてみる.大きく分けると4つの工程で記述でき
た.その中で.工程(2)~(4)は以下のように考えることができる.
工程(2)材料(たまねぎ,にんじん,ジャガイモ)を切り,水の入ったなべに入れ煮る.→
順次処理
工程(3)なべが沸騰したら,カレー粉を入れてしばらく煮る.沸騰していない場合は待つ.
→条件分岐
工程(4)なべからカレーをすくい,ライスにかける.これを5皿に対し繰り返す.→繰り返し
このように,全工程は順次処理,条件分岐,繰り返しの工程に細分化される.プログラム
も同様で,この3つの工程を様々に繰り返すことにより全体を作成していくことになる.
3.9 入れ物(配列,変数)
材料を入れる入れ物として,皿となべが出てきた.これは,最初の材料を入れておい
たり,材料を加工した(切った)ものを再び入れておいたり,各材料を足し合わせ,加工
する(煮る)ためなどに利用した.プログラミングも同様で,数値や文字をしまっておく入
れ物ェ必要で り,それが「配列」や「変数」と言われるもので る.これは,最初に準備して
おかなければならない.
以上でプログラミングの概念がうっすらと理解できたと思うので,これから実際の仕様
を与えて,考え方の練習をしてみる.
プログラミングの考え方 2
3.10 論理的に考える(最大値の求め方)
今3種類の数値(2,8,5)が入れ物Plate[1],Plate[2],Plate[3]に入っている.記号[*]は
入れ物の番号を表している.また,何も入っていない入れ物はPlate[4]~[10]まで,7つ
用意されているものとする.この3種類の数値の中で最大の値を求めるにはどのように
すればよいか?ヒントを参考にして,図のように解答欄にイメージを書け.
【練習】今は3種類の数値が解っていたが,もし不明な3種類の数値が入れ物にあるも
のとすると,どのように考えたらよいか.イメージ図を書け.
2
【練習】今は3種類の数値が解っていたが,もし不明な3種類の数値が入れ物にあるもの
とすると,どのように考えたらよいか.イメージ図を書け.
3.11 論理的に考える(1~10の和を求める)
Plate[1]~plate[20]まで入れ物(配列)が存在する.そのPlate[1]~Plate[10]までの入
れ物には,それぞれ1~10までの数字が入っている.この1~10までの和を求める場合
のアルゴリズムを考えよ.
(1)繰り返し(ループ)を使わない場合
(2)繰り返し(ループ)を使う場合
1
ループの回数 = iの値
四角中の値
0
0
1
1 (0+1)
2
3 (1+2)
・・・
9
55
3.12 プログラム(C言語)の基本的な構造(再)
【プログラム例,T121 例題1.1】
#include <stdio.h>
main()
{
printf("Hello !");
pritf("Welcome to UNIX and C. ¥n");
}
main()の中に処理する内容の本体が入っている.すなわち,main()からプログラムは
始まる.
3.13 ソースプログラムを読む(コンパイル)
テキストP122,例題1.2をEmacsを用いて作成せよ.ファイル名はreidai1-2.cとせよ.
コンパイルは,
ユーザ名@端末名: cc reidai1-2.c
コンパイルができた場合にはメッセージは表示されない.また,カレントディレクトリ内
にファイルa.outが作成されたことを確認する.なにかメッセージが表示された場合は間
違っているので,もう一度ソースプログラムを確認すること. 実行するには,
ユーザ名@端末名: a.out
と入力する.テキストの通り数値を入力し,出力結果が同じになるか確かめよ.
3