基本的にはこのページの内容に沿って講義を行っていきますが、だからといって、これに目を通したことで授業を休んだりサボったりしていい理由にはなりません(自分の経験値向上になるかどうかで判断してください)。 逆に、このページをみることも義務づけはしません。 講義を受ける前の予習(ページ執筆が間に合えば)や、講義内容の補填などに使ってください。 注意事項の詳細をまず確認してください。
講義をうけるにあたっては、「自分の手で試すこと」に重きをおいてください。
コンピュータの上のことです。
やろうと思えば友達から完成済みのプログラムをもらうなど、手書きでレポートを書くのに比べれば圧倒的に楽に手抜きができます。
しかし、それがなんの得にもならないことは自明です。
単位になるかならないかを判断基準とするのではなく、今後の自分の「手段」をいかに増やすかを判断基準としてください。
シラバスにも明記しましたが、この科目は初心者を想定して進めます。 多少でもプログラミングの心得があると暇をもてあますかも知れません。 その場合は、余った時間を「自分でいろいろやってみる」ことに使ってください。
なお、講義中に講義内容と関係ないホームページなどを見ていたとしても、大人しくしている限りは文句はいいません(音出したり動画を見て画面をチカチカさせたり隣に迷惑をかけたら退出)。 ただし、その場合は「私には余裕があります」という宣言と見なし、成績評価で妥協しないことにします。
この講義の目的は
もちろん、C言語のプログラミング(=プログラム作成=コンピュータへの直接的な指示通知法)についても多くの時間を割きますが、「C言語を学ぶこと」が第一義ではなく、あくまで手段として使い、解説します。
というのも、ほとんどの学生さんが1年次にプログラムの作り方を習ったはずなのに、結果的に卒業研究の時にはなにも覚えていないという現実があり、だったら、文法そのものに力点を置くよりも、それによって何ができるかを体験することで、「将来自分で使う日が来たときに、使えることを経験しておく」ことを優先すべき、と考えたためです。
目的さえはっきりしていれば、最低限を身につけるにはそう手間はかかりません。工学部なら。
その背景の元、
「紙を切る」ときに、手でちぎったり、はさみをつかったり、カッターを使ったりと道具は変えますし、目的に応じて向き不向きはあります。
が、「正方形の紙がほしい」というときには、切る場所を決め、そこに道具を適用するという手順の大筋は、かわりません。それと同じことです。
本講義ではコンピュータとは、おおざっぱに
今日では非常に多くの機械、装置にコンピュータが入っています。
「コンピュータ」と呼ばれている機器はもちろんのこと、携帯電話やゲーム機、ロボットにも必須の要素で、従来はただの機械だったはずの自動車、掃除機や扇風機のような家電品にもコンピュータは入っています。
「コンピュータ入り」かどうかの一つのおおざっぱな見分け方は
さて、電卓を考えてみましょう。これはコンピュータ入りです。
そもそも、いまのパソコンに使われるコンピュータの心臓部であるCPUと呼ばれる部品は、小型でやすい電卓を開発する過程で生み出されたことは有名な話?です。
電卓で計算するとき、計算したい内容、計算指示は使うときに行います。あらかじめではない?
電卓の中のコンピュータは「ボタンを押されたときに電卓として振る舞うよう」あらかじめ手順が仕込まれています。
パソコンも一緒です。あらかじめ、人が使うときのことを想定して、大量に処理の手順をしこまれています。電卓とパソコンの大きな違いは、性能の差もですが、「処理の手順」、いわゆるソフトウエアを後から追加できることです。
※電卓でも高級なのはしこめますが
逆に、「手順を新たに教えることができる」コンピュータは手順を教えることで、新しい仕事をさせることができるようになります。
コンピュータの大きな特徴は、
それを応用した使い道をみてみましょう。
機械屋にとってのコンピュータの、計算装置としての使い方は主に以下の通りです。
コンピュータ支援による設計は、CADと呼ばれるコンピュータ上で設計図を書く、どちらかというとお絵かきツールとしての使い方がよく知られていますが、さらに、コンピュータの中で仮想的に組み立て、ちゃんと動くか?、また思った通りに動くか?などを検証することもできます。
コンピュータシミュレーションは「計算量」という意味では圧倒的に比重の大きな使い道です。 自動車や飛行機を設計したとき、実物を作らなくても空気抵抗などを見積もったりできます。 また、機械部品を設計したとき、力をかけても壊れないか?といった確認をすることも、実物を作らなくてもほぼ検討がつきます。 コンピュータ支援設計と似てはいますが、どちらかといえばシミュレーションの方が純粋に計算です。
ロボットの制御とは、たとえば、ロボットの腕や足をどう動かすかを決めたり、実際にある角度に関節を曲げたいときに、いまの曲がり具合をもとにモータにどのくらい電気を流すかを決めたりする作業です。
このためには必要な計算を1秒間に数十〜千回ほど行う必要があります。
とてもですが、電卓をたたいたりしていては間に合わないため、あらかじめ「こういうときにはこうしなさい」というルールである「制御則」をコンピュータに教えておき、瞬間的に計算して判断して動かしてもらうことになります。
つまり、コンピュータでプログラムを作ることなくして、ロボットは動きません。
機械でコンピュータを使う理由はこんな感じです。
もちろん、このほかにもレポートを書いたり、ネットで調べ物したり、ゲームで遊んだりといったありきたりの使い方もありますが、この科目は「機械」で「コンピュータ応用」なので無視します。
![]() |
コンピュータの概略構造 |
コンピュータは、大きく二つの重要部分があります。
そのほかに、キーボードやマウス、画面やネットとやりとりをする入出力部がありますが、それはおいておきます。
演算処理部は演算だけ、メモリは数字の記憶だけができます。
メモリには「処理すべきデータ」「処理した結果のデータ」など、処理する対象そのものを置きます。
演算処理部はメモリからデータを取り出し、処理して、結果をメモリに置きます。
![]() |
メモリ上にデータと手順 |
おそらく、ここでいう「データ」として「数値」が思い浮かぶと思います。
一方、指示は「○○と××を足す」といった、言葉での指示がありそうです。
が、メモリは「数字だけ」、より厳密には「0と1」をひたすら大量に記憶するだけです。
「数値」については、比較的単純で、2進数と呼ばれる方法を使います。
たとえば、ゼロイチを4個集めると「0000」〜「1111」で16通り(2×2×2×2)の組み合わせができます。
これに、数字の「0」〜「15」を割り当てれば、ゼロイチだけで数値を表せます。
実際には、ゼロイチを32個とか64個集めて組み合わせ、整数や小数を様々に表します。
(もちろん、その組み合わせと実際の数値の間にはちゃんと規則を決めておく)
さて「指示」はというと、発想は実は一緒です。ゼロイチ4個で16通り、というところまでは同じ。
0000(0):足す 0001(1):引く 0010(2):かける 0011(3):割る 0100(4):休む 0101(5):メモリから数値をとってくる 0110(6):メモリに数値をおいてくる 0111(5):ある条件が成立したら、直後ではなく別の指示を実行する :のように、ゼロイチの組み合わせですべき処理の内容を決めておきます。 もちろん、こんなに簡単ではありません。なぜなら、「なにとなにを足すか」といった対象も指示しないといけないためです。
俗に「プログラム」とか「ソフト」と呼ばれているものは、本質的にはこのゼロイチの列からなる手順のセットのことです。
ただし、このままではとてもですが人間が指示するときにしんどいので、もっとわかりやすい形で指示を出します。
ある意味、電卓は指示が直接的に計算に結びつきます。
表計算ソフトは打ち込んだ「数式というデータ」を「表計算ソフトという手順を処理部が解釈することで処理して」、「計算された結果」を見せているわけです。
そして、プログラムを作るという場合のプログラムと呼ばれるものは、人間でも理解できる形で処理を順番に書いていき、それを予め/その場で処理部が直接理解できる形に翻訳する(のも、そういう手順=ソフトによる)ことで、思った通りに仕事をさせます。
ここまでが、演算処理部とメモリの関係。
![]() |
メモリは番地で管理 |
![]() |
必要なバイト数を固めて使う |
メモリは、普通は、先ほどの「ゼロイチ」を8個まとめたものをひとまとまりとして扱います。 このゼロイチ1個を「ビット」、8個まとめたものを「バイト」と呼んでいます。 昔からゲーム機本体で「○○ビット」といっていたのは、演算処理部が主に何ビットで作られた数値を扱えるかを意味します。 さすカセットなどで「メガビット」とかいっているのは、その中にメモリが「ビットで数えて」どれだけいっぱい入っているかを示します。今時は「メガバイト」=「約100万バイト」単位で数えますが。 いずれにせよ、大きい方が計算力があり(九九だけしかできないか、二桁のかけ算の暗算ができるか、のような違い)、大きい方が情報がいっぱい入っています。
8ビットでひと単位になっているので、大きな数字を表したり、細かな小数を扱いたいときなどは、4バイト分、8バイト分などをセットとして、文章や画像といったさらに大きなものを扱うときはより大量にひとまとまりにして使いますが、
アドレス○○○○のところ(から××バイト)においたデータ
という形で扱います。
※数値の場合はセット数が決まっているので長さは気になりませんが、文章などは、どこか別のところに「長さ」を書いておくか、おしまいに「終わりです」という印を書いておく必要があります。
ちょっと長くなりましたが、まとめると
大事なことは、処理手順の指示も、数値も、すべて「ゼロイチ」のセットで、それはメモリ上においてある、それをどう解釈するかはそのときの手順次第、ということです。
※なので、間違うと、本来数値のところを処理として実行しようとして大パニックとか、本来処理手順がおいてある大事なところに数値をうっかりおいてしまって大暴走とかを起こします。
それを未然に防ぐと「不正な処理をしました」っていうエラーが画面にでます。
ので、あれは「不幸なことになる前に止めることに成功しました」っていうメッセージです。
以下の説明を簡単にする意味でも、「変数」という概念を導入します。
といっても、とくに目新しいものではなく、よく、数式などでつかう "x", "y", "t" などの変数、いわゆる「文字」です。 数学では、最終的にこれらの文字に具体的な数字が入るように(最後まで入れない場合もありますが)、プログラムでも、数値などを扱うための入れ物として、「変数」があります。
コンピュータに指示を出すときは、この「変数」に「なにか」を次々代入していくことで処理を進めます。 その「なにか」はどこかからもってきたデータかもしれませんし、複数の変数を計算した結果かもしれません。
で、この「変数」は普通はメモリの上に置かれます。
より具体的には、メモリのとある番地に「変数の名前」をつけて管理し、ある変数が必要になったらその番地のデータをもってくることになります。
これまでの算数、数学で、「=」の使い道は、大きく二つあったと思います。
コンピュータに指示を出すときには、もう一つの「=」があります。
この使い方も、似た経験はあるとおもいます。
y=x+2に対して、x=2の場合のyの値は?
これをあえてコンピュータにやらせるとすると、
x=2 <変数xに2を入れる
y=x+2 <変数yに「x+2」を計算して入れる
数学の場合との違いは、処理は順番に進むことを前提にするため、この順序で書かないといけないということです(自動的に順番をチェックしてくれる場合もある、ここではyの計算にxが必要だからxが変わったらyも計算、みたいな)。
ただ、コンピュータで指示を出すときに使う「=」の大半は、この「入れる」ためのイコールです。
後に出てきますが、あと一個、「判断の=」があります。
「a=b」 「aとbが等しいかどうか」
たとえば「もし、aとbが等しいなら○○する」みたいなときに使います。
ただ、「代入の=」と紛らわしいため、「==」と区別して書いたりします(C言語系統の場合)。
問題: 12×12を求めよ また、 13×13−12×12をもとめよこの計算、電卓でもあれば簡単にできると思います。
具体的な手順の例として、
これはまさに、「電卓が(で)計算できるように、問題から、手順をつくりだした」わけです。
同じことを、プログラムで書くと、
コンピュータを使う、ということは、「問題から手順をつくりだして」「指示する」ことです。
「手順を作る」方法をしっかり考えられれば、プログラムを作ることすら簡単です。
電卓を簡単に使えるように。
以下、電卓と表計算とプログラムを比較します。
その前にそれぞれどういうものかよく見ておきましょう。
電卓は、いわば、コンピュータの処理部だけが独立したような存在です。
メモリは使う人の頭の中や、メモ用紙が担当します。
使うときは、メモリであるメモ用紙から値を入れたり、計算したりして、その結果をメモ用紙に書き込みます。その計算手順もまた、頭や、メモ用紙に書いてある数式をもとにします。
高級な電卓は例外として、基本的に、計算手順を覚えさせておくことはできず、毎回、手順を入れていきます。
A | B | C | D | |
1 | ||||
2 | 12 | =B2*B2 | 「セル」 | |
3 | 13 | =B3*B3 |
このセルに値を書き込むことが「代入」になります。
また、このセルに「=数式」と書き込むと、このセルに代入すべき値の計算式を指定できます。
右の例では、「C2のセルには左隣のB2の2乗をいれる」と記されています。
表計算では、数式がどこのセルの値を使うかを常に監視していて、使われているセル、たとえば、B2が修正されたら、自動的に計算し直して、C2の値とします。
縦横になっているのは、昔から、縦横の表がよく使われていた、というか、紙の上で表を作るのと画面の上で表を作るのは変わらないので、といったところです。
実験データを整理するときなどは、もともと紙の上の表に値を書き込み、そこをメモ代わりに電卓で計算しましたが、それをパソコンの上でできるようにしたもの、といえます。
もう一つ便利な機能は「グラフでみせる」ことです。これを「データの可視化」といいます。
数字だけではつかみにくい特徴を一目見てわかるようにするといういみで「見えるようにする=可視 化」です。
一般に表計算ソフトは大量のグラフの形式をもっていますが、工学部のデータ処理で主に使うのは「散布図」くらいです。
プログラムは、「プログラミング言語」と呼ばれるもので、いちいち手順を書きます。 手順を書き込んでいくという意味では、電卓よりは表計算に近い存在です。 ただ、表計算ほど「つかい始める」ことが手軽ではなく、表計算ですむなら、表計算ですませた方が楽です。 それでもプログラムを作る意義となる利点があります。
大きな特徴は「判断」が非常にしやすいことです。
たとえば、ある計算を10回繰り返すとしましょう。
表計算では同じ式を10回書くことになります(それでも数式のコピーができるので普通は一瞬)。それに対して、プログラムでは、
ここで「やっぱり100回」といったときに、表計算は式を100本にする一方で、プログラムは最後の「10」を「100」にするだけです。
また、「いいかんじだから100万回やって」といわれたら、表計算はお手上げ、プログラムはゼロを追加するだけです。
また、「計算結果が○○だったら終わりにする」といったこともできますが、表計算では適当に多く計算させて、目で見て終わりを探す、などが普通です。
このように、「判断」「条件」「繰り返し」がでてくると、プログラムのほうが圧倒的に「指示しやすく」なります。
加えて、一般にプログラムを作った方が、表計算よりも圧倒的に計算速度が速くなります。
表計算ソフトが「数式を解釈しながら計算」するのに対して、多くのプログラミング言語では、プログラムとして実行する前に「コンピュータが直接わかる手順」に翻訳しておいて、実行するためです。
また、ロボットを動かす場合などはロボットと信号のやりとりをする必要があり、表計算ソフトそのものでは無理です。
一方、プログラミング言語で画面に結果をグラフで表示したりすることは、表計算ソフトに比べればかなり面倒です。
「道具は使い分ける」ことが、重要だといえます。
ある単純な計算を一回するだけの時、わざわざパソコンを動かして表計算ソフトを使ったり、プログラムをつくることはバカらしく、電卓を使うのが当然です。
数回〜数百回(数千回)と同じ計算をひたすらやるような場合は表計算ソフトが向いています。
データさえあれば、あとは数式をコピーするだけですみます。
結果をグラフで見たい、という場合も表計算が便利です。
また、単発の計算であっても、途中経過が複雑だったり、あとでどう計算したかを確認したいという場合は、数式がはっきり残る表計算ソフトが便利です。
電卓では式の間違いに気づいたら全部やり直し、表計算なら数式は残ってますので。
ただ、判断しながら複雑な計算をするような場合は、プログラムを作った方が圧倒的に楽です。
その「楽さ」を体験してもらい、そういう手段があるということを知ってもらうこと、これがこの講義の目的です。