データ - みる会図書館


検索対象: 月刊 C MAGAZINE 1991年10月号
77件見つかりました。

1. 月刊 C MAGAZINE 1991年10月号

クラス 2 ) クラスの応用機能 実力養成講座 スタートルプ c + + 第を回 前回はクラスの基本的な機能について , クラスの定義 , 使い方 , 初 期化と消去に分けて解説を行いました。 C 十十におけるクラスとは テータとそのテータに対して処理を行う関数の融合体と定義でき ます。これらクラスのメンバであるテータや関数はクラスの定義時 に , スコープを設定して参照できるメンヾとできないメンバを指定 できます。今回は , こうした機能を持つクラスの応用について解説 , しま 理論編 Fig. 1 プライベートなメンノヾへの参照経路 ー百ララ丕のメンノヾ関ー メンノヾ関数 龍崎昌平 ? しンド関数 C 十十には C 言語と同様に構造体の機能が あります。しかし , データの保護やデータ の抽象化の利点があるため , しばしば構造 体て、はなくクラスが用いられます。クラス のメンバには , メンバ変数と呼ばれるデー タとメンバ関数と呼ばれる手続きがありま す。さらに , それらのメンバにはスコープ があり , 構造体のようにユーザ関数 ( main な どの関数 ) から参照て、きるメンバとて、きない メンバを指定て、きるということを前回解説 ューザ関数から参照て、きないメンバは , そのクラスのメンバ関数から参照します。 Fig. 1 はプライベートなメンバへの参照経路 て、す。クラスのプライベートメンバへのア クセスは , 矢印て、示されるように自クラス ります。このフレンド関数はどのようにし その結果 , ューザ関数 func からクラス す。 のメンバ関数はもとより , ユーザ関数て、あ て定義されるかを Fig. 2 と Fig. 3 に示しま ABC のプライベートメンバて、ある data へ直 っても , 他クラスのメンバ関数て、あっても , す 0Fig. 2 て、はユーザ関数 func に対し , クラ 接に参照が行えます。 Fig. 3 て、は , クラス A それらの関数がフレンドて、あれば可能とな ス ABC においてフレンド宣言を行っていま BC のメンバ関数 func に対してクラス XYZ か フレンドな 他クラスの メンバ関数 他クラスのメンバ関数 class クラス名 private . プライベート・メンバ プライベード・メンバ バブリック・メンノ 0 記憶域 public ・ ノヾプリック・メンノヾ変数 ノヾプリック・メンバ関数 クラス名変数名 ; フレンドな ユーザ関数 ユーサ関数 ーユーサ関数群ー maln 136 C MAGAZINE 1991 10

2. 月刊 C MAGAZINE 1991年10月号

ワンポイント プログラミング 冓座 Fig. 1 今回作成した関数 control(void) , int get cmd(void) : int cmdint(void) , int rxcmdint(void) , int tx data(void) : int int file(void) : Ⅸ cmd(void) , int Ⅸ data(void) : i nt Ⅸ file(void) , i nt fdcheck (int drv) : int dir(cha 「 * buf, char * msg) , i nt chgdi 「 (char * path, char * msg) ・ i nt void talk(void) : int talkrx(int * x, int * y) int talktx(int *x, int (y) , 主要関数 / * 通信制御 / * コマンド入力 ( キー入力 ) / * コマンドインタブリタ / * 遠隔コマンドインタブリタ / * テータ送信 / * ファイル送信 / * 遠隔コマンド受信 / * テータ受信 / * ファイル受信 / * ドライプチェック / * ティレクトリ検索 / * ティレクトリの変更 / * Tal k 本体 / * 受信 / * 送信 今回作成した関数は , Fig. 1 の 15 個 ( 十 て、す。 中心となる関数は , 通信制御を行う関数 control( ) て、す。この関数て、は , ①キーボ、一ド入力の制御 ②入力コマンド判定の制御 ③データ送信の制御 1 テキストデータ送信の制御 2 ファイル送信の制御 3 TaIk の制御 ④データ受信の制御 1 遠隔コマンド受信の制御 2 テキストデータ受信の制御 3 ファイル受信の制御 ⑤プログラム終了の制御 を行っています。これだけのことを制御す るために , グローバル変数を多用する結果 になってしまいました。それぞれのフラグ TabIe 2 グローバル変数のフラグの意味 の意味は , TabIe 2 のとおりて、す。 プロンプト表示フラグ OFF . 未表示 ON : 表示済み prompt これらのフラグを各関数の実行結果に従 コマンド未入力フラグ flagl OFF . 未入力 ON 入力完 って変化させ , 全体の流れを制御します。 未実行コマンドあり flag2 0 F F : ON なし あり そしてコマンドは , コマンドインタブリ テータ送信中フラグ flag3 0 F F : 送信なし ON : 送信中 タ cmdint ( ) と遠隔コマンドインタブリタ rx 遠隔コマンド取得 flag4 OFF : 未取得 ON : 取得した cmdint() て、判断され , 振り分けられます。 ファイル送受信フラグ 0 : なし 1 : 送信 2 : 受信 3 : /GET 後 flag5 振り分けは , 文字列を判断しているだけて、 先行コマンド flag6 0 : なし 1 : SEND 2 : GET 3 : TALK すからわかりやすいと思います。 後は , そのコマンドを相手へどのような がセットされているかを検査します。 この関数は , ファイル送受信のときに相 電文に編集して返すかて、すが , これもリス FDD 検査用の関数が fdcheck ( ) て、す。入 手側を確認するためにも使っています ( 実際 トを追ってもらえば , それほどは難しくな カバラメータは , ドライプ番号 (A = 1 ; B = は , 遠隔コマンドを受け取って自分のドラ イプを検査し , 結果を相手に返している ) 。 ・・・ ) を指定します。 static て、フラ いと思います。 2 ; C=3 ; こて、 , 難しいのが相手のドライプやデ グを設け , 初めて呼ばれたときにはどのド 結構いろいろと使える関数なのて、 , おもし ィレクトリを移動した場合 , 該当した FDD ライプが FDD かを判定し , FDD の場合ドラ ろい使い方を考えてみてください イプアドレス / ユニットアドレスを設定しま ユニットにフロッピーディスクがセットさ ファイル送受信には , ふたつのコマンド れていない場合て、す。 す。 を用意しました。相手からファイルを取得 自分のパソコンからは相手の FDD が入っ この関数を実際に実行すると , ( 1 回目に するコマンド "/GET" と , 相手にファイルを 通るロジックが ) PC ー 9801 て、はすぐに終わる ているかどうかは直接調べられませんのて , 送るコマンドソ SEN Ⅸてす。 のてすが EPSON のラップトップてはけっこ 一応コマンド実行要求電文を相手に送りま 7 月号て、掲載した通信手順とちょっと違 す。受け取り側ては , Fig. 2 のような DOS の う時間がかかっていました。 BIOS をエミュ ってしまったのてもう一度掲載します (Tab メッセージが出ては困るのて , FDD に媒体 レートしているのてしようか ! ? le 3 ) 。 ワンポイントプログラミング講座 121

3. 月刊 C MAGAZINE 1991年10月号

+C PARTS は、通常アプリケーション開発に必要と思われる関数をソー スファイル形式でしかも低価格で提供しています。 +C 以 RTS で提供する関数は、特殊な BIOS を使用する場合を除いて、 基本的には ANSI 規格の関数を使用していますので、現在市販されて いる一般的な C コン、イラーのほとんどで使用可能です (Lattice c, MS-C, Quick C, TURBO C) +C PARTS は、ライセンスフリーです。 C PARTS を使用して作成したア プリケーションプログラムに対しての、特別な契約をする必要がありま せん。 VOL.I ( 帳票作成ソースライプラリー月ⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢ " 「帳票作成ソースライプラリー』では、印字位置、印字桁数、タイトル ( 固定文字 PC9801 用 12800 円 ( 発売中 ) テータ ) 、罫線の太さ ( 2 種類 ) については、あらかじめフォーマットファイルて J3100 14800 円 ( 発売中 ) 設定しておき、プログラム本体の作業は単に順番にテータを出力するだけで、 AX 1 4 旧 00 円 ( 発売中 ) 表の作成が可能です。 VOL.2 ( バーコード印字ソースライプラリー月ⅢⅢⅢⅢⅢⅢⅢⅢⅢ 『バーコード印字ソースライプラリー』では、 P 日一 201 系プリンターで、フォーマ PC9801 用 14800 円 ( 発売中 ) 1 6 旧 00 円 ( 近日発売 ) ットファイルを使用することにより、通常文字の印字位置、桁数、ノヾーコード J3100 1 6 旧 00 円 ( 近日発売 ) の印字位置を随時変更可能とし、手軽にノヾーコードの印字を行えるようにして AX 、ます。 使用可能なバーコードは、 JAN 、一 TF 、 NW7 、 CODE39 の 4 種類です。 VOL. 3 ( 画面制御、入力ソースライプラリー月ⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢ 画面制御、入力ソースライプラリー』では、画面フォーマットファイルを使用 PC9801 用 14800 円 ( 発売中 ) することにより、入力位置、桁数、タイトル ( 固定文字 ) の指定が随時可能とな っています。また、フォーマットファイルには、入力テータの編集の条件、表 示色、ボックスサイズ、ホックスカラー、罫線、初期テータなどの各種ノヾラメ ータの設定も可能ですから、プログラム作成後でも、上記項目についての変更 が可能となっています。 また、ウインドー単位で上記フォーマットファイルを設定しますから、マルチ ウインドーの表示も可能です。 更に、メニューとして設定されたウインドーには、メニュー選択の処理関数を 用意していますので、ユーサーは本関数を呼ぶだけでメニュー選択処理が出来 ます。 VOL.4 ( 旧 AM ソースライプラリー ) ⅢⅢⅢⅢⅢⅢⅢⅡⅢⅢⅢⅢⅢⅢⅢⅢⅱⅢⅢⅢⅢⅢⅢ PC9801 用 1 9. 日 00 円 ( 発売中 ) ー SAM ファイルは、テータ部分とキーテータ部分を独立して管理しており、 1 9 , 800 円 ( 発売中 ) 1 つのテータを検索するために最大 10 個を使用することができます。 ( 登録最大 J3100 数は 45 個 ) また、呼び出し時には設定キーでテータを呼び出すことが出来ます AX 、 FM 日 19.800 円 ( 発売中 ) 1 9 , 800 円 ( 発売中 ) から、テータ管理が格段に楽になります。 ( レコード番号でデータを読み書きす PS55 ることもできます。 ) VOL. 5 ( グラフ作成ソースライプラリー ) ⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢ フォーマットファイルを使うことによって、プログラムの変更なしにグラフの PC9801 用 19 旧 00 円 ( 発売中 ) 種類、テータの項目数、グラフの表示位置・色・サイズ・種類・各種文字修飾 の有無・タイトル等を変更することができます。 ( 通常ユーサーか使用する関数 は 1 個だけです。 ) 作成できるグラフは、棒グラフ ( ピラミッドグラフを含む ) 、折れ線グラフ、円 グラフ ( ドーナッグラフを含む ) 、レーダーチャート、散図の 5 種類です。 上記グラフ作成時の凡例、各データに対応する線種、色、八ッチングバターン、 項目名座標の設定、刻みなどの項目もフォーマットファイル中で指定できます。 また、同一画面上に複数のグラフも表示可能です。 ( 1 グラフにつき 1 フォーマ ットファイルが対応します。 ) VOL. 6 ( 割込処理ソースライプラリー月ⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢ 『割り込み処理ソースライプラリー』では、日 S232C 割り込み処理関連ソース、 PC9801 用 24 旧 00 円 ( 近日発売 ) タイマー割り込み関連ソースを提供します。一部アセンプラソースを含みます。 VOL.7 ( 簡易 LAN 用ソースライプラリー ) ⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢ 本ライプラリーでは、ファイルサイバーを中心とした、特定業務用小規模 LA PC9801 用 54800 円 ( 近日発売 ) N を構築するための関数を提供します。提供関数は、マルチューサー対応用フ ァイル管理関数。 VOL8 ( ページプリンタ制御ソースライプラリー川ⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢⅢ キヤノン製 L 日 P A408 、 B406 、 A404 、 B406S 、 B406D 用制御ソースライ PC9801 用 24800 円 ( 近日発売 ) プラリーです。本ライプラリーでは、 LIPSII 、 L ー PS Ⅲモードのコマンド をサポートしています。 帳票のレイアウトはフォーマットファイル上で指定可能です。 P A R T S ( 実彳 ) をのを物り第産し・した 噐一一三一三 は一 0 ・ 0 - ′ A 第一 V 0 し . ー 、物第・の第員に アイール載第一興 64K 以下のフ , ーマ 0 トファイルをま鬲 3 スクリーン関にはこ違の流れを特ち以下に 秋当ビル 理をり返しますかー いいえ し E D ーノ - ンゴ ~ ーをイ驀 s vol. 5 タタタタ タタタタ デ ) アデデデデ一アデ 朝れを 3 ト ー 2 3 4 5 6 7 8 月月月月月月月月

4. 月刊 C MAGAZINE 1991年10月号

X 68 k 活用講座 List 2 数をひとつ減らします。この共用使用数を 管理している配列が pcg is use [ ] てす。 1 スプライト 4PCGn0 ターンて、アニメーショ ンするのて、 , 表示個数は最大 128 / 4 = 32 キャ ラクタに制限されます。アニメーション処 理は anime フィールドが非 0 のときに行いま す。 キャラの移動 Player が動かすキャラクタはキーポード やジョイスティックから得られるデータて、 動かしますが , それ以外のキャラクタはあ らかじめ動きを定義しておいて垂直帰線期 間をカウントして得られる時間情報を元に 移動させることになります。アニメーショ ン処理もこの移動にともなう処理のひとつ て、す。 これらの処理を行うデータは , もっとも 上位のデータ Sprite て、定義されます (Table もっとも重要と思われるキャラの座標フ ィールドがありません。これは body [ 0 ] の 座標を代表させて , そのキャラの座標とし て扱うようにしたためて、す。本当はこの最 上位のデータにも座標フィールドを用意す べきなのてすが , 必ず下位データへのコピ ー ( しかも何の加工もない ) が起こるのて , 処理速度重視て、やめにしました。このため に見通しは悪くなっていますが , マクロを うまく使えばそれほど見にくくならないの て、これてよしとします。 def move フィールドが指すデータは「現在 の座標」から 1 / 60 秒後の移動位置への相対位 置を表すデータてす。このデータを作成す るツールが付録ディスクに入っている mov edef. c< す 0256X 256 画面て、マウスて移動ハ ターンを作成します。最大 256 ステップまて 作成てきます ( 1 / 60X256 = 約 4 秒 ) 。左クリ ックて順次定義 , 右クリックて 1 ステップ戻 り , キーを押すと定義データをディス クに書き出します ( ファイルネームは固定て 32 : static sprite 33 : alloc-sprite(void) 34 : { 35 : int C no; / * 空きのスクロールレジスタを捜す * / 36 : for (c—no = 0 ; c no く 128 ; c_no + + ) if (!this_no—is useCc no]) 38 : 39 : break; if (c-no く 128 ) 40 : 41 : データを作成する * / 42 : (sprite) malloc (sizeof (SPRITE)); 43 : sprite sp 44 : PCG **pcg; if (!sp) 45 : 46 : game—abort ( ) ; / * 割り当ては行うが表示はしない * / 48 : this—no—is—useCc—no] = USE; 49 : 50 : / * 各種ポインタの初期化 * / SP_SP_PTR (sp) = &disp_spCc_no] ; 52 : SP_CHAR_N0(sp) = 53 : c_no; 54 : pcg = SP-PCG_DATA_PTR(sp) ; 56 : 58 : 59 : re turn sp ; 60 : 63 : } 64 : 65 : sprite 66 : make_sprite (int anime, PCG **pcg_data, int wait) 68 : PCG **pcg; 69 : sprite sp = alloc_sprite ( ) ; SP_ANIME(sp) = anime; pcg = SP—PCG_DATA_PTR (sp) : do { *pcg 十十 = *pcg_data + + ; ) while (--anime > の : whi le (request—def) 77 : request—def = sp; if (wait) while (request—def) return sp; 82 : ) 84 : sprite 85 : copy—sprite (sprite sp) 86 : ( int anime; sprite ret = alloc_sprite ( ) : 89 : 聞 i = SP—ANIME (ret) = SP_ANIME (sp); do { int pcg—no; pcg—no = SP—PCG NO (ret, anime) = SP_PCG_NO (sp, anime) : SP_PCG_DATA (ret, anime) = SP PCG_DATA (sp, anime) : pcg—is—use[pcg—no] + + : 94 : } while (--anime > = の ; 96 : return ret; 97 : ) else game abort ( ) : 1 参照 ) 。 X68k 活用講座 99

5. 月刊 C MAGAZINE 1991年10月号

体のメンバのアドレスリゾルプ ( 相対アドレ スの決定 ) と , 基本的に原理は同じはずて、 す。 そしてデータメンバの中身は , クラスの コンストラクタによって適切に初期化され ていてゴミてはないはずてす ( 願わくば ! ) 。 つまり , メンバ関数のデフォルト引数と してメンバデータを指定て、きる , という言 語仕様にしても , コンパイラ作家はさほど 困らないのて、はないてしようか。 結局 , 関数のデフォルト引数という機構 は , あまり気楽には使えないようてす。し かし , デフォルト引数の指定として変数を 使えないことはないが , 使うなら static デー タだけだよ , という制約は , プログラマに とってあまり有り難い制約て、はないて、すよ ね。 コンストラクタによる 暗黙の型変換 C 十十て、は , データ型の変換が簡単な場合 と厄介な場合の両極端があります。 ・ユーザ定義型 ( クラスのオプジェクト ) を 内蔵型 ( int 等々 ) に変換するためには , そ のための特殊な変換関数をクラスの定義 の中に書いておかなければなりません。 ・あるユーザ定義型から別のユーザ定義型 への変換を行なうためにも , そのための 変換関数を必要とします。 ・ X 型のデータを引数として期待している関 数に , T 型のデータを渡すと , このとき , T 型のデータを引数としてとる X のコンス トラクタが存在しているなら , そのコン ストラクタが暗黙裡に利用されて , その T 型の引数は自動的に X 型に変換されま す。 上記の内の第 3 項目が , < 簡単 > の部類に 属する変換ルールてす。 上記の第 3 項目をまだ十分に理解していな かった時期に , 某誌上て「 TurboC 十十コン 112 C MAGAZINE 1 1 10 パイラが暴走する」 , という記事を読みました。 事情を簡単に書くと , クラスのフレンド 関数 f ( ) が , クラス X 型の引数を二つ取るよ うに宣言・定義されています。 void friend f( X a, X b ) ; そしてこのクラスを利用するメインプログ ラムの中ては , f ( ) の引数の片方 ( a または b ) に X 型て、はなく内蔵型 (char*, int など ) の データを渡してコールしています。 しかし一方 , X のコンストラクタ関数に は , 各種の内蔵型データを引数としてとる ものが , ちゃんと定義されています。 したがって , 上記の言語仕様 ( ARM の 1 2.3 ) によれば , 引数として渡された内蔵型 データは , コンストラクタの利用により暗 黙裡かつ自動的にクラス X 型に変換され , 無 事に関数 f ( X , X ) の実行は行なわれるはずて、 す。 ところが TurboC 十十て、は , コンパイル 後の実行プログラムが暴走するのて、はなく て , TurboC 十十コンパイラ自身が暴走 ( と いうよりハング ) するのて、す。 私は関数 f ( ) を , f(X a, X b ) ; f(char* a,Xb ) ; f(Xa,char* b) ; というように , 何通りも宣言・定義すれば いいじゃないか , と Mail しました。確かに そうすると , コンパイラの暴走という事態 はなくなり , 正常な実行プログラムがてき あがります。しかし , このように引数の型 の違いに対応して同名の関数を幾つも定義 しなければならないことは , C 十十が約束し ている言語仕様に違反しています。 つまり結局これは , くコンストラクタの 自動的コールによる自動的な型変換 > とい う機能を , TurboC 十十が正しく実装して いない , というバグなのて、す。 BorlandC 十十 は , この点どうなっているて、しようか。 私はいろいろ試してみましたが , 暗黙の コンストラクタコールによる自動的な型変 換が , 正しく行なわれるケースも結構ある のて、す。ハングする場合としない場合とて どういう違いがあるのか , それはよく分か りません。 手元にある Zortech C 十十 1.06 は , Tur bo C 十十をハングさせたソースコードに対 して , 最初「コンストラクタを探しています」 というメッセージを出し , 次いて、 , 「クラス のサイズが分かりません」というメッセージ を表示してコンパイルを拒否し , アポート しました。 これもまた , 奇々怪々て、す。 それでも C 十十は良い ! 私の C 十十使用歴はまだきわめて浅いのて、 すが , それて、も C 十十プログラミング ( OOP ) の一種独特な「快感」は十分に経験しました。 それは , ある種の機械工作ホビーの楽し さに似ています。すなわち , 諸機能をカプ セル化してしまえることに伴う快感て、す。 当たり前のように必要なデータや , 当た り前のように必要な処理を , ワンセットて クラスの中に封じ込めておくことにより , まるてオプジェクトを , オートナビゲーシ ョンを搭載したオートマチック車を運転す るときのように , ラクチンに操作てきるの て、す。ただしそれは , オプジェクト ( クラス ) の設計に , 自分なりに十分納得し , 満足し ていれば , の話て、すが。 しかし , いわゆる屋上屋を重ねた言語 ( 既 存の言語の上に接ぎ木をした言語 ) だけあっ て , そのシンタクスやセマンティクスは , かなりゴタついているようて、す。今回述べ たもの以外にもまだまだ , 不可解な裏通り や迷路に今後も遭遇することてしよう。

6. 月刊 C MAGAZINE 1991年10月号

キー入力関数・テキスト画面制御関数・カ ーソル制御関数を提供します。キー入力関数 は、指定された位置で指定された桁の入力を 受けつけ、入力テータを指定されたエリアに 格納します 0 入力データタイプもチェックし 漢字入力したいところではフロントエンドプ ロセッサを立ち上けます。カーソルは、現在 入力中の位置に表示します。テータ表示色を アトリビュートも、 PF キーガイドラインの 表示 / 非表示も設定自由、 PF キーガイドラ インには任意の文字列を任意の色で表示でき ます。ロールアップ / タウン・ BS ・ HELP ・ HOME e 十 c の特殊キーも全て取得 OK 。リ アルタイム・クロック表示関数や、ダイレク ト・キースキャン関数、 V - 日 AM のリード / ライト関数等も用意しています。 アプリケーション アプリケーション AP 生まれの AP 育ち C 言語用フログラミンク、援ツーノレ 「簡単シリーズ」十「作ろうシリース」※開発ェ数削減と標準化のために VER. 1.0 ー \ 9 , 8 側 VER. 1.0 ー Y6 , 400 V . 1.0 ーー \ 18 , 000 V . 1.0 ー - \ 22 , 000 V R. 1.0 ー - \ 28 , 000 VER. 1.0 ーー \ 22 , 000 「マウスが簡単」ワトドコ←が簡単」「ヘルプが簡単」「エテイタ入力が簡単」 V . 2.0 ーー \ 28 , 000 V R. 2.0 ー \ 18 , 000 V R. 1.0 ーー \ 28 , 000 V R. 1.0 ー \ 14 , 000 「キー入力が簡単」「印字が簡単」「ウインドウが簡単」「グラフが簡単」 テータ出力関数 ? ビットイメージ出力関数・ プリンタステータスチェック関数を提供しま す。文字列テータはもちろん、罫線テータも 同時に出力できます。文字列も罫線も、画面 のように桁・行で印字位置を決めるので桁合 わせは不要。文字列は、拡大・下線・網掛け 等の特殊効果を同時に指定可。罫線は実線 / 破線それぞれに太 / 細の計 4 種類をサポート、 ビットイメージを出力して引く罫線よりも高 速に印字します ( 社内テスト結果 : ビットイメ ージ出力で 10 分かかった表が、 6 分で出力完 了に′ ) 。また、文字と罫線を同じ桁・同じ行 に出力できるので、ムダのない帳票を設計で きます。もう、制御コード出力処理だらけの 読みにくいプログラムとはオサラバです。 各種のウインドウ制御関数と、 N88BA 日 C を基本にしたグラフィック関数を提供します。 最大 20 個のオーバーラップ・ウインドウをオ ープンできます。テキストモードとグラフィ ックモード双方向をサポート、ウインドウ内 でのキー入力関数 , テキスト画面制御関数・ カーソル制御関数もそろっています。文字列 表示関数は、ウインドウ・サイズに合わせた 自動改行機能を持っているので、プログラミ ングの手間もぐっと省けます。通常のウイン ドウに加えてメニュー選択処理のためのメニ ューウインドウや、 Y / N のキー入力を受けて 返せるメッセージウインドウもサポート。ユ ーサー・インターフェイスの優等生・ウイン ドウ処理を、メモリ操作なしのお手軽プログ ラミングで実現できます。 グラフ描画関数と、 N88 日 A 日 C を基本に したグラフィック関数を提供します。描画で きるグラフは、棒グラフ ( 縦・橫 ) 、折れ線グラ フ ( 縦・横 ) 、円グラフの計 5 種、棒グラフと 折れ線グラフは重ね合わせも可能。色やライ ンバターンの設定は自由です。描画のための テータテープルをセットして関数をコールす れば、グラフ本体はもちろん、タイトル・グ リッド・単位・凡例まで、全て関数内で計算・ 描画するので、メインプログラム側での計算 処理は何一つ必要ありません。「簡単シリーズ」 は全て併用可能ですから、「ウインドウが簡単」 と「グラフが簡単」を併用すると、グラフが出 るウインドウを画面上にオープンする、なん てことも、あっとオドロク簡単さでできてし まいます。 データテ - ? しをセットして 関数をコールするたけ 。 , = マウスドライバとのインタフェース関数を 提供します。「キー入力が簡単 V2.0 」と「ウイ ンドウが簡単 VI .0 」と併用すると、プルダウ ンメニュー関数や、ダイアログ関数 ( 文字列、 メニュ、リスト・ボタン、シートなどの豊 富なアイテム ) 、マウス情報取得関数が使用で きます。 マウスのアクションに対して各関数が返す値 として、任意の値をあらかじめ設定すること もできます。このことを上手く利用すれば、 マウスとキーボードを併用するアプリケーシ ョンを作る際、マウス用のロジックとキーホ ード用のロジックが一本化できるので、プロ グラムが長くならずに済みます。高い機能を 短いステップで、簡単シリーズの身上です。 「日 S -232C か簡単」 V . 1.0 ーー \ 15 , 000 アプリケーション・プログラムの通信用ドライバ として常駐し非同期方式で通信を行います。転送 速度は、 75 日 PS ~ 19.2 圓 BPS までをサポート。 通信部の割込機能の設定もユーザー側で変更でき、 受信レティ・送信レティ・送信バッファ工ンプテ ィの中から選択可能です。また、バラメータ等の 指定により、ドライバ部を介さす自ら相手側と通 信できる機能、割込処理の禁止 / 許可機能等も付 属。さらに、ドライバ部に送受信用パッフアが装 備されているため実行中のアプリケーション・プ ログラムか変更されてもテータ通信を継続して行 うことが可能なように設計されています。ソフト 開発の参考となるよう解り易いサンプルプログラ ムも添付。 ユーサーの側に立ったライプラリ設計、簡単シリ ーズの一買した思想です。 グラフィック画面をモノクロ 8 階調または、 カラープリンターに八一ドコピーします。領 域指定や色指定など豊富なオプションも用意。 その他、アプリケーション実行中に現在の画 面を Disk にセーフする常駐プログラムと、 セープしたテータを圧縮するプログラム、更 にそれらのテータを再表示したり、印字した りするプログラムも装備しています。 苦労して作った美しい画面の利用範囲が広が ります。 今まで苦労していた、テキスト・グラフィッ ク画面の八一ドコピーを手軽にでき、マニュ アル作成時の画面レイアウトとして幅広く利 用できます。 「簡単ツールエテイタ」 VER. 1.0 ーー \ 22 , 000 「簡単シリーズ」のテータテープルを編 集するための、専用工テイタです。 画面上で、マウス ( なくてもかまいません ) やキー ボードを使って、実行画面や帳票のイメージをワ ープロ感覚で入力すると、そのまま使えるソース コードか出力されます。これ 1 本で「キー入力 ( V 2.0 ) 」「印字 ( V2.0 ) 」「ウインドウ ( VI .0 ) 」「グラフ ( VI .0 ) 」をサポートしています。データ編集中に 擬似テータを使って表示したりできるので、テス トランの必要もなく、「簡単シリーズ」でアップし た開発効率を聞 ~ 40 % も更に引き上げることがで きます。 アプリケーションの使用方法を導く高機能 なポップアップ ( アドバイサ ) 関数を提供しま す。 100 タイトル ( 300 頁 ) のヘルプメッセージ をサポート。タイトルメニューと関連タイト ルのリンク機能を持ち、階層的ヘルプを実現 できます。工ラー・警告・ガイド・質問を出力す るメッセージ機能もあり、ヘルプ機能と連動す るとユーザーフレンドリーなアプリケーション を簡単に開発できます。 DOS 配下でヘルプメ ッセージを参照するユーティリテイや、専用工テ イタも付属。マニュアルレスな時代のアプリケー ション開発にお役に立ちます。 ( この商品をお使 い頂くときには、別売「ウインドウが簡単 V. 1.0 」 が必要です。別売「マウスか簡単Ⅵ .0 」をお使い の方には、マウス対応版のヘルプ関数も用意し ています。 ) 長めの文章をキーホードから入力する機能を 簡単に実現できるテキストエテイタ関数を提供 します。アプリケーションでコメントを入力し たり、通信ソフトで手紙を入力したりするため のエテイタ入力機能を関数ひとつで実現できま す。最 50 字 x 圓行のテキストエテイタが、 同時に 20 個作成できます ( 但し、メモリに依存し ます ) 。日本語対応、スクロール、行単位のカッ ト & ペーストをサホート。その他、本格的な工 テイタの開発を支援する関数群を豊富に揃えて います。「キー入力か簡単」にエテイタ入力機能 を拡張した関数も用意しました。「キー入力が 簡単」の手軽さでエテイタ入力機能を実現でき ます。 ( この商品をお使し順くときには、別売 ー入力か簡単 V. 2.0 」が必要です。 ) 「ファイーレ・エテイタ」 VER. 1.0 ー \ 18 , 000 ソフトウェア・システムを開発する際のデータ・ファイル設計を支援するエテイタ。テータファイル のコードサイズ、各データ項目のタイプ・長さ・名称等を入力すると、定義テープルがソースコード として出力され、さらにファイル・レイアウトの印字も可能。 「作ろう」シリーズ ( C 言語の教育用パッケージ ) ・「住所第を作ろう」・ ・「スケジュール表を作ろう」・ ・「こづかい帳を作ろう」・ ・「らくかき帳を作ろう」・ 、 VER. 1.0 ー \ 7 , 2 冊 ・・・ VER. 1.0 ー \ 8 , 600 ロステム供通 ) ・本体 : PC - 01 ( XA / XL / XL2 / 日 L 八イレソ / を除く ) ・ OS : MS-DOS V3.1 / 3.3 ( F ・ PMS - DOS に添付のもの ) ・プリンタ : NEC PC - P 日 1 系、 PC - P 日 2 田系 ・コンバイラ : Mic 「 osoft-C/Lattice-C/Tu 「 bO-C/Quick-C ( 簡単シリーズは、御使用のコンバイラを指定して下さい。 ) ・メティア : 5 ・ 2HD / 3.5 ・ 2HD ( 御希望のメティアを指定して下さい。 ) ※全商品プロテワトなし、サンプ ル付きでヴ。 ※サンプルソフトを実費 ( \ 1.58 ) で販売中 / ※全商品ロイヤリティフリー ※記載されている内容は、将来予告なしに変更することがあります※お問合せはお近くのマイコン・ショップか、私どもへどうぞ ※ MS-DOS 、 M 050 代ー C 、 Quick-C は、米国 Mic 「 osoft 社の 登録商標です。 ※ Lattice-C は、米国 La 社 ice 社の登録商標です . ※ Turbo-C は、米国 BorIand ⅲ te 「 nation 社の登録商標です 〒 790 愛媛県松山市北藤原町 1 ー 26 TEL : ( 0899 ) 3 ト 2886 FAX : ( 99 ) 41 ー 0336 ・株式 会社 工ーステ応工ュニ鱸ユ く資料請求番号 183 〉

7. 月刊 C MAGAZINE 1991年10月号

アルゴリズム・テータ構造入門 使うようにしたのが , Fig. 2 (b) て、す。 ことにすれば , 大きさ x の場合の処理を , こて、は , 大きさ 5 のときの解を得るのに この先 , 同様にして , 品物 2 , 3 , 4 を追加 大きさ 2 の場合の解を利用しました。同様に する時点て、 , 大きさ 0 ~ x ー 1 のすべてについ していきますが , この過程を Fig. 2(c)—(e) て品物 1 も考慮した値がテープルにセットさ して , 大きさ 5 のときの解は , 大きさ 8 のと に示します。そして , 品物 0 ~ 4 まて、のすべ れていることになるからて、す。 きの解を求めるのに利用されます。つまり , てを勘定に入れて得られた Fig. 2 ( e ) のナッ たとえば , 大きさ 5 のナッブザックについ 次のようになります。 ブザックの大きさが 16 のところを見れば , 品物 1 を使わないときの価値の最大値 て考えてみます。品物 0 のみを使った場合 , 大きさ 16 のナッブザックに入れることがて、 大きさ 5 のナッブザックには価値 4 の品物を きる価値の合計の最大値がわかります。 Fi 品物 1 を使ったときの価値の最大値 入れることがて、きます (Fig. 3 (a) ) 。 g. 2 ( e ) から , トータルて、 25 の価値を持つ品 大きさ 5 のナッブザックに入る価値 て、 , 品物 1 を使った場合にどうなるかを検討 物を入れられることがわかります。 してみましよう。品物 1 の大きさは 3 なのて、 , の最大値 + 品物 1 の価値 品物 1 を使った場合の価値の最大限は , 大きさ 2 のナッブザックに入る価値の最 10 品物 1 も使った場合には , 大きさ 8 のナップ 大値 + 品物 1 の価値 こまて、て、大きさが 16 のナッブザ ザックには最大て、 10 の価値の品物を入れら さて , ックに , 最大て、 25 の価値を持つ品物を入れ れることがわかります。 られることがわかりました。しかしこれだ こて、 , 大きさ 8 のナッブザックには品物 になります。したがって , 品物 1 を使うほう けて、は「どの品物を何個入れたか」という内 1 がふたっ含まれていることに注目してくだ が , 合計て、得られる価値が大きくなります。 さい。ひとつは大きさ 5 のナッブザックにご 訳がわかりません。 て、すから , テープルに ⅱロ 先ほどもちょっと触れましたが , 「最後に め込む時点て、 , もうひとつは大きさ 8 のナッ ナッブザックの大きさ 入れた品物」というフィールドをもとにし ブザックに詰め込む時点て、品物 1 が使われて 価値の合計 て , どの品物を何個入れたかを知ることが います。大きさ 0 ~ 16 まて、のすべてのナップ 最後に入れた品物 ザックについて , ( 品物 0 のほかに ) 品物 1 も て、きます。 というデータを記録しておきます。 Fig. 4 品物の内訳を調べる ( 1 ) 大きさが 16 のとき 品物 4 ( 大きさ 9 ) 品物 3 ( 大きさ 7 ) 9 1 0 1 1 1 2 1 3 1 4 1 5 ナップサックの大きさ ◎ 7 8 5 6 1 2 3 4 1 4 1 5 1 6 1 8 1 9 22 22 25 1 1 価値の合計 4 4 7 8 1 1 0 2 0 4 3 4 3 3 3 3 ④ 1 ③ 最後に入れた品物 2 1 0 2 ー 1 0 8 品物の内訳 0 1 上 ( 2 ) 大きさが 1 5 のとき 品物 3 ( 大きさ 7 ) 品物 2 ( 大きさ 5 ) 品物 1 ( 大きさ 3 ) 9 1 0 1 1 1 2 1 3 1 4 ① 16 5 6 7 ⑧ 2 ③ ナッブザックの大きさ ◎ 4 1 1 4 1 5 1 6 1 8 1 9 22 22 25 価値の合計 2 4 4 7 8 1 1 1 1 0 0 4 3 4 3 3 3 ③ 4 2 1 3 ② 0 ① 最後に入れた品物 0 ー 1 アルゴリズムとデータ構造入門 87

8. 月刊 C MAGAZINE 1991年10月号

特集 PC -9801 版 CompiIer 択て、きる。これについても同様に , 実効ア ドレスのサイズをデフォルトとは別のサイ ズに指定する前置バイト 0X67 が存在する。 このような妙な方法がとられたのは , 80 86 のアドレッシングモードにリザープが少 なく , 通常の方法て、は互換性を保ったまま て、 32 ビットへの拡張がて、きなかったためて、 ある。 本来 8086 / 80286 用に作られたコードの場 合はデフォルトビットを 0 にすることになる が , はじめから 80386 を想定してコードを生 成する場合は , デフォルトビットを 1 にし て , サイズ指定前置バイトがないときには , オペランドやアドレスが 32 ビットとなるよ うにしたほうが , 一般にコードが短くなる。 そのため , djgcc の出力するコードは , デ フォルトビットが 1 の状態て、走る。したがっ て , djgcc て、は , short ( 16 ビット ) よりも , i nt および long ( どちらも 32 ビット ) のデータの アクセスのほうが , 一般にコードがコンノヾ クトになる。もしデータのサイズ ( コード中 の即値オペランドを含む ) が少々増えても , オペコードを短くしたい場合には , short よ りも int を使ったほうがよい ただし , short を long に変えることによっ て使用メモリ量が増え , 結果的に速度が落 ちる可能性はある。大きな配列などは , デ ータが 16 ビットに収まることがわかってい れば , short て、宣言したほうがよいといえ また , 今まて、のリアルモードのコンパイ ラては 32 ビットの幅が必要なデータを long て、宣言していたが , djgcc ては int が 32 ビット になったのてその必要はなくなった。実際 , GNU などのワークステーション用のソフト ウェアては , int の幅が 32 ビット以上あるこ とを仮定したコードが書かれていることも 多い。しかし , リアルモードのコンパイラ に通す可能性を考慮すると , 自分て、作るソ フトウェアては , 32 ビットてなければなら ないデータは , はっきり long て宣言してお いたほうがよい 8 ビットのデータに関しては , djgcc かリア ルモードのコンパイラかにかかわらす , ch ar がサイズの点て、も速度の点て、も有利てあ 以上のように考えると , djgcc だけて、なく 従来のリアルモードのコンパイラて、もコン パイルする可能性があるプログラムは , Ta ble 3 のような方針て、データ型を宣言すれば よいだろう。 ビット数が 64 ビット必要なデータは , djg cc て、は longlong という型て、宣言て、きる。た だし , 80386 には 64 ビットの演算命令がない のて、 , 実際の計算は 32 ビットの計算を複数 回行うことによって実行される。とはいっ ても , その演算ルーチンはアセンプリ言語 て、書かれているのて、 , C 言語て、 int の演算を組 み合わせた演算ルーチンを書くよりはずっ と速い この longlong も便利に使える場合がある が , ポータビリティを重視する場合には , 後述するように , 条件コンパイルをしたほ うがよい いる領域を差し引くと , 640K バイト以下に はこれからさらに ROM や VRAM に使われて きる最大メモリは IM バイトて、ある。実際に リアルモードて、は , 通常の方法て、利用て、 IM バイトバリアを忘れよう 64K バイトバリア・ ・ EMS メモリ ・バンク切り換えメモリ ・プログラムのオーバレイ この限界を超えるために なってしまう。 を必要とするプログラムを動かすことがて て , 実装されている実メモリ以上のメモリ さらに , g 。 32 の仮想記憶機構を利用し 有効に活用て、きる。 がて、きるのて、 , IM バイト以上の実メモリを ットアドレッシングによるメモリアクセス それに対して , g032 を使うと完全な 32 ビ 実行速度の低下にもつながる欠点がある。 ログラム作成の手間が大きく増えるうえ , といった手法が取られてきたが , どれもプ きる。 また , 80386 て、はセグメンテーション機構 の最大の問題て、あったセグメントの 64K バイ ト制限がなくなっている。これによって , セグメントの変更を必要以上に頻繁に行う ことがなくなったため , 通常のアプリケー ションてはセグメントの存在を意識しなく てもよくなった。 ① ② ③ ④ ⑤ このため , 今まて、は , ほかのデータとともにデータセグメン ごく小さな配 トに入れられるような , MS メモリ , UMB などに置いて , EMM 物理メモリの大きさ以内の配列 → huge;* インタ IM バイト以内のメモリに収まる配列 ar ポインタ 64K バイト以内の大きさの配列 列→ near;* インタ コール , XMM コールなどを発行して参 昭 物理メモリに入りきれない配列→デ イスクの読み書きを含めた独自の管理 ルーチンを自作 という複雑な使い分けが必要て、あったが , 特集一 98 田版 GNU C Compiler 69 る。 に書く必要がなくなった , ということてあ にデータが入りきれない場合の処理を特別 イト以内の領域に収めたり , メインメモリ して配列を 64K バイト以内 , あるいは IM バ まう。あくまても , 今まてのように無理を メモリを浪費しすぎると速度が低下してし あるわけてはないのて , 仮想記憶に頼って もちろん , 実際の物理メモリは無尽蔵に する。 ったときと比べて , 実行速度が大きく向上 インタ , 独自の配列管理ルーチンなどを使 が大きく上がるほか , far;* インタ ,huge;* これによって , ソフトウェアの開発効率 通常のポインタを使って実現て、きる。 も , 仮想記憶機構を利用することによって , ンタて扱うことがてきる。また⑤について djgcc を使えば , ① ~ ④をすべて単一のポイ メモリ参照のオフセットが 32 ビットて、ある

9. 月刊 C MAGAZINE 1991年10月号

統合開発環境を実現 ソフトの道具箱 4 他機種の開発かすべて PC -9800 シリーズで OK / C 言語関数ライプラリ・シリーズ ロライプラリ関数のソースコードーー完全公開 きわめて移植性の高いコードなので , コンバイラのバージョン・アップへの対応や , 異なるコンバイラ への移植作業はこ自身の手で容易に実行可能 ロ組み込みロイヤリティー 無料 通常のアプリケーション・プログラムへの組み込みに対するロイヤリティーは一切不要 C/Window * 印は近日対応予定。 C/BCD C/Dbase C/Graph C/Print ISAM ファイルのキー値としてそのまま使用可能。 能。また , BCD 型データは C / Dbase にてサポートされる だが , double への型変換を行えば科学技術計算も可 実現するための関数ライプラリ。サポー N よ四則演算のみ お金の計算のように高い演算精度が要求さ処理を 植可能。 れたアプリケーションはそのままソースコード・レベルで移 ートされているので , あらかじめ排他制御を考慮に作成さ 排他制御を行う関数は , MS ー DOS 版にも疑似的にナ レコードの排他制御およびファイルの排他制御は完璧。 ■ OS / 2 , LJN Ⅸ版はマルチ・プロセス対応 なデータ・べース ( SQL , カード型等 ) の構築が可能。 の構築に最適。 Data 関数およこ Btree 関数は汎用的 別。 ISAM 関数は一般的な定型業務用データ・べース ISAM 関数 , Data 関数 , Btree 関数の 3 グルーズこ大 的データ・べース構築用関数ライフラリ。提供関数群は 検索ロジックに正当な B tree アルゴリズムを採用 , 本格 13 種類の多彩なグラフをサポート。 ・多彩なグラフ種類 フごとに可能。 より , キャンバスの枠 , 背景色などきめ細かい変更がグラ メント , ラベル , 凡例 ) の属性の既定値を変更することに 単に作成可能。また , 各図表要素 ( キャンバみ軸 , セグ 1 つあるいは複数のデータ系列から 13 種類の図表を簡 常駐させるので , プログラムの変更なしに異機種パソコ プリンタの機種依存部分はすべて BIOS としてシステムに ・異機種パソコン / プリンタに対応 タでもべージプリンタ感覚でレイアウト可能。 ックス印字ツール , C/Window と完全連動。ラインプ丿ン 仮想ページ・プリンタ方式を採用したテキスト十グラフィ のまま異機種で動作可能。 PC ー 9801 で開発されたアプリケーション・プログラムがそ ・異機種の画面制御方式の相違をすべて吸収 が容易に実現可能。 ラフィックスもサポートしているので , きめ細かな画面設計 チウインドウ・アプリケーション開発用関数ライプラリ。グ 仮想画面い厖・ミートした本格的オーバーラップ型マル ・仮想画面の概念を導入 巨大な仮想画面カ殿定可能。仮想画面内 : 示しご 文字 , グラフィックは任意部分をビューに投影。 ・多彩なウインドウ操作 拡大縮小 , 移動 , 表示 ON/OFF, 枠タイトル , 色 , タイ ルバターン , 重なり順序の変更。 ■強力なテキスト操作処理 低レベルな入出力カ高機能なスクリーンエディッはで ・価格 : \ 33 , 000 ( 本体価格 \ 32 , 039 ) 図形表示 , 塗りつぶし全面 / 部分画面コピーをサポ ■豊富なグラフィック処理機能 種々の文字サイズ , 文字属性 , 網掛けをサポート。 ・テキスト装飾機能 ン / プリンタで出力が可能。 ・メモリ効率のよいグラフィック管理 サポート。 sprintf ( ) のよプょ手軽さで BCD 型のデータを編集可能。 ・豊富な編集機能 ルのキー値としてそのまま使用可能。 BCD 型データは C / Dbase でサポートさオ ISAM ファイ 用可能 ・ BCD 型テータは旧 AM ファイルの←値に使 すべて C 言語で記述 , 異 OS への移植が容易。 ■異 OS への移植か簡単 応 OS / 対応言語 : MS-DOS(Ver. 3.0 以上 ), Y95 , 146 ) , 対応機種 : 一般の MS ー DOS マシン , 対 ・ MS ー DOS 版・・・価格 : \ 98 , 000 ( 本体価格 データ量が多くなるほど , 威力を発揮。 ・高速な検索スピード リテイだけでなく関数としても提供。 ファイルの整合性検証およびに修復の機能はユーティ ・充実したファイルの破壊対策機能 存在するので , 必要に応じて復旧可能。 削除レコードはファイルのパージを行うまでファイル内に ・削除レコードの復旧機能 スも可能。 キー値によるアクセスに加えて , レコード番号によるアクセ ■豊富な検索機能 ー 2 8 6 / 2 8 6 L , F M ー R 5 0 * / 6 0 * / 7 0 * , J ー ・対応機種 : PC ー 9800 シリーズ ( LT , XA は除く ) , PC ・価格 : Y33 , 000 ( 本体価格 \ 32 , 039 ) の太さ , 色等をサポート。 多彩な枠・線・マーカ形状 , 文字サイズ , 背景模様 , 線 ・多彩な図表要素 更により , きめ細かいグラフ作成が容易。 キャンバス , セグメント , ラベル , 凡例の各構成要素の変 ・きめ細かい変更か可能 ・対応機種 : PC ー 9800 シリーズ ( LT , XA は除く ) , pc ・価格 : ¥ 66 , 000 ( 本体価格 Y64 , 078 ) ・対応機種 : PC ー 9800 シリーズ ( LT , XA は除く ) , PC ー 2 8 6 / 2 8 6 L , F M ー R 5 0 / 6 0 / 7 0 , J ー 3100(Dynabook) シリーズ , AX パソコン , DOS/V パソ コン ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C ( Ver. 1.0 以上 ) , Turbo c ( ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) ー 2 8 6 / 2 8 6 L , F M ー R 5 0 * / 6 0 * / 7 0 * , J ー 3100(Dynabook) シリーズ * , AX パソコン * , DOS/V パ ソコン * ・対応プリンタ : PC-PR201 系 , ESC-P 系 * ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C ( Ver. 1.0 以上 ) , Turbo c ( ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) 3100(Dynabook) シリーズ * , AX パソコン * , DOS/V パ ソコン * ※ C/Window(Ver. 2.0 以上 ) が動作可能な機種 ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C ( Ver. 1.0 以上 ) , Turbo C ( Ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) DOS/V,MS-C(Ver. 5 . 1 以上 ),Quick C (Ver. 1.0 以上 ) , Turbo C ( ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) ・ MS ー W ⅲ dows 版 * ・・・価格 : Y168 , 000 ( 本体価格 \ 163 , 107 ) , 対応機種 : 一般の MS-Windows マシ ン , 対応 OS / 対応言語 : MS-Windows,MS-C ( Ver. 5.1 以上 ) ・ OS / 2 版 * ・・・価格 : \ 168 , 000 ( 本体価格 \ 163 , 107 ) , 対応機種 : 一般の OS / 2 マシン , 対応 OS / 対応言語 : OS / 2 , MS-C(Ver. 5.1 以上 ) ・ UNIX 版・・・価格は応談 , 対応機種 : 一般の UNIX マシン , 対応 OS / 対応言語 : UNIX, 標準の ・価格 : Y33 , 000 ( 本体価格 \ 32 , 039 ) ・対応機種 : 一般の MS ー DOS マシン ( 他の OS でも c 言語ならば対応 ) ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C ( Ver. 1.0 以上 ) , Turbo C ( ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) ※上記機種以外のパソコンへの移植も以下の条件にてこ相談に応じます・・・・・・作業期間 = 4 ~ 8 週間 , 受注価格 = 応談 , 受注条件 = 作業期間中パソコン貸与 MS-DOS. MS-Windows,MS-C,Quick C は米国 Microsoft 社の商標です。 Tu 「 bo C は米国 Borland lnternational 社の商標です 0Lattice C は米国 La Ⅲ ce 社の商標です。 UN Ⅸは米国 AT & T 社の商標で ーお問い合わせ・ご注文は直接当社まで ロ QL 育盟元ツールクラフト 〒 182 東京都調布市国領町 2 ー 3 ー 15 センチュリー K & AI 102 TEL. 0424 ( 89 ) 0202 FAX. 0424 ( 89 ) 4888 く資料請求番号 180 〉

10. 月刊 C MAGAZINE 1991年10月号

プログラミング添削 アドバイサー / 柴田望洋 第 14 回 英和辞典プログラム ( 2 ) 英和辞典プログラム ( 英単語の登録や保守など ) を題材に添削するシリーズの 2 回目です。今回はスモールメモリモテルで M S- DOS 上のすべての空きメ モリを配列として使う方法を示します。 C MAGA = ナールー chareng [ENGL]; / * 15 文字 * / charjpn [JPNL] ; / * 65 文字 * / struct dic men[SlZE]; / * 700 個 * / 15 バイトの日本語と 65 バイトの英語からな る構造体の 700 個の配列となっています ( Fi g. 1 ) 。すなわち ( 15 十 65 ) X700 = 56 , 000 バイ トを固定的な配列領域として確保している わけて、す。 今回はいよいよメモリ不足対策について 考えていきます。 ■単語を格納するテータ構造 作者 . 田中光一 ( 藤沢市 ) 田中さんのプログラムが単語をどのよう BAS ℃で作成した英単語を登録・保守 に格納しているのかを見ましよう。次のよ する【英和辞典】を C に移植。 うに宣言・定義しています。 8086 特有の「 64K バイトの壁 ( セグメント struct dic { の制約 ) 」につまづく。 Fig. 1 辞書の格納状態 田中さんの作成したプログラムは『英和 辞典』のシステムて、あり , 単語登録 , 検索 , 一覧表出力 ( 画面 ) の機能を持ちます。田中 さんの質問は , 「 64K バイトの制約」のために , 700 単語く らいしか取り扱うことができない。 D モデ ルや L モデルで試したがうまくいかないよ うである。どうすればよいか」 ということて、した。 このプログラムはオンメモリて、実行する 必要性があるとのことてす。したがって , すべてのデータを配列上に格納し , 仮想記 憶などのテクニックは使用しないという方 針てプログラムします。 前回はメモリ不足とは関係のない問題点 てある , プログラミングスタイルや汎用性 などについて添削しました。 ■添削のポイント 今月のプロクラムプロフィール 日本語 men[O] 英語 men[l] menC2] 65 プログラミング添削 147