MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
 English 

しんで覚えるC言語
しんで覚えるC言語

プログラムとは何か?

プログラムとは
ここでは、プログラムにはじめて挑戦する人のために、
プログラムの概要を説明しておきたいと思います。

プログラムとは、コンピュータを動かすもっとも基本的な方法です。
プログラムでは、一般にプログラミング言語と呼ばれる、
コンピュータのための言語を使用してコンピュータを操作します。

わざわざここで説明しなくてもほとんどの人は、プログラミング言語が、
コンピュータのための言語であることは知識として知っています。
しかし、それでも簡単にはプログラムが理解出来ないのは、
プログラミング言語には自然言語と違う点が多いためです。
なお、我々人間が使う自然言語のことを自然言語と呼びます。

つまり、プログラミング言語と自然言語の違いを理解することが、
プログラミングを理解する上での最初のハードルとなります。
この章では、具体例を通じて2つの言語の違いを説明します。
単純な文法
1つ目の違いとして、プログラミング言語は自然言語より文法が単純です。
プログラミング言語の文法とは、単語の記述順が決まっているだけです。
この章では、仮のプログラミング言語を題材にして説明します。
たとえば、次の例を見てください。

ソースコード
REFLECT HELLO

このプログラムは、画面に HELLO と言う言葉を映せ、という意味です。
このプログラムを、日本語の単語に置き換えるとこんな感じになります。

ソースコード(日本語単語)
映せ こんにちは

これで、画面に こんにちは という言葉を映せ、という意味になります。
たった2つの単語だけですが、これがプログラミング言語の文法なのです。

プログラミング言語で使われる品詞は、ほとんどが動詞と目的語です。
先ほどのプログラムでは、映せが動詞、こんにちはが目的語、です。
動詞を先に持ってくるのは、コンピュータが主に英語圏の国で発展したためです。

先ほどのプログラムを自然言語に翻訳すると次の通りになります。

日本語に翻訳
画面に「こんにちは」という言葉を映しなさい。

この2つを比べると、プログラミング言語の文法の単純さがわかります。

言語 文章
自然言語 画面に「こんにちは」という言葉を映しなさい。
プログラミング言語 REFLECT HELLO
プログラミング言語(日本語単語) 映せ こんにちは

プログラミング言語に慣れない人は、この単純さに疑問を覚えます。
しかし、冒頭で述べたように、プログラミング言語はコンピュータを操作する言語です。
つまり、コンピュータへの命令を表現できれば十分なのです。

ところで、先ほどのプログラムを見て、プログラミング言語では 映せ とは書いていても、
画面に とはどこにも書いてないことに気づいた人もいるでしょう。
これは、映せ にすでに 画面に の意味が含まれているためです。
どこに映すか、まで正確に表現する必要がある場合は、次の通りになります。

ソースコード
映せ 画面 こんにちは

この書き方であれば、こんにちは、を移す対象を変更できます。

ソースコード
映せ プリンタ こんにちは

このように書き換えれば、こんどはプリンタに印刷してくれます。
明確な意味
前節では、プログラミング言語の文法が非常に単純であることを説明しましたが、
プログラミング言語と自然言語との違いはそれだけではありません。

2つ目は、プログラミング言語は自然言語に比べ、意味が明確なことです。
曖昧さが発生する余地はまったくなく、厳格で明確な意味が決められています。

たとえば、三角形を書く、という例を考えてみます。
人間相手であれば、三角形を書け、だけで十分通用しますが、
コンピュータを相手にする場合、三角形、という言葉はあまりにも抽象的です。
明確に、どのような手順で、どのようにして三角形を書くのか、
曖昧さがまったくない、明確な手順で命令しなくてはいけません。

まず、どこから書き始めるかを命令しなくてはなりませんが、
そのとき、どこから、という位置も曖昧さがないように命令しなくてはいけません。
地球上で位置を完璧に指定するなら、緯度と経度を使いますが、
今回は似た方法として、画面の左上から右に何ミリ、下に何ミリ、で命令します。

初めに書く位置が決まったら、次に、どこまで線を引くかを命令します。
この位置を三角形の形になるようにすれば、三角形を書くことができるのです。

次は、英語のプログラミング言語で表してみた例です。

ソースコード
LINE 50,50 - 250,100
LINE 250,100 - 120,160
LINE 120,160 - 50,50

これを、日本語のプログラミング言語にすると次のようになります。

ソースコード
線 50,50 から 250,100
線 250,100 から 120,160
線 120,160 から 50,50

さらに、普通の日本語に訳すと次のようになります。

ソースコード
画面左上から右に50ミリ、下に50ミリの位置から、
右に250ミリ、下に100ミリの位置まで線を引け。
画面左上から右に250ミリ、下に100ミリの位置から、
右に120ミリ、下に160ミリの位置まで線を引け。
画面左上から右に120ミリ、下に160ミリの位置から、
右に50ミリ、下に50ミリの位置まで線を引け。

この手順に忠実に従うと、次のような画像が書かれます。
なお、ここでは1ミリを1つの点として考えています。





この様に、極めて明確な手順で命令するのがプログラミング言語の特徴です。
その手順には曖昧さがまったくなく、すべての動作をこと細かく命令しなくてはなりません。

もう1つの例を出すならば、コンピュータにカップラーメンを作ってもらうには、
カップラーメンを作れ、だけでは当然不十分であり、
1メートル前進、右に90度回転、手を10センチ前方に突き出す、・・・
を延々と繰り返し、ラーメンを取り出しヤカンに水を入れ火をつけて注ぐまで、
人間がすべての動作をこと細かく教え込んでやらなければなりません。

また、コンピュータにとって、これらの動作は、単なる動作でしかありません。
コンピュータにとっては、個々の動作はすべて独立した動作であって、
それが全体として、カップラーメンを作る、という仕事であるとは認識していません。
ただ、教えられた通りに動き続けている、それだけのことなのです。
もし、その最中にヤカンのお湯をぶちまける、という事態が発生しても、
それも単なる動作の1つであって、それがミスだとは認識していません

これだけでも、人間相手に比べると非常に厳格で曖昧さがないと思えますが、
実を言えば、ここで紹介した手順でさえ、曖昧さが残っている手順なのです。
そもそも、線を引く、というのは非常に曖昧な命令なのです。
コンピュータの画面が点(ドットと呼ぶ)の集まりなのは知っていると思いますが、
その一点一点について、どの点を書くかを命令しなくてはなりません。
もし、そのように、完璧に明確な命令を行うのであれば、

ソースコード
DOT 50,50
DOT 51,50
DOT 52,50
DOT 53,50
DOT 54,51
DOT 55,51
DOT 56,51
・
・

と言うように、点を書け、という命令を延々と繰り返さなくてはなりません。
さらに踏み込めば、点を書け、ですら曖昧な命令であり、
点を書け、という命令を完璧に明確な命令として表すならば、

完璧に明確な命令
コンピュータに接続されているOO番目の装置の記憶している数値の内、
32050番目の数値を0に設定せよ。

と言うとんでもない命令になります。

ここでは、横幅が640ドットのディスプレイを例として考え、
計算を行うと32050番目が画面左上から50、下に50の位置になります。
OO番目の装置とは、ディスプレイ(正確にはビデオカード)と考えます。
なお、0に設定せよ、というのは色のことで、0は黒を表すとします。

この様に、極限まで分解すれば、コンピュータの動作とは、

コンピュータにできることはたったこれだけ
1つの数値を記憶する。(記憶)
1つの数値が0であるか判断する。(判断)
2つの数値を足し算する。(演算)

※しかも、ここで言う足し算とは、0+0,0+1,1+0,1+1 の4つだけです。
の3つだけということになります。
しかし、この3つを組み合わせれば、どんな複雑な計算でも行えてしまうのです。

現在では、さまざまな機能がコンピュータの先人達によって作られており、
ここまで細かく考える必要はありませんが、
コンピュータはそのような厳密な機械であることは覚えておいてください。
すべては計算
前節の最後の方でも少しその形を見せていましたが、
プログラミング言語と自然言語の最大の違いは、その目的にあります。

3つ目は、プログラミング言語は、計算のための言語であるという点です。
コンピュータでは数値がすべてであり、数値以外の概念は一切存在しません。

前節で三角形を描く時も、すべて数値で指定していましたが、
同様に、プログラミング言語で扱われるのはすべて数値であり、
結局の所、プログラミング言語とは計算用言語なのです。

しかし、前節で説明したように、コンピュータに行える計算とは足し算だけです。
もちろん、その足し算の組み合わせによって、加減乗除が行えますが、
所詮、コンピュータにできる計算とはその程度でしかありません。

加減乗除しか出来ないコンピュータなど電卓より劣るように思えますが、
コンピュータには、人間から指定された順番通りに計算を行う機能があります。
計算の順番を指定するための言語が、プログラミング言語なのです。

現代のコンピュータは、加減乗除の計算順序をとてつもなく複雑に組み合わせて、
マウスを使って直感的に操作できるような機能を提供しているため、
どうしても数値を扱っているという感覚が薄れてしまいます。

しかし、プログラミング言語を習得する時には、数値を強く意識すれば、
一見すると理解しにくい文法などもわかりやすくなると思います。


本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く