授業書案 コンピューター入門

 


0.前書き

 この授業書案では,コンピューターとは一体どのようなものなのか,楽しく
学習できる事を意図しました。だから,ハードとかプログラミングそのものに
ついて詳しく勉強することは意図していません。コンピューターに入門するこ
と,その有効性と限界を掴むこと,それが基本的ねらいなのです。

                                                  1984,5 初版
                                                  1984、8 改訂版


[質問 0]

 コンピューターってどんなものでしょう? 知っていることがあれば色々出
し合ってみましょう。


[コンピューターとは?]

 コンピューターにはどんなことをさせることが出来るのでしょうか?
 コンピューターとは,もともとコンピュート=計算させるため,それも単に
計算させるだけでなく,速くしかも正確に計算させるために考えられたもので
す。しかし,今では,計算だけでなく,色々なことができるようになっていま
す(例えば,NECのPCー6601というコンピューターは,計算はもちろ
んのこと,ゲームをしたり,言葉をしゃべらせたり,音楽を演奏させたり,果
ては,文字を書いて漢字に変換したり編集したりする日本語ワープロとしても
使えます)。
 では,なぜ今のコンピューターが色んなことが出来るようになっているのか
というと,それは,今のコンピューターには,
  「仕事の手順を覚えさせることができる。しかも,いったん仕事の手順を
    覚えさせれば,速く・正確にそれを行うことができる」
という大きな特徴があるからです。私達が複雑な仕事をしようとした時,コン
ピューターならば,いちいちそのつど,コンピューターにあれこれ指示を与え
なくても,あらかじめ一度,コンピューターに仕事の手順を覚えさせておけば,
あとはコンピューターが勝手に仕事をしてくれるのです(その仕事の手順をプ
ログラムと言い,仕事の手順を組む事をプログラミングと言います)そして,
そのプログラムに従ってコンピューターに実際に仕事をさせる事を,実行
(RUN)させると言います。


[質問 1]

 コンピューターに仕事をさせるのに,コンピューター本体以外に最低どんな
ものが必要でしょうか? みんなで,色々出し合ってみましょう。


[作業 1]

 コンピューターのキーボードのキーの上には,アルファベットの文字が書い
てあって,コンピューターに仕事をさせるのには,このアルファベットの配列
に従ってキーボードのキーをたたくことによっておこないます。あなたが,コ
ンピューターにさせてみたことを,コンピューターに命令してみて下さい(か
な文字をうちたい時は,かなキーを押してから,キーをたたいて下さい。
 また,コンピューターは,キーをたたかれたくらいではこわれることはまず
ありません。安心してキーをたたいて下さい)
 キーをたたきおわったら,実行キー(RETURNキー)を押して下さい。


[コンピューターの言葉]

 エラー表示がでませんでしたか? でたとすれば,あなたの命令(言葉)が
コンピューターには理解不可能だということです。
 コンピューターを動かすには,まずエネルギー(例えば電気)がいります。
しかし,エネルギーだけでは,私達の思ったようにコンピューターを動かすわ
けにはいきません。これが,例えば日本人と日本人の間だったら日本語を,ア
メリカ人との間だったらアメリカ語を使ってこちらの意志を相手に伝えればい
いわけですが,コンピューターには今のところ人間の言葉は(日本語も,アメ
リカ語も中国語もです)分かりません。そのために考えられた「言葉」の一つ
が,BASICという「言葉」です。つまり,BASICとは,人間とコン
ピューターの間を橋渡しする「言葉」なのです。だからこれからは,コンピュー
ターに覚えさせる仕事の手順を組むのに(プログラミングするのに)BASIC
を使うことにします。

 BASIC:Begineer’s All―purpose
     Symmbolic Instruction Code
 (この他にもコンピューターの「言葉」としては,FORTORAN
   COBOL PASCAL LOGO などがありますが,ここでは
    最もわかりやすいとされているBASICを,扱うことにします)


[作業 2]

 コンピューターに簡単な仕事をさせてみましょう。
 次にBASICで書かれた最も簡単なプログラム仕事があります。書かれた
文字通りにキーをたたいていって,その仕事をコンピューターに伝えて下さい。
コンピューターに入力が終わったら,それを実行(RETURNキーを押す)
させてみて下さい。

  PRINT 625        実行させる

  PRINT ”ai”     実行させる


[PRINT]

 BASICの中にも色々の「言葉」がありますが,その中でも一番重要と言
えるのがPRINT(画面に表示しなさい)という「言葉」です。
 コンピューターは与えられた命令(情報)を電気的信号に変えて仕事をしま
す。だから,コンピューターに私達が仕事をさせても,コンピューターがそれ
を私達にわかるように画面に表示してくれなければ,それは私達にとっては意
味のないことになります。だから,この画面に表示しなさいというPRINT
という「言葉」がある意味で一番重要だということになるのです。
 さて,コンピューターはもともとcompute(計算)するために作られ
た機械です。ですから,数字(例えば)を表示させたいときは,PRINTと
いう「言葉」のあとにそのまま数字を書けばいいのですが,数字以外のもの
(たとえば普通の言葉)は,そのままでは使えません。その時は,その言葉の
両はじを,””という記号でくくってやります。だから,コンピューターに,
例えば ai と表示させたいときは, PRINT ”ai” とする必要
があるのです。


[練習問題 1]

あなたの好きな数字を画面に表示させてごらんなさい。


[練習問題 2]

コンピューターに,あなたの名前を表示させるにはどうすれ
ばいいでしょうか? プログラムを作って実行させてみてください。


[問題 1]

コンピューターに

PRINT 5*3

と入力しました。この仕事をコンピューターに実行させたらどうなるでしょ
う?(コンピューターは,かけ算をあらわすのに*の記号を使います。また,
わり算は/の記号を使います)


予想 画面に

ア,5*3と表示される。
イ,エラー表示がでる。
ウ,その他

理由 どうしてそう思いますか? みんなの理由を出し合ってみましょう。

実験 実際にコンピューターに PRINT 5*3 と入力してから実行してみましょう。

実験結果


[問題 2]

コンピューターに

PRINT ”5*3”

と入力して実行させたらどうなるでしょう。

予想 画面に

ア,5*3と表示される。
イ,エラー表示がでる。
ウ,”15”と表示される
エ,15と表示される。
オ,その他

理由 どうしてそう思うか,みんなの理由を出し合ってみましょう。

実験


[質問 2]

 PRINT文のあとに計算式を書くとコンピューターは「勝手に」
compute(計算)してしまいます。
 例えば PRINT 4*5 なら,20といったように,答えだけを表示
します。
 では,

263*17=●●●●(←計算した答え)

と,いったように,コンピューターに計算した答えだけでなく,そのもとに
なった計算式をも同時に表示させるうまい方法はないでしょうか?
(ヒント)263*17= と表示させるにはどうすればいいでしょう。
263*17の計算結果を表示させるにはどうすればいいのでしょう?


[;(セミコロン)]

 263*17=●●●●(その計算結果) と表示させるには,
263*17= と,263*17の計算結果を続けて表示させればいいわけ
です。そういった時,BASICでは,;(セミコロンと呼びます)をつかい
ます。
PRINT ”263*17=”とすると,画面には 263*17=
とでます。PRINT 263*17 とすると,画面にはその計算結果がで
ます。だから,263*17= と,その計算結果を続けて表示させるには,
PRINT ”263*17=”;263*17とすればよいことになります。


[質問 3]

 PRINT ”URIAGE=”;200*3;”YEN”
というプログラムを実行させたらどういう結果がでるでしょう。



[練習問題 3]

コンピューターに, 1234*567=という式と,その答
えを表示させるプログラムを考えなさい。


[いくつかの仕事を順番にさせるには行番号]

 これまでにいくつかの仕事をコンピューターにさせてきましたが,いままでの
仕事は,わざわざコンピューターにさせるまでもないような簡単なものでした。
しかし,コンピューターがその威力を発揮するのは,もっともっと複雑な仕事の
場合です。コンピューターのすばらしさは,スピードと正確さにあるからです。
 でも,コンピューターがいくらすばらしいと言っても,仕事の手順・順番は人
間が与えてやらなくてはいきません。BASICでは,そのためにプログラムの
中で,行番号というものを使います。


[作業 3]

コンピューターに次のプログラムを入力して実行させてみて下さい。
(各行の先頭にある数字が行番号です。行番号は普通10 20

10 PRINT ”ITO=”;170
20 PRINT ”MISAKI=”;165
30 PRINT ”KOMATSU=”;175

 このプログラムを入力して実行させるには,各行ごとにRETURNキーを押して,
最後に RUN と入力し,また最後にRETURNキーを押せばよいのです。



[問題 3]

10 PRINT ”ITO=”;170
30 PRINT”KOMATSU=”;175
20 PRINT ”MISAKI=”;165

というプログラムを入力し実行させるとどうなるでしょう?

予想 

ア エラー表示がでる
イ,ITO=170
  KOMATSU=175
  MISAKI=165
   と表示される
ウ,[作業 3]の時と同じ結果になる



[作業 4]

コンピューターに次のプログラムを入力して実行させてみて下さい。

10 PRINT ”ITO”
20 PRINT ”MISAKI”
30 PRINT”KOMATSU”
40 GOTO 10


[GOTO]

 GOTO 10 とは,文字通り GO(行く)TO(へ):行番号10へ
行く,つまりコンピューターは,10 20 30 と仕事をしてきて 40
に来ると 10にもどり,また 20 30 と仕事をし,40で 10 に
戻り 20 30 40 →10 20 30 40 →…………… と果て
しなく仕事を繰り返すことになるのです。

                 GOTO ●……行番号●にとびなさい

 さきに,コンピューターのすばらしさはスピードと正確さにあると言いまし
たが,それと同時に,コンピューターは与えられた命令には忠実すぎるほど忠
実だということがあります。それを最もよくあらわしているのがこの 
GOTO という「言葉」で,同じ仕事を繰り返しさせる時に使います。


[質問 4]

10 PRINT ”ITO”;
20 GOTO 10

というプログラムを入力し実行させるとどうなるでしょう?


[質問 5]

 ITOITOITO……では少し読みにくいので,ITO ITO ITO
 ………としたいと思います。プログラムをどのように変更すればよいでしょう。
[練習問題 4]自分の名前を繰り返しコンピューターに書かせてごらんなさい。


[質問 6]

10 A=100
20 PRINT A

というプログラムを入力し実行させるとどうなるでしょう?



[問題 4]

10 A=100
20 A=A+150
30 PRINT A

というプログラムを入力し実行させるとどうなるでしょう?

予想 

ア,エラー表示が出る
イ,その他

理由

実験


[ = ]

 BASICで使う = は,数学で使う時とは違う意味で使います。
BASICでは,=は その右辺に書かれた数字とか文字を,左辺に書かれた
場所に記憶させる時に使います。だから

A=100………Aという場所に100という数字を記憶させよ
A=A+150………Aという場所に入っている数字(100 )に150 をたして,
Aという場所に新しく記憶させなさい
となり,

PRINT A

で,250が,画面に表示されることになるわけです。


[練習問題 5]

         10 A=100
         20 A=A/50
         30 PRINT A

     というプログラムを入力し実行させるとどうなるでしょう?


[練習問題 6]

         10 A=10
         20 B=6
         30 C=A*B
         40 PRINT C

     というプログラムを入力し実行させるとどうなるでしょう?


[質問 7]

       10 N=0
       20 N=N+1
       30 PRINT N
       40 GOTO 20

     というプログラムを入力し実行させるとどうなるでしょう?

[質問 7]のプログラムを順番にみていきましょう。

    10 N=0……Nという場所に0という数字を記憶させよ
    20 N=N+1……Nという場所に入っている数字(0)に1をた
              して,Nという場所に新しく記憶させなおしな
              さい
    30 PRINT N……Nという場所に入っている数字(1)を画
                面に表示しなさい
    40 GOTO 20……行番号20にとびなさい つまり,
       20 N=N+1……Nという場所に入っている数字(1)に
                 1をたして,Nという場所に新しく記憶
                 させなおしなさい
    30 PRINT N……Nという場所に入っている数字(2)を画
                面に表示しなさい
    40 GOTO 20……行番号20にとびなさい つまり,
       20 N=N+1……Nという場所に入っている数字(2)に1をた
              して,Nという場所に新しく記憶させなおしな
              さい
    30 PRINT N……Nという場所に入っている数字(3)を画
                面に表示しなさい
    40 GOTO 20……行番号20にとびなさい

    つまり,このプログラムは1から順番に 2 3 4 と表示してい
    きなさいというプログラムだったのです。


[難問 1]

       10 N=0
       20 T=0
       30 N=N+1
       40 T=T+N
       50 PRINT T
       60 GOTO 30

    というプログラムを入力し実行させるとどうなるでしょう?

       このプログラムがどのようなプログラムか,一目見ただけで理
       解できる人は,天才か………です。あなたは,天才か,……か,
       それとも,ごく普通の人か?

[難問 1]のプログラムを順番にみていきましょう。

10 N=0 …… Nという場所に0という数字を記憶させよ
20 T=0 …… Tという場所に0という数字を記憶させよ
30 N=N+1……Nという場所に入っている数字(0)に1をたして,
      Nという場所に新しく記憶させなおしなさい
40 T=T+N ……Tという場所に入っている数字(0)に,Nという
      場所に入っている数字(1)をたして,Tという場所に新しく記憶さ
      せなおしなさい。
50 PRINT T……Tという場所に入っている数字(1)を画面に表
      示しなさい
60 GOTO 30……行番号30にとびなさい
     つまり,
30 N=N+1……Nという場所に入っている数字( )に1をたして,
      Nという場所に新しく記憶させなおしなさい
40 T=T+N ……Tという場所に入っている数字( )に,Nという
      場所に入っている数字( )をたして,Tという場所に
50 PRINT T……Tという場所に入っている数字( )を画面に表
      示しなさい
60 GOTO 30……行番号30にとびなさい
   つまり,
30 N=N+1……Nという場所に入っている数字( )に1をたして,
      Nという場所に新しく記憶させなおしなさい
40 T=T+N ……Tという場所に入っている数字( )に,Nという
      場所に入っている数字( )をたして,Tという場所に新しく記憶さ
      せなおしなさい。

             N                     T

   10  N=0   0
   20                        T=0 0
   30  N=N+1 1
   40             T=T+N    0+1=1 1
   50             PRINT T        1
   60  GOTO 30
   30  N=N+1 2
   40             T=T+N    1+2=3 3
   50             PRINT T        3
   60  GOTO 30
   30  N=N+1 3
   40             T=T+N    3+3=
            (ところが3=1+2 だから) 1+2+3=6 6
   50             PRINT T        6
   60  GOTO 30
   30  N=N+1 4
   40             T=T+N   6+4=
        (ところが6=1+2+3 だから) 1+2+3+4=10 10
   50             PRINT T        10
       ………………

 つまり,このプログラムは,1+2+3+4+………という計算の結果を,
表示するためのものだったのです。


[発展問題 1]

 前問のプログラムを実行させると,1+2+3+4+……の
       答えだけ表示されました。では,

           1までの合計=●
           2までの合計=●
           3までの合計=●
           4までの合計=●
           5までの合計=●
           6までの合計=● (●は,計算した答え)
           ………………

         と,表示されるようなプログラムは出来ないでしょうか?

[難問 1]と,基本的には同じ仕事をさせて画面への表示方法だけを変えれば
いいわけですから
       10 N=0
       20 T=0
       30 N=N+1
       40 T=T+N
       50 PRINT T
       60 GOTO 30
というプログラムの中の
       50 PRINT T
を変更すればいいわけです。
 さて,
       1までの合計=● 
を1 と までの合計= と ● に分けて考えると,1の部分は,1 2
 3 4……というふうに増えていきますから,これは,Nの中に入ってい
る数字を表示させればよいことがわかります。
 までの合計=は,そのまま表示させればいいわけですから,””でくくって,
       ”までの合計=”
とすればいいです。
 ●は,計算結果ですから,Tの中に入っている数字のことです
 ですから,
   50 PRINT T→50 PRINT N;”までの合計=”;T
とすればよいのです。


         [IF ……… THEN ………]

[発展問題 1]のプログラム
        10 N=0
        20 T=0
        30 N=N+1
        40 T=T+N
        50 PRINT N;”までの合計=”;T
        60 GOTO 30          (プログラム1)
   は,いつまでたっても終わりません。ほどほどの所でやめさせる方法は
   ないのでしょうか?
    BASICでは,IF ……… THEN ……… 文を使うと,そ
   れが可能になります。

   IF ★★★ THEN ☆☆☆………もし★★★なら,その時は☆☆☆
                  しなさい。それ以外の時は,次の行番号
                                  の仕事をしなさい
   
 例えば,もし,N=100で計算を終わらせる(ENDさせる)のなら,
前のプログラムの行番号50の後を

        60 IF N=100 THEN GOTO 80
        70 GOTO 30
        80 END             (プログラム2)
        とすれば,
      もし(IF)N=100なら,その時は(THEN)80へ,行
      きなさい(GOTO)。それ以外(N=100にならない時)は,
      次の行番号の仕事(GOTO 30)をしなさい。
   ということですから,N=1からN=99までは,コンピューターは普
   通に仕事を続け,N=100になると,GOTO 80 つまり,行番
   号80に行け,ということになります。ところが,行番号80は,EN
   D(終わり)ですから,コンピューターは,そこで仕事をやめることに
   なるわけです。


[作業 5]

      プログラム1の60以下を,プログラム2で置き換えて,それを
      実際に,実行させてごらんなさい。


[質問 8]

      10 N=0
      20 T=0
      30 N=N+1
      40 T=T+N
      50 PRINT N;”までの合計=”;T
      60 IF N>100 THEN GOTO 80
      70 GOTO 30
      80 END
   というプログラムを実行させたらどうなるでしょう? また,>を<で
   置き換えたら,どうなるでしょう?


[難問 2]

[作業 5]のプログラムは,                     

       1までの合計=●
       2までの合計=●
          ………
          ………
     100までの合計=●

といったふうに,1から100まで,すべての合計を表示してしまいます。
 では,
       100までの合計=●                
  だけ表示させるには,どのようなプログラムを作ればいいでしょうか?

(ヒント)[作業 5]のプログラム
       10 N=0
       20 T=0
       30 N=N+1
       40 T=T+N
       50 PRINT N;”までの合計=”;T
       60 IF N=100 THEN GOTO 80
       70 GOTO 30
       80 END
というプログラムを修正することによって,目的のプログラムを作ってみて下さい。



[作業 5]のプログラム

      10 N=0
      20 T=0
      30 N=N+1
      40 T=T+N
      50 PRINT N;”までの合計=”;T 
      60 IF N=100 THEN GOTO 80    
      70 GOTO 30
      80 END

をみてみると,Nが100になるまで,30から70のプログラムを,何度
も何度も繰り返していることが分かります。その途中にPRINT文がはいっ
ているのですから,それが繰り返されるたびに計算結果が画面に表示されます。
 だから,最後のN=100の時の計算結果だけを表示させるには,50の
PRINT文を,繰り返しのない別の場所にもっていけばいいわけです。

        10 N=0
        20 T=0
        30 N=N+1
        40 T=T+N

        60 IF N=100 THEN GOTO 80
        70 GOTO 30
        50 PRINT N;”までの合計=”;T
        80 END

 そして,行番号を順番に並べ変えてやります。

        10 N=0
        20 T=0
        30 N=N+1
        40 T=T+N
        50 IF N=100 THEN GOTO 80
        60 GOTO 30
        70 PRINT N;”までの合計=”;T
        80 END

 ところが,このままでは,IF文の「行き先」が,80のENDになって
いるので,計算結果は最後まで表示されません。
 だから,IF文の「行き先」を70のPRINT文にしてやる必要がある
のです。ですから,正解は,

        10 N=0
        20 T=0
        30 N=N+1
        40 T=T+N
        50 IF N=100 THEN GOTO 70
        60 GOTO 30
        70 PRINT N;”までの合計=”;T
        80 END

     ということになります。実際に入力して確かめてごらんなさい。








[練習問題 7]

        1000までの合計だけを表示させるプログラムを考えな
        さい。また,10000までの合計だけを表示させるプロ
        グラムを考えなさい。


[質問 9]

コンピューターに挑戦!!


[練習問題 7]のプログラムでは,10000までの合計を表示させるの
には,かなりの時間がかかります。
 ところが,それを見ていたある人が,「コンピューターなんてたいしたこ
とないね。ボクのほうが早く計算できるもんね」と言いました。
 さて,この人の言ったことは,本当でしょうか?
 また,本等だとすれば,この人は,どうやって計算したのでしょう?

   1+    2+    3+    4+…+10000=S  

10000+ 9999+ 9998+ 9997+…+    1=S +
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
10001+10001+10001+10001+…+10001=2*S

10001×10000                    =2*S
100010000                      =2*S
 50005000                      =  S





[難問 3]

        上の計算のやり方をみて,[練習問題 7]のプログラムを作
        り変えてごらんなさい。






[創作]

「コンピューターの役割 人間の役割」という題でお話を作ってみましょう。





              [INPUT]

 これまでのプログラムでは、1000までとか、10000までとか、
あらかじめ決められた数までの合計しか表示させることが出来ませんでした。  ところが、INPUTという「言葉」を使うと、コンピューターを
利用する人が勝手な数を指定できるのです。        INPUT ●………●の値を入力しなさい


[作業 6]

 

        次のプログラムを入力し実行させてごらんなさい。

        10 INPUT ”いくつまでですか”,X
        20 N=0
        30 T=0
        40 N=N+1
        50 T=T+N
        60 IF N=X THEN GOTO 80
        70 GOTO 40
        80 PRINT X;”までの合計=”;T
        90 END