82 また , 関数を呼び出すときに , 引数を渡すことができます . 7 C& C + + ス門 7.9.3 関数の引数 ・引数付き関数の定義 void 関数名 ( 引数の並び ) 文 たとえば次の関数 func は , int 型引数 n と float 型引数 val を受け取ってい 型 1 引数名 1 , 型 2 引数名 2 , 引数の並びは , 次のように引数の数だけカンマで区切って並べます . ます . VOid func ( 土 n し n, floa し val) ・引数付き関数の呼び出し 引数付きの関数を呼び出すときは , 関数名 ( 引数 1 , 引数 2 , ・・・ ) べます . 次のように引数をカンマで区切って並 たとえば先の関数 nc を呼び出すときは , 次のようにします . func ( 1 の この場合 n = 10 va 1 2 . 7182 82 房 関数 nc では次のように引数を受け取ります . 2 . 718 2 82
3 プカラフルな画面 3 ユ 5 ファンクションキーの表示 この関数は , 現在のファンクションキーの状態を次のような int 型で返します . ファンクションキーの状態を保存しておくには , く pc98. h > で定義されてい たいものです . 前節の画面モードと同様 , アプリケーション終了時に元の状態に戻しておき アプリケーションの中でファンクションキーの表示状態を変更した場合は , pc98fkeyoff(); #include く pc98 . h> 合は , く pc98. h > で定義されている次の関数を使います . れています . アプリケーションでこの表示を消して , 25 行をフルに使いたい場 PC -9801 では , 通常 , 画面の最下行にファンクションキーの内容が表示さ pc98fkeychk( ) : る次の関数を使います . ファンクションキー 表示されている 表示されていない 戻り値 1 0 この戻り値を , 次のように int 型の変数を使って保存します . なら元に戻しています . 次のプログラムは , ファンクションキーをオフにしてから , 元の状態がオン pc98fkeyon( 房 次の関数を使います . ファンクションキーを表示させるには , 同じくく pc98. h > で定義されている f = pc98fkeychk( 房 土 n し f :
・データベース 270 4 データ表示 1 ] 次のレコード 2 ] 前のレコード 3 ] 先頭のレコード 4 ] 最後のレコード タ検索 5 ] デー ータ修正 6 ] デ 7 ] データ削除 ・・テータ表示モートのメー 選択 ? このメニューを見ると , データ表示モードにはたくさんのメニュー項目があ るのがわかります . 主眼がデータ表示にあるにもかかわらず , データの検索・ ソート・修正・削除といった表示以外の項目まであります . このような構成に したのは , これらの作業はデータを見ながら行うのが自然と考えたからです . ・レコードの移動 データ表示モードでは , 1 件のデータしか画面に表示されません . 現在表示 されているデータの次のデータを見るには , ] 次のレコード " を選択します . 選択 ? 1 : 西尾育世 名前 ふりがな・ニシオイクヨ : 2 2 3 ー 12 2 3 ー 5 3 7 郵便番号 : 3 3 8 : 高知県高知市瀬戸 住所 1 : 川合本町団地 4 ー 102 住所 2 次のデータが表示され , 続けてデータ表示モードのメニューが表示されます . 1 を入力するたびに次々に次のデータを見ることができます . また , 最後のデ ータまで見ると , 警告音が嶋ってそれ以上進まないようになっています . 逆に , " 2 ] 前のレコード " で 1 つ前のデータが表示され , " 3 ] 先頭のレコード " ・次のレコードを見る ・ 2 件目のレコートが表示される
4. プ 6 カレントレコードの移動 237 カレンレコードの移動 ・データベースの大部分のコマンドは , カレントレコードを中心に実行 めのコマンドが 4 つあり , 表示モードの無限ループから各関数が呼び出されま されます . 表示モードのメニューには , このカレントレコードを移動させるた す . 次のレコードに移動・ 前のレコードに移動・ 先頭のレコードに移動・ 最後のレコードに移動・ ・ next data ・ p rev_data ・ top—data ・ last data たとえば next_data は , data. c の中で次のように定義されています . 土 n し next_data (void) 戻り値 : 1 = 失敗 , 0 = 成功 * / / * 次のレコードへ また , last_data は次のように定義されています . return 1 : e 1 S e return 0 : next browse 十十一 if (next browse く next_input next_input next brOWSe void last—data (void) / * 最後のレコードへ * /
7.9 関数 neko ( ) : 定義した関数を使う場合は , その関数名の後に ( ) とセミコロンを付けます . 9.2 関数呼ひ出し プログラムは次の順序で実行されます . neko ( 房 が終ると , 関数呼び出しの次の文に戻ります . たとえば次のような場合 , 呼び出された関数の定義までジャンプし , 関数が実行されます . 関数の実行 これを関数呼び出しといいます . プログラムが関数呼び出しを実行すると , 87 → neko で定義した文 文 1 文 2 この流れを次のサンプルプログラムで確認してください . サンプルプログラム 39 #include く s し d 土 0 . h> void neko (void) pr 土 n む f ( " 我が輩は猫である¥ n " 房 pr 土 n し f ( " 名前はまだない¥ n " ) : ・関数定義 main() neko ( ) : return 0; 実行例 我が輩は猫である 名前はまだない ・・関数呼ひ出し
み 92 3 " サウンド & グラフィックス " とディスクス出力 3 五 3 クラフィックスドライノ「 前節でコンパイル ( リンクにも成功 ) したプログラムを実行させようとする と , 今度は次のようなエラーになってしまいます . Graphics systa-n Error : Device driver file 0 し found (PC98. BG 工 ) これは , BGI を使用したプログラムを走らせるのに , 次のファイルが必要だ からです . クラフィックスドライバ ( 拡張子 = 0 グラフィックスドライバの種類 BGI) グラフィックスドライノヾには , 次の 2 種類があります . 種類 PC98. BGI 0 正しく実行させる PC98Hl.BGl 機種とモード ノーマルモードの PC -9801 ハイレゾモードの PC -9801 使用する機種とモードに合わせたグラフィックスドライノヾを用意します . 用 意するには , 次のいずれかの方法を取ります . 1 グラフィックスドライハをカレントティレクトリにコピーする ができます . PC98. BGI をコピーしてきます . これで , やっと実行ファイルを実行すること こでは , 1 の方法を取ってください . つまり , カレントディレクトリに 2 については次節で説明します . 2 initgraph 関数でグラフィックスドライハがあるティレクトリを指定する
2 / 乱数の発生 何かをシミュレートするプログラムや , ゲームプログラムなどで乱数を使い random(n); たい場合は , 次の関数を使います . n— 1 の整数乱数を発生 たとえば , random ( 10 ) とすれば , 0 ~ 9 の乱数を発生させることができます . また random を使うには , 次のヘッダファイルをインクルードします . させています . #include <stdlib . h> 次は , サイコロの目をシミュレートするもので , 1 ~ 6 の乱数を 100 個発生 #include く s し dl 土 b . h > #include く s し d 土 0 . h > サンプレプログラム 59 main() 土 n し for 1 ー random ( 6 ) printf("%dYt" 0 ー土く 10 0 : 土 + + ) は return 0;
3.5 グラフィックス ・第 2 引数 グラフィックスモード ( 解像度や使えるパレットの数 ) を指定します . た だし , 通常は第 1 引数の D ロ ' ECT で自動検索させるので , 適当な int 型変数 を用意し , そのアドレスを指定します . initgraph ( &driver ′ &mode ′ int mode : たとえばグラフィックスドライバを "A: ¥ BGI" というディレクトリにファイ こで指定したティレクトリ→カレントティレクトリ ラフィックスドライバは , 次の順に検索されます . た . そのグラフィックスドライノヾのあるディレクトリを指定します . なお , グ 前節で , 実行時にグラフィックスドライバが必要であることを説明しまし ・第 3 引数ーーーちょっと注意 ! プログラムの中でこの mode の値を参照することは , あまりありません . initgraph (&driver, &mode, "A: YBG 工 " ) : ルしてあるなら , 次のように指定します . ンスとみなされてしまいます . このため上記の指定は , "A:GI" のように解釈 文字列の中に¥があります . ¥は , 1. 1.5 節で説明したエスケープシーケ おっと , 上記のディレクトリの指定方法は , 間違っています ! もし , 特にディレクトリを指定しないのなら , 次のようにⅢを指定します . initgraph ( &driver ′ &mode , "A : Y Y BG 工 " ) : これを避けるには , 次のように¥を 2 つ重ねます . されてしまいます . initgraph ( &driver ′ &mode ′ 行時にエラーになります . この場合は , カレントディレクトリにグラフィックスドライノヾがないと , 実 ノ、 95
3. プカラフノレな / 面 - 80X25 行の画面全体を保存したいなら , 次のように指定します . ge しに ex し ( 1 ′ 1 8 0 , 2 5 第 bu f fer ) : 第 5 引数の buffer は , 画面の保存用に使用する文字配列を指定します . 画 面の 1 文字を保存するのに , 色とか属性も一緒に保存するので , 4 つ分の配列 が必要になります . たとえば , 80 X 25 行の画面全体を保存したいなら , 次 puttext(xl, yl ′ x2 ′ y2, buffer) : メモリに保存した画面の内容を復活させるには , 次のように行います . ・画面の復活 ( ペースト ) char bu f f er [ 8 0 * 2 5 * 4 ] : の大きさの配列を用意します . も構いません . 大きさを計算しないで済みますが , もちろん必要最低限の大きさを用意して います . 画面の最大値分のノヾッフアを用意すれば , いちいち保存する領域の べーストしています . バッフアは , 画面全体を保存できる大きさを用意して 次は , 画面 ( 1 , 1 ) ~ ( 20 , 5 ) の内容を , ( 11 , 11 ) ~ ( 30 , 15 ) の領域にカット & buffer は , 保存の ( 1 ) で使用した文字配列を指定します . 4 引数の (x2, (2) は , 転送する画面の右下の座標を指定します . 第 5 引数の 第 1 , 2 引数の ( xl , yl ) は , 転送する画面の左上の座標を指定します . 第 3 , ノ 55
7.4 変数の導ス プ .4.4 変数の宣 値をしまっておく入れ物である変数を使うには , " この名前の変数を使いま すよ " とプログラムに教えてあげなければなりません . このことを変数の宣 をするといいます . 変数宣言では , 次のように変数の名前と型を同時に宣言します . 型変数名 ; Char c; int number; float pi; ・・ cha 「型変数 c を宣言 c は文字定数 ( たとえは 'A') を記憶できる ・・ int 型変数 number を宣言 numbe 「は整数 ( ー 32768 ~ 32767 ) を記憶できる ・・れ oat 型変数 pi を宣言 pi は実数を記憶できる さらに同じ型の変数なら , 次のようにカンマで区切って同時に複数の変数 を宣言することができます . int x, y; ・・ int 型変数 x と y を宣言 * 1 IAI とか 1024 とか 3.14159 とか " 我輩は猫てある " のように値を変えることのてきない テータを変数に対して定数といいます . 2 文字列変数については , 1.5.1 節を参照してください . ・名前の付け方 下線記号 ( ー ) アルファベット (AA•Z,aA•z) 1 最初の文字は , 次のいすれか す . 名前を付けるときは , 次の規則にしたがわなければなりません . c では , 変数名とか後で出てくる関数名のようにいろいろな名前を使いま