言語 - みる会図書館


検索対象: 月刊 C MAGAZINE 1993年12月号
95件見つかりました。

1. 月刊 C MAGAZINE 1993年12月号

0 人産 ロロ 今回は配列の話をします。配列は , イ メージ的に変数か団地に住んでいるも のなのです。変数が団地住まいとは , どういうことなのでしようか。 ー「団地住まいの変数たち」 = , , 第①回 結城浩 り返しを行う構文て、すが , for 文のような「初 ましよう。この三つの点数の平均点を計算 じめに 期化」「条件」「次の一歩」という部分はありま するプログラムはたとえば List 1 のようにな ります ( 実行結果は Fig. 1)0 せん。 早いものて、 , このプログラミングレッス List 1 を見ると , 7 行目て、国語・数学・英 のポイント ンも 9 回目を迎えました。覚えていますか , 語の点数用に変数を三つ定義 , 8 行目て、平均 4 月号の特集「ゼロから学ぶ C 言語入門」のこ 点用の変数をひとつ定義しています。それ とを。そこて℃言語というものに触れ , 自分 今月は「団地住まいの変数たち」と題して から , 10 ~ 13 行目て、それぞれの点数を代入 はいれつ て、プログラムを初めて組んだ方も多いと田 し , そして 14 行目て、平均点を計算していま 配列について説明します。 います。 9 か月が過ぎて , どうて、したか。「や 言て、いえば変数に番号をつ 配列とは , す。そして結果を参照して表示しています。 つばり難しいなあ」「けっこうワカってきた けたものて、す。変数の一種て、すから , まず printf ( " 平均点は %. If 点 *n" よ」など , いろいろな感想を持たれていると は変数についての復習から始めましよう。 heikin) ・ 思います。ぜひ , ご思見やご感想 , ご質間 変数を復習した後て、 , そこて、使った例題を この %. If というのは , 浮動小数点を小数点 をお送りください。 以下 1 桁だけ表示する形式て、す。 元に配列について説明するのて、 , 「変数なん かもう知っているよ」というあなたも , 先を 定義・代入・参照を思い出しましたか。 ューコーナー 急がずじっくり読んて、くださいね。 それて、はいよいよ配列の話に入りましよう。 先月のレッスンて、は「 while 文」について学 びました。 配列の定義 変数の復習 変数は , 名前のついた箱のようなものて、 いま国語・数学・英語の三つの教科の点 す。そして , その箱の中には数や文字を入 数のために三つの変数を別々に定義しまし れておくことがて、きるのて、した。以前この た。けれどもこの三つの変数にはすべて「点 レッスンて、学んだ「変数の三つの重要ポイン 数を表す」という共通の目的がありますね。 ト」を覚えていますか ? C 言語には , 共通の目的を持っ複数の変数に ・変数を作る ( 定義 ) 番号をつけてまとめるという機構が用意さ while 文は「条件」が満たす間だけ処理を繰 ・変数に入れる ( 代入 ) れています。それが , 今回勉強する配列な ・変数の中身を見る ( 参照 ) り返して行い , 条件が満たさなくなったと のて、す。 ころて、繰り返しを終了します。初めから「条 たとえば , 国語・数学・英語の試験があ まずは , プログラムを見ましよう。 List 2 件」を満たさなければ , 「繰り返す処理」は一 ったとします。私の国語・数学・英語の点 は List 1 を配列を使って書き直したものて、 度も行われません。 while 文は for 文と同じ繰 数がそれぞれ 65 点 , 90 点 , 75 点だったとし す。じっと見て , 何がどうなっているのか 72 C MAGAZINE 1993 12 while ( 条件 ) { 繰り返す処理

2. 月刊 C MAGAZINE 1993年12月号

C 言語プロクラミンクレッスン・ Fig. 1 List 1 の実行結果 3.0 ; 19 : ) 19 : ) Fig. 2 配列の定義 A> LCC い STI. C 11d @link. i A> LISTI 国語は 65 点 数学は 90 点 英語は 75 点 平均点は 76.7 点 凵 STI . C をコンバイル LISTI . EXE を実行 LISTI . EXE の実行結果 C のプログラム int ten [ 3 ] : 二つ用意され , それに ten という名前がつけ という配列の定義を行うと , int 型の変数が int ten[3] ; 配列の大きさは必ず定数になります。 ことを配列の大きさと呼ぶこともあります。 トなどと呼ばれます。配列の要素の個数の す。これは大カッコ , 角カッコ , プラケッ 要素の個数を括っているのはゞ [ クと、、 ] クて、 ig. 2 ) 。 て、学んだひとつの変数に相当するのて、す ( F す。そして , そのひとつの要素が , いまま のひとつひとつの住居のようなものなのて、 ようなもの , そして配列の要素は団地の中 った団地のようなものて、す。配列は団地の 0 あなたのイメージ 3 個 tenC2] ten[O] ten[l] ↑ ↑ ↑ を調べてみましよう。 配列の例 : 配列を定義する 素の個数て、す。配列は何個かの要素が集ま 次に書かれている [ 3 ] の部分は配列の要 す。 ten という名前の配列を定義しているわけて、 次に書かれている ten は配列の名前て、す。 義してます。 型を持ちます。ここて、は整数型の配列を定 します。配列は変数の一種て、すから , 必ず 初めに書かれている int は , 配列の型を表 int ten[3] ; て、配列を定義しています。 ま iList 2 の 7 行目を見てください 国語・数学・英語の平均点を計算する このひとつひとつが int 型の変数となる 数を代入してみましよう。 の要素のそれぞれに国語・数学・英語の点 配列 tenC3] には三つの要素があります。そ 今度は配列への代入を考えてみましよう。 配列の例 : 配列に代入する これが , 配列の定義て、す。 ten[0] ten[l] ten[2] 90 ; 75 ; られるのて、す。 この配列の大きさは 3 て、す。 日本語て、書くと , それぞれ , ・ 0 番目の要素に 65 を代入 ・ 1 番目の要素に 90 を代入 ・ 2 番目の要素に 75 を代入 という意味になります。 2 : 4 : 7 : 8 : 9 : 12 : 14 : 15 : 16 : 1 : #include く stdio. h> 3 : void main(void); 5 : void main(void) int kokugo, List 1 を配列を使って書く List float heikin; int tenC3] ; 5 : void main(void) 3 : void main(void); 1 : #include く stdiO. h> suugaku, eigo = 75 ; suugaku = 90 : kokugo = 65 ; float heikin; eigo; (kokugo + suugaku + eigo) / printf(" 国語は Xd 点 \ 心 , kokugo) ; printf( ”数学は Xd 点 *n", suugaku) : printf( ”英語は Xd 点 \ n ” , eigo) : printf( ”平均点は %. If 点 %n", heikin); heikin 2 : 4 : 7 : 8 : 9 : 11 : 12 : 14 : 15 : 17 : tenC0] = tenC1] ten[2] = heikin C 言語入門講座 73 printf(" 平均点は %. If 点 *n", heikin) : printf(" 英語は Xd 点 \ n ” , tenC2]) ; printf( ”数学は Xd 点 \ n ” , tenCI]) : printf(" 国語は Xd 点 \ n ” , ten[0]) ; = (tenC0] + tenC1] + tenC2]) / 3.0 ; = 90 :

3. 月刊 C MAGAZINE 1993年12月号

りかし古くからある言葉て、す。「ビジュアル」 ま初めて耳にする」という人も多いのて、はな グというのは , この無理が形をとって現れ にプログラミングがて、きないものかという いて、しようか。はっきりいって , どれひと た姿なんじゃないて、しようか。 っとっても決定打にはなっていません。 模索は , ずっと続けられてきました。 本来ならば , プログラマがダイレクトに ・司のて、す。 要は , 視覚的要素を取り入れて , プログ どうも , 「パッとしない・ 機械語を記述するか , さもなくばコンヒ。ュ 一方 , DOS 版のコンパイラの Windows 版 ラミングを簡単にしようという試みの総称 ータが人の心を読んて、くれるか , そのどち て、す。何しろ総称て、あるだけに , ビジュア らかて、なければ , プログラマとコンヒ。ュー (Turbo C 十十 , QuickC, Turbo PascaI な ど ) も出るには出ましたが , むしろ , すて、に ルプログラミングを標榜するものはピンか タの完全な意志疎通は果たせぬはず。それ ぼうばく DOS 上て、完成に近づいていたその統合環境 らキリまてあるし , それだけ全体像も茫漠 て、こそ , 完全なプログラミングというもの て、はあるまいか。とまあ , 理想は理想とし を , 忠実に Windows 上に移植しただけて、 , としています。 「模索」とはいいましたが , これは絶対に 基本的な開発手順としては , 「 DOS 上て、やっ て , 「その中間て、いこうやないか」という妥 必要な方向性なのて、す。 協案。それが言語処理系の考え方て、す。 ても大差ない」感じて、した。 「ビジュアル」なプログラミングとはいっ て、 , 結局 , プログラマは翻訳ばっかりや それだけ違和感なく , すんなりと DOS か たい何かを語る前に , そもそも「プログラミ ら移行て、きたのかもしれませんが , どうも っています。ソースを書くに先だって , フ ング」とは何なのか , 考えてみましよう。 DOS からの持ち上がりだと「 Windows 上の開 ローチャートを書いてみたり , 数式を書い 発」という実感に欠けるところがあります。 「ソフトがなければただの箱」て、あるコン てみたりして , それをおもむろに C 言語に翻 それに , 本質的につきまとう「たいへんさ」 ヒ。ュータに「ソフト」をもたらす作業を , 「プ 訳していくと。何しろ妥協を強いられてい ログラミング」と呼びます。ただの箱が , 何 は , ちっとも改善されていないのて、す。 るのて、すから , なんらかの犠牲を払うのが かの役に立つ箱になるのて、あれば , そのプ 礼儀というものて、す。 Vi 彼ら ロセスは間わないはずて、す。 ジュアル要素 ところが , 現在のところ , プログラミン グというと , なんとなく「エデイタて、ソース , 彗星のごとく登場したのが , Vi をコーディングし , 言語処理系にかける」と sual Basic て、す。 一隹かに場所を説明するとき , ロて、百万回 いうよりも , まず地図を描いてやったほう そのときを境に , 様相はガラリと一変し いう姿が思い浮かびます。コンパイラだろ ました。ついに決定打が登場したのかもし が早いものて、す。ロて、いおうと思えばいえ うがインタブリタだろうが , はたまたアセ ンプラだろうが , コンヒ。ュータに対する指 れません。 るかもしれませんが , そうするためには , 示を「言語」を使って行おうというスタンス VisuaI Basic ( 以下 (B) は大成功を収め , お互いにバカバカしい労力を費やさないと 鉱脈を掘り当てたことに気づいたのだろう て、あることに変わりはありません。 いけません。 日本語のような自然言語の使い手として , Microsoft は , VB をクリーンナップを打て 理系という妥協案 る主力製品として格上げする一方 , 本来の 私たちは誰もが , そのことを承知していま ロロ 基幹製品て、ある C/C 十十にまて、「 VisuaI 」と名 す。何か物事を人に伝えたいときに , 言葉 にとらわれないて、 , 視覚に訴えたほうが有 前を冠し , 「 VisuaI C 十十」としてリリース たとえば C に 1 ロロ 0 効な場合は往々にしてあります。それこそ , 考えてみれば , これほど中ぶらりんなも しました。抜け目のない商売根性かもしれ のが世の中にあるて、しようか。 目がロ以上にものをいうことだってあるわ ませんが , 鉱脈を掘り当てたことにいち早 けて、す。 く気づき , 機を逃さぬセンスを持ち合わせ プログラマにとってもコンヒ。ュータにと っても , C 言語は外国語て、す。プログラマ 厳密にいうと , 地図も表情も , 記号の組 ていることはよしとしたいと思います。 は , 長い時間をかけ , やっとの思いて℃言語 み合わせて、すから , 大きな意味て、は「言語」 いわく , ビシュアルプログラミング。 の一種だと考えられます。ただ , それは「ロ」 を習得するわけだし , コンヒ。ュータはコン ビ守ュアルな ヒ。ュータて、 , コンパイラが通訳に立ってや というデバイスを使って伝達する言語て、は プログラミングというもの らなければ一言も理解て、きません。しかも , というだけのことて、す。 この通訳たるや , ときどき大ポカをやらか これは自然言語の話て、すが , 同じような ことがプログラミング言語にもあてはまり してくれるのて、す。 「プラミング」って何だ ? エジプト人とフランス人がエスペラント ます。 C のような言語は , キーポードとし 、フ 語て、話しているみたいなもんて、す。双方に デバイスに縛られ , ANSI 文字セットとし 、フ 「ビジュアルプログラミング」自体は , 音韻に拘束されています。本来 , それにと わ 無理が出るに決まっています。ソフトのバ 34 C MAGAZINE 1993 12

4. 月刊 C MAGAZINE 1993年12月号

Wi11dows アプリ . PART 2 で V C 十十 , PART 3 で VB, ・グとは , 違うものが見えてきたはずだ。本 取り得るものにリニューアルされているし , います。データ型は , C 言語などと互換性を 「 VisuaI C 十十」という製品がリリースさ つかない , 実用的な言語に変身をとげては ほどこして , かっての BASIC とは似ても似 QuickBasic 以来 , Microsoft が大拡張を ります。 の売りて、あると同時に , 最大の弱点て、もあ つつきやすい印象を与える面て、 , VB の最大 言語が BASIC て、あることは , 初心者にと B SIC の星の下に生まれて 議に純粋な世界がそこにあります。 じくっている」としかいいようのない , 不思 もないのて、す。やはり , 「コントロールをい て , 画面設計にうつつを抜かしているのて、 グ」とは縁薄いところにあります。かといっ るという行為は , 極端にいうと「コーディン つまるところ , VB て、プログラミングをす を食いますしね。 リソースのバインドだって , なかなか時間 ルに延々と待たされたりするところて、す。 所て、す。これが C / C 十十だと , 再コンパイ るのが , インタブリタて、ある VB の最大の長 Fig. 30 案外たいへん・・・ ボタンたたき : Command 1 Command1 Com飛咩1 Co mmand 1 文字列処理にいたっては , 正規表現処理ま て、演算子として組み込まれているのて、すか ら , 凄まじいものがあります。 とはいうものの , こと Windows を扱うた めの言語として , 本来的に BASIC はあまり 適した言語て、はないようなのて、す。「ちょっ ? 」という印象を , やっ と , 無理してなし ばり受けてしまうのて、す。 少しなりとも複雑なことをしようと志し れる , と初めに聞いたとき , まるて、別なも のて、す。 たとき , たちまち壁にぶち当たってしまう のを想像して , ぬか喜びしてしまった筆者 て、す。 もちろんそれは , 早合点にすぎなかった わけて、すが・・・ その早合点が正夢になっ てくれれば , いうことないんて、すよね。 それて、も VB は , W ⅲ dows にかぎらず , G UI プラットホーム上の開発ツールとして , 最大級のヒットて、あることは間違いありま せん。 VB をぜひとも Macintosh に移植して ほしいという要望が , ひっきりなしに寄せ られていると聞きます。あのハイバーカー ドを擁する Mac に というのて、すからね。 いやはや。 VisuaIBasic と C/C 十十連携のめ それそれの機能を使用し , Windows アプ リケーション作成してきた。単に C の処理 系十 SDK で行う Windows プログラミン 章では , さらに一歩進んで , 「もっと楽に高 : 度なことを」をテーマに両処理系の連係を考 え , Visua ツリーズを考える。 新星合体だ ! VB の必殺武器コントロールも , いかんせ ん万能の救世主にはなりえません。コント ロールにはコントロールの限界があるし , それに VB は言語処理系として ,BASIC とい う大きな制約も抱え込んて、います。一方 , VC 十十や BC 十十を矢とする最近の C / C 十十処理系が , CASE ツールやクラスライ プラリの鎧に身を固めているといっても , 特集 Windows アプリお手軽大作戦 61

5. 月刊 C MAGAZINE 1993年12月号

に一売 れています。一方の 80286CPU が使われてい TabIe 1 グラフィックの処理速度測定結果 ( 単位 . m 秒 ) る PC ー 9801 には EGC ( ただしエプソン機は 8 = 、、 BOX 日 。当「ロ N CPU : V30 の場合 ( PC ー 9801 CV21) 0286 はもちろん , 80386CPU マシンて、も一部 QuickC Ver. 2 0.75 のマシンには GRCG が使われていますが , QuickBAS ℃ Ve 「 . 4.5 の場合 CPU パワーて、何とかなります ) が使わ MS-BAS ℃ Ver. 7 れており , グラフィック描画速度が格段に CPU . 80286 の場合 ( PC -9801 = VX21 ) ー ~ QuickC Ver. 2 違います。 CPU て、も GDC て、もハンディを持 Turbo C Ver. 2 0.7 っているために , 水平線の描画て、もかなり QuickBAS ℃ Ver. 4.5 3 0.5 6 の違いがて、ます。つまり V30CPU を使うか MS-BAS ℃ Ver. 7 3 6 ぎり , この方式は使えないということにな G 凵 0 0.8 0.2 LINE : ( 0 , 0 ) ー ( 639 , 0 ) まで水平線を引く , BOXFILL : ( 0 , 0 ) ー ( 639 , 0 ) まで水平線を引き内部を塗る , BOX . り , 方式を変える必要がて、てきましたこ ( 0 , 0 ) ー ( 639 , 0 ) まで水平線を引き内部を塗らない PAINT : ( 0 , 0 ) ー ( 639 , 100 ) の矩形内部を塗る それて、は , ということて、使ったのが陳腐 G 凵 0 は C 言語でグラフィック凵 0 を使った場合 , ーは未測定 なやり方て、すが , コースの左右の縁と地平 出てくるマシンにも対応させるには互換性 に速いのて、す。たったの 6m 秒しかかかりま 線 , コックピットと外の景色との境界線て、 の面て、やや心配が残ります。 せん。したがって , BASIC て、 PAINT を使え コースを囲み , コースの中をベイントする ば十分ゲームになるものがてきるはずて、す。 もうひとつは違う言語にすることて、す。 その言語にグラフィックライプラリがつい 方法てす。しかし , この方法はコース上に しかし , QuickBASIC や MS-BASIC はグ 模様が描けないのて、スヒ。ード感が出せない ている言語 ( もちろん , GLIO を利用しない ラフィック表示に GLIO を使っていることは グラフィックライプラリが付属されている こと , 車のコース上の位置によってはべイ 衆知の事実て、す。それなら , C 言語て、 GLIO ントて、きないことがある点など , 欠点が多 もの ) て、作れば GLIO を使わないのて、安心て、 を使えばよいようなものて、すが , C 言語から く , 実用的て、はありません。そこて、 , まず , す。そこて、 , 言語を変えることにしました。 BASIC に移植したらどうなるかという興味 スピード感を示す模様を描き , ついて、コー といっても , やみくもにかえても仕方あり もあり , 結局 BASIC て、作ることにしまし スの左右と地平線 , コックヒ。ットと外の景 ません。まず , 各言語のグラフィックの処 た。 色との境界線て、コースを囲み , コースの外 理速度を測定しました 0TabIe 1 にその結果 まず , QuickBASIC に移植しました。 BA 側をベイントするようにしたところ , 実用 SIC といってももともと C 言語て、書いていた を示します。 に供せるものとなりました。 Turbo C がやや遅いのが目立ちますが , ものなのて、構造化は割りとなされており , ただ , この方式を試してみたのて、すが , これは TurboC 特有の BGI ( ボーランドグラ リストも読みやすいと思います。コンパイ 先ほどの方式よりかなり遅いものとなりま フィックインタフェイス ) が間に入っている ルした実行ファイルは V30 にしてはなかなか した。これは QuickC のグラフィックライプ ためて、 , ちょうど WINDOWS にすると遅く のスピードて、動作し , なんとかゲームにな ラリのせいて、すが , このライプラリて、はペ なるのと同じようなものだと理解していま るようなものがて、きました。ただ , QuickB イントが異常に遅いのて、す。この結果には ASIC は古い言語て、最適化の程度もよくあり す。 QuickC の中て、もっとも速い BOX は 1 本の ません。そこて、 , 最適化の比較的進んだ M がっかりしました。しかし , PC ー 9801 のペイ ントはかなり速いはずて、す。実際 N88BASI 水平線を描くのに 0.6m 秒かかっているの S-BASIC に移植すればもう少し速度向上が 果たせるのて、はと考え , MS-BASIC に移植 C ( 86 ) て、はかなり速いことを筆者は知ってい て , 100 本て、すと 60m 秒かかります。コース を描くというのは水平線を描くことだけて、 ます。要は QuickC のグラフィックライプラ してみました。 リのペイントルーチンが遅いわけて、す。 はありませんから , 実際にはもう少し時間 QuickBASIC から MS-BASIC に移植する したがって , 打つ手は 2 通り考えられま がかかることになり , 結局 0.2 秒て、 1 フレー のは , コックピット画面形成時にグラフィ す。ひとつは QuickC て、書き , グラフィック ック画面に文字を書くことを除けば , 簡単 ムかけなかったわけて、す。また , PAINT は ライプラリを使わず , グラフィックは GLIO てす。 QuickBASIC て、は KPUT 文て、書ける 88m 秒もかかっており , BOX を使った場合 わけてすが , MS-BASIC に KPUT 文はあり を使うことて、す。ただ , GLIO は N88BASIC より時間がかかることは明らかてす。 のためのグラフィックルーチンなのて、 , 最 て、は BASIC はどうて、しようか。 LINE, B ません。代わりにフォントを読み込み , そ OX, BOXFILL いずれも C より遅くなって れを使って表示するようになっています。 近のように MS ー DOS 全盛て、はいつ N88BASI います。しかし , PAINT は C に比べて異常 フォントを使えば , フォントファイルが C ( 86 ) が載らなくなるかわかりません。将来 0 3 3 0 8 8 8 6 6 8 1 1 33 0.2 0.25 150 C MAGAZINE 1993 12

6. 月刊 C MAGAZINE 1993年12月号

D 「 . 望洋の プロクラミンク場離 好評発売中 ⅵ著ー B5 変形判 C 言語プログラミングの落とし穴 定価 2 , 28 円 柴田望洋が教示する「落とし穴」からの脱出法 柴田望洋の待望の最新作。本書は、初・中級の C プログラマが陥りやすいワナや落と C 言語。 し穴を数多く紹介し、その対応策を詳細に解説したものである。 落とし穴 Dr. 望洋の フグラミンク CONTENTS 標準入出力ライプラリ 見えないエラー 第 6 話 第 1 話 テキストデータの処理 ポインタについて 第 2 話 第 7 話 文字列とポインタ スタックオーバーフロー 第 3 話 第 8 話 第 9 話 線形リスト 第 4 話 ヌル 第 5 話 構造体 第 10 話 2 分木 MACLAZINT. ベストセレクショ、 第柴田望洋 ~ ~ ー【著】 、 C + + 対応 S 旧朋羆刪 大好評発売中 ! 柴田望洋氏著作既刊本 C + + プログラマのバイブル誕生 C プログラマのための C 誉 + 入門 B5 変形判・定価 2 , 900 円 「秘伝 C 言語問答ポインタ編」「 C : 98 スーバーライプラリ」で好評を博した柴田望洋が贈る、 C + + の決定版。 , C から C + + の特徴を系統的に解説しています。 C 言語書籍業界に大きな反響を呼ぶ ! ! 秘伝シリーズ・ 一秘伝 C 言語問答ポインタ編 B5 判・定価 2 , 68 円 ポインタが理解できず C に挫折した初心者から、ポインタを確実にマスターしたい上級者、明解な指導が要求 される C 言語の指導者まで、すべての C プログラマに最適の書 日本で最も広く使われている PC -9800 シリーズ用 C ライブラリ C : 98 スーパーライプラリ 5 " 2HD ディスク付 A5 判・定価 3 , 700 円 テキスト画面グラフィック画面制御・ポップアップウインドウなど 28 を超える機能を満載。 Turb0C + + 、 Quick C 、 Mic ・ softC 、 LS ℃など著名コン / ヾイラのすべてに対応。付属ディスクには全ソースリストを収録。 SOFT ソフトバンク株式会社 BANK 出版事業部販売局 : TEL03-5642-8101 望博士の入門シリース・ C プロクラマのための C + + 入門 ポインタ編 0 羆日蠍 S 第 ・田第洋一・ 対応・ PC ・ 9 砂刈シ ! トみ 「秘伝 C ー問一ポインタ編 . の・宿 強田望かる究機のライフラリ第 5 : ト 0 フロノビ・ン一ス・・ 定価は税込

7. 月刊 C MAGAZINE 1993年12月号

まカッ加′ アイサムライプラリ YOShI masa 日 ectronic presents 価格 23 , 000 円 ・製品概要本製品は、 C 言語にて ISAM ファイル処理を実現するライプラリです。検索は、日一 t 「 ee アルゴリズムを採用しているため、高速検索が可能です。 顧客管理、名刺管理等の情報管理システムのアプリケーション開発にお役立てください。 当ライプラリにて作成のデータベースファイ丿レは、 dBASE Ⅲロ旧 s にて参照、変更が可能で魂 ■主な特徴・ B ー t 「 ee による高速検索・ d 日 ASEIII ロ旧 s とファイル互換 ・フィ丿し機能 ・整数型フィールドのサホート ・組み込みロイヤリティ無料 PC98 版 ・レコード単位及びフィールド単位ての入出力 ・ソースコード完全公開 DOS/V 版 対応機種 PC98 シリーズ及びその互換機 対応機種日本旧 M PS / 55 シリーズ 対応言語 MS-C Quick-C 丁 u 「 bo C 十十 Ve 「 . 5.10 以上 または、旧 M PC/AT 及び Ver, 2.00 以上 その 100 % 互換機 Ve 「 . 1 創以上対応言語 MS-C Ve 「 . 6 創以上 BORLAND C 十十 Ve 「 . 2.00 以上 、 0 矗ー 0 Ⅳー豆 do ーあ′ a ィグラフィックウインドウライフラリ 価第 ~ ・ 23 , 000 円 ■製品概要本製品は、 C 言語にてウインドウ処理を行うためのライプラリです。このライブラリを使用することによりウインドウ対応型アプリケーションを簡単に実 現致します。ウインドウ間の切り替えや移動等、マウスに完全対応していますのでマン・マシン・インターフェイスは、抜群の威力を発揮します。また、グラ フィックを使用していますので、 1 行のドット数が可変となり、 ANK フォントも自由に設定可能です。 EMS にも対応しており、大きなアプリケーションで も安心して利用てきます。 なお、サンプルプログラムとして、 ANK フォントエテイタ、タイルノヾターンエテイタ等をソースコード付きで提供していま魂 ■主な特徴・高速グラフィックウインドウ ・標準ウインドウを数種類用意 ・倍角、斜体、強調などの文字に対応 ・ 1 6 色表示対応 ・マウス完全対応 ・ソースコード完全公開 PC98 版 対応機種 PC98 シリーズ及びその互換機 対応機種 ・汎用キー入力ルーチン装備 ・ EMS 対応 ・組み込みロイヤリティ無料 DOS/V 版 日本旧 M PS / 55 シリーズ または、旧 M PC/AT 及び その 100 % 互換機 MS-C Ve 「 . 6.00 以上 7eC29 対応言語 MS-C Quick-C 丁 u 「 bO C 十十 Ve 「 . 5.10 以上 Ve 「 . 2.00 以上 Ve 「 . L00 以上対応言語 BORLAND C 十 + Ver. 2.00 以上 RS-232CÆibrarY 通信ソフト Y-TERM 装備 価し、格 23 , 000 円。、 ■製品概要本製品は、 C 言語にて日 S ー 232C の各種制御を行うためのライプラリです。一般的な調歩同期式だけでなく、同期式についても完全にサポートされて いますので、日 SC 等同期式手順を使うアプリケーションにも対応できます。 また、付属している通信ソフト Y 一丁 E 日 M は、プログラム例としてだけでなく実際にパソコン通信等にもお使い頂くことができる機能を備えております。 ■主な特徴・調歩同期式、同期式手順ともにサポート ・半 / 全ニ重制御、八一ド / ソフトフロー制御のサポート ・ソースコード完全公開 対応機種 PC98 シリーズ及びその互換機 ・拡張日 S ー 232C ホード ( PC ー 9861 K ) 対応 ・実用通信ソフト Y 一丁 E 日 M 装備 ・組み込みロイヤリティ無料 対応言語 MS-C Ve 「 . 5. 以上 , Tu 「 bO C 十十 Ve 「 . L00 以上 Quick-C Ve 「 . 2 創以上 , BO 日 LAND C 十十 Ve 「 . 2.00 以上 。 , 通信ソフト uTRN 装備 価を 46 , 00 ロ円 = ■製品概要本製品は、 C 言語にて UCA 手順を実現するためのライプラリてす。 ( 製品には、日 S ー 232C L 他「 a 「 y が含まれます。 ) 対応機種 PC98 シリーズ及びその互換機対応言語 MS-C Ve 「 . 5 」 0 以上 , Quick-C Ve 認創以上 , Turbo C 十十 Ver. L00 以上 , BORLAND C 十十 Ve に圓以上 通信ソフト ZTRN 装備 仁第格 46 , 000 円 ■製品概要本製品は、 C 言語にて全銀手順を実現するためのライブラリてす。 ( 製品には、日 S ー 232C Lib 「 a 「 y が含まれます。 ) 対応機種 PC98 シリーズ及びその互換機対応言語 MS-C Ver. 5 」 0 以上 , Quick-C Ver. 以上 , Tu 「 bo C 十十 Ver. L00 以上 , BORLAND C 十十 Ve 「 . 2.00 以上 PC-N ET/2 os ノ 2 、オンライン・ユサー・サポートふシステム 価格 198 , ロ 00 円 , ー製品概要パソコン通信のホスト局を運営する BBS ソフトウェアです。電子メール、電子会議、電子掲示板などの基本機能が充実しています。回線は最大 3 回線 をサポートしており、 24 時間運用が可能てす。 責社のニーズに合わせたオンラインネットワークの構築にお役立て下さい。 ( 弊社製品情報ネットワークシステム Y ー NET ' は、 PC ー NE 丁 / 2 にて運営しております。 ) 対応 OS 旧 M OS / 2 Ve 「 . Ul.3 以上 , 日本語 MS OS / 2 ve 「 . L21 以上 対応機種 OS / 2 が動作可能な機種 ・弊社製品情報ネットワークシステム。 Y ー NET ' 開局中 . 〃アクセス電話番号 ( 03 ) 5350 ー 1785 IJSERID - GIJES 丁 ' でどうぞ / あ求め方法弊社製品は、パソコンソフト取扱店であ求めいただけますガ、 直接ご注文の際は石記まであ問い合わせください。 なあ、上記価格には消費税が含まれてありません。 く資料請求番号 179 〉 吉正電子株式会社 〒 151 東京都渋谷区代々木 1 ー 58 ー 10 第一西脇ビル 電話 ( 03 ) 5371 ー 3041 ( 直通 )

8. 月刊 C MAGAZINE 1993年12月号

Column 2 関数プロトタイプ宣言 K & R スタイルの欠点を補うために導入さ れたのが , C 十十て、発明された関数プロトタ イプ宣言て、ある (Column 2 ) 。プロトタイプ 宣言を利用したのが List 6 だ リストにも示すように , 関数プロトタイ プ宣言は double pow (double, double) ・ と , それぞれの仮引数の型をきちんと宣言 する。呼び出し側は , pow ( 5 , 2 ) ; と int 型の実引数を渡している。仮引数と型 が同じて、はないが , 心配はない。次のよう な規則があるからだ。 【重要】関数の引数の受け渡しは , あたか も仮引数が実引数に「代入」されるかのよう に行われる int 型の値を double 型の値に代入するとき は , 適当な型変換が施されることは知って いるだろう。したがって , うまくいくのて、 ある。 関数プロトタイプ宣言の欠女 これて、 , 関数プロトタイプ宣言の必要性 や , その歴史的背景がおわかりいただけた ことと思う。 ANSI 準拠の C 処理系を使って いるのて、あれば ( K & R との互換性を保つ必 要性などがないかぎり ) , 関数プロトタイプ ~ 言を使わない理由はない。最初の例て、も 見たように , 関数プロトタイプ宣言の欠如 は , 思わぬ工ラーにつながりかねない と くに分割コンパイルを行う際に , ほかのソ ースファイルて、定義された関数を呼び出す ときは , 関数の戻り型や引数に関する情報 は , 関数プロトタイプ宣言に頼らざるを得 関数プロトタイプ宣言が欠如するとどう なるかを簡単に説明しよう。 ところが現実には , 関数プロトタイプ宣 pow 関数に対して , 誤って int 型の引数を 渡した例て、もわかるように , 原則として実 言を利用したがらないプログラマも多いし , うつかり宣日 引数は , そのままの形て、関数に対して渡さ ーを落としてしまうこともあり 得る。 れる。 C 十十の関数プロトタイプ宣 関数プロトタイプ宣言は , C 十十で発明ざ ( 2 ) 可変個引数の宣言 れ C 言語にも導入されているが , 若干の仕様 たとえば p 「 intf 関数のように , 可変個引数 の差違がある。それは , C 言語が関数プロト を受け取ることを示す宣言は , C 言語が タイフ宣言をオプションと考えるのに対し , int printf(const Cha 「 * = ー C 十十では必須と考えることによる。おもな と記述するのに対しチ C 十十では 違いは , 以下の 3 点である。 int printf(const char * ( 1 ) 引数がないことを示す宣言 int printf(const char * C 言語では , のいすれでもよい。 void func(void) , ( 3 ) 引数に対するコンバイルチェックを行わ と ( ) の中に void を明示するが , C 十十では ーないことを示す宣言 VO id fu nc (void) , C 言語では , K@R との互換性のために , void func( ) : void func( ) : , のいずれの形式でもよい。後者の形式は C 言 と記述する劜 C 十十では 語ては違う意味を表すので , 利用を避ける void func( ) ・ べきであろう。 と記述する。 関数の利用 List 1 : #include 3 : double pow(double, double); 5 : i n t ma i n ( VO i d ) 7 : 8 : く stdio. h> po れ 5 , 2 ) ) : printf("5. 0 return ( 0 ) : : %fYn' Column 3 C 十十での引数の受け渡し C 言語が , 関数の引数の受け渡しを , あた は , 参照引数や , コンストラクタを持つク 力、も「代入」のように行うのに対して , C 十 + ラス型の引数においては , かなり意味あい では , あたかも実引数を仮引数で「初期化」 の異なったものとなる。 するかのように行う。「代入」と「初期化」て ただし , 次のふたつの変換が行われる。 ( 1 ) インテグラルプロモーション char, signed char, unsigned char, sh ort int, unsigned short int, 列挙型 , ビ ットフィールドの型を持つ実引数は , int あるいは unsigned int に変換される。 140 C MAGAZINE 1993 12

9. 月刊 C MAGAZINE 1993年12月号

C 言語プログラミングレッスン・ STATS の使用方法 ①コンパイルする 付録ディスクに収録されている STATS ℃ をコンパイルして , 実行ファイルを作成し てください ②数値データの準備 付録ディスクには SAMPLE. S というファ イルに数値データ例が用意されています。 これが STATS( スタッツ ) への入力データと なります。 ③ STATS の実行 A> STATS く SAMPLE. S 画面に統計計算の結果が表示されます。 この結果をファイルに保存したいときは , A> STATS く SAMPLE.S > SAMPLEOUT のようにすると SAMPLE. OUT に保存され ます。また , プリンタて、印刷したいときに は , A> STATS く SAMPLE. S > PRN のようにします。実行の様子は Fig. 7 に示し 0 ; i く 3 ; i 十十 ) { ます。 おまけとして , STATS と組み合わせて使 う「 1 行の長さカウントプログラム」のソース LINELEN ℃もディスクに収録しました。使 い方の説明はソースの先頭にコメントとし て入れてあるのて、 , 解読して使ってくださ STATS ℃の中て、使われている新しい事項 について説明します。 STATS ℃て、はデータはすべて double ( ダ プル ) 型て、扱われています。 double 型は float 型と同様に浮動小数点数 を扱う型て、すが , その精度が異なります。 それぞれ , float 単精度浮動小数点数型 double 倍精度浮動小数点数型 と呼ばれており , LSIC ー 86 て、は , float の有 効桁数は 6 桁 , d 。 uble の有効桁数は 10 桁にな っています。 型 double printf の %g またまた関数 printf( ) の新しい書式が登場 しました。こんどは % g て、す。これは浮動小 数点数を表示するための形式て、す。 % g は % f とほとんど同じなのて、すが , 指数が一 4 より 小さいときや , 精度以上のときには , 1 .234567e 十 12 の形式て、表示されます。これは , 1.234567X 10 という意味て、す。 2 グレード このコーナーて、は , 「繰り返しを見抜く」 という話をしたいと思います。配列は for 文 ということにはお気づきて、 と相性がよい すか ? 配列は添字て、管理されています。 その添字を for 文て、変化させてやれば , 配列 の要素全体に対して同じ処理を行うことが て、きます。たとえば , i く 10 ; i 十十 ) { for (i とすれば , 配列 a の要素の値はすべてその添 字の二乗になるのて、す。配列は添字て、管理 されており , その添字を for 文て、コントロー ルしている感覚をつかんて、ください 今月の最初の例題に戻ります。三つの教 科の点数の合計は , kokugo 十 suugaku 十 eigo て、得ることがて、きました。 こを出発点と ten[0] + ten[l] + tenC2] という配列の計算に話を進めました。普通 の変数を配列に変えるとき , 私たちはそこ に似たものの繰り返しを見つけ出していま す。三つの教科の点数の合計を , kokugo や suugaku という別々のものと考えるのて、はな く「どちらも点数の一種」と思って , 配列 ten を作ったのて、した。国語十数学十英語を , 点数十点数十点数と見なしているのて、す。 ten[0] + tenC1] + ten[2] という計算を行うのに , for 文を使って , 12 sum for (i 0 ; i く 3 ; tenCi] ; i 十十 ) { sum 十 = とプログラムしました。実はここて、も「繰り 返しを見抜く」という思考を行っているのて、 す。どういうことか説明しましよう。 tenC0] + ten[l] + tenC2] これを変形します。 0 + ten[0] + ten[l] + tenC2] さらに次のように書いてみましよう。 + tenC0] + ten[l] + tenC2] 繰り返しが見えてきませんか ? 0 , 1 , 2 の 繰り返しが見えてきますね。 0 , 1 , 2 , という繰り返しを行う構文は f 。 r 文て、すか ら , 十 ten [ i ] の部分を f 。 r 文を使って圧縮し 0 for (i 0 + tenCi] ; あとは意味を考えて , C 言語の構文として正 sum 十 = ten[i] ; 0 ; i く 3 ; for (i sum = 0 ; しく手直しします。 C 言語入門講座 81 も , えっちらおっちらと時間がかかるもの 初めは , for 文をひとつ組み立てるのて、 と表現て、きるのて、す。 i を使った処理 for (i 0 ; i く 3 ; i 十十 ) { それは for 文を使って , という繰り返しがあることに気がついたら , 2 を使った処理 1 を使った処理 0 を使った処理 なことを頭て、考えているように思います。 私は , for 文を作るとき , おおよそこのよう

10. 月刊 C MAGAZINE 1993年12月号

¯jÅNGlJAGE 提携記事 PUTER 4 「 & Dan Ford / 岩谷宏訳 (COMPUTER LANGUAGE, May 1992 ) 抽象データタイプを C で実現 ムの再利用性 , 可搬性 , 可読性を高める。 テータ構造の隠蔽の威力を利用してシステ A 、 r 題①題題實 y 胆 e 、一羆① データ構造を隠すことは , コードの再利 用性 , 可搬性 , そして可読性を高めるテク ニックのひとって、す。 ANSIC に準拠してい るコンパイラならどんなコンパイラて、も可 能な簡単なテクニックを使って , ModuIa- 2 の不透明タイプと同じものを実現て、きま す。不透明タイプというのは , データ構造 , 作成 , に関する内部的な知識なして、 , 利用 , そして破壊のて、きるデータ型のこと て、す。 しかもこのテクニックは , そのデータタ イプのユーザのお行儀の良い振る舞いとい うものを要請しません。何らかの正常てな い手段をとらないかぎり , データ構造は完 全に隠蔽され , 外部ューザからアクセスて、 きないのて、す〔 = 実装詳細を覗き見するこ とがて、きない〕。 データのカプセル化は , ソフトウェアの 複雑性に対する管理能力を高めるためのデ ータ分解パラダイム〔データを中心とする モシュール分割的プログラミングというパ ラダイム〕のひとつの現れてす。残念なが ら C は , データカプセル化のための便益を提 供していません。しかし , C は何に対しても そうて、すが , 逆にそれが絶対て、きないとい うこともないのて、す。 24 C MAGAZINE 1993 12 抽象テータタイプ C には制約 ( むしろ無制限な自由というべ きか ) があるために , ソフトウェア業界は , 単にデータ分解がて、きるだけて、なく , それ を積極的に利用するような代替言語を数多 く開発してきました。そういう傾向の中か ら生まれてきた言語が ModuIa ー 2 および 3 て、 あり , Ada て、あり , CLU て、あり , あるいは Objective C, C 十十 , SmaIItaIk などのオプ ジェクト指向言語て、す。 しかし現実には , 残念ながらわれわれは 使用する言語をいって、も自由に選べるわけ て、はありません。政治的な , 経営的な , あ るいはその他の非技術的な理由によって , 使える言語は C だけという場合もあります ( あまりポヒ。ュラーて、ないプロセッサを使う ときや組み込み方面の開発環境て、は , とく にそうなりがちて、す ) 。そこて、 , 安全な抽象 データタイプを C て、実装することが , オプジ ェクトべースないしオプジェクト指向の言 語に移行て、きないときの次善の策になるの て、す。 抽象データタイプは , プログラマが定義 します。データの表現や物理的な構造ばか りて、なく , データに対して許されるすべて の操作の実装もカプセル化 ( 隠蔽 ) します。 データに対しては , 明確に定義された一連 の演算子〔ないし関数〕を介する以外の一 切の行為が禁じられます。カプセル化は , そのデータタイプのユーザのお行儀の良い 振る舞いを期待しなくても済むような方式 て、行なうのがべターて、す。定義されている アクセス関数を使わすにデータ構造の内部 に直接アクセスすることはて、きないように あるいは非常に難しいようにすべきて、す。 抽象データタイプをめぐる非常に重要な 考え方が , やりたいこととその実現方法と の完全な分離て、す。たとえば , あなたがあ なたの飼い犬に , 「新聞を取ってこい」とい う簡単な命令て、もって朝刊を取ってこさせ たいと思ったとします。ただし , 毎朝毎朝犬 を一から訓練するのて、は困ります。犬を一 度訓練したら「新聞を取ってこい」の実装は 忘れてしまえるようて、ありたい。あなたの 関心は , 毎朝そう命令したら大が朝刊を取 ってきてくれるという事実だけて、す。過去 にどうやって訓練したのか , 大がそれをど う解釈し理解したのか , 等々の背景事情〔実 装詳細〕は , もはやどうて、もいいはすて、す。 新聞を取ってくることは , いまや単純に大