Powered by SmartDoc

4 コンピュータの動作原理その2

4.1 はじめに

グループ分け;今日の出席者を見てから決めます.

アシスタント急募!

宿題提出と解説

4.1.1 コメントカードの質問への回答

・2で割り続けた余りを並べると2進数に変換できることの説明はわかるが,理由がまだよくわからず自分で説明できない.(2進数と10進数の変換の方法は取得した.)(天羽さんの説明が面白い)

・22 x 1 の1と,余りが1になる関係がよくわからない.

・20 x 1 が1になる理由がわからない.0になるような気がする.

・なぜ2進数と10進数の変換を学ぶ必要があるのかわからなかった.

・(松井さん)16進数はHTMLの色の指定で使っているのではないか?→Yes

4.1.2 予定変更

先週の授業を難しく感じる人がいたようなので,計算機科学の基礎を復習する前に,実習に入ります.Cを学びながら,必要なときに,8進数や16進数や文字の表現などに触れることにします.

ただし,2進数を簡単に10進数に変換する方法だけ教えておきます.

4.1.3 今回の学習目標(覚えるべき概念,用語,パターン)

XEmacsの操作

ディレクトリとファイル

ファイルの保存

Unixコマンド

コンパイル,ソースファイルと実行形式

4.2 後回し

4.2.1 基数の変換(2進,8進,10進,16進)

「計算機科学入門」の「2進数入門」参照.

4.2.2 各種データをコンピュータで表現する方法

人間が使うデータには、数字と文字があります。数字にも正の整数、負の整数、小数があります。文字の場合も、英文タイプライタにのっているような英数字と記号の他に、われわれ日本人はひらがな、カタカナ、漢字を使います。これらのデータをコンピュータに伝えるにはどうすればよいでしょうか?

コンピュータは2進数しか使えませんので、これらのデータを2進数で表現する必要があります。正の整数は単純に2進数に変換できます。負の整数は、2の補数表現という方法を使います。文字も2進数に変換します。どの文字がどの2進数に対応しているかを示すのが文字コードです。文字コードの詳細は「計算機科学入門」の「文字コード入門」を参照してください。

4.2.3 プログラミングの2大要素: アルゴリズムとデータ構造

ある程度大きなプログラムを書くときには、アルゴリズムとデータ構造が大事になります。

アルゴリズムとは問題解決の手順のことです。アルゴリズムが間違っていたら問題は解決しませんし、よくないアルゴリズムを用いると解決に時間がかかってしまいます。

たとえば、データを大きい順番に並べ替えるソーティングという課題があるとします。このソーティングという作業は、学生番号順に並べ替えたりするときにも使います。今までにいろいろな並び替え方法が考案されてきましたが、どの方法(アルゴリズム)を使うかによって、並び替え作業にかかる時間が大きく違ってきます。詳細は授業の中で述べますが、たとえば100万個のデータを並び替える場合、バブルソートという方法だと並び替えが終わるまでに1週間もかかるのに、マージソートという方法を使うとたった20秒で終了します。信じられますか?使うアルゴリズムによって25000倍も性能が違ってきます!

データ構造も重要です。たとえば画像処理をする場合、2次元配列の形でデータを表しておくと作業が簡単になります。データ構造に関しても授業の中で詳細に述べます。

4.3 本題

4.3.1 プログラミング体験

まずはさておき,XEmacsでhello.cというプログラムを作り、コンパイラでコンパイルして実行してみる.何をやっているのかは後で説明する.

4.3.2 高級言語とコンパイル

コンピュータに対する命令がソフトウェアですが、コンピュータは2進数しか理解できません。命令を2進数で書くのが機械語です。しかしコンピュータのハードウェアの詳細を考えながら2進数で命令を書くのはとても難しい作業です。そこで人間が普段使っている言葉や数式と似た方法で、ハードウェアの詳細を考えなくても命令を書けるようにしたのが高級言語です。CもJavaもBasicも高級言語の仲間です。

この高級言語を機械語に翻訳する作業をコンパイルといいます。翻訳ソフトウェアのことをコンパイラといいます。この演習でも、テキストエディタで高級言語の命令(これをソースプログラムといいます)を書き、コンパイラでそれを機械語に翻訳して、翻訳したプログラム(実行形式といいます)を実行する、という作業を毎回繰り返します。

基本:ソースファイルを編集,保存,コンパイルして,a.outを実行

テキストエディタでCのプログラムを書き,ファイルに保存してから,コンパイルし,コンパイルされた機械語のファイル(a.outという名前の実行形式.a.outというコマンドのようなもの)を実行する,という手順を頭に入れておいてください.

コンパイル時や実行時にエラーが出たら,エラーメッセージを参考にしてソースファイルの間違いを探し出して修正し,もう一度コンパイルします.エラーがでなくなったら完成です.

4.3.3 プログラミングに必要な操作の復習

XEmacsの使い方を覚えていますか?Emacsにはプログラム開発用のモードがあり、プログラム編集、作成、改良(バグ取り)などの作業を快適に行えるようになっています。この演習で必要となるのは以下の操作です。(2)

注;以下のリストでは()中にキーボードコマンドを書いておきましたが、メニューでも同じ操作ができます。

また、端末エミュレータで以下のコマンド使う予定です。

  1. 授業中に折に触れて説明します。

4.3.4 ファイルとディレクトリの説明

この授業はcompBという名のディレクトリを作ってその中で作業をしますので、以下の点について説明します。

4.3.5 最初のプログラミング (教科書p6)

実際にCのプログラムを書いてみましょう。

表 4.3.5.1 注意; 本演習と教科書で異なる点
本演習 教科書
作業ディレクトリ compB work
エディタ XEmacs vi
コンパイラ gcc cc
ファイルの中身表示 cat (長いファイルはless) cat
自作プログラム(hello)の実行 (自作プログラムの頭に必ず"./"をつける)
% ./hello
% hello
  1. ログインして端末エミュレータを立ち上げる
  2. 作業用ディレクトリを作る;
    % mkdir compB
    
  3. 作業用ディレクトリに移動する;
    % cd compB
    
  4. XEmacsでソースコードを編集する;

    % xemacs hello.c &
    

    (最後の&を忘れないこと)

  5. XEmacsで、List 0-1の通りに入力する。(左端の"1: "の3文字分は無視。)
  6. XEmacsでファイルを保存する(C-x C-s)
  7. 端末エミュレータでファイルができているか確認する;
    % ls
    
  8. (今回だけ念のため、)ファイルの中身を確認する;
    % cat hello.c
    
  9. 間違っていたら4に戻る
  10. コンパイルする;
    % gcc -o hello hello.c
    
  11. エラーが出たら4に戻る
  12. エラーが出なかったら実行する;
    % ./hello
    
  13. おめでとうございます。これであなたもプログラマーの仲間入り。

コンパイル時にエラーが出た人や実行できない人は、教科書6,7ページの注意を読んで、同じ間違いを犯していないか確認してください。それでもわからない人は手を上げてください。

今回皆さんは、ソースプログラムをエディタで書いて、それをコンパイラでコンパイルし、(エラーが出たら修正し)、実行するという作業をしました。今回のプログラムは画面に"Hello, world."と表示するだけの他愛のないプログラムでしたが、Cの世界では、これが最初に書くプログラムであるという伝統があります。"Welcome to the C-world!"

4.3.6 注意

4.3.7 XEmacsの色付け表示

XEmacsの「オプション」メニューの中の「強調構文表示」の中の「さらにもっと」をONにすると、Cの構文(文法上の要素)にしたがって色分け表示されるので大変見やすくなります。

図 4.3.7.1 色が付いて見やすくなったXEmacs

4.4 4月21日のコメントカード

・2進数の説明がまだわからない.

・授業の最後にやった「保存」とか「ファイルを読み込んで編集」がわからない.

・今日やったプログラムの意味とか,自分がやった作業の意味がまだわかっていない.

・自宅のWindowsパソコンでプログラムの練習をしたい.---> Cygwin(WindowsでUnix用のプログラムを動作させるソフト群)をインストールすると,メモ帳や秀丸エディタなどのエディタで練習環境を作ることが出来ます.Meadowという名前のEmacsエディタがWindowsでも使えます.

・stdio.hとは何者?

・コンパイルすると何故a.outというファイル名になるのか?

・XEmacsを使いこなすことは将来役に立つのか?一般に使われているのか?

・授業のWebページを見る方法?

・お薦めのタイピングソフトは?

・XEmacsの色付けが先生の画面と違う.

・プログラミングでは,一文字間違えただけでエラーになることがよくわかった.

4.5 おわりに

4.5.1 課題

・今日習ったUnixコマンドの一覧と機能の説明を電子メールで提出(木曜の夜〆切)

・用語集

・教科書の0章と1章を読んでおく.

・List1-3,1-4,練習1-1を実行するところまでやる.

4.5.2 次回の学習目標

・C言語の特徴

・Cプログラムの基本構造

・簡単なCプログラムの理解