創作ファンタジー こうしてヘッダファイル<stdio.h>にscanfとprintfは格納されるようになったのか? 0.15

新種の蛇 scanf

「は~、よくわらった~~~」


ソーラー 「この肌触りがたまらないんだな。これが(^^)」


新種の蛇 scanf

「わ~っおいしかったな~


非常に美味でした。うね。うね。」


ぺろっぺろ


ソーラー 「わっ、くすぐったい。蛇になめられちゃった。」


アレサ「お蛇さんの住処は ヘッダファイル<stdio.h>なのですか・・」


新種の蛇 scanf

「え~どうだったかな~僕は?長い間お外で遊んでたから、


 てへへ・・・忘れちゃった  ぺろっ」


ソーラー 「もう、しょうがないなあ。」


蛇を抱きかかえなおす。


ソーラー 「それにしても


#pragma warning(disable: 4996)

#include <stdio.h>


int main(void){

float n;

printf("何か数値を入力してください。\n");

scanf ("%f",&n);

printf("入力した数値は%fです。\n",n);

return 0;

}


このプログラムのように


scanf ("%f",&n);


で取り込んだ数値は


printf関数を使って出力させるしかないよね。」


アレサ「✲✲✲0111111000000000✲✲✲・・・・・


はい、そのようです。


はっ、もしや scanf関数とprintf関数が同じヘッダファイル <stdio.h>に


入っているのは


scanf関数をつかうときには必ずprintf関数をつかわなければ


ならないからではないのですか。」


ソーラー 「そうだねえ。


その点については・・・


こんな具合だったんじゃないかな?


・・・


すこし時代をさかのぼって


printf関数や

scanf関数がつくられた時代をのぞいてみよっっ




以下は創作ファンタジーです。


今から50億年前


無も有もない時代


ビッグバンによって宇宙が誕生する。


宇宙は光速をこえるスピードで膨張をつづけ


そのなかから


いくつかの銀河が生まれ


さらにその中から


太陽系が生まれる。


solarplexuss 「おおおっ(´∀`;)」


そして、太陽からちょうどよい距離をたもっていた地球に生命が


誕生する・・・


それは今から30億年まえのことだった・・・


solarplexuss 「おおおおおっ(´∀`;)


て、遡りすぎじゃ~~い。」



それでは時代は生命誕生からくだって・・・



遠い遠い昔のこと、C言語もまだできてない時代。


コンピューターの黎明期


しばらくの間


コンピュータは単純な数値計算のみ


足し算、掛け算程度しか計算する必要がありませんでした。






数値計算するプログラムを 


ゼロからアセンブリを使って作製し→


(プログラミング言語のことです


この当時 C言語はなく アセンブリというプログラミング言語が使われ


ていました)


おばちゃんたちによるハンドアセンブラ(C言語でコンパイルにあたる)


により機械語に変換後


その機械語プログラムをエディタ(編集機)をつかって


紙テープにプログラムとなるパンチ穴をあけてから

(このころのエディタは いまのように


パソコン画面上にプログラムを記述する画面というものでなく


紙テープにプログラムを表すパンチ穴をあけるという


まさに編集機だった)


その紙テープを


コンピュータによみこませ


数値計算を実行し


でてきた数値計算結果を ただのTV画面に表示する。


それだけで十分だった。


いや~ほんと十分だった。


だって数値計算しかしないんだもん。


そ~なので


現在のscanf関数を実行したときのような


直接キーボードからコマンドプロンプト画面上に数値を


打ち込みコンピュータのメモリへ


その数値を格納できる


そのようなコマンドプロンプト画面のようなもの


は必要でなかった・・・


当然


🍊数値🍊でなく


🍎文字🍎の


TV画面出力に関しても


🍑ある文字🍑を


ただのTV画面に出力させるときには


🍑ある文字🍑を


出力させるプログラムを


ゼロからアセンブリをくみあわせて作製、


おばちゃんたちによって


ハンドアセンブラ(C言語でコンパイルにあたる)して


紙テープに打ち込んでから コンピュータに読み込ませて


🍑ある文字🍑を表示させていた


それは のどかな時代だった



同時に新しいものを作り出そうと

エネルギーに満ちている時代でもあった。


そうして あるとき


ただのTV画面にある文字を出力表示するごとに


プログラムをアセンブリで記述して


ハンドアセンブラ


そうして機械語となったプログラムを


紙テープにパンチ穴をあける方法を用いて打ち込み


その紙テープをコンピュータに読み込ませていくのは


ちょっと効率がよくないと認識するようになる。


そこで「ある文字だけ」をキーボードから


入力すれば


プログラムなどをゼロから記述しなくても


TV画面に「ある文字」が出力されるような


システムがうっすらと考えられるようになる。


そうですね。


つまり、それまでは


TV画面にハローワールドを表示させるには


ゼロからプログラムを組んでアセンブラ(コンパイラ)後


紙テープに打ち込んでコンピュータに読み込ませて


ようやく ハローワールドが表示されるという状態だった。


1×1を計算実行,その計算結果を表示させるのにプログラムを組み

1+1を計算実行,その計算結果を表示させるのにプログラムを組み

appleを表示させるのにプログラムを組み

ringoを表示させるのに またプログラムを組み

mikanを表示させるのに またプログラムを組んでたんだお


プログラムの扱い方を知らないふつうの方には 


ちょっと扱えない計算機(パソコン)だったというわけなんだね。


今のパソコン画面なら


文字ハローワールドをキーボードから入力すれば


素直に画面にハローワールドが表示されますが・・・


今からすると、そんな本当に、


ものすんごく基本的なことができなかった(´▽`*)・・


いいねえ 開発しがいがあるねぇ。


そのような基本的なことすらできない感じですから


それと全く同じシステムの


scanf関数をつかって英数字をうちこむと


自分が打ち込んだ文字が コマンドプロンプト画面に


にprintf出力表示される


というようなこともできませんでした


それはともかく


この段階では


プログラムを読み込ませてから


TV画面に文字を表示することはできても


キーボードから文字を直接入力して


TV画面に文字を表示することは


できなかった。


そこで、プログラムが実行された後で ようやく


文字を出力表示できる画面と


文字の出力表示を操作する機械語に手が加えられ、


ついに 


キーボードから打ち込まれた文字が


そのまま画面に表示できるようになりました。


開発チームによってハードとそれをあやつる機械語に


いい感じに改良を加えたおかげです。




そう


現在のコマンドプロンプト画面のようなもの


コマンドプロンプト画面の前身のようなものが登場してきます。



キーボードから打ち込まれた文字が


そのまま画面に表示できるようになった


だいぶん前進しましたね


ところで


この段階においても


数値計算のプログラムを実行した場合


数値計算のプログラムの実行結果を


画面に表示する機能しかTV画面にはなかったので


プログラム内の命令文内の数値を、


違う数値に入れ替えて計算したいときは


あらたにプログラムの数値計算の数値部分を違う数値にかきかえてから


コンピュータに実行させていました


どのようなことかというと


1+1を計算するときは

1+1のプログラムを記述してから

プログラムを実行し


その後 


1+2を計算するときは

1+1のプログラムの数値1を2にかきかえて

1+2のプログラムを記述してから

プログラムを実行し


その後 


5+2を計算するときは

1+2のプログラムの数値1を5にかきかえて

5+2のプログラムを記述してから

プログラムを

コンピュータに実行させていたのです。



それが 


機械語と


コマンドプロンプト画面の前身に


さらに改良をくわえることにより


わざわざプログラムの数値をかきかえなくても


コマンドプロンプト画面の前身からの数値入力によって


プログラム内の数値を変更するだけで


コンピュータにいろいろな数値計算を実行させることができるようになり


大変便利になった。


まだわかりにくいですね😊


では、どのように便利になったのかというと

 

さらに改良の加えられた


コマンドプロンプト画面の前身には


あらかじめ計算プログラムが内蔵されており


プログラムを記述して実行しなくても


5+5を計算したいなら


コマンドプロンプト画面の前身から


簡単に5、+、5と入力するだけで


計算できるようになったんです。


2×5を計算したいなら


コマンドプロンプト画面の前身から


簡単に2、×、5と入力するだけで


計算できるようになったんです。


開発者の方の腕のみせどころだね。


このシステムは


今でもよく使われている


電卓のことなんです。


このように


ただのプログラムの実行結果を表示できるTV画面と違い


キーボードからのデータ入力をうけつける


コマンドプロンプト画面のようなものは大変便利なものなのです。


現在のコマンドプロンプト画面では


あるコマンド(命令)をキーボードから打ち込むと


コンピュータがその命令を実行するよう設計されています


たとえば


ある実行ファイルのある場所

その

実行ファイルの名前を


コマンドプロンプト画面に表示されるカーソルから


キーボードで打ち込むと


その


実行ファイルを実行することができます


同様に


電卓のコマンドプロンプト画面でも


5+5=

コマンド(命令)を打ち込むと


コンピュータは


5+5の計算を実行し


コマンドプロンプト画面に

10

表示しますね。



最初に取り付けられたのが


電子計算機だったとすると


ほかに 取り付けられたのが


ワープロだったんじゃないかな?


プログラムを記述して実行し文字を表示させることなく


キーボードから文字をうちこむと


あらかじめ内蔵されたプログラムが実行され


その文字が


ディスプレイ画面に表示される


この仕組みは


ワープロそのものです


ワープロとは文書を作製するための機械で


ワープロの画面上に表示される文章を


紙に印刷できるという機能をもっています


便利~~~


このように


あらたに登場したコマンドプロンプト画面をもちいた


電卓

ワープロ


では


プログラムを記述することができなくても


誰でも


直接キーボードから文字を入力して


画面に表示できるよう改良がくわえられました。


とりあえず

これでまずは1安心ですね。



実はそのとき


それを可能にするために

コンピュータに命令をあたえるアセンブリプログラムの記述は

とても複雑でながいものでした。




時代はやや下がり



アセンブリでプログラムを記述するのは


手間がかかるので


機械語を組み合わせて 


C言語がつくられる。


機械語を組み合わせてできたC言語は機械語ともいえます。


C言語にかぎらず


java、rubyなど他のプログラミング言語も機械語といえます。


コマンドプロンプト画面に直接キーボードから入力した文字を


表示することはできるようになりましたが


それとは別に


昔ながらに


プログラムを記述、実行して


コマンドプロンプト画面に文字を


表示することももちろんできます。


しかし、まだ


C言語には


文字の標準入出力機能がそなわっておらず


(標準入出力機能とはディスプレイに文字を入出力する機能ですが


この意味は 文字を出力表示することのできるprintf関数と


文字を入力することのできる scanf関数がまだつくられていなかった


ということであり


ディスプレイに文字が入出力できなかったということではありません。)


機械語とC言語をくみわせて長いプログラムを組んで


文字を標準入出力させていました。


C言語はまだ完成されておらず


機械語で記述したプログラムと


C言語を使って記述したプログラムをコンパイルして


できた


機械語プログラムをつなぎあわせて


文字を標準入出力させていたというわけです。




C言語も方言だらけの


ワンダーランドな、この時代に


誰かが 長いプログラムを組まなくても


文字を簡単にコマンドプロンプト画面に出力表示することができる


printf関数にあたる


便利で使いやすい文字の出力機能(出力プログラム)を


つくりだしました。


そして、そのprintf関数をいつでも引き出してつかえるように


ヘッダファイル<stdo.h>のようなものに標準出力機能として格納した。


stdoはstandard outの略ですね


同様にして


誰かが 長いプログラムを組まなくても


文字を簡単に


コマンドプロンプト画面から入力させるために


scanf関数にあたる便利で


使いやすい文字の入力機能(入力プログラム)をつくりだし


そして、そのscanf関数をいつでも引き出してつかえるように


新たに

ヘッダファイル<stdi.h>のようなものに標準入力機能として格納した。


stdiはstandard in の略です」


アレサ「そして しばらくの間


文字の標準入出力機能をつかうときには


プログラムの頭の部分に


2つのヘッダファイル


#include <stdo.h>


#include <stdi.h>


を並べて書いてから使用していた・・・けれど・・・


ソーラー


「scanf関数を使うときは ほぼ確実にprintf関数もつかうので


ふたつのヘッダファイルを1つのヘッダファイル


#include <stdio.h>にまとめた。


こんな創作ファンタジーだったんじゃないかな・・」


アレサ 「創作ファンタジー・・・ですか・・・


でも、とても夢のあるお話です。」


新種の蛇 scanf

「きゅるるるるる」


ソーラー 「どうしたんだい、嬉しいのかい?」


新種の蛇 scanf

「昔、僕を創ってくれた人たちをおもいだしたんだ。」


しっぽをふりふりしながら嬉しそうに話す。


ソーラー 「それは懐かしい時代だったんだね・・・」


  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます