プログラミング序論 pageA0(update:2013/06/04)
[ index | prev | next ]

プログラムへのデータの渡し方

プログラムは与えられたデータを処理して結果を出す。

ここでプログラムへのデータの渡し方には色々な手法がある。

0. プログラムの中に記述して与える

リテラル(定数)としてプログラム中に記述する手法で、1回しか使わないプログラムであれば、これでも目的を果せる。

しかし、データの変更はソースコードの変更で行われるので、異なるデータに対する結果を得るためにはソースコードの変更、コンパイル、そして実行を毎回行うことが必要になる。 

#include<stdio.h>
int main(void)
{
    int w,h;
    w=10;
    h=20;
    printf("面積は%d",w*h);
    return 0;
}

1. CUIの利用

CUI(キャラクター・ユーザー・インターフェイス)はプログラムと利用者の間の会話を文字列の交換で行うユーザー・インターフェイスです。

CUIを利用して、プログラムに文字列の流れ(ストリーム)を読み取る機能を持たせ、データをストリームで与えることができます。これはGUIが一般化する1980年代以前によく使われた手法です。

データを変えて何度も定型的な処理を行うプログラムの場合、この形にすることが多い。

C言語のプログラムでは標準入力(stdin)と呼ばれるストリームからデータを読み取るために標準関数scanfやgetcharが用意されている。さらに標準以外のストリームを使うことも可能で、例えばデータファイルを読むためのファイルストリームも作れる。

端末プログラム

コマンドプロンプトの様な端末プログラムでは、端末からプログラムを起動できるだけでなく、起動したプログラムの標準入出力と端末利用者の仲介を行う機能を持っている。キーボードで文字列を作り標準入力に与える機能だけでなくファイルや通信からデータを読んで標準入力に与えるリダイレクトと呼ばれる機能も用意されている。

下図のように端末はプログラムの標準出力から送られた文字列を端末画面に表示する機能を持つ。さらに、キーボードからの入力に応じた1行の文字列の編集機能。そして、キーボードのEnterキーの押し下げで、編集した1行の文字列をプログラムの標準入力へ送り出す機能を持つ。

レポートツール

レポートツールは端末を完全には真似できなくて、入力文字列を編集する部分を文字列枠として分離しています。

皆さんのレポートを見るとscanfの所で分からなくなっている人が多いようです。端末の様な直観的な操作ができないのが原因かもしれません。

端末の真似をできていない部分。

  1. 端末に繋いだプログラムではprintfの度にフラッシュ動作が行われる。しかし、レポートツールと繋いだ場合はprintfだけではフラッシュされず、fflushを行わないとフラッシュしない。
  2. 端末画面ではプログラムからの出力を表示する画面内でキーボードによる入力文字列の編集も行える。しかし、レポートツールでは入力文字列の編集は別の枠で行う必要がある。

※ printf("面積は%d");の後にfflushが無いのは、プログラムが終了する時には必ずフラッシュが行われるからです。

※出力の画面に入力まで書き足しているのは、端末画面と同じような結果にする為です。このようにすると入力と出力の時間的な順序まで纏めて記録できます。

2. GUIの利用 多様なデータ受け渡し

キーボードだけでなくマウスを利用して多様な手段でのデータ入力を可能にする。

多様な手順で様々な機能を選択できるプログラムを作るために使われる。高機能だが複雑で、GUIのために用意された既存のプログラムライブラリーの利用が必要になる。C言語ではなくてライブラリーが充実したC++やJava等のオブジェクト指向言語を用いる方がGUIを利用したプログラムの作成は容易だ。


[ index | prev | next ]