• 検索結果がありません。

計算機言語 I 第 1 回 Introduction

N/A
N/A
Protected

Academic year: 2021

シェア "計算機言語 I 第 1 回 Introduction"

Copied!
9
0
0

読み込み中.... (全文を見る)

全文

(1)

計算機言語

I

1

Introduction

1

講義情報とそれに関連すること

この資料

: http://www.math.u-ryukyu.ac.jp/~suga/gengo/2021/01.pdf

この講義は「計算機言語

I

」です

.

2

年次後期の講義

,

「計算機概論

I

」で

, awk

を用いた簡単なプログラミングをやりました

.

計算機言語

I

は計 算機概論

I

の続きとして

,

コンパイラを用いたプログラミングの講義をします

.

この講義では

,

指定したテキストに従って

, PC

上で実際にプログラムを動かしてもらいます.テキストは

,

皆本晃弥著 やさしく学べる

C

言語入門

[

2

]

サイエンス社

を利用します

.

テキストは

,

生協に注文してありますので

,

受講する人は必ず購入してください

.

これ以外に

,

以下の参考文献を必要に応じて読むようにしてください

.

参考文献

[1] B. W. Kernighan, D. Ritchie

, The C Programminng Language

日本誤訳 石田晴久訳 プログラミング言語

C

2

版 共立出版

[2] S. Oualline

,

岩谷宏訳

, Practical C Programming

現実的な

C

プログラミング ソフトバンク

[3]

藤原博文著

, C

プログラミング診断室 技術評論社

[4] L. Baker

,

吉田弘一郎訳

, C

言語数学関数ハンドブック 技術評論社

[5] W. H. Press

他著

,

丹慶勝市他訳

,

Numerical recipies in C

技術評論社

[6] B. W. Kernighan, R. Pike

,

福崎俊博訳

,

プログラミング作法

,

アスキー

, 2017

[7] B. W. Kernighan, R. Pike

,

石田晴久監訳

,

野中浩一訳

, Unix

プログラミング環境

,

アスキー

, 1985

[8] N. Wirth

,

片山卓也訳

,

アルゴリズム

+

データ構造

=

プログラム日本コンピュータ協会

1979

[9] Donald E. Knuth, The art of computer programing, vol 1 - vol 3 Addison-Wesley (

アスキーから日

本語訳あり

)

[10] K.Jensen, N. Wirth

,

原田賢一訳

, Pascal

4

版 培風館

[11] A. W. Aho, B. W. Kernighan, P. J. Weinberger

,

足立高徳訳

,

プログラミング言語

AWK

アジソ ン ウェスレイ トッパン

1988

はじめのほうは

, C

言語に対する参考文献で後半は

,

それ以外のものを挙げました

.

[1]

, C

言語のバイブルです

. C

でのプログラミングを真面目にしたいのでしたら

,

必ず買ってください

.

(2)

ただし

,

この本の訳は必ずしも良いとは言えず

,

明らかな誤訳が多数含まれています

.

そういう意味では

,

原書 を手に入れたほうがよいかもしれません

.

[2], [3], [7]

,

プログラムを書く上での心構えを主に書いた本です

.

プロを目指すなら

,

一読すべきでしょう

. [5], [4]

, C

言語を用いた数値計算法の本です

. [5]

には

,

英語版ですが

Pascal

を同じ内容の本があります

. [4]

には

,

プログラムのソースファイルが入ったフロッピーディスクがついてましたが

,

絶版中です

.

[8], [7], [9]

はプログラミング全般にわたる古典的名著です

.

[7]

は古いですが

, Unix

環境を用いて

,

小さいものから初めて

,

少し複雑な処理をするプログラムを作り上げ る過程を扱っており

,

今でも読む価値はあります

.

[8]

,

データ構造とプログラムの関係を書いた本です

.

処理系は

Pascal

を使っています

.

プログラムとい うのは

,

データの処理方法の記述ですが

,

そのデータ構造をうまく解析して与えないと

,

よいプログラムが書け ないと言う視点でプログラミングを解説しています

. Pascal

も今使っている機械で使えます

.

[9]

,

プログラムに現われる数学的構造を面白く書いた本です

.

著者は

,

この本の出来上がりが気に入らな いといって

TEX

を開発したのは有名です

.

この講義で使うシステムでは

, C

以外にも

Fortran, Awk, Perl, Python

が動きます

.

これらの言語につい ての本は

,

各自で探してください

.

多くの場合

,

その言語の開発者が書いた本が

,

もっとも良い本です

.

世の中には

,

プログラミングの本も

C

言語の本も山のように出版されています

.

この中で

,

良い本を捜すの は大変です

.

伝え聞く限りでは

,

多くの本が出版されている割には良書と呼ばれるものは少ないようです

.

,

翻訳本にはひどい誤訳もあるそうです

.

この講義において

,

その内容がプログラミングの全てを網羅するわけではありません

.

講義以外の事も

,

各自 必要に応じて補うようにして下さい

.

数理科学科の他の講義の全てについも

,

同じ事は成立します

.

単位とテキストについて

単位は

e-mail

によるレポートで判定します

.

問題は

,

配布テキストに書きます

.

送り先は以下です

.

[email protected]

配布プリントの

L

A

TEX

ソースを下記の

anonymous ftp

に置きます

.

置き忘れていれば催促して下さい.

Web

にも

PDF

を置く予定です

(

一番最初を参照

).

ftp://ftp.math.u-ryukyu.ac.jp/pub/gengo/2021

情報処理技術者試験

IT

系企業の就職に有利になるので

, 3

年次の人は是非挑戦して下さい

.

就職活動は来年の

2

月くらいからで すから

, 10

月の試験で通らないとアピールすることが出来ません

.

情報系以外の就職

(

例えば金融系

)

でも

,

の資格は役に立ちます

.

皆さんに価値があるのは

,

「基本情報処理技術者」です

.

詳しい情報は次を調べて下さ

.

教員採用試験でも

,

情報処理技術者試験合格者に対して

,

試験の一部免除を実施する県市があるようです

.

https://www.jitec.ipa.go.jp

注意して欲しいのは「

IT

パスポート」で

,

技術系の職場に就職する際には,役に立たないばかりでなく,マ イナスの評価になることもあります

(

無闇に履歴書に書けない

).

(3)

無料の

C

言語処理系について

感染症のせいで

,

遠隔授業になる可能性も高くなりました

.

無料に近い形で手に入る

C

言語の処理系情報です

(

他にもあるかもしれません

).

個人のコンピュータでプ ログラミングを自習したい人向けです

.

この項の

Windows

の部分については

,

時間がある時にまとめた資料 を提示したいと思います

.

1.

無料で配付されている

Unix

系の

OS

を導入する

.

Linux, *BSD

等色々あります

.

様々なプラットフォームで動きます

.

昨年

,

計算機概論

I

で用意した

MathLIbre

C

コンパイラが付属してます

.

ただし

,

これが動作しな

PC

もいくつか見つかっておりますので

,

試したい人は

,

私までメール下さい

.

2. MacOS X

Macintosh

は 開 発 環 境

Xcode

が 無 料 で ダ ウ ン ロ ー ド で き ま す

.

た だ し

, Xcode

, macOS

iOS(iPhone, iPad

など

)

の全ての

Apple

製品用開発環境なので

,

巨大なサイズです

.

C

コンパイラなどのコマンドラインツールだけをダウンロードすれば十分なのですが

,

それをするより も手っ取り早いのは

, homebrew(https://brew.sh/index_ja)

を導入することです

.

コマンドライン ツールを自動で導入してくれます

3. Windows

Microsoft Visual Studio

Windows 10

の正式な開発環境で

, C

もあります

.

学生であれば

,

Microsoft

のページから無料でダウンロードできます

.

ただし

,

これも

Windows

の開発環境一式

を含むのでサイズが巨大です

.

また

, Windows

の内部文字コードは

, UTF-16

となっている模様で

,

ネットのデファクトスタンダード

UTF-8

と異なるのも

,

面倒な点です

.

昨年の計算機概論

I

の講義で紹介した

WSL(Window Subsystemo for Linux)

C

コンパイラを 導入できます

. WSL

を用いて

Linux

のデスクトップ環境を構築することも

,

ある程度できます

.

これについては

,

時間があれば別資料を作成して公開します

. (

昨年度のうちに資料作成をしようと 思っていたのですが

,

「グラフィカルな

Web

ブラウザが動作しない」という罠にハマって

,

できま せんでした

.

現時点でもこの問題は解消していません

.)

MinGW (

昔の

Cygwin?) Windows

の上に

Unix

に近い環境を作り出すものですが

, Windows Defender

の設定変更などが必要で

,

少し面倒です

.

詳しい事は

Web

で調べて下さい

. Internet

由で取れます

. gcc

Emacs

などが

Windows

環境で使えます

.

どれを使うにしても

,

それなりの

(

しかし

,

大した事ではない

)

コンピュータの知識が要求されます

.

知恵と 知識があれば

,

ただで勉強できるのです

.

大学生の間に

,

そのような知恵と知識を身につけてください

.

(4)

2

実習

今までのコンピュータ実習の授業と同様

,

授業中以下のことは禁止します

. 1. Fire Fox

等の

WWW

ブラウザの使用

2.

各種

game

等の娯楽一般

暇な人は

Web

で遊んだりせずに

,

周囲の人々にアドバイスを送ったりして

,

受講者全員のレベルアップに協力 して下さい

.

よろしくお願いします

.

ちょっとしたミスで次に進めなくなることがあります

.

院生に聞くだけでなく

,

隣の人に見て貰うようにし ましょう

.

ちょっとみて貰うだけで

,

解決する場合もあります

.

計算機概論同様

,

この講義でも

Linux

を使います

.

次回以降,講義が始まる前に

login

しておいて下さい

.

始めは未定義な言葉が色々出て来ますが

,

数学の様に順に解説していたのでは

,

却ってわかりづらいためで

.

最初はおまじないだと思って下さい

.

未定義用語は授業で段階を追って解説する予定です

.

2.1 Gnome

端末の起動

計算機概論

I

と同じく

,

この講義では

Gnome

端末を用います

. Linux

login

,

アプリケーションメ ニューから起動してください

.

常に

Window

1

つ開けておいてください

.

以下では

,

コマンドプロンプト

bash-4.4$

から始まっている行は

, Gnome

端末への入力とします

.

2.2

ディレクトリ

(

フォルダ

)

の作成

この講義では

,

多くのファイルを作成します

.

ファイルを整理する意味で

,

適当な名前のディレクトリを作成 して

,

そこで作業します

.

ここでは

,

教科書に合わせたディレクトリを作成し

,

そこで作業をすることにします

.

Gnome

端末を利用した一例を挙げておきます

.

bash-4.4$ mkdir gengo bash-4.4$ cd gengo bash-4.4$ mkdir chap01 bash-4.4$ cd chap01

コマンド

cd

change directory

の略で

, Gnome

端末の

(shell

)

ワーキングディレクトリを変更するコ マンドです

.

この意味は

,

計算機概論

I

でやりましたので

,

復習しておいてください

.

上は

,

ファイル整理の 方法の

1

例ですので

,

必ずしもこの通りにやる必要はありません

.

今後は

,

各自の方法でファイルを整理して 行ってください

.

(5)

2.3

プログラムを書いてみる

ここからは

,

教科書に従って講義します

.

初回なので教科書をまだ買っていない方もおられるかも知れませ んので

,

教科書の第

1

章をスキャンして

Web

に起きました

(

今回だけの措置です

).

http://www.math.u-ryukyu.ac.jp/~suga/gengo/2019-1/Chap1.pdf

教科書

p.13

に最初のプログラム

sample.c

があります

. Gedit

を利用して

, sample.c

を上で作ったフォル ダに

(

上の例の通りだと

, gengo/chap01)

保存してください

.

教科書

p.13 – p15

に従って

, gcc

コマンドを実 行してみてください

.

新たに

gnome

端末を開いた人は

, cd

でワーキングディレクトリを変更することを忘れないでください

.

gcc

がうまく実行できなかった人は

,

エラーメッセージを読んで

,

次をチェックしてください

. 1.

ワーキングディレクトリは

, chap01

になっているか

? (pwd

でチェック

)

2.

文字コードが

utf8

で保存されているか

? 3.

ファイル名は

, sample.c

となっているか

. 4.

コマンド又はファイル名を正しくタイプしたか

?

5.

ソースコードの括弧や

2

重引用符

(")

,

正しく入力されているか

? (

全角文字になっていないか

?) 6. #include

#

は行の先頭にあるか

?

7. printf

文の最後にセミコロン

;

がついているか

?

2.4 sample.c

のプログラムの説明

上で動かしたプログラムの意味を順番に見て行きます

.

#include <stdio.h>

#

で始まるこの部分は

, C

プリプロセッサ

(preprocessor) cpp

への命令です

. (

後の講義で追い追い解説します

,

とりあえずはおまじないと思って下さい

.)

int main(void)

main

と言う関数の始まりを示します

. C

言語でコマンドプロンプトから実行可能なプログラムを作る時は

,

main

と言う名前の関数が必要で

,

ここからプログラムの処理がはじまるようになっています

.

行頭の

int

, main

関数の返り値をしてしており

, int

は「整数型」

(

後の講義で解説する

)

という意味です

. ()

の中には

,

この関数のパラメータ

(

通常プログラミングとか計算機の分野では

,

引数という

.)

が入ります

. void

という言 葉は

, C

言語のプログラムで様々な現われ方をしますが

,

関数引数で用いられるときは

,

引数無しの意味になり ます

.

従って

,

この

void

は省略できます

.

{

printf("Welcome to C world! \n");

return (0);

}

(6)

ここが

,

プログラムの本体です

. C

言語では

,

一連の処理は中括弧

{

}

で挟んで書きます

.

中央の

printf("Welcome to C world! \n");

,

このプログラムがする全てです

. printf

,

標準入出力ライブラリにある関数です

. 2

重引用符

で囲まれ た文字列を標準出力に表示します

. printf

は計算機概論

I

awk

のプログラムでも出てきましたが

,

それと 同じ動作をします

.

教科書には

,

その使い方が順次説明されるはずなので

,

その時には

,

教科書を読むようにし てください

. %d

10

進整数の意味で

,

コンマの後の数を出力します

.

プログラミング言語では

,

コンピュータ への

1

つの命令を「文」

(

これはきちんとした専門用語

)

と言います

. C

言語では

,

文の終わりをセミコロン

;

で表すのが決まりとなっています

.

最後の

return (0);

,

この

main

関数が

0

という値を返すという意味で

,

どこに返すかというと

,

これ を起動したプログラム

,

今の場合は

bash (shell

1

,

コマンドプロンプトを見よ

.)

です

. bash

はこの値を

status

という名前の

(shell)

変数に保持しています

.

次で

,

それは確かめられます

.

bash-4.4$ echo $status

2.5

数学関数ライブラリを使う

上の

printf

のように

,

プログラムでよく利用される関数は

,

ライブラリという形で予め作られており

,

それ

を利用することで

,

プログラミングの量を減らします

.

ただし

,

ライブラリ関数は多量にあり

,

実際に必要とな るものは少数です

.

そこで

, C

では

,

ライブラリ関数をいくつかに分割して保存しています

.

何も指定せずに利用できるライブ ラリ関数をまとめたものが

,

「標準ライブラリ」です

. 3

角関数や指数関数など

,

数理の皆さんにはおなじみの 関数の

,

世の中ではあまり使われないようです

.

このような関数をまとめたのが

,

「数学関数ライブラリ」で

,

れを利用する方法が

, p. 16

に書いてあります

.

教科書

p.16

の内容を実行してみてください

.

教科書の間違い

教科書

p. 16

上から

4

行目

(

灰色背景部分の

2

行目

)

,

正しくは

, ./a.out

です

(p. 14

上から

4

行目を参照

).

a.out

はカレントディレクトリの

a.out

というファイル名のファイルのことですが

,

実行可能ファイルを

実行するには

,

きちんとした相対パス

./a.out

にしないと

,

実行しません

.

これは

,

セキュリティ上の理由から です

.

(7)

2.6

教科書への補足

計算機概論で述べたように

,

コンピュータは

2

進法の数しか扱えません

.

それに対して

,

人間は

,

数は多くの 場合

10

進法で記述しますし

,

いわゆる自然言語を利用して物事を進めます

.

この人間とコンピュータの間を 取り持つのが

,

プログラミング言語です

.

人間に近い言葉で

,

コンピュータに指示を与えるためのものです

.

C

言語の処理系は

, C

言語の文法に従って書かれたコンピュータへの命令を

,

コンピュータが実行可能な機 械語に変換するためのソフトウェアです

.

実行可能ファイルな機械語ファイルを作るので

,

コンパイラと呼ば れる種類の処理系です

(

計算機概論を復習せよ

).

教科書で用いている

gcc

とは

GCC(GNU Compiler Collection)

の中の

C

コンパイラで

,

多くの

OS

に移 植されている無料のコンパイラ処理系です

.

皆さんが利用している

CentOS

では

, cc

と呼ばれる

C

言語処理 系としては標準的なコマンドもあります

. CentOS

では

, cc

の実体は

gcc

,

コマンド名の違いは

,

コンパイ ラオプションで

gcc

の方が通常の

(ANSI

で定義されている

) C

コンパイラより拡張した機能が利用できるか 否かだと思われます

.

拡張されたコンパイラ機能を使うことは

,

移植性の低下の可能性があるので

,

通常は

, cc

コマンドで処理するようプログラムを書きますし

,

この講義では

,

拡張された機能を使うことはありません

.

コマンド

gcc

1

つのプログラムではなく

,

少なくとも次のプログラム

(

プロセス

)

を利用します

.

下の図 の四角く囲まれた部分に書かれているのは

,

その時に使うファイル名です

. Column 1-1

,

プログラムの実行 まで

8

段階の処理とありますが

,

何を

1

段階と数えるかという悩ましい問題もあります

.

とりあえず

a.out

作成までの段階で

,

目で確かめられる内容として

,

次の

4

つに分けて見て行きます

.

*.c −→ cpp *.c −→ ccom *.s −→ as *.o −→ ld a.out

(8)

cpp C preprosessor: C compiler (ccom)

が処理をする前に

,

コメント文の削除や

,

マクロの展開などの文字 列処理の部分を受け持って

,

事前に処理をするものだと思ってください

.

ccom C compiler: C

言語の文法で記述された処理内容を

, assembly

言語に変換するプログラム

.

as Assembler: assembly

言語で書かれた内容を

,

機械語

(2

進法で記述されもの

)

に変換するプログラム

. ld Link editor:

リンカともいう

.

上の

sample.c

ではコンパイルした結果は

,

文字列

Welcome to C world

を出力ライブラリに渡すという内容になります

. printf

のような関数はライブラリとしてコンピュータ の次にファイルに入っています

.

/usr/lib/libc.a (/usr/lib/libc.so.1)

ld

, sample.c

のコンパイルしてできた結果と上のファイルにある

printf

を結び付けて

(

リンクする

という

),

さらにシステムが実行時に要求する情報をつけて

,

実行可能ファイルを作り上げます

.

Library

プログラムを組むと分かりますが

,

画面の入出力などはどのプログラムでも同じ様な事をします

.

れをいちいちプログラムするのは

,

無駄です

.

そこで

,

よく使う処理はあらかじめ機械語のものを作成

,

まとめたのが必ずあります

.

これがライブラリ

(library)

です

.

ライブラリは

, compiler(

実は

,

リン

)

に指示することによって

,

自分のプログラムにくっつけることが出来ます

.

また

, C

言語では標準ラ イブラリというのが

ANSI(American National Standard for Industory,

アメリカ工業規格

)

により定 義されており

,

多くの処理はこれを利用します

.

ファイル名

C

言語のプログラミングにおいてファイル名は

,

次の規則にしたがって

,

名前をつけます

.

1. *.c C

言語のプログラムを記述したファイル

.

2. *.h

ヘッダ

(header)

ファイル

.

定数とか関数の定義を記述する

. 3. *.s assembly

言語のプログラムを記述したファイル

.

4. *.o

オブジェクト

(object)

ファイル

. 2

進法で記述した機械語が入っている

.

5. a.out

特別なオプションを指定せずにコンパイルしたときに出来る実行可能ファイル

.

上のファイルのうちいくつかは

, sample.c

をコンパイルするときには現われませんでしたが

,

それは単 に目に見えないだけで

,

コンピュータの内部ではちゃんと作られています

.

(9)

実際に処理を途中で止めた結果を見ます

. cpp

段階で止めるには

, -E

のオプションで

cc

を実行します

.

の結果は標準出力に出力され長いので

, less

にパイプします

.

bash-4.4$ gcc -E sample.c | less

最初の部分は

,

コメントの削除と

#include <stdio.h>

の結果で

, (

どこかにある

) stdio.h

というファイルを 取り込んでいます

.

実際に書いたプログラムの本体は

,

一番最後の部分に現れます

.

そこでは

,

コメント文が取 り除かれています

. assembly

言語の場所で処理を終わらせるには

,

オプション

-S

を用います

.

bash-4.4$ gcc -S sample.c

今度は

,

結果は画面ではなく

,

ファイル

sample.s

に保存されています

. bash-4.4$ cat sample.s

ファイルにある

movl

とか

movq

とかは

,

アセンブリ言語で

, CPU

に対する

1

つの命令を表します

(mnemonic (

ニーモニック

)

という

).

さらに

1

つ先のオブジェクトコードの状態までで止めるには

, -c(

小文字

)

オプショ ンを用います

.

bash-4.4$ gcc -c sample.c

やはり出力は画面ではなく

, sample.o

というファイルです

.

このファイルは機械語からなっているため

,

かな り特殊な能力がないと人間には理解できません

.

レポート問題

sin 30

を出力するプログラムを書け

.

レポートする内容は

,

プログラムソースと実行結果

.

実行結果の出力形式は

,

各自に任せる

.

件名

: gengo2021-1 report 1-1,

送り先

: [email protected],

締切

4

19

(

) 10:00(JST)

レポートの締切は

,

次の授業で皆さんのレポートにツッコミを入れるための設定です

.

参照

関連したドキュメント

明治33年8月,小学校令が改正され,それま で,国語科関係では,読書,作文,習字の三教

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

解析の教科書にある Lagrange の未定乗数法の証明では,

  支払の完了していない株式についての配当はその買手にとって非課税とされるべ きである。

自然言語というのは、生得 な文法 があるということです。 生まれつき に、人 に わっている 力を って乳幼児が獲得できる言語だという え です。 語の それ自 も、 から

□ ゼミに関することですが、ゼ ミシンポの説明ではプレゼ ンの練習を主にするとのこ とで、教授もプレゼンの練習

造船に使用する原材料、半製品で、国内で生産されていないものについては輸入税を免除す

神はこのように隠れておられるので、神は隠 れていると言わない宗教はどれも正しくな