使用雑感 構造化 BASIC フリーです 汎用性があるコードです 日本語対応 :Linux 版 コツはあるけど日本語対応 :Windows 版 非日本語 :Android 版 X11-BASIC とは Markus Hoffmann 氏が開発した由緒正しい GNU GPL のフリーで使える BASI
|
|
|
- ゆき はしかわ
- 7 years ago
- Views:
Transcription
1 Writer HOLY 2016/06/18
2 使用雑感 構造化 BASIC フリーです 汎用性があるコードです 日本語対応 :Linux 版 コツはあるけど日本語対応 :Windows 版 非日本語 :Android 版 X11-BASIC とは Markus Hoffmann 氏が開発した由緒正しい GNU GPL のフリーで使える BASIC です コードの汎用性について触れますと X11-BASIC の Windows 版 Linux 版互換です PC を持ってるのでしたら SouceForge から X11-BASIC をダウンロードして使うことができます で その PC 版と Android 版のコードは ハードウェア固有の命令でなければ修正せずに動きます ここが美味しいところです ただし同じ BASIC というカテゴリーでも X11-BASIC のコードと VisualBasic や GAMBAS とは色々違います それでもプログラム構造が同じなら移植もそんな苦ではありません SouceForge で X11-BASIC と検索して その説明を読むと UNIX の基本 と一文だけ書かれている それほど UNIX ではお手軽に使える BASIC だと思います "BASIC of UNIX" が直訳されたんでしょうが 私も 仕事で Solaris や Linux を使いますが 大きなプログラムを作るためではなくて
3 スクリプト感覚で計算させるのに使ったりします 今はスマフォで Android 版を使うけれども 将来的に PC を使うようになったらコードの使い回しが効くんじゃないかなと 機能とか流行とかはさておき 使うのにお手軽な BASIC だと思います コンパイラソースやサンプルプログラムを /usr/share/doc/packages/x11basic/examples 以下に探すことができます 他のサンプルプログラムは Sourceforge.net の X11-BASIC から X11-Basic-examples-1.22.zip をダウンロードできます 同じく最新マニュアルの PDF( 英語 ) もそこにあります 更にために情報はファイル./doc/X11-Basic-manual.txt を読んでください ( これも英語ですな ) X11-BASIC は オープンソースソフトウェアであり NO WARRANTY です Copy Right は次のとおりです ありがたや VERSION 1.22 (C) by Markus Hoffmann ([email protected]) Name : X11Basic Version : 1.22 Vendor : Markus Hoffmann Group : Development/Languages License : GPL Packager : Markus Hoffmann <[email protected]>
4 URL : Summary : A Basic Interpreter and compiler with graphics capabilities 基本的にオープンソースなので好きなように修正してい ただいて結構ですが そうすることで発生するあらゆる種 類のトラブルに我々は一切関知しない ( ということです ) 導入前の注意 BASIC というプログラミング言語には 方言がつきものになっています 国際標準で定義された仕様もあるんですが 技術レベルや時代の要求に追いついてない状況で 使用場面に応じた文法や決めごとがまかり通っています X11-BASIC もそんな方言の中のひとつで 言語仕様どころか その名称も似た BASIC が存在してます ここでは そういう言語名称による誤解を避けるためいくつか注意を促しておきます 名前の似た BASIC として (1)X11-BASIC (2)XBasic (3)X-BASIC という名前の BASIC が存在しています べつに商標とか本家本元論とかを話したいわけじゃなくて 名前の勘違いを
5 しないようにね ということです うっかりした勘違いで 回り道をしないように それぞれの違いは こんな感じです (1)X11-BASIC この本で取り扱おうとしてる BASIC です 対応機種 /OS は Linux Windows Android です もともとは ATARI GFA-BASIC のクローンを目指して開発が始まりました 名称の先頭が X11 で その後にハイフンを付ける人や 付けない人もいるようです (2)XBasic XBasic という名称の BASIC は結構あるようです 検索すると知ってるのも知らないのも出てきます その中でも もっとも熟れているのは次の XBasic でしょう これは今でも開発が続いていて SourceForge でも活発な動きがあります 対応機種 /OS は Linux Windows です Microsoft Quick-BASIC 風な文法の流れを汲むそうです GUI 開発用の IDE も相当作り込まれています
6 名称は頭文字が X で B は大文字 asic は小文字で書く 人が多いようです (3)X-BASIC SHARP が販売していた X68000 の BASIC です 現在でも日本で X-BASIC と言えばコレをあげなければモグリと言われます その辺が X11-BASIC がいまいち日本で浸透しない理由なんですかねぇ X68000 の技術は 本舗 SHARP が仕様を公開していることから エミュレータに移植したり未だに活動が行われています その中で ios で動かせる X-BASIC for ios (AIG Soft) が App Store に公開されています このようにアルファベット X には どうもマニア心を くすぐるものがあるらしいです
7 インストール X11-Basic SourceForge のコメント ( 機械翻訳 ) より UNIX の基本 詳細情報 開発状況 : 5 - プロダクション / 安定, 6 - 成熟対象ユーザ : 開発者, 教育, 科学 / 研究ライセンス : GNU General Public License v2 (GPLv2) 主要対話語 : 英語, ドイツ語オペレーティングシステム : Cygwin (MS Windows), Android, POSIX (Linux,BSD,Solaris など ), Linux, その他, Windows XP プログラミング言語 : BASIC, C トピック : SourceForge.net, CGI ツール / ライブラリ, インタプリタ, 仮想マシンユーザインタフェース : フレームバッファ, タブレット PC, X11 アプリケーション, コマンドライン, SDL, Win32 (MS Windows) X11-BASIC はグラフィック機能のある BASIC です その文法は 昔の ATARI-ST( アタリ社 ) が 1985 年発売したパソコン用 (CPU は MC68000) の GFA-BASIC( 初版 1986 年 ) のクローンを目指して開発が始められました 日本にはあまりいないと思いますが GFA-BASIC の経験者は若干の修正で習熟できるはずです 当時のパソコンの世界では各社独自の GUI の開発花盛りでして ATARI でも独自の GEM という GUI システムを提供してました GUI 関係の命令にその一端を垣間見ることができます
8 また MS-DOS の QBASIC(Borland 社対抗の Microsoft QuickBASIC の簡易版 ) のプログラマーもほぼコンパチブルです おそらくこっちのほうが馴染みのある人が多いことでしょう UNIX/Linux 版 X11-BASIC のマニュアルやら ReadMe を読むと./configure make sudo make install でいけると思います 不肖私が行ったインストールの備忘 録をさらしますと こんなことをしていました $ ls (saucefoege.com からダウンロードしたファイル ) X11Basic-1.22.tar.gz $ gzip -d X11Basic-1.22.tar.gz ( 圧縮ファイルを解凍 ) X11Basic-1.22.tar $ tar -xvf X11Basic-1.22.tar (tar アーカイブを展開した ) $ ls X11Basic-1.22 X11Basic-1.22.tar $ cd X11Basic-1.22 $./configure ( 中略 ) $ make ( 中略 ) (make するとディレクトリに x11basic.a や libx11basic.so.ver ができる )
9 $ cd.. $ su (root になります ) パスワード : (make install はしないで動かせるように細工をしました ) # mv X11Basic-1.22 /usr/local (/usr/local 以下に作ることにした ) # cd /usr/local/x11basic-1.22 # cp libx11basic.so.1.22 (ver.1.22 なら 1.22 をコピー ) # cp x11basic.a /usr/lib # chmod 755 /usr/lib/libx11basic.so.1.22 # chmod 755 /usr/lib/x11basic.a 最後に ホームディレクトリ直下の.bashrc の alias xbasic='/usr/local/x11basic-1.22/xbasic' alias xbc='/usr/local/x11basic-1.22/xbc' のように入れました X11-BASIC のパッケージには xbasic というインタプリタと一連のコンパイラが含まれています インタープリタは basic-script とでも言えるようなシェルスクリプト風に利用することもできます パッケージにはコンパイラ (xbc) も 含まれます コンパイラはインタプリタに比べてだいたい 10 倍早くなります 恐らく saucefoege.com には deb パッケージもダウンロードできるようになってるので Ubuntu 系のディストリビューションなら パッケージインストーラーでインス
10 トールする手もあります ただこの場合だと コマンドラインインタプリタを試す分には問題ありませんでしたが xbc でコンパイルしようと実行するとリンクエラーが出て上手くいきませんでした X11-BASIC プログラムを 中間バイトコードにコンパイルすることもできます (xbbc) このバイトコードは 仮想マシンによって動作できます (xbvm) その中間バイトコードは 環境ネイティブの C 言語でコンパイル可能な C ソースコードに変換できます (xb2c) 古の ANSI-Basic プログラム ( 行番号つき ) を bas2x11basic を使うことで X11-BASIC コードに変換できます Android 版
11 Android バージョンの X11-BASIC は 通常のアプリとして Android Market からダウンロードできます 他のバージョンの X11-BASIC のとは異なり Android バージョンでは インタープリタ それを動かす仮想マシン Load して Run して Edit して コンパイルする一連の操作ができるような IDE として組み込まれます 同じく標準出力となるテキストコンソールにも 少なからずな修正が加えられてます 標準入力デバイスはキーボードとしてます それらのアイデアは 起動直後にダイレクトステートメントを実行できることに配慮して シンプルに扱えるようにしたからです もちろん 拡張子.bas のソースプログラムを Load して Run させても大丈夫です それに拡張子.b のコンパイル済みのバイトコードを実行させることもできます Android では BASIC プログラムのソースファイルは bas フォルダ (/mnt/sdcard/bas) に保存して実行してください ソースファイルの拡張子は.bas です コンパイルした実効ファイル ( 拡張子.b) もそこで Load してから Run するという形式になります また Android 版でも コンソールに直接命令や式 ( 数字を含む ) を入力して実行するダイレクトステートメントを使うことが出来ます Android 版の X11-BASIC ではエディタアプリも一緒にインストールしましょう 詳しく書くとちょっと長くなるのでここでは書きませんが X11-BASIC のメニューに どのアプ
12 リをエディタに使う? という項目があります そのほうが絶対楽です Windows 版適当なフォルダを作成しておきます ( 例えば X11BASIC とか ) 場所は Program Files 以下でも マイドキュメントフォルダ以下でも構いません SaurceForge などから Windows 用 zip ファイルをダウンロードして解凍します WindowsXP 以上ならダブルクリックすれば中身が表示されると思うので それらをドラッグして先ほど作っておいたフォルダに移します その中に xbasic.exe という実行形式ファイルがあるので それをダブルクリックしてください コマンドプロンプトみたいな黒いスクリーンが現れると思います それが X11-BASIC のコンソールです 閉じるにはウィンドウの x ボタンを押して終了させても構わないんでしょうが 丁寧に終了するにはプロンプトで quit と入力して終了しましょう 注意ですが 解答したファイルの中に setup.exe があり あたかもこれを実行すればインストールし始めますよ みたいな雰囲気をだしてると思います 私の経験ではそれは実行させないほうが良いですね 確かに実行すると X11-BASIC をインストールするんですが X11-BASIC が C ドライブの直下に作られたり 拡張子 BAS とつくファイル
13 をすべて X11-BASIC に関連付けられてアイコンも変わります 親切とも言えなくはないのですが 余計なお世話です 解凍したファイルの xbasic.exe で BASIC が起動できて使えるならそれでいいじゃん? と思います あとコンパイラ xbc を使うには ソースファイルを X11-BASIC をインストールしたフォルダに持ってきて xbc [ ソースファイル名 ] とするのがお約束みたいです このフォルダにパスが通ってるかではなく lib フォルダが直下にあることが重要みたいです それを裏付けるために試してみました パスを通しただけではダメでしたね Windows 版 X11-BASIC を Windows の制御下で利用できる日本語コードは SHIFT-JIS です これは xbasic.exe を実行してのコンソールを表示するとおかしいと思うでしょう コンソールのメッセージの文字が化けるんです けれど SHIFT-JIS & CR+LF コードで書いたソースファイルを load して run すると日本語が表示されます 同じコードを xbasic.exe と同じディレクトリに置いてコマンドプロンプトで xbasic [ ソースコード名 ].bas で実行するとやはり日本語が表示できるます これは X11-BASIC コンソールやコマンドプロンプトが Windows の制 御下にあるからそうなるんです
14 これは X11-BASIC を Unicode(UTF-8) を表示させるターミナルで使うことをはじめから意図してるようです 試しに Cygwin をインストールしてる WindowsPC で TeraTerm に付属してくる Cygterm で UTF-8 & LF コードと指定して xbasic.exe を起動すると 化けずにメッセージが表示されるんです 色々と思惑があるんでしょうな GNU 関係のプロジェクト同志とか 世の中は Unicode が標準だからいいかげん移行しろよとか なんでこんなややこしいことをしたんだろうと思います 私が見落としてるのかもしれませんが公式な説明は見当たりません こういう わかってるでしょ? みたいな姿勢を変えないことにはユーザはつかないですよね 現に日本人ユーザってホント見かけませんし
15 MacOSX にて MacOSX には OSX ver2.0 の頃から X11 環境がインストールできるようになりました このおかげで UNIX で作られた X11 アプリケーションをソースから MacOSX でコンパイルすれば MacOSX でも使える恩恵に授かりました 今の MacOSX ではいったいどうなってるかわからないんですが 私の持ってる MacOS SnowLeopard では OS の DVD-ROM の中にオプションとして Xcode や X11 環境を含むその他設定が用意されていて OS とは別に任意でインストールを行うようになっています
16 結論を述べますと 私の環境では X11-BASIC のインストールは上手く生きませんでした ちなみに X Window System は XQuartz gcc は i686-apple-darwin10-gcc です この試行をするためだけに Xcode をインストールしたので DVD からインストールした状態からアップデートはしてません そういうニュースはないので OSX の X11 や gcc の初期不具合とかではなさそうです./configure は うまくいったのですが make で ld: symbol(s) not found collect2: ld returned 1 exit status make: *** [xbasic] Error 1 で異常終了してしまいました リンク関係すか わたくしの修行が足りないもありまして 原因究明にはいたらず つまりその調べるのもめんどくさくてですね Linux でも Windows でも Android でも動いている現状では わざわざ MacOS で動かしたいとは思わないわけで どうしても MacOS で動かしたい方は がんばってください おそらくチャレンジしてる人はきっといます
17 よう 世界ここでは Android 版の X11-BASIC のメニューを上から順番に説明するスタイルをとります Windows や Linux に X11-BASIC をインストールした方なら 改めて読むほどの内容ではないかもしれません それでも X11-BASIC を使う上での約束事もあったりするのでご覧になってください X11-BASIC はスクリプト インタプリタです コマンドを羅列したファイル ( プログラム ) を実行します X11-BASIC のプログラムでは通常 拡張子に.bas とか.xbas と付けます または 一行ずつコマンドを実行させるインタラクティブモードで実行することもできます Android でご利用の方は X11-BASIC アプリのアイコンをタップすると最初からインタラクティブモードになります Windows や Linux で X11-BASIC インタプリタを開始するには いくらか方法があります 一番簡単な方法は xbasic とコマンドを打ち込む方法です そうするとインタラクティブモードでインタプリタを使うことができます インタラクティブモード X11-BASIC を起動させると画面はこうなると思います
18 ************************************* * xbasic V * * by Markus Hoffmann (c) * * * * lib Sun Dec 7 11:53:25 CET 2014 * ************************************* > この > 印はプロンプトと呼びます このプロンプトの後にカーソルがあると思います プロンプト > の後ろに入力したコマンドは エンターキーを押せばそのまま実行されます キーボード等の入力で > print "Hello,World" と入力して改行 (Enter) してください すると > print "Hello,World" Hello,World >
19 と表示されてると思います 入力したコマンド文字列はメモリにバッファされるので 上下キーを押して過去に入力した履歴を遡ることができます このようにコンソール画面に直接コマンドを入力してコンピュータから返事を得る方法を X11-BASIC ではインタラクティブモードと呼びます いにしえの旧制 BASIC では ダイレクトステートメントと言ってたことができます ちなみに 英字は大文字でも小文字でも区別しません それでは次に足し算をします > print となったと思います print という命令はなんだろうと察するに コンソールに結果を出力する命令なんだと推測できると思いますよね プログラムはこういう命令を書いたコードをコンピュータに順番に実行させることです ここでコードを記述するために いったん X11-BASIC を終了させます X11-BASIC を終了するには 右上のメニューから Quit を選ぶか 先ほどのプロンプトに > quit
20 と入力して改行 (Enter) するか またはキーボード付きの端末なら Ctrl-C を押せば終了します プログラミングさて プログラミングする前にやることがあります なんでもいいのでエディタアプリをインストールしてください Android でもプログラムを書くにはエディタを使ったほうが楽です 私は 920 Text Editor ( 有償版 ) と Jota+ ( フリー / 有償版 ) を使わせていただいております Jota+ は BASIC のコマンドの強調表示に対応してるので結構良いです 有償版にアップグレードするかは あなたのお好みで Android 版 X11-BASIC ではプログラムを Load しようとすると ローカルディスクの下にある BAS ディレクトリを開きます パスで表記すると私の Android 端末では /mnt/sdcard/bas になります おそらく Android OS のセキュリティの制約によるアプリの決め事なんだと思います ファイルはその下にある拡張子.bas ファイルを選択することになります そのため自分で新たにプログラムを書く場合は 直接 BAS ディレクトリ以下に作成するか 他のディレクトリから X11-BASIC ソースファイルをコピーしてくることになります 私は他のディレクトリ ( 例えば work とか作成して ) にソースを作成して./BAS にコピーすることにしてます その方がバックアップになりますしね
21 まずは慣例に倣い "Hello, World" を表示させます 簡単に言えば (1) print という命令を使って"Hello,World" という文字を表示させる (2) 最後に End と書く の二点です ではエディタを開いて print "Hello, World" end と書き込んでください 半角英文字なら大文字でも小文字でもいいです プログラムを書いたら保存しましょう とりあえずお好きなフォルダに保存してください ファイル名は好きな名前でいいです Android OS のファイルシステムが全角日本語をサポートしてるのでファイル名が漢字でもカタカナでも読むことはできます けど X11-BASIC が全角文字の入出力は対応してませんので英字にしとくのが無難だと思います 拡張子は.bas としてください ファイル名に悩むなら日付で作ってみてください 2014 年 09 月 20 日なら bas みたいな感じで 題名が思いつかなくても いつ作ったのかわかるので悩んだときは良いです
22 所望のディレクトリにプログラムを保存したら その ファイルを./BAS へコピーします では X11-BASIC を起動させてください ************************************* * xbasic V * * by Markus Hoffmann (c) * * * * lib Sun Dec 7 11:53:25 CET 2014 * ************************************* > LOAD 右上のメニューから Load を選んでコピーしたファイルを選択してください またはダイレクト ステートメントで > load " ファイル名.bas" で LOAD することができます ここでフィアル名に全角文字を使っていると Android 版 X11-BASIC ではコンソールに文字を入力できないわけです LIST プロンプトに > list と入れて Enter してください
23 すると先ほどエディタで作成したコードが表示されると思います RUN 右上のメニューから Run を選んでください またはプロンプトの後に > run と入れて Enter してください すると > run Hello,World と出力されると思います NEW NEW というコマンドは 読み込んだ X11-BASIC プログラムをクリアする命令です 右上のメニューから New を選んでください または > new と入力します その後に > list
24 と入力してもリストが表示されないことがわかります またプログラムを読み込みたいなら再度 Load すればいいです QUIT 最後は QUIT で X11-BASIC を終了します Android の場合は QUIT コマンドの使い方に注意してください QUIT は本当に X11-BASIC というアプリを終了するコマンドです プログラム終了即ちアプリの終了というのなら構わないんですが 計算結果を出力するプログラムだとアウトプットを読むことができなくなります この場合は STOP や END を有効に使ってください ここまでの一連の操作の流れです (Result) > load "test.bas" > list print "Hello, World" end > run Hello, World > new > list > quit 最初のプログラムとして まずは以上でございます
25 文法と構文の基礎プログラミングとは コンピュータ ソフトなければただの箱 とは聞き古した格言ですが 実際コンピュータを動かす際には ソフトウェアが必要不可欠になってきます このソフトウェアによって ワープロ ゲーム インターネットなど 私たちはコンピュータを様々な形で使うことができるのです じゃぁ ソフトウェアはどうやって作ってるの? それは プログラミングによって作られます ソフトウェアを正しく動かすには その手順書 プログラムを作る必要があります その作業をプログラミングといいます これから X11-BASIC でのプログラミングを色々書いていきます まずはどんな入門書にも書かれているようなその言語の生い立ちでも書いておきます 別に読み飛ばしても困る話ではないのですが なんというかこれから使い方を思える言語への愛着というか 親しみというか持っているといないのでは継続に違いはあると思うんですよね 意気込みっていうんですか? そういうのを感じていただければいいと思います BASIC の生い立ち BASIC は 1964 年ころにダートマス大学の J.G. ケメニーと T.E. カーツによって開発された教育用プログラミング言語です 当時 主流だった FORTRAN を手本としながらも
26 FORTRAN の使いにくいところを初学者向きに改めて作成された言語です ケメニーとカーツの BASIC は 現在 True BASIC と呼ばれ Windows Mac UNIX などに対応したバージョンがあります マイコン用 BASIC 現在 多くの人が BASIC だと思って使っている言語は 本来の BASIC とは異なるものです NEC の N88-BASIC や富士通の F-BASIC シャープの Hu-BASIC などです これらの言語は 見かけはよく似ていますが 根幹となる部分で本来の BASIC と相違する点があります これらの言語は マイコン用に改変された文法を継承しています 初期のマイクロコンピュータは現在の PC とは異なり メモリをふんだんに使うことはできませんでした いかにして限られた容量の ROM のなかに BASIC 処理系を詰め込むかが勝負となったのでした そのために採用された手法の 1 つがインタプリタです インタプリタは 書かれたコードを一行ずつ順番にマシン語に変換し実行します そのためプログラム全体としての実行は遅いです その代わり 一行に print 1+1 と入力して Enter すればすぐに 2 と返答するようなダイレクトステートメントのような使い方ができて電卓くらいの意識で気軽に使えたわけです ちなみにこれが Microsoft の Quick BASIC みたいな構造化 BASIC になりますと話は変わります それまでは1 行 1
27 行機械語に翻訳してたわけですが 構造化 BASIC の仕様上プログラムリストを読み込んで構造を分析しなければならなくなりました その段階でダイレクトステートメントという小技は使えなくなりました じゃあ代わりに というわけでしょうか 構造分析する手間があるんだったら文法のミスとかエラーも添削しましょうというわけになりました そういういきさつが現在の一般的な IDE の親切機能に反映されてるわけですね BASIC 言語の標準化マイコン時代に各社各様の BASIC が乱発されたことにより BASIC の仕様に危機が訪れます そこで BASIC の標準化をしようという活動が始まりました BASIC の標準化のための作業は 1974 年に始まり 4 年後の 1978 年に米国および欧州で Minimal BASIC( 最小 BASIC) として規格化されました 1982 年には国際標準化機構 (ISO) 原案が作成され 1984 年には Minimal BASIC の国際規格が制定されました 日本では ISO 規格案に基づいて 1982 年に 基本 BASIC という名称で Minimal BASIC が規格化されました Minimal BASIC の規格化に引き続いて BASIC の完全バージョン (Full BASIC) の規格化作業が開始されたのですが その作業はかなり難航したようです 1982 年に原案が作成され 1986 年に欧州 1987 年に米国で規格として成立しました 国際標準化機構 (ISO) は 1991 年に欧州規格と米国規
28 格を包含する形で Full BASIC の ISO 規格を制定しました 日本では ISO 準拠の形で 1993 年に Full BASIC の JIS が制定されました 1989 年 米国でモジュールおよび単文字入力に関する追加の規定が規格化されました これは JIS では参考として収録されています 問題解決指向現在 広く用いられているプログラム言語のほとんどは プログラムを書く人自身の問題を解決するために書かれるのではなく 他の誰かがユーザとして使うことを考えて作り始めるのが普通です プログラミングという体験に向かう姿勢に違いがあるということがわかると思います しかし 本来の BASIC は 問題解決指向です プログラムを書くのは 他者に使わせるためではなく プログラムを作成する人自身の問題を解決するためです 他者に使わせるプログラムでは入力をわかりやすくするための装飾的部分が重要になりますが 自分で使うプログラムでは装飾的な部分や説明的な部分に手間をかけたいとは思いません Full BASIC はコンピュータの専門家でない人が問題を解決するツールとして使うのを考えています Visual Basic は 割と他の人が使うことを想定して作るもんです じゃ X11-BASIC は? ということになりますが これは割とバランスのとれてる仕組みでどうとでも作ることができる気がし
29 ます GUI 風に部品を綺麗に配置することも または武骨にターミナル上でコマンドラインで使うこともできます まあ Visual Basic が GUI ベースの Windows を普及させるための先人になってしばらく だいぶこなれてきたということでしょう なんにしても プログラミングという作業はお給料をもらったり クライアントさまのことを考えながら作るものだという思い込みは捨ててしまってかまいません プログラミングは日々の日記をブログに載せたり チラシの裏に描いた絵をスキャンして投稿したり YouTube に動画を投稿したりと同じく個人的体験だという そこがポイントです BASIC バッシングおおむね好意的に受け入れられてきた BASIC ですが コンピューターの世界には反対意見も存在していました 特に目立って論陣を張っていたのが オランダのコンピューター科学者であるエドガー ダイクストラ教授でした 2002 年に亡くなったダイクストラ教授は BASIC に関して BASIC に一度でも触れたことがあるものに対して良いプログラミングを教えることは事実上不可能である と発言するなど 強硬な反 BASIC 論者として知られていました 実際には PL/I は 致命的疾病 FORTRAN につい COBOL に至っては 犯罪行為 とまで批判していたために BASIC のみを標的にしていたものではなかったのです まあ 批
30 判屋稼業というのはいつの時代もどんなところにもいるってことでしょうか ネガティブで不安を煽るニュースの方が記憶にはよく残るもので そういうわけで何かと BASIC というと ちょろい言語 という先入観を持たれるようになりました しかし 現在でも Microsoft 謹製の他にもいろいろな BASIC が生き残ってることを考えるとそうした印象が的はずれだったとわかると思います なぜでしょう 理由があります そもそも BASIC が初学者のプログラミングスキル習得を目的としたプログラミング言語だからです そこをよく誤解しますよね 新しいプラットホームができて そこでプログラミングしてみようとする人が現れる限り そこに BASIC があるわけなんです
31 コンソールへの出力 Print 文 Print は コンピュータに出力をさせるための命令です Print 文を利用して文字列を表示することができます 文字列は その前後を引用符 (") で囲んで表します 基本的に プログラムは上から下に読まれます 命令はこんな風に 複数行にわたって書くこともできます まずは X11-BASIC を起動してプログラムリストを Load して実行する方法で実行してみます xbasic ********************************************************** * xbasic V * * by Markus Hoffmann (c) * * * * version date: Mon Aug 4 21:15:31 CEST 2014 * * library V.1.23 date: Mon Aug 4 21:13:35 CEST 2014 * ********************************************************** > load "test.bas" > list Print "Hello, World" Print Print "I am X11-BASIC" End > run Hello, World I am X11-BASIC
32 > Print の隣に何も記述しないで ただ Print とだけ書くと空白行が出力されます Print の隣に式を直接書くと コンピュータに計算させることができます 今度はターミナル上で実行させてみましょう コードの先頭に #! パス名 と終わりに Quit 文が入ってるのがポイントです Quit 文により 処理が終了したら X11-BASIC インタプリタも終了するようにしています Andoroid を試用されてる方は Quit 文は外したほうがいいでしょう いちいちアプリが閉じてしまいますから ls -l test.bas -rw-rw-r-- 1 holy holy 35 3 月 4 21:40 test.bas holy@901:~$ chmod +x test.bas holy@901:~$ ls -l test.bas -rwxrwxr-x 1 holy holy 35 3 月 4 21:40 test.bas holy@901:~$ cat test.bas #! /usr/bin/xbasic Print 1+3 Quit End holy@holy-901:~$./test.bas 4 代数を使うこともできます
33 仮に a を底辺 b を高さとしたら 出力される結果は三角形の面積ということになります すでに実行権を付加してる test.bas を編集して使いまわします Android を使ってる人は メニューから Edit を選択してコードを書き換えてみてください 書き換えたら保存して 再ロードしてください holy@901:~$ cat test.bas #! /usr/bin/xbasic a = 3 b = 4 Print (a * b) / 2 Quit End holy@901:~$./test.bas 6 Print 文では計算結果を出力するときにその様式を制御することができます そのうち 特に重要なものを説明します Print 文には コンマまたはセミコロンで区切って複数の項目を書くことができます 項目の区切り記号にセミコロンを用いると 各項目は詰めて表示されます 項目の区切りにコンマを用いると 各項目は一定の桁位置まで空白を出力した後に出力されます たとえば
34 (X11-BASIC) Print 1;2;3,4 End (Result) 通常 Print 文を実行すると 最後に改行します 改行したくない場合には Print 文の末尾にコンマかセミコロンを書いておきます たとえば (X11-BASIC) Print 1;2; Print 3;4 End (Result) 1234 のように出力されます コンソールからの入力 Input 文プログラムの実行時に変数に値を代入したいときには Input 文を用います Input 文では Input に続けて数値を代入したい変数をコンマで区切って並べます
35 次のプログラムは 入力された 2 数の平均を表示します 例ではセミコロンを末尾につけた Print 文を直前に入れ ることで 何を入力するのか表す小技を使っています (X11-BASIC) Input " a=? "; a Input " b=? "; b Print (a + b) / 2 End (Result) a=? 35 b=?
36 命題数値加減乗除の演算を それぞれ + * / で表します また ベき乗の演算は ^という記号を用いて たとえば 2 3 を 2^3 のように表します 異なる演算記号を含む式を書くと 最初にべき乗を実行し 次に乗除算を実行して 最後に加減算を実行します 同順位の演算は左から実行します 計算を実行してその結果を表示させるのに Print 文を用います (X11-BASIC) Print 2+3*4^2 Print 3/4*5 Print (2^4)^5 End (Result) 行目は 2+3 4^2 を計算します 2 行目は を計算します (3/(4 5) ではありません ) 3 行目は (2^4)^5 を計算します ここで ちゃんと ( ) で囲まないと
37 Print 2^4^ となります X11-BASIC は から までの 32 ビット整数を使います 浮動小数点は 64 ビット IEEE754 標準にしたがいます それらは 52 ビットの仮数 ( 常用対数小数部 ) と 11 ビットの指数と符号ビットを持っています それらは 16 桁目を+ ー符号として使って 1e-308 から 1e+308 の値に置き換えられます 乗数でも+ ーの符号を使った表現ができます E-3-1.3E 進数整数を 16 進数や 2 進数表記に置き換えることがで きます 16 進数は $( または 0x) と表現されます 2 進数表記 では % を用います % $FFE0 0xA0127BD -% % 算術関数 X11-BASIC は基本的な算術関係の関数を取り扱っています 三角関数 :SIN() とか ATAN() 対数 :LOG() ビット演算 :AND とか OR
38 最大最小 :MIN() と MAX() 余りとか整数 :MOD とか INT() 演算子 数値演算子はおおよそ 以下のような分類で分類されて います 算術演算子 (arithmetical operators): ^ * / + - 比較演算子 (comparison operators): = <> < > <= >= 論理演算子 (logical operators): NOT AND OR XOR... X11-BASIC の演算では 次のような優先順位で認識します 優先度演算子 1 ( ) parenthetical expression 2 ^ exponent/power 3 sign (negation) 3 + sign 4 NOT bitwise not 5 = divide 5 * multiply 5 " integer division 5 MOD modulus (rest of division) 6 + add 6 - subtract 7 << bitwise shift to the left 7 >> bitwise shift to the right 8 = logical "equals"
39 8 <> logical "not equal" 8 < logical "less than" 8 > logical "greater than" 8 <= logical "less than or equal" 8 >= logical "greater than or equal" 9 AND bitwise and 9 OR bitwise or 9 XOR bitwise xor 9 IMP implies 9 EQV equivalence 10 = assignment 変数 X11-BASIC での変数は 動的型付けでグローバルです どういうことかと言いますと まず変数を使用するのにどんな型の変数を使うのか宣言する必要がありません X11-BASIC のほうで勝手に判断してくれます またどこから変数を使い始めても その変数はプログラム内ならどこでも使えます プロシージャや関数ないでもそれが通用します 具体的な例を示します (X11-BASIC) A = 1
40 End Procedure Flip() A = A + 1 Print A Return Procedure Flop() A = A - 1 Print A Return (Result) となりますし あえてプロシージャや関数でのみ使いたい 使い捨ての変数なら (X11-BASIC) A = 1 End Procedure Flip() Local A A = A + 1
41 Return Print A Procedure Flop() Local A A = A - 1 Print A Return (Result) となります X11-BASIC は二つのスコープを使います すなわち Global か Local かです Global がデフォルトとなります Global 変数は プログラム内ならどこでも使えます Local と宣言しない限り X11-BASIC の変数はデフォルトで Global 変数です しかしグローバル変数を多用することでプログラムコードの可読性や理解が低下するという弊害もあります とはいえコードのどんな場所でも変数の値を変えたいときに変えることができるというのもいいことですよ Global 変数は他の Local スコープの変数と名前がかち合う恐れが多々あります そういうわけで X11-BASIC も 注意を払う必要のあるプロシージャや関数で使えるように Local 変数を供します
42 もし同じ名称の Global 変数があったとしても Local に使 われてる変数とは別物と扱われます 命名変数の名前を命名するのに文字と数字を使うことができます 変数名の中にスペースを入れることはできません そういうときはアンダースコアで代用してください 変数名は複数文字を使ってある程度長くてもいいです 変数名の最初の文字に数字やアンダースコアを使うことはできません X11-BASIC の命令に似た変数名にはしないでください トラブルの元になります 例えば TRUE, FALSE, TIMER, PC, TERMINALNAME$ とかいうのも避けるべきでしょう 確かに変数の命名はユーザに任せてます しかし既に内 部変数として使われてる名前は使えません それと次のよ うな名前もつけるべきではありません x, auto%, lives%, bonus1%, x`1, city`name$ 次のような変数にも X11-BASIC は警告を出します `blank, 1x,?value%, 5s$. 変数の頭文字は A-Z で始まるようにするのが安全です
43 変数名がコマンド名とか他の型の変数や配列名と区別のつきにくい名前もよくありません 例えば A$ という文字列変数があるとすれば A とか A(1,1) とか A$(1,1) 見分けがつきにくいと思います コマンド間のスペースは無視されます しかし とりわけ括弧の前後 ASC("A") とするのを ASC( "A" ) とか ASC ("A") とかするのはダメです ( 例 ) 整数型 : i%=25 my`adr%=varptr(b$) b%=malloc(100000) 実数 ( 浮動小数点 ) 型 : a=1.2443e17 b=@f(x) 文字列型 : t$="hello everybody!" 配列 : i%(),a(),t$(), [1,3,5;7,6,2]
44 変数の型変数に入ってる中身がなんなのかどうすれば知ることができるでしょう X11-BASIC では 変数名そのものが変数の型式を語ります X11-BASIC は特殊な印をつけることでデータ型を見分けます X11-BASIC は 浮動小数点や整数 文字列や配列も扱えるインタプリタです 配列の宣言には DIM 命令を使うものの 変数の型の宣言は必要ありません X11-BASIC インタプリタは 変数名文字列の末尾で変数の型を認識するからです 整数は 変数名 % 文字列は 変数名 $ 配列は 変数名 () 末尾にこれらの識別記号のない変数は実数 (Float) として扱われます が使われます それと論理型は 整数と同じ記号が使われます 注意していただきたいのは 個々の変数の用途や区別は 名付け親であるあなたの命名センスを以って実現できてることです 変数名の名付けで不精しないようにしてください ( 例 ) x=10.3 : 64bit 浮動小数点実数型 x$="hello" : 文字列型 x%=5 : 32bit : 関数プロシージャのコール
45 x()=[1,2,3,4] : 配列参照 式値を計算するためには式が必要です 最も単純な式は 数値または文字列定数です 定数 変数 演算子 関数呼び出しを使うともっと複雑な式になります X11-BASIC の式の表現形式は 他の多くの BASIC と同じです 演算子には通常の優先順位があり 括弧を使用して演算の順序を変更することができます PRINT (x-1)*10+sin(x) X11-BASIC では条件と式が同等に扱われます X11-BASIC はブール演算の条件と式を区別する術を持たないため 演算演算 (AND OR XOR NOT) はバイナリ値で操作します したがって TRUE が-1 であるとすれば 全てのビットにおいてそうなります オペレータはそうビット操作をすることになるでしょう 式が FALSE でない限り状態は TRUE と考えられます この場合 FALSE は必然的に 0 以外の数となる TRUE はすべてのビットが 1 であることを意味し-1 です そこでオペレータは これらの各ビットで動作します このような条件式が FALSE でない場合は TRUE とみなされます ( 結果がゼロ以外の値でなければならないことを意味します )
46 代入文変数に数値を記憶させることを代入といいます 変数に新たな数値を代入すると それ以前に保持していた数値は消滅して参照できなくなります 変数に数値を代入するのに数値式を用いると 右辺の値が計算されて左辺の変数名が示す変数に代入されます 文字列文字列変数は 任意の長さのキャラクター ( バイト ) です 仮想メモリが許す限りの長さを得ます 文字列は一般に ASCII テキストで 必要ならば任意の長さのバイトコードも保持することもできます X11-BASIC は必要に応じて自動的に解釈します もしバイトコードを X11-BASIC が文字列と判断すれば 長さ等も変わり メモリ上の位置は変わることでしょう 文字列変数は $ と決められています 文字列定数は " " で囲みます 文字列に特殊文字を連結することもできます 通常 文字列をサブストリングに分けといて 実行するとキャラクタコードの断片を + で連結するという手を使います st$="this is a special string, containing a bell character at the end"+chr$(7)
47 ちなみに ダブルクォーテーション文字は chr$(34) で表 現できます 配列 DIM 命令によって配列を宣言します 配列はいくつもの型の変数を同時にメモリ上に保持します 通常の変数は一度に一つだけの値を持ってますが 配列は数個の値を持つことができます 変数にインデックスと言う添字をつけることでそれぞれの値と対応付けます インデックスは ( と ) に囲まれた数値です インデックスの数値に制限はありません 配列の次元にも制限はありません ただしインデックスと次元は 正の整数値でかつメモリが許すだけになります X11-BASIC の配列は 文字列形式も含む任意のデータ型です X11-BASIC 基本の特殊な機能としては 配列の暗黙的な定義と配列定数の存在です Dim b(10) a()=b() ここで b() は事前に DIM 命令で定義されているものとし ます a()=[1,2,3,4;6,7,8,9]
48 配列定数を割り当てます ( この例では 2 次元配列が作成 され 行がセミコロン ; で分離されています ) 書式指定 Print <expression> Using"<format string>" Print 文に書式指定を追加するときは Print 文の後に Using 書いて " " で囲まれた内部に節を書きます Print 数値式 Using " 書式指定文字列 "[, 数値式 using " 書式指定文字列 "]) です 書式を作成するとき 整数部の桁数が不足しないように注意してください 特に 負数の場合 負号を出力する分の桁の確保を忘れないように 書式を指定すると 小数部は指定された桁数に合わせて四捨五入されます 数値の表現 数値表現の書式の詳細は次のようになります + 数値の符号を書きます ( 任意 ) - 負である場合のみ数値の符号を書きます ( 任意 ) # 十進数の数値の桁数を指定します 指定された桁数より小さい場合は 右詰めになります 0 必要ならば ( 任意 )
49 . 小数点の位置を表します, 1000 区切りで を挿入します ^ 10 の乗数を書きます 例 1 Print Pi Using "-#.###" Print Pi Using "+0#.###0" Print -11^11 Using "##.##^^^^" -2.85e+11 例 2 (X11-BASIC) For i = 0 To 17 n = 10 ^ i Print n Using "####################.##############", (1 + 1 / n) ^ n Next i End (Result)
50 例 3 (X11-BASIC) For x = To Step Print x Using "#.#########", Sin(x) Using "-#.###############" Next x End (Result)
51 例 4 (X11-BASIC) ' case-a a = Sqr(2) Print " Plain Output" Print " Print Sqr(2) = "; a Print a Using "##.#####" Print a Using "##.####" Print a Using "##.###" Print a Using "##.##" Print ' case-b b = Print " Plain Output" Print " Print ###.### = "; b Print b Using "###.###" Print b Using "+0###.###0" Print b Using "###.###^^^^" Print ' case-c c = Print " Plain Output" Print " Print ###.### = "; c Print c Using "###.###" Print c Using "+0###.###0" Print c Using "###.###^^^^" Print ' case-a,b,c Print a, b, c Print a Using "###.###", b Using "###.###^^^^", c Using "#.###^^^^"
52 End (Result) Plain Output Print Sqr(2) = Plain Output Print ###.### = 1e <= 小数点の位置を基準にそろえる 1.000e-05 Plain Output Print ###.### = ******* <= 桁が足りないので表示できない ********** <= 桁が足りないので表示できない 1.000e e e e+04 プロシージャと関数 X11-BASIC は構造化された手続き型プログラミング言語で す それぞれが単一のユニットのように動作する複数のセ
53 クションで プログラムは構成される いわばカプセル化された構造形態を持ちます ブロックの始めと終わりは 明示的なキーワードによって区切られます 伝統的 BASIC の実装とは違い X11-BASIC で行番号は使用されません 一行はすべて何かしらの命令を持ちます Goto でのジャンプも可能ですが そこはループと中止コマンド (Exit If や Break) をご利用していただきたい 任意の型の戻り値を持つプロシージャと関数は再利用可能です これによりプログラムをモジュール単位で構造化できます プログラムは プロシージャや関数をコールするメインとなる部分を持ちます その他のライブラリをマージコマンドで追加することもできます 1. プロシージャと関数 X11-BASIC には プロシージャと関数の 2 つサブルーチンの種類があります この違いは プロシージャは値を返さず 関数は単一の値を返す点です プロシージャや関数は メインブロックの後に書かれなければなりません したがって一般的な X11-BASIC プログラムの次の構造になります Main program block : End
54 Procedures and Functions : プロシージャは プログラムのどこからでも呼び出すことができるブロックです これらのサブルーチンは引数を取ることができます しかしプロシージャ内で処理された結果を返すことはしません それらは プロシージャローカルの変数だけでなく すべての変数に言えます 関数は他の式から呼び出すことができるブロックです 例えば A = 3 とか指定することができます 関数の中での変数は Local 宣言しない限り変数は Global です 同じ名前を持つ Local 変数の関数外での変更は 明示的に関数内で指定しない限り関数内の値を保持しません 関数の引数は 任意のデータ型の変数や配列になります 関数は 任意のデータ型の変数を返すことができます デフォルトでは 引数は値渡し (ByVal) で渡されます 次のは 割と関数を使う典型的な例です (X11-BASIC) 'Main x = 0.0 y = 0.0 z = 0.0 For i = 1 To 100 x = x + 1.0
55 End For j = 1 To 100 y = y z y) Print " x="; x; " y="; y; " z="; z Next j y = 0.0 Next i Quit Function Equation(X, Y) Equation = (X + Y) / 2.0 Return Equation End Function 2. プロシージャプロシージャは キーワード Procedure に続く プロシージャ名 で始まり 引数 (parameters) はプロシージャに渡されます すべてのプロシージャの終わりは RETURN で終了します プロシージャの形式はだいたい次の形式になります Procedure ProcName(parameters) Local vars : Procedure logic : Return
56 サブルーチンの変数は サブルーチン名の後ろの括弧の間に配置され メインプログラムでプロシージャを呼び出した変数の配置と同じ順序でなければなりません サブルーチン内で使用されるすべての変数は Local ステートメントを使用して ローカルに宣言する必要があります プロシージャは次の 2 つの方法で呼び出すことができます Gosub を使用します 次の例 テキストコンソール上の進行状況バーを示す progress() プロシージャでは 次の方法で呼び出し 総量 a と区分 b の変数が引き渡されます Gosub Procedure progress(a,b) Local t$ If verbose Print Chr$(13);"[";string$(b/a*32,"-");">"; Print String$((1.03-b/a)*32,"-");"_ ";str$ (int(b/a*100),3,3);"% ]"; Flush Endif Return 3. 関数 関数は 関数名に続く Function ヘッダーで始まり キー ワード Endfunction で終了します 関数は 数値や文字列
57 の関数いずれかです デフォルトでは数値関数です 文字列関数は文字列を返し 関数名 $ で定義されます 関数は 少なくとも 1 つの関数の値を返すための Return 文が必要です だいたい次のような形式で使用します Function FuncName[$](parameters) Local vars : function logic : Return value[$] Endfunction 戻り値の型は 関数の型と一致する必要があります 文字列関数は文字列を返しますし 数値関数は数値を返します 数値はデフォルトでは実数として扱われます Return 文が実行されると関数は呼び出し元に戻ります E ndfuncction 文は 関数の終わりを意味し プログラムがこの文だけを実行しようとするとエラーになります 関数名 で呼び出されます 例として 文字列関数の Copy$() を呼び出す例を示します Right$ 4) ここで呼び出される Copy$() という関数が次の様になりま す
58 Function Copy$(a$, p) Local b$ b$ = Mid$(a$, p) Return b$ Endfunction 次の様に書くこともできます Function Copy$(a$, p) Return Mid$(a$, p) Endfunction (X11-BASIC) 'Main A = 1 A Print " A = "; A Quit End Function Test(B) B = 12 '... B = 123 Return B End (Result) A = 123
59 関数 Function の置き換え命令として Deffn 文があります これは関数式を一行で記述する命令です 上の例で使用した Copy$() 関数は Deffn 文では次の様に表すことができます Deffn Copy$(a$, p) = Mid$(a$, p) ローカル変数は使わないものとして サブプロシージャと関数の違いは核心部を Deffn で置き換えれるかどうかの違いとも言えます Deffn と Function の違いは コンパイラは Deffn を一行の表現として扱いシンボル名を要しないことです 余計なコードを実行するよりもその方がいくらか早くなります 4. パラメータ引数とローカル変数 X11-BASIC の変数ならどんな型でも プロシージャや関数に渡すことができます デフォルトではすべて値わたし (ByVal= by value ) で渡されます Var 命令によって参照渡し (ByRef= by reference で渡すこともできます Local 命令は そのプロシージャまたは関数でだけ通用する変数を定義します サブルーチンのパラメータは ローカル変数です サブルーチンが別のサブルーチンを呼び出すとき 呼び出しルーチンのローカル変数は グローバル変数のように呼び出されたルーチンでは認識されます
60 Local 命令の後に カンマで区切って複数のローカル変数を表記することもできますし べつに Local 行が複数あってもかまいません 注意した方がいい例を次にあげます X11-BASIC ではサブプロシージャでローカル宣言をしてますが そこで初期値を何も入れてないためにメインの値がそのまま入っています GAMBAS で同じコードを書いて実行した例もつけておきます GAMBAS では サブプロシージャで定義したローカル変数は宣言と同時に初期化されてます こういう 仕様 と言えばそうなんだーと言える細かい意外性があることに注意が必要ですね (X11-BASIC) 'Main a = 1 Print " [email protected]: "; Print " [email protected]: "; a Quit End Procedure Test1() Local a Print " [email protected]: "; a a = 2 Print " [email protected]: "; a Return End
61 (Result) (GAMBAS) ' Gambas module file Public Sub Main() Dim a As Integer a = 1 Print " [email protected]: "; a Test1() Print " [email protected]: "; a Stop End Sub Test1() Dim a As Integer Print " [email protected]: "; a a = 2 Print " [email protected]: "; a End (Result) [email protected]: 1 [email protected]: 0 [email protected]: 2 [email protected]: 1
62 End 文と Quit 文 Stop 文 X11-BASIC の End 文は プログラム全体の終了を意味します プロシージャの終了は Rturn 関数の終了は End Function で締めくくります Quit 文はすべてのウィンドウを閉じてメモリを開放し プログラムを終了させます Android のショートカットで X11-BASIC プログラムを起動した場合や Linux/Windows でシェル風に X11-BASIC を起動した場合 プログラムの実行した終わりに Quit 文があると ウィンドウを自動で閉じて終了します どちらのコードでも 終わりに "Quit" があると 人間がインタプリタを閉じるアクションが必要がなくなります Android 版で注意が必要なのは Quit は本当にアプリを終了すことです そうすると計算されて出てくるはずのアウトプットを読むことができなくなります この点が UNIX バージョンとは異なります End を有効に使ってください プログラムの一時中断は Stop 文を使います Stop 文の箇所で一旦インタプリタのプロンプトがあらわれます そこから Cont と入力することで その続きを再開することができます 行がスクロールするのを一旦止めたりするのに使うとよいと思います
63 制御構文読みやすいプログラムとは何でしょう そういう問いをダイクストラ (Edsger Wybe Dijkstra) という人がプログラミング技法 構造化プログラミング で提唱しています ダイクストラは どんなプログラムの流れも順次 選択 反復の三つ (3 大制御構造 ) で構成されているからそれらに制限すべきだと主張しています 順次 : 上から順番に実行する 選択 : 条件によって分かれる 2 つ以上を別々に記述してどれかを実行する 反復 : ある範囲を条件を満たす間だけ繰り返して実行する つまり ジャンプを使うな といっているわけです この世にあるほとんどのプログラムがこの単純な制御構造を駆使して作られています X11-BASIC にも Goto 文はあるわけですが 制御構文はその教えにしたがっています 逆に言えば これをマスターすれば大抵のプログラムの構造を読めるってわけです 分岐処理指定した条件に応じて プログラムのコードブロックのみを実行させたい場合などは 分岐ステートメントを使用します
64 If...Then...Else If ステートメントは以下のように使用します (X11-BASIC) Input A If A > 3 Then B = 2 Print B Endif End このサンプルコードで B=2 の行が実行されるのは 変数 A の値が 3 より大きい場合だけです (Result) holy@mint ~ $ xbasic testx.bas? 1 > quit holy@mint ~ $ xbasic testx.bas? 5 2 > run? 1 > If ステートメントのバリエーションとして If/Else 句 があります
65 (X11-BASIC) Input A If A > 3 Then B = 2 Else B = 0 Endif Print B End このサンプルコードで変数 B に代入される値は 変数 A が 3 より大きい場合は 2 となり それ以外の場合は 0 となり ます (Result) holy@mint ~ $ xbasic testx.bas? 5 2 > run? 1 0 > If ステートメントをカスケード化して 以下のようなよ り複雑な条件分岐を行わせることもできます (X11-BASIC) Input A
66 If A = 0 Then B = 0 Else If A < 3 Then B = 1 Else B = 2 Endif Print B End このサンプルコードでは 変数 A の値が 0 であれば 変数 B には 0 が代入されます 変数 A の値が 3 よりも小さければ ( ただし 0 とは等しくない ) 変数 B には 1 が代入されます これら以外の場合 ( つまり変数 A の値が 3 以上の場合 ) 変数 B には 2 が代入されます (Result) holy@mint ~ $ xbasic testx.bas? 0 0 > run? 2 1 > run? 5 2 > If 文を二重 三重にすることもできます そういう時は
67 字下げをしてどの条件の処理なのかわかりやすく記述するのがコツです 字下げをすることは必須ではないんですが デバッグが楽になりますのでやっといた方が自分のためです (X11-BASIC) Input A Input B C = 0 If A = 0 Then If B = 0 Then C = 1 Endif Endif Print C End この例では 変数 A を判定した後に 変数 B を判定する という二重の関門を設けています それにより 変数 A=0 かつ変数 B=0 である場合だけ変数 C に 1 が入ります (Result) holy@mint ~ $ xbasic testx.bas? 0? 0 1 > run? 0? 1
68 0 > 条件の書き方不等式 a b a b は それぞれ a<=b a>=b のように書きます また a と b とが等しくないこと (a b) は a<>b と書きます And Or Not と括弧を用いて複雑な条件を記述することができます たとえば p かつ q という条件を X11-BASIC では p And q と書きます また p または q を p Or q と書きます 数学では a<x かつ x<b のことを a<x<b と書きますが BASIC ではこういう書き方はできません すると 上の二重に関門を設けたプログラムを次のように書くことができます (X11-BASIC) Input A Input B C = 0 If A = 0 And B = 0 Then C = 1 Endif Print C End
69 Select...Case Select...Case ステートメントは If ステートメントのカスケード化と同等の機能を果たすもので 複数の条件に対する分岐を行う際に使用します このサンプルでは 変数 DayOfWeek の値が 1 であれば Sunday 2 であれば Monday というように 各曜日の名前を番号で識別させています (X11-BASIC) Input "Number(1-7)? "; DayOfWeek Select DayOfWeek Case 1 NameOfWeekday$ = "Sunday" Case 2 NameOfWeekday$ = "Monday" Case 3 NameOfWeekday$ = "Tuesday" Case 4 NameOfWeekday$ = "Wednesday" Case 5 NameOfWeekday$ = "Thursday" Case 6 NameOfWeekday$ = "Friday" Case 7 NameOfWeekday$ = "Saturday" Default NameOfWeekday$ = "Out of Number"
70 EndSelect Print NameOfWeekday$ Stop End (Result) ~ $ xbasic testx.bas Number(1-7)? 1 Sunday > run Number(1-7)? 5 Thursday > run Number(1-7)? 10 Out of Number > Select コマンドによる条件判定は 単純な 1 対 1 に限定されるものではなく Case による個々の分岐指定部には複数の条件式をリスト化して一括指定することが可能です 以下のサンプルコードでは 特に多用される条件判定の例を示します (X11-BASIC) a = Int(Rnd(1) * 6 + 1) Select a Case 1 Print "1: ";a Continue
71 Case 2 Print "1 or 2: "; a Case 3, 4 Print "3 or 4: "; a Case 5 Print "5: "; a Default Print "Default: "; a EndSelect Stop End (Result) holy@mint ~ $ xbasic testx.bas Default: 6 > run 3 or 4: 3 > run 5: 5 > run 5: 5 > run Default: 6 > run 1 or 2: 2 > run 3 or 4: 3 >
72 ループループは 特定のコードブロックを指定した回数繰り返し実行させる場合などに使用します またループの実行回数は 不特定値とすることも可能です For...Next For...Next は繰り返しの構文です For と Next は常に対にして用いられる命令で For 文に指定された変数の値を順に変化させながら For 行と Next 行にはさまれた各行を繰り返し実行させます 次に示すプログラムは n=1,2,3,...,10 の n^2 について計算します (X11-BASIC) ' 例 1 For n = 1 To 10 Print n, n ^ 2 Next n Stop End (Result) holy@mint ~ $ xbasic testx.bas
73 > 例 1 では まず n=1 に対して Print 行が実行され 次に n=2 に対して Print の行が実行されます 次は n=3 に対して...( 以下同様のことを順に繰り返して 最後に n=10 を実行して終了します ステップ実行を選択して 変数の値の変化と実行順序を調べてみてください もう少し For...Next を詳しく知るため 次のプログラムを実行してみてください (X11-BASIC) ' 例 2 Input "n? "; n For k = 1 To n Print k Next k Print "Last", k Stop End (Result) holy@mint ~ $ xbasic testx.bas
74 n? Last 11 > このプログラムを実行して n に 10 を入力してみると Last 行の Print 文を実行したときには k の値が 11 になっています 上のプログラムでは 最初 k に 1 が代入され Next 文を実行するごとに k の値に 1 が加算され それが n より大きくなると Next 文の次に進むという動作をしています それでは n に 0 を入力するとどうなるでしょうか X11-BASIC の場合 ループ内の処理が一度は実行されます 言語仕様にもよりますがが For 文の条件をすでに満たしていれば実行されない言語と挙動が変わるので注意が必要です 一度処理したら 次は k の値が n より大きいので For...Next 内の文を実行せずに Last 行に進みます この性
75 質は重要ですの覚えておきましょう (Result) ~ $ xbasic testx.bas n? 0 1 Last 2 > For...Next の応用 ( 数列の和と積 ) 次のプログラムは自然数 n を入力すると n^2 の総和を計算します 和を媒介変数 S を用いて求めます まず ループに入る直前に初期値として S に 0 を代入しておき ループ内で k=1,2,3,...,n について S に k^2 を加算します (X11-BASIC) ' 例 3 Input "n? "; n S = 0 For k = 1 To n S = S + k ^ 2 Next k Print S End (Result) n? 5
76 55 同様の手法で数列の積を計算できます 順列の数 npr(=n(n 1)(n 2)... (n r+1)) は次のように計算できます (X11-BASIC) ' 例 4 Input " npr: n? "; n Input " npr: r? "; r p = 1 For k = (n - r + 1) To n p = p * k Next k Print p Stop End (Result) holy@mint ~ $ xbasic testx.bas npr: n? 5 npr: r? 3 60 > For...Next の応用 ( 漸化式で定義された数列 ) 変数の値を順に更新していく手法を用いると 漸化式で定義された数列の計算ができます 次のプログラムは a(1)=5 a(n+1)=3*a(n)+2 で定義され
77 る数列 {a(n)} の第 n 項を計算します (X11-BASIC) ' 例 5 Input "n? "; n a = 5 For k = 2 To n a = 3 * a + 2 Next k Print a Stop End (Result) holy@mint ~ $ xbasic testx.bas n? 3 53 > run n? 2 17 > run n? 1 17 > n=1 の場合の結果は a=5 になって欲しいんですが n=2 の場合と同じになってます これは条件を満たしていても For...Next 内の文を 1 回は実行するためです ですので そこに注意して例 5 を書きなおすと
78 (X11-BASIC) ' 例 5' Input "n? "; n a = 5 If n > 1 Then For k = 2 To n a = 3 * a + 2 Next k Endif Print a Stop End (Result) holy@mint ~ $ xbasic testx.bas n? 3 53 > run n? 2 17 > run n? 1 5 > のように If 文で n=1 の場合は For...Next を実行しない ように回避する必要があります
79 Step 文 For...Next 構文で繰り返しのたびごとに制御変数に加算される数値を 1 以外の数値にすることができます 次のプログラムでは x の値を 0 から 1 まで 0.1 ずつ加算しながら x2 を計算して出力します (X11-BASIC) ' 例 6 For x = 0 To 1 Step 0.1 Print x, x ^ 2 Next x Stop End (Result) holy@mint ~ $ xbasic testx.bas >
80 また 数値を大きい値から小さい値へ変化させる目的で この構文を用いることができます (X11-BASIC) ' 例 7 For k = 10 To 1 Step -1 Print k Next k Stop End (Result) holy@mint ~ $ xbasic testx.bas > While...Wend While の後に書かれた式の条件が成立する間 繰り返しを
81 実行する構文です (X11-BASIC) a = 1 While a <= 10 Print " No."; a a = a + 1 Wend End (Result) holy@mint ~ $ xbasic testx.bas No.1 No.2 No.3 No.4 No.5 No.6 No.7 No.8 No.9 No.10 > ループからの脱出エスケープシーケンスというんでしょうが それよりも脱出 ( ジェイルブレーク ) と言ったほうがかっこいいので まあ 脱出 としておきました まあ ちょっと言ってみ
82 たかっただけです どうでもいんですが Break Break 文の実行によって すぐに現在回ってるループから 外に抜け出します (X11-BASIC) For X = 1 To 10 If X = 5 Then Break Endif Print X Next X Print " - Break Loop@"; X End (Result) holy@mint ~ $ xbasic testx.bas Break Loop@5 > Exit If [ 式 ] [ 式 ] が真 (TRUE) の場合 ループから外に抜け出します
83 (X11-BASIC) For X = 1 To 10 Exit If X = 5 Print X Next X Print " - End@ "; X End (Result) End@ 5 > 他の言語では ループの途中からループの先頭へ戻る命令に Continue という名前の命令を用意してるのもあります けれど X11-BASIC には そういう用法の Continue はありません X11-BASIC にある Continue は Stop で一時中断したプログラムを再開する場合と Select...Case...EndSelect の選択肢中で使う場合の 2 通りについてです
84 (X11-BASIC で数値計算をさせていて ある条件になったらループから抜け出す BREAK を仕掛けたんですけど どうしても BREAK されず 代わりに Exit If で回避したことがありました かなりこなれた X11-BASIC でもそういうことがあるので言語処理系を信用しすぎないことも必要だと思います ) 他のループ命令 X11-BASIC には他にもループ命令が用意されています もともと BASIC には こんなに似たような命令いらないだろというのが多いです おそらくそれは 他の言語を使ってきた人への配慮なんだと思うんです 使い慣れた言葉がないとイラッとしますよね そういうストレスを感じさせないための Do...Loop 繰り返しを実行する構文です エスケープする条件を途 中に儲けないと無限ループするので注意が必要です (X11-BASIC) Do Input a$ Exit If a$="" Loop End
85 (Result) ~ $ xbasic testx.bas? r? e? > Repeat...Until Until の後に書かれた式の条件が成立する間 繰り返しを実行する構文です For や While がループの頭で判定してるのに対して ループの末尾で判定してるのが特徴です (X11-BASIC) a = 1 Repeat Print " No."; a a = a + 1 Until a > 10 End (Result) holy@mint ~ $ xbasic testx.bas No.1 No.2 No.3 No.4 No.5 No.6
86 No.7 No.8 No.9 No.10 >
87 文字列制御構文や数値処理のあとに残った計算機でやることと 言ったら九割方は文字列操作と言えます そもそも現代的な計算機の出自からして戦争中敵軍の暗 号を解読する作戦から始まったことですし 数字も含めて 記号一般を取り扱う機械だと考えてよいでしょう 社会において人とのコミュニケーション以外の仕事と いったら 結局は記号の操作 ( 移し替え ) に終始していると 思いませんか? そういう訳で まずは文字列変数について説明します 一般にプログラミング文法の説明するとき 文字列は String と呼びます X11-BASIC は動的型付けでして 変 数を扱うのにプログラムの先頭で変数の宣言をしなくても 思いのままに作って代入できます しかも特にローカルだ と宣言しない限り 全てグローバル変数となります それ が気持ちいいか悪いかは 作成してるプログラムの性質や 目的によると思います X11-BASIC ではそうなってるという ことです そして X11-BASIC で文字列変数は 変数名 $ と表現 されます これが文字列の配列とすると 変数名 $() と なります 文字列変数への代入は A$ = " はじめまして "
88 のようにします ダブルクォーツで囲んでるのをわかって ください Print A$ とすればはじめましてと表示されます 次に変数の変換について説明します 命令 :Val 書式 :Expression = Val ( String ) String の内容にしたがって文字列を 数値に変換します 日付や時間 小数点 論理値などで試してみましょう (X11-BASIC) Print Val("09/06/72 01:00") Print Val("3.1415") Print Val("-25") Print Val("True") Print Val("False") End (Result)
89 文字列から数値に変換できない場合は 0 を返します 最初の 日付時間 は最初の区分 09 だけ数値に変換されたようです True/False みたいな文字列を論理値に変えることはできないようですね 今度は逆に数値を文字列に変換してみます そうしたい時は Str$(Number) を使います (X11-BASIC) A = 3.0E-3 B$ = Str(A) Print A Print B$ End (Result) holy@holy-901:~$ xbasic testx.bas > 文字列連結 X11-BASIC での文字列連結演算子は + です Microsoft BASIC では "2"+"3" で "23" になりますが Full BASIC では同じことを "2"&"3" と書きます GAMBAS で
90 は "2"&"3" です X11-BASIC の場合は "2"+"3" という話です (X11-BASIC) A$ = " おはよう " B$ = " こんにちは " C$ = A$ + " " + B$ Print C$ (Result) おはよう こんにちは Print 文による文の出力は ";" で続けることができます これは改行しないで続けて という意味になります また "," でつなげると間にタブが挿入されます (X11-BASIC) A$ = " おはよう " B$ = " こんにちは " Print A$; " "; B$ Print A$, " ", B$ C$ = A$; " "; B$ Print C$ (Result) holy@holy-901:~$ xbasic testx.bas おはよう こんにちはおはよう こんにちは >
91 となります C$ の内容が出力されないのは 文字列どうし の接続を "+" ではなく ";" にしてしまってるからです ここは C$ = A$ + " " + B$ とするのが正解です 文字列の分割命令 :Split 書式 :Split t$, d$, mode, a$, b$ 説明 :t$ という文字列を d$ で分けて a$ という部分と b$ という部分にします つまり t$=a$+d$+b$ という関係になります mode は 0: デフォルト 1:do not search in parts of t$ which are in brackets. Quoted parts of the string are not split up. 例 > Split "Hello, this is a string.", " ", 0, a$, b$ > print a$ Hello, > print b$ this is a string.
92 関数 :Word$() 書式 :a$ = Word$(b$, n[, delimiter$]) 説明 : 文字列 b$ の n 番目の文字を返します 文字をスペース または delimiter$ で与えられる文字で分割します 例 > a$ = Word$("Hello, this is a string.", 3) > Print a$ this > b$ = Word$("Hello, this is a string.", 2, ",") > Print b$ this is a string. 関数 :Trim$ 書式 :b$ = Trim$(a$) b$ = Xtrim$(a$) 説明 :a$ で与えられる文字列を整形して返します X のついてる方は 大文字になります 1. タブをスペースにします 2. 二重スペースを一つのスペースにします 3. 文字列の後ろに続いてるスペースを取り除きます 4. ダブルクォーツで囲まれた部分は変えません 例 > Print Trim$(" a b c d") a b c d
93 部分文字列の取り出し文字列から任意の部分を取り出すには Right$, Left$, Mid$ などの関数を使います Left$ は 任意の長さを指定されれば与えられた文字列の左側から数えた文字までを返します Right$ は 任意の長さを指定されれば与えられた文字列の右側から数えた文字までを返します ここでは Mid$ の例を下記に示します 関数 :Mid$ 書式 :m$ = Mid$(t$, s[, l]) 説明 :t$ で与えられた文字列から 整数 s から開始して 長さ ( 整数 )l までの文字列を m$ に返します もし l が与えられなければ 開始位置の文字を返します また l に負の整数を与えるとエラーにはなりませんが何も返されません 例 > Print Mid$("X11-BASIC", 3, 2) 1- > Print Mid$("X11-BASIC", 4) - > Print Mid$("X11-BASIC", 2, -1) > また 文字列の右側や左側をピックアップしたいのなら
94 t$ = Right$(a$ [, n]) 文字列 a$ の右側 ( 終わり ) から n 文字ぶんの文字列を t$ に返します t$ = Left$(a$ [, n]) 文字列 a$ の左側 ( 頭 ) から n 文字ぶんの文字列を t$ に返します を使う手もあります Len は 文字列の長さを数えるときに使う関数です Left$, Right$, Mid$ では どこからどこまでと指定するときに文字列の長さを指定します これを指定したりするときに便利なので覚えとくといいと思います 関数 :Len 書式 :l = Len(t$) 説明 : 引数として与えられた文字列の数を返します これは ASCII 文字で何文字ぶんになるかを返します X11-BASIC には Python や Ruby みたいに文字エンコードの宣言はありません 公式では ANSI 標準の ASCII コードに対応とだけ言ってます アルファベット+α 以外の文字については X11-BASIC を動かしてる環境しだいのように 利用者に任せてるって感じです Tips というか 運用上のノウハウなんですが例えば Linux で UTF-8 コードによる日本語を使ってるならば (X11-BASIC) A$ = " うーん この "
95 Length = Len(A$) Print A$; ":"; Length Quit End Result うーん この :18 それぞれの文字は UTF-8 の文字コードでは う の UTF-8 コード : E ん の UTF-8 コード : E こ の UTF-8 コード : E の の UTF-8 コード : E3 81 AE に対応してまして ひらがな カタカナ 漢字は 2 バイト ASCII コードにすると 3 文字ぶんに相当するので Len() で得られる文字数は 3x6 文字 =18 とカウントされてるわけです Windows で SHIFT-JIS コードでソースを書いて コマンドプロンプトで実行させるなら ASCII コードにすると 2 文字ぶんとなります 部分文字列の置換関数 :Replace$ 書式 :t$ = Replace$(a$, s$, r$) 説明 :Replace 関数は 文字列 a$ の中にあるパターン s$ に
96 相当する文字列を r$ に置き換えます a$ が空なら 空の文 字列が返されます また s$ が空なら文字列 a$ がそのまま返 されます ( 例 ) > Print Replace$("x11-basic is a cool basic", "bas","bas") x11-basic is a cool BASic > Print Replace$("x11-basic is a cool basic", "a", "") x11-bsic is cool bsic > Print Replace$("x11-basic is a cool basic", " ", "--") x11-basic--is--a--cool--basic 他にめぼしいのは t$ = Reverse$(a$) 文字列 a$ の並び順を逆転します t$ = Space$(i) i 個の連続したスペースを返します のような文字列関数があります ( 例 ) > Print Reverse$("abcdef") fedcba > Print "abc" + space$(2) + "def" abc def 文字列の検索 X11-BASIC には 文字列内の部分文字列の検索用に Instr 関数が用意されています
97 a=instr(s1$, s2$ [,n]) s2$ のあたまから何文字目に s1$ があるか調べる a=rinstr(s1$, s2$ [,n]) s2$ の後ろから数えて何文字目に s1$ があるか調べ る この関数は 文字列変数 s2$ 内に文字列 s1$ と一致する部分があるかを調べます 関数の戻り値としては 文字列内で最初に現れる位置を整数で返します 該当する文字列がない場合は 0 が返されます また 該当する部分文字列が何カ所もあるような場合は 何文字目から検索を始めるかをオプション指定できます このオプションは 整数 n で与えます ( 例 ) > Print Instr("x11-basic is basic", "bas") 5 > Print Instr("x11-basic is basic", "bas", 6) 14 > Print Instr("x11-basic is basic", "not") 0 他に あるパタンに文字列が合致してるか調べる関数と しては Glob() があります f = Glog(a$, b$ [,flags]) は 文字列 a$ がパタン b$ に合致してれば True を返します
98 関数 :Glob() 書式 :<bool> = Glob(name$, pattern$ [, flags]) 説明 :Glob() は name$ がワイルドカードを含むようなパタン pattern$ に合致するか調べて合致していれば-1(True) していなければ 0(False) を返します チェックする種類はパラメータ flags に依ります flags 0 : デフォルト 1 : name$ のファイル関係の記号 ('/') は対象にしない 2 : バックスラッシュを特殊文字とする 4 : '.' を特別扱いにする 8 : name$ のファイルパスをチェックする 16 : 比較的ゆるい ( 例 ) Glob("abcd", "abc?") Result: -1 Glob("abcd", "*") Result: -1 Glob("abc", "ab??") Result: 0 Glob("*a[0-9]*", "sad33333") Result: 0 X11-BASIC にはもっと文字列操作のコマンドや関数が取り 揃えられているんですが とりあえずこのくらいにしてお きます
99 ファイル入出力普通 ファイルを開く というと 引き出しから所望の ファイルを取り出してパラパラ頁をめくる動作を想像しま す イメージとしてはそんな感じです ワープロや表計算ソフトから すでに作成済みのデータ を読むとき メニューバーにある [ ファイル ]-[ 開く ] のよう に操作すると思います これと同じ文脈です 早い話が 普段からパソコンで ファイルを開く フォルダを開く デスクトップに置く とか言って るのは 文房具のメタファーなんです 計算機という道具 が 20 世紀になってできた新しい道具のため この計算機 であれやこれや操作するときに 操作の対象を示す名詞や その動作を表現する動詞もなかったんですね それですで にある日常語をメタファーとして使おうと そんないきさ つで今でも使い続けられてるわけです マイクロソフト系 BASIC でのファイル操作には Input,Output,Append の 3 つのアクセスモードがありました X11-BASIC もだいたい同じです ファイルのオープン命令 :Open 書式 :Open <mode>, #<device-number>, <filename> [, <port-value>]
100 説明 :Open は読み込みまたは書き込みのためのコマンドです <device-number> には番号が入ります 読み込みまたは書き込みしたい番号です デバイス番号は X11-BASIC を使う機器によって 0 から 99 の番号です ファイルを閉じたいときは そのデバイスの番号を明示して閉じます <mode> は開こうとしてるファイルをどんな風に開くかを指示する文字です その文字は "O","I","U","A" のどれかです それらの記号の意味するところは "I" ~ Input "O" ~Output "A" ~ Append "U" ~ Unspecified です 読み込みたいファイルがあれば Open 命令の Input で読み込みモードにします ファイルに書き出したいなら Output モードで出力します もし保存したいファイルがすでに存在するとしたら 新しいデータが上書きされて 元のデータを失うってしまいます 元のデータに付け加える形で 新しいデータを書き込みたいのなら Append モードを使ってください ランダムアクセスファイルとして使いたい場合は "U" を指定して開きます そうすれば任意の位置での読み書きができます 例えば ファイルの途中に新しいデータを入れ込むとかです Input でファイルを読み込むとき
101 存在しないファイルを開くことはできません そういう場合が考えられるなら Exist() 関数を用いて事前にファイルの存在を確認しといてください 第二文字はファイルの形式を指示します "" デフォルト "U" データグラムソケット接続を開きます "C" 接続状態のクライアント側ソケットのストリームを開きます "S" サーバ側ソケットのストリームを開きます "A" ソケットの接続を許可します ( アクセス許可 ) "X" 特殊デバイスを設定します ( 例 :"UX:baud,parity,bits,stopbits,AEow") <port-nr> は Open "UC" と OPEN "UU" で繋げるときだけ使い ます これは FTP WWW TELNET MAIL などの TCP/IP の ポート番号になります (X11-BASIC) ' 入力ファイル data.dat を開く ' opens file "data.dat" for input Open "I", #1, "data.dat" ' localhost のポート 80 を読み込み可 / 書き込み可にして開く ' opens port 80 of localhost for read and write Open "UC", #1, "localhost", 80 ' COM2 ポートを入出力で開く Open "UX:9600,N,8,1,XON,CTS,DTR", #1, "/dev/ttys1"
102 ファイルの Close Open により開いたファイルを閉じるのが Close です 書 式はシンプルで 以下の通りです Close #<device-number> Open 命令で開いた #device-number とペアになります 書式は簡単ですが ファイルのクローズは重要な操作です ファイルのクローズは 本を閉じる動作に例えて説明されますが 重要な操作です 閉じることでファイルへの読み書きができなくなりますので うっかりファイルに誤った書き込みをしてしまうということを防止できます プログラムミスでファイルを Close し忘れて おかしなデータを書き込んでしまう なんてことが起こったらたいへんです よくあるのは プログラムミスでファイルをクローズしないでプログラムを終了したり プログラムが異常終了して ファイルをクローズしないまま プログラムが終了してしまうケースです この場合 ファイルはオープンのままなので もう一度同じプログラムを再起動して そのファイルをオープンしようとしても そのファイルは既に開かれています のようなエラーが出てしまいます 開いたファイルは必ずクローズするように気をつけましょう
103 シーケンシャルファイルの読み書きファイルへのテキスト書き込みテキストファイルを書き出すための手続きは ファイルを開く ファイルを書く ファイルを閉じる という流れで行われます ファイルを行ごとに分かれたテキストファイルとするなら ファイルのそれぞれの行を Print 命令で書き込みます Print #<device-number>, Line ここで Line はテキスト文字列でも数値でもいいです この命令をループの中に入れておくと順次ファイルに書き込んでいきます ループで回すからには 事前に書き込みたい一連のデータが何行なのか 配列数がいくらか知っておく必要があります (X11-BASIC) Dim Text$(6) Text$(0) = "a" Text$(1) = "a" Text$(2) = "a" Open o, #1, filname$ For i = 0 To 2 Print #1, Text$(i)
104 Next i Close #1 End (Result) holy@holy-901:~$ xbasic testx.bas > quit holy@holy-901:~$ cat output.txt a b c テキストファイルの読み込みすでに存在するテキストファイルを読み込む場合も 書き込みと同様な手順を踏みます すなわち ファイルを開く ファイルを読む ファイルを閉じる という感じでです ファイルがテキストファイルならば 一行ごとにファイルを読み込むことができます 文字列変数にテキストデータを読み込みます 特に指定されなければ 標準入力が使われます ただし Eol( 文末 ) デリミタ (Eol: End of line) は含みません t$ = Input$(#n, num) : ファイル ( チャンネル )n から num バイト読みます t$ = LineInput$(#n) : ファイル ( チャンネル )n から 1 行読みます
105 行を読み込む操作は ループの中に LineInput$ をおくことで繰り返し読むことができます もしそのファイルの行数を知らず 何回ループさせればいいのかわからないなら Eof() 関数を用いてファイルの終端を検出することができます だいたい While (Eof(#n) = 0) Wend のループでファイルにアクセスするのが定石でしょう b = Eof(#n) : ファイルの終わりに達したら TRUE を返します l = Lof(#n) : ファイルの長さを返します テキストファイルなら 行の数 ではなく全文字数を返します 例 1 はファイルの終わり Eof(End Of File) まで 1 行ずつ読み込むプログラム 例 2 は Lof の数を返すプログラムです Lof だから "Lines Of File" の略かと思ったらそうではないみたいです 例 1 (X11-BASIC) filname$ = "X11BASreference.txt" If Exist(filname$) = True Then Open "i", #1, filname$ i = 0 While (Eof(#1) = 0) LineInput #1, T$ Print Word$(T$, 1, ",") i = i + 1 Wend
106 Close #1 Endif Print "Total:"; i, "LastLine:"; T$ End (Result) : : m=max(f()) not implemented yet m=min(a m=min(array()) not implemented yet m=min(function()) not implemented yet Total:571 LastLine:m=MIN(function()) not implemented yet > quit holy@holy-901:~$ wc -l X11BASreference.txt 571 X11BASreference.txt 例 2 (X11-BASIC) filname$ = "X11BASreference.txt" If Exist(filname$) = True Then Open "i", #1, filname$ Lmax = Lof(#1) Print Lmax For i = 0 To 10 Input #1, Text$ Print i; ":"; Text$ Next i Close #1 Endif Print i
107 End (Result) xbasic testx.bas :6 Quick Reference 1: 2:6.1. 予約された変数名 3: すでに予約済みの変数があります これらは普通の変数として使えないキーワードです うっかりこの名前を使うことで エラーになることがあります そういうときは LET 命令を使ってみてください ふつう変数名の終わりはコマンド名とは違うものです 4: 5:int ANDROID? Android OS なら-1 それ以外なら 0 6:int COLS テキストターミナルの行数 7:int CRSCOL 現在テキストカーソルがある行の位置 8:int CRSLIN 現在テキストカーソルがある列の位置 9:flt CTIMER CPU システム時計 ( 秒 ) 10:int FALSE 最後に発生したエラー番号 11 > 例 3 は指定したファイル名に順番に計算結果を出力して いったん閉じます その後で 作られたファイルを開いて一行ずつ読み込んで 配列に分けます 最後にもう一度 配列内容を表示します こんな感じでシーケンシャルファイル入出力の一連の流れの雛形にしてみました 例 3
108 (X11-BASIC) ' fileiox.bas ' File Output/Input => Print filname$ = "output.dat" Open "o", #1, filname$ For i = 0 To 99 Print #1, i; ","; sin(pi * i / 30) Next i Close #1 If (Exist("output.dat") < 0) Then i = 0 Open "i", #1, filname$ While (Eof(#1) = 0) LineInput #1, oneline$ i = i + 1 Wend Close #1 Lmax = i Print "Line(max)="; Lmax Dim time(lmax), wave(lmax) Open "i", #1, filname$ For j = 0 To (Lmax - 1) LineInput #1, oneline$ time(j) = Val(Word$(oneLine$, 1, ",")) wave(j) = Val(Word$(oneLine$, 2, ",")) Next j Close #1 Endif Print "time","wave" For j = 0 To (Lmax - 1) Print time(j), wave(j) Using "###.###^^^^"
109 Next j Quit End (Result) holy@holy-901:~$ xbasic fileiox.bas Line(max)=100 time wave e e e e-01 : : : : e e-01 あと ファイル関係でその他によく使いそうな命令を説 明しておきます Exist 関数 :Exist() 書式 :<boolean-result> = Exist(<filename$>) 説明ファイルシステムに存在するなら 真 (TRUE)-1 を返します FileSelect 命令 :FileSelect
110 書式 :FileSelect <title$>, <path$>, <default$>, <string-variable> 説明 : ファイル選択のダイアログを表示します <title$> ダイアログボックスの名前 <path$> ファイルのリストを表示させるパス ( 絶対パスでも相対パスでも可 ) <default$> 選択箇所にデフォルトで表示させるファイル名 ( ただし "" ならデフォルトなし ) <string-variable> 選択したファイル名を代入する変数もし CANCEL したしたなら 変数には空白が代入されます (X11-BASIC) FileSelect "LOAD File", "/home/holy/*.dat", "input.dat", file$ Print file$ End (Result)
111 このダイアログボックスは見た目のクラッシックさとは裏腹によくこなれてます スクロールバーはもちろん 上位ディレクトリへ移動するボタンや現在いるディレクトリの情報 ホームへ戻るボタンなど知恵が込められています FileEvent$ 関数 :FileEvent$ 書式 :t$ = FileEvent$ 説明 : ファイルやディレクトリを監視してエベントが発生したらその情報を文字列に返します
112 文字列が空白なら特にイベントがない状態です イベントは 3 文字とブランクで表されます 1st: "d" ならディレクトリであることを意味します 2nd: "X" 初期化, "O" オープン, "C" クローズ, "M" 移動, "D" 削除 3rd: "r" 読み込み, "w" 書き出し, "a" アトリビュートの変更 (X11-BASIC) Watch "/home/holy/testx.bas" Do a$ = Fileevent$ If Len(a$) Print a$ Endif Loop End (Result) holy@mint ~ $ xbasic testx.bas Watch descriptor for /home/holy/testx.bas is: O- --r -c- -O- --r -c- -O- --r -c- -O- --r -c- -O- --r -c O-
113 --r -c- -O- --r -c- -O- -O- --r -c- --r -c- -O- --r -c- ファイル関係の補足 Windows 版の X11-BASIC ではうまくいかない件があります 現象は ファイルを先頭から末尾まで一行ずつ読むはずが 途中で読み終えてしまうという症状です テキストファイルを一行ずつ読む流れは ファイル Open LineInput をループさせて Eof() でファイルの末行を検出して 最後に Close というのが一種のテンプレートです 公式マニュアルでも 下のリストのように While Not Eof(#) のサンプルが提示されています しかしこれが Windows で実行するとうまくいかないようです 実行したのは文字コードを SHIFT-JIS にして DOS プロンプトで英文テキストを読ませようとした場合です これが文字コードを UTF-8 にして Cygwin で実行したらうまくいってたかは不明
114 これは For Next でループさせて 途中に Exit If (Eof(#) =0) を入れて途中でループを抜けるようにしたらう まくいきました (X11-BASIC) ' eofilex.bas ' ファイルの行数を数えるそれぞれの方法 sfile$ = "input.dat" Print "<< ex.1 >>" icount = 0 Open "i", #1, sfile$ While Not Eof(#1) LineInput #1, sline$ Print icount, sline$, Eof(#1) icount = icount + 1 Wend Close #1 Print "<< ex.2 >>" Open "i", #2, sfile$ For k = 0 To 1000 Exit If (Eof(#2) < 0) Lineinput #2, sline$ Print k, sline$, Eof(#2) Next k Close #2 Quit End
115 イベント処理 X11-BASIC におけるイベント関係コマンドです とりあえず 公式マニュアルを検索して見つけた範囲で列挙します いろいろ取り揃えられております <string-result> = Inkey$ : 押されたキーの ASCII キャラクタ文字を返します Event : KeyEvent や MouseEvent や MotionEvent が起こるまで待機します a = EVENT?(mask%) : 待機中のイベントと mask 値のタイプが一致するのなら真を返します MouseEvent x,[y, k, xroot, yroot, s] : マウスボタンを押すまで待機します MotionEvent x, y, xroot, yroot, s : マウスが動くまで待機します <int-result:x> = MouseX : マウス座標 x <int-result:y> = MouseY : マウス座標 y <int-result:k> = MouseK : マウスボタンの状態 (k) <int-result:s> = Mouse : Shift キーや Control キーの状態 (s) KeyEvent kc, ks[, t$, k, x, y, xroot, yroot] : キーを押すまで待機します これらの代表的なものを実例を交えて説明していきます テキストスクリーンでのキーイベント旧制 BASIC を好んで使う人たちに Inkey 命令に相当するコマンドある / なしで その BASIC の評価がかなり変わると思います テキストキャラクタを使った いわゆるアクション系 ピコピコゲーム を作るのに便利だからです X11-BASIC はもともと ATARI GFA-BASIC の互換を目指して始
116 まったそうで そのへんをさすがに分かってますね この命令と Locate 文を使えばテキストだけでいろいろとゲームを作れます さて X11-BASIC 公式マニュアルによると 変数 :Inkey$ 書式 :<string-result> = Inkey$ 説明 : キーボードで押されたキーの ASCII キャラクタを文字列として返します ( 例 ) Repeat! Wait until a Until Len(Inkey$)! Key was pressed ということです Inkey$ のキーイベントを使ったサンプルプログラムを次に示します テキスト表示のシンプルなゲーム ぴこげースカッシュ です (X11-BASIC) ' scashx.bas ' 河西朝雄 QuickBASIC 初級プログラミング入門 ( 下 ) H 技術評論社 ' p.30
117 Cls ' 壁作成 Print FOR k = 1 TO 58 Print "O"; Next k Print For k = 1 To 17 Print "O"; Space$(56); "O" Next k For k = 1 To 58 Print "O"; Next k Print Score = 0! 得点 y1 = 7 dx = 1! ラケットの初期位置! 反射因子 dy = 1 Locate 0, 10 Print "SCORE="; Score Locate y1, 53 Print "[" For n = 5 To 1 Step -1 Locate 0, 40
118 Print "BALL="; n x = 15 y = INT( * RND(1))! ボールの初期位置 While (x < 53) Locate y, x Print "o" ' キー入力 K$ = INKEY$ If K$ = "z" Else If K$ = "x" Endif ' ラケットとのあたり判定 If x = 52 And (y1-3) < y And y < (y1 + 3) Then ' 縦壁での反射 If x = 1 Then Endif dx = -dx ' 横壁での反射 If y = 2 or y = 18 Then dy = -dy
119 Endif ' 前のボールを消す Delay 0.2 Locate y, x Print " " ' ボールを進める x = x + dx y = y + dy Wend Next n End ' ラケットを上に Procedure Up() Locate y1, 53 Print " " If y1 > 2 Then y1 = y1-1 Endif Locate y1, 53 Print "[" Return ' ラケットを下に Procedure Down() Locate y1, 53
120 Print " " If y1 < 18 Then y1 = y1 + 1 Endif Locate y1, 53 Print "[" Return ' ラケットに当たった時 Procedure Hit() dx = -dx Score = Score + 1 Locate 0, 10 Print "SCORE="; Score Return グラフィクス画面でのイベントここからのイベント処理は グラフィクス画面にフォーカスがあるときのイベントになります つまり Openw 命令なんかを使ってグラフィクスウィンドウを開く必要があります Linux 版ではグラフィック命令を使えば勝手に開くようですし Android でも勝手に切り替わるようです イベント処理に関係ありそうな項目を とりあえず全部まとめてみましたという命令がこちらです
121 命令 :Event 書式 :Event typ,[x, y, xroot, yroot, s, k, ks, t$] 説明 :KeyEvent や MouseEvent や MotionEvent が起こるまで待機します 次のような値が typ に決められています typ = 6 : MotionEvent typ = 14 : MouseEvent typ = 2 : KeyEvent x, y : ウィンドウに対するマウスポインタの位置 xroot, yroot : 画面に対するマウスポインタの位置 s : Alt, Caps, Shift キーの状態 t$ : 押されたキーのキャラクタ 命令 :Event?() 書式 :a = Event?(mask%) 説明 : グラフィクスで待機中のイベントと mask 値のタイプが一致するのなら 真 (True) を返します mask = 1 : キープレス ( 押す ) イベント mask = 2 : キーリリース ( 離す ) イベント mask = 4 : マウスボタンプレスイベント mask = 8 : マウスボタンリリースイベント mask = 64 : マウス動作イベント マウスイベント PC の場合はマウス Android の場合はタッチパネルになります ただし マルチタッチとかには対応してません
122 命令 :MouseEvent 書式 :MouseEvent x,[y, k, xroot, yroot, s] 説明 : マウスボタンを押すことで 待機中のイベントを実行します (x,y) ウィンドウに対するマウスポインタの座標 xroot,yroot 画面に対するマウスポインタの座標 それとマウスボタンの状態と Alt/Shift/Caps キーの状態です 変数 :MouseX, MouseY, MouseK, MouseS 書式 :<int-result:x> = MouseX <int-result:y> = MouseY <int-result:k> = MouseK <int-result:s> = MouseS 説明 : 次の値が入ってます マウス座標 (x,y) マウスボタンの状態 (k) k=0 ボタンが押されてない k=1 左ボタン k=2 中央ボタン k=4 右ボタン ( またはそれを類する状態 ) Shift キーや Control キーの状態 (s) s=0 特に押されてない s=1 Shift s=2 CapsLock s=4 Control
123 s=8 Alt s=16 NumLock s=64 Windows-Key s=128 ScrollLock またはそれに類する状態 命令 :MotionEvent 書式 :MotionEvent x, y, xroot, yroot, s 説明 : マウスが動くまで待機するイベントです (x, y) ウィンドウに対する新しいマウスポジション (xroot, yroot) 画面に対する当たらしいマウスポジション Alt/Shift/Caps キーの状態 キーイベント端末や OS によってキーコードが違います 私が試した中では Linux であり Debian Ubuntu 系である Mint と Lubuntu ではキーコードは同じでした しかし Android 端末は違っていました Android 端末はタブレットだったので Blue Tooth キーボードを使ったのでこのせいかもしれません Windows も異なってました X11-BASIC のシステム変数として OS を見分ける変数がありますので マルチプラットホームを目指したプログラムを作成されたかたは それを利用したら良いと思います 命令 :KeyEvent 書式 :KeyEvent kc, ks[, t$, k, x, y, xroot, yroot]
124 説明 : キーを押すことで 待機中のイベントが実行します キーイベントの変数は次のとおりです kc キーコード ks Shift/Control/Alt 等の状態 t$ corresponding character x ウィンドウに対するマウスポインタの座標 x y 同じく座標 y xroot 画面に対するマウスポインタの座標 x yroot 同じく y 座標 k マウスボタンの状態 まずは キーコードを調べる方法 > keyevent a なにかキーを押す するとプロンプトが出るので > Print a すれば 変数 a に代入されたキーコードが出力されます いちいち そんなこと入力してられないので連続打鍵し てコードを調べられるようにしましょう それがこちら (X11-BASIC) ' keypressx.bas ' 端末のキーコードを取得するプログラム ' Main() Openw 1
125 Text 1, 10, "Press Any Key" ShowPage Do Keyevent kp Print Str$(kp) Delay 0.5 Loop End
126 Android センサ Android 端末のセンサーを X11-BASIC で制御する方法を紹介します 主に Sensor と名のつく関係のコマンドです ご承知だと思いますが Android 端末一般は Google が Android OS を搭載する端末として認めてるだけで 基本どんなセンサーを搭載するかはメーカにより異なります ですので各自の端末にどんなセンサが搭載されてるかは機器のマニュアルを参照してください ただし OS は Google の管轄下なので どのチャンネルがどんなセンサに対応するかは仕様で決められてるはずです まあ壊れるものじゃないので X11-BASIC をインストールすると付いてくるサンプル sensortest.bas を実行してどんな反応があるのか試してみればいいと思います そういうお気楽さが BASIC のいいところです Sensors 関係の命令センサー機器について Sensor コマンドにより取り扱えるようになりました 詳しくは サンプルプログラムの sensortest.bas を参照してください 命令 :Sensor 書式 :Sensor ON Sensor OFF
127 説明 : センサのスイッチを ON/OFF します 加速度センサ 温度センサ 気圧センサ 光センサ 湿度センサ ジャイ ロスコープ 等 変数 :Sensor? 書式 :a = Sensor? 説明 : この端末で使用できるセンサ数を返します 使えるセンサがなければ このシステム変数は 0 になります 加速度センサ 温度センサ 気圧センサ 光センサ 湿度センサ ジャイロスコープ 等 ( 例 ) (X11-BASIC アプリを起動して > というプロンプトが現れたら) > Print Sensor? [Enter] 個あるよと返ってきました > 関数 :Sensor() 書式 :a = Sensor(n) 説明 : 第 n 番のセンサーの値を返します 通常 0 : 温度 1 : 照度 3 : 近接 4 : バッテリー 6 : 加速度 x 7 : 加速度 y 8 : 加速度 z
128 9 : 姿勢 x 10 : 姿勢 y 11 : 姿勢 z X11-BASIC のサンプルプログラム sensortest.bas より Temperature: 0 ー C Pressure: 1 hpa Light: 2 lux Proximity: 3 cm OrientationX: 4 deg OrientationY: 5 deg OrientationZ: 6 deg GyroX: 7 rad/s GyroY: 8 rad/s GyroZ: 9 rad/s Mag. fieldx: 10 ut Mag. fieldy: 11 ut Mag. fieldz: 12 ut Accel.X: 13 m/s2 Accel.Y: 14 m/s2 Accel.Z: 15 m/s2 Temperature: 16 ー C Humidity: 17 % RotationX: 18 RotationY: 19 RotationZ: 20 GravityX: 21 m/s2 GravityY: 22 m/s2 GravityZ: 23 m/s2 Lin.Acc.X: 24 m/s2
129 Lin.Acc.Y: 25 m/s2 Lin.Acc.Z: 26 m/s2 MotionX: 27 MotionY: 28 MotionZ: 29 Game rot.x: 30 Game rot.y: 31 Game rot.z: 32 Mag. uncal.x: 33 ut Mag. uncal.y: 34 ut Mag. uncal.z: 35 ut Gyr. uncal.x: 36 Gyr. uncal.y: 37 Gyr. uncal.z: 38 Step count: 39 Step detect: 40 サンプルに磁気センサの数値を 1 秒おきに表示していく プログラムを載せます (X11-BASIC) ' gausens1x.bas ' most simple Gauss Sensor xyz Sensor On Print "Magnetic[uT]", "(x)", "(y)", "(z)" For i = 0 To 100 Delay 1 Print Time$, Sensor(10), Sensor(11), Sensor(12) Next i
130 Sensor Off End 他のセンサといえば GPS センサがあります 命令 :GPS 書式 :GPS ON, GPS OFF 説明 :GPS(Global positioning System receiver) の ON/OFF 命令 :GET`LOCATION 書式 :GET`LOCATION lat,lon,alt[,bearing,accuracy,speed,time[,provider$]] 説明 :GET`LOCATION は 位置デバイスから得られるデータを返します ここで位置デバイスとは GPS に限らず 地理上のデータを返すサービス一般をさします GPS は事前にスイッチオンしてから使ってください コメント : この命令は Android 端末だけ対象です ( 例 ) GET`LOCATION x,y,a サンプルプログラムセンサを使うので PC のひとたちはごめんなさい 楽しめません Android でお楽しみのひとたちは これをネタにして色々楽しんでください ここで使っているグラフィックス関係の命令は次章で説明します
131 磁場測定リアルタイムにグラフを表示して 最終的にデータをファイルに保存するプログラムです センサを備えてれば温 湿度や気圧も測れますね 加速度計もあるので振動解析もできます ただ測定間隔をどこまで狭められるか センサの追従性がどの程度か 細かい諸元はわかりません 数値として表示されてるからといって その値が正しいのかは判断できませんから 汎用携帯端末のセンサなので ちゃんとした計測機器ではなく ツール程度と受け止めていただきたいと思います プログラムの基本は SensorOn して ループで回して 終了したら SensorOff するというものです ループの中で Delay 命令 ( または Pause 命令 ) を入れて測定時間間隔を決めています 加速度計はわりとキビキビ反応しました 手でカシャカシャ動かすとそれに応答してます まあ 手で振る程度の確認なのでそんなに早い振動まで試せていません 携帯端末として使う範囲ですし せいぜい 0.01 秒 (=100Hz) 程度が信頼できる値じゃないでしょうか ですのでエンジンやモーターの振動とかは観察できるかな? (X11-BASIC) ' jibanyan3x.bas
132 ' Display Gauss Sensor xyz with Array form and FileI/O Dim T$(2048), GMX(2048), GMY(2048), GMZ(2048)! 配列を 2048 個分確保 Count = 32! 測定個数を仮に初期値 32 個にしておく dt = 0.5! 測定時間間隔 YX0 = 0! プロット開始初期値 x YY0 = 0! プロット開始初期値 y YZ0 = 0! プロット開始初期値 z filname$ = "gausens.dat" ' センサのスイッチを ON Sensor On ' 画面設定 ShowPage Pause 1 Get_Geometry 1, bx, by, Width, Height If Height > 320 ' big screen brafan = Height / 5 inpfac = 0.75 inphf = 0.8 depth = 6 density = 5 Else ' small screen brafan = Width / 3.2 inpfac = 1 inphf = 1 depth = 4 density = 3 Endif Clearw ' 座標系の設定 上限 2048 個として画面の横幅を測定個数にする
133 If Width > 2048 Then Count = 2048 Else Count = Width Endif ' X 軸の描画と測定条件の表示 Y0 = Height / 2 Line 0, Y0, Width, Y0 Wsize$ = "Width=" + Str$(Width) + " Height=" + Str$(Height) + " dt=" + Str$(dt) Deftext 0, 0.1, 0.1, 0 LText 0, 0, Wsize$ ' センサーの値をグラフィクス For i = 1 To Count Delay dt! センサ on から起動するまで時間かかることがあるので先に Delay を置いた Disp$ = Str$(i) + "/" + Str$(Count) White = Get_Color(64000, 64000, 64000) Color White Text 0, 25, Disp$! 更新するテキストは "Text" 命令を使うのが便利 T$(i) = Time$ ' chx GMX(i) = Sensor(10) YX1 = GMX(i) Red = Get_Color(64000, 0, 0) Color Red Line i - 1, (YX0 * 5) + Y0, i, (YX1 * 5) + Y0 YX0 = YX1 ' chy GMY(i) = Sensor(11) YY1 = GMY(i)
134 Green = Get_Color(0, 64000, 0) Color Green Line i - 1, (YY0 * 5) + Y0, i, (YY1 * 5) + Y0 YY0 = YY1 ' chz GMZ(i) = Sensor(12) YZ1 = GMZ(i) Blue = Get_Color(0, 0, 64000) Color Blue Line i - 1, (YZ0 * 5) + Y0, i, (YZ1 * 5) + Y0 YZ0 = YZ1 ShowPage Next i ' センサのスイッチを OFF します Sensor Off ' 色を戻しておく White = Get_Color(64000, 64000, 64000) Color White ' 測定データを保存するか Print "<< Measure Complete >>" Input " Data Save (Y/N) "; Ans$ If Ans$ = "Y" or Ans$ = "y" Then Open "O", #1, filname$ For i = 1 To Count Print #1, T$(i); ","; GMX(i) Using "+##.##"; ","; GMY(i) Using "+##.##"; ","; GMZ(i) Using "+##.##" Next i Close #1 Endif End
135 (Result) 重力センサでコロコロ Android の Sensor() 命令の応用です Android の傾きセンサ値を読んで 端末の傾いた方向へ線が伸びるようにしてます (X11-BASIC) ' ballcororox.bas ' 2015/12/23 ' グラフィクス画面設定 ShowPage Pause 1 Get_Geometry 1, bx, by, Width, Height If Height > 320 Then
136 ' big screen brafan = Height / 5 inpfac = 0.75 inphf = 0.8 depth = 6 density = 5 Else ' small screen brafan = Width / 3.2 inpfac = 1 inphf = 1 depth = 4 density = 3 Endif Clearw ' Print "-Width,Height = "; Width; ","; Height x0 = Width / 2 y0 = Height / 2 Sensor On Grau = Get_Color(64000, 64000, 64000)! お好みの色で Color Grau Do MouseEvent x If x > 0 Break Endif dx = Sensor(6) dy = Sensor(5) x1 = x0 + dx y1 = y0 - dy If x1 < 0 Then
137 x1 = 0 Else If x1 > (Width - 1) Then x1 = (Width - 1) Endif If y1 < 0 Then y1 = 0 Else If y1 > (Height - 1) Then y1 = (Height - 1) Endif Line x0, y0, x1, y1 x0 = x1 y0 = y1 ShowPage Delay 0.2 Loop Sensor Off Stop 'Quit End
138 グラフィクス描画グラフィック描画するのに必要な命令を解説します ここでは これだけ知ってれば結構なことができるという命令を紹介します 少なくとも この章に掲載するサンプルプログラムのグラフィクス関連の命令はこれだけでまかなっています パソコン版の人ならわかりやすいのですが X11-BASIC は起動するとテキスト文字を入力するプロンプトが表示されます この画面を X11-BASIC では インタラクティブモードと呼んでいます これに対してグラフィックスウィンドウは グラフィックコマンドが実行されると自動的に開かれます Android 版の X11-BASIC を使ってる人は Android OS がシングルウィンドウなので テキストでやりとりするインタラクティブモードの上にグラフィックスウィンドウが被さってる状態だと考えていただければよいと思います ですのでグラフィックス命令がないプログラムでなら テキストコンソール下だけでプログラムを実行されます 標準状態なら 640x400 ドットの画面上に Line や Circle や Box を描画ます Get_Color() と Color 命令を使えば 総天然色で出力することができます 実行したグラフィックス命令は ShowPage コマンド実行の後で画面に反映されます 逆に言えば ShowPage が実行されないと画面上は特に変化がありません これによって高速なアニメーションを可能にします
139 ビットマップによるグラフィックス表示を可能にするため 文字列に矩形のグラフィック領域の内容を入れたり 文字列からグラフィック画面にビットマップデータを表示させるコマンド Get Put があります Get Put で使用されるファイル形式は 標準ビットマップのため 外部で作成したアイコンを使用することができます 透過性やアルファチャンネルもサポートされてます ちなみにグラフィックス画面には日本語文字はありません 英語だけになります 命令 :Openw 書式 :Open n 説明 : グラフィックウィンドウを開きます 最大で 16 枚のウィンドウを開くことができます グラフィクスの出力はすべて 最後に開いたウィンドウに描かれます Openw は複数のウィンドウを切り替えることに使えます 最初に開くウィンドウはデフォルトでは自動でウィンドウ1になります 命令 :Closew 書式 :Closew [<num>] 説明 : グラフィックウィンドウを閉じます 数字が与えられれば その番号が付与されているウィンドウを閉じます 次のグラフィックコマンドが実行されるとウィンドウは再
140 び開かれます 命令 :Clearw 書式 :Clearw [<num>] 説明 : グラフィックウィンドウをクリアします 数値が与えられれば それに対応する番号のウィンドウをクリアします 命令 :ShowPage 書式 :ShowPage 説明 :ShowPage はグラフィクス出力を画面に反映させます 通常 ShowPage を実行しない限りグラフィクス出力はウィンドウ上に反映されません ただし TomTom 端末は即座に反映されるようになってます 命令 :Get_Geometry 書式 :Get_Geometry <winnr>, <varx%>, <vary%>, <varw %>, <varh%> 説明 :Get_Geometry はウィンドウサイズを返します このコマンド実行前にウィンドウは開かれていなければなりません ( 例 ) Get_Geometry 1, bx, by, Width, Height
141 関数 :Color_RGB() 書式 :c% = Color_RGB(r, g, b [, a]) 説明 :Color_RGB() は色相を定義する値を返します RGB 値は 0( 暗 ) から 1.0( 明 ) までです 返り値は環境のグラフィクス環境に依存します 8 ビットカラーセル またはフリーセルなしの場合 色を指定した内容に最も近く設定でします オプションパラメータ a は アルファ (0...1) 値です ( 例 ) yellow = Color_RGB(1,1,0) Color yellow 関数 :Get_Color() 書式 :<num-result> = Get_Color(<red-value>, <green-value>, <blue-value>) 説明 :Get_Color() は RGB で表現される色相値を返します 数値は 0( 暗 ) から 65535( 明 ) までです ここで定義した色相を COLOR へ渡します 注 : この関数はなるだけ使わないで なるだけ Color_RGB() を使うようにしてください ( 例 ) yellow = Get_Color(65535,65535,0) Color yellow 命令 :Color
142 書式 :Color <foreground-color> [, <background-color>] 説明 : グラフィックウィンドウの前面色を指定します オプションで背景色も指定できます 通常 Color 命令は Color_RGB() 関数とペアで使います ( 例 ) yellow = Color_RGB(1,1,0) blue = Color_RGB(0,0,1) Color yellow,b lue 命令 :Line 書式 :Line <x1>, <y1>, <x2>, <y2> 説明 : 座標 (x1, y1) から (x2, y2) への直線を描画します 線の太さなどのパラメータは Defline で定義できます ( 例 ) Line 0, 0, 639, 199 命令 :Circle 書式 :Circle <x>, <y>, <r> [, <w1>, <w2>] 説明 : 円を描画します x と y は円の中心座標 r は円の半径です オプションで円弧にすることもできます w1 は描画開始角度で w2 が終了角度です ( 例 ) Circle 100, 100, 50
143 命令 :Deftext 書式 :Deftext flag%, width, height, angle 説明 :Ltext 命令で使われるラインフォントの設定をします スタイル 回転 サイズを定義します 色は Color で 線種は Defline で定義してください flag% : テキストスタイル 0=normal 1=monospace angle : 回転角 width and height : パーセンテージで指定 (100% が 100 Pixel フォントになります ) ( 例 ) Deftext 0, 0.1, 0.1, 270 命令 :Ltext 書式 :Ltext x,y,t$ 説明 : 座標 x, y にテキストを描画します Ltext コマンドはライン描画テキストです フォントスタイルや線種は Deftext や Defline 命令で定義してください ( 例 )Ltext 10, 10, "test" 命令 :Text 書式 :Text x, y, t$ 説明 :t$ で与えられるテキスト (Bitmap Font) 文字を座標 x, y に描画 テキスト内容を更新する処理のときはこれを使うほうが便利
144 ( 例 )Text 0, 25, "test" (X11-BASIC) ' Show the complete ASCII Font Setfont "*writer*18*" Color Get_Color(65535, 10000, 10000) For x = 0 to 15 For y = 0 to 15 Text * y, * x, Chr$(y + 16 * x) Next y Next x Showpage End サンプルプログラム グラフのテンプレート 典型的な時系列グラフのテンプレート ( ひな型 ) として ロジスティック写像の時系列グラフを描画します (X11-BASIC) ' timeseriesx.bas Count = 100 A = 3.8 ' 描画ウィンドウの表示 Openw 1 ' 描画セッションの開始
145 ShowPage Pause 1 Get_Geometry 1, bx, by, Width, Height If Height > 320 ' big screen brafan = Height / 5 inpfac = 0.75 inphf = 0.8 depth = 6 density = 5 Else ' small screen brafan = Width / 3.2 inpfac = 1 inphf = 1 depth = 4 density = 3 Endif Clearw ' グラフの X 軸と Y 軸の設定 Xorg = 30 Yorg = Height / 2 Xmax = Width Ymax = 0 Xmin = Xorg Ymin = Height Y0 = 0.2! ロジスティック写像の初期値 Xpos = Xorg Ypos0 = Yorg ' 縦軸と横軸の描画 Line Xorg, Yorg, Xmax, Yorg
146 Line Xorg, Ymin, Xorg, Ymax ' 縦軸と横軸の名称を追加 Deftext 0, 0.1, 0.1, 270 Xstr$ = "Gene. n" Ltext 10, Yorg - Ymin * 1 / 4, Xstr$ Deftext 0, 0.1, 0.1, 0 Ystr$ = "X(n)" Ltext Xmax * 0.80, Yorg + 10, Ystr$ ' 縦軸と横軸の目盛りを決める dx = Xmax / Count dy = (Ymin - Ymax) / 2 ' 計算して結果をプロットするループ For i = 0 To Count Y1 = A * Y0 * (1.0 - Y0) Ypos1 = Yorg - dy * Y1 Line Xpos, Ypos0, Xpos + dx, Ypos1 ShowPage! 逐次表示させる場合 Xpos = Xpos + dx Ypos0 = Ypos1 Y0 = Y1 Next i ' ShowPage! 全部計算した後に表示させる場合 ' 最後に描画セッションを終了 ' Closew ' Quit End (Result)
147 モアレ画像表示 CRT モニターのテストでよくある ライン模様を描画してモアレ像を表示するプログラム X11-BASIC の描画準備が上手くいってるよね という確認 (X11-BASIC) ' For Loop and Line Draw. ' Set the text that we're going to use for the axis titles ShowPage Pause 1 Get_Geometry 1,bx,by,Width,Height ' Tree Data If Height > 320 ' big screen brafan = Height / 5 inpfac = 0.75 inphf = 0.8
148 depth = 6 density = 5 Else ' small screen brafan = Width / 3.2 inpfac = 1 inphf = 1 depth = 4 density = 3 Endif Print " - Width,Height = "; Width; ","; Height Clearw For i = 1 To Width Step 4 Line i, 0, Width - i, Height Next i For j = 1 To Height Step 4 Line Width, Height - j, 0, j Next i ' Finish with the DrawingArea object ShowPage End (Result)
149 ラインが踊るプログラム画面の端 ( 壁 ) にあたったらラインの両端が反射するように描画するプログラムです もともとのサンプルは SHARP X-1 用のプログラムを集めた本だったと思います ここでは それを X11-BASIC で動くようにしました オリジナルのサンプルは 単色ラインの配列を記憶しといて 50 本描いたら ( 配列 50 になったら ) 古い順に線を消す ( 黒線で上書きする ) 仕組みになってました そうすることで ひとまとまりのラインがウネウネ動いてるように見せる効果をみせていました 今回の X11-BASIC では X-1 当時に比べたら色数が豊富なので 線の色がグラデーションで変わるようにしました もとは無限ループで延々と動くようにしてありましたが 1000 回のループ内で実行するように変更してます
150 それと実行する度に初期書き出し位置を乱数で決定するようにしてます そのためプログラムの init(x,y) 箇所で Randomize 文を使って乱数の種を初期化してるところがポイントです あと線の色がグラデーションで変わるようにしました 画面に描画される模様をお楽しみ下さい (X11-BASIC) ' spaceox.bas ' For Loop and Line Draw. Dim CCX(2) Dim CCY(2) Dim VX(2) Dim VY(2) ' Set the text that we're going to use for the axis titles ShowPage Pause 1 Get_Geometry 1,bx,by,Width,Height If Height > 320 ' big screen brafan = Height / 5 inpfac = 0.75 inphf = 0.8 depth = 6 density = 5 Else ' small screen brafan = Width / 3.2 inpfac = 1 inphf = 1
151 depth = 4 density = 3 Endif Clearw ' init(x,y) XLIM = Width YLIM = Height Randomize CCX(0) = int(rnd(1) * Width) CCY(0) = int(rnd(1) * Height) CCX(1) = int(rnd(1) * Width) CCY(1) = int(rnd(1) * Height) ' init direction VX(0) = int(rnd(1) * 20)) - 10 VY(0) = int(rnd(1) * 20)) - 10 VX(1) = int(rnd(1) * 20)) - 10 VY(1) = int(rnd(1) * 20)) - 10 ' init color C1 = int(rnd(1) * 64000)) C2 = int(rnd(1) * 64000)) C3 = int(rnd(1) * 64000)) dc1 = int(rnd(1) * 800) dc2 = int(rnd(1) * 800) dc3 = int(rnd(1) * 800) ' Loop For i = 0 To 1000 C1 =C1 + dc1 C2 =C2 + dc2 C3 =C3 + dc3 If C1 >= Or C1 < 200 Then dc1 = -1 * dc1
152 Endif If C2 >= Or C2 < 200 Then dc2 = -1 * dc2 Endif If C3 >= Or C3 < 200 Then dc3 = -1 * dc3 Endif Grau=get_color(C1, C2, C3) Color Grau Line CCX(0),CCY(0),CCX(1),CCY(1) IF (CCX(0) + VX(0) >= XLIM) Or (CCX(0) + VX(0) <= 1) Then VX(0) = -VX(0) Endif If (CCY(0) + VY(0) >= YLIM) Or (CCY(0) + VY(0) <= 1) Then VY(0) = -VY(0) Endif If (CCX(1) + VX(1) >= XLIM) Or (CCX(1) + VX(1) <= 1) Then VX(1) = -VX(1) Enddif If (CCY(1) + VY(1) >= YLIM) Or (CCY(1) + VY(1) <= 1) Then VY(1) = -VY(1) Endif CCX(0) = CCX(0) + VX(0) CCY(0) = CCY(0) + VY(0) CCX(1) = CCX(1) + VX(1) CCY(1) = CCY(1) + VY(1) Delay 0.2 ShowPage Next i ' Finish with the DrawingArea object End
153 (Result) 時計の針昔 何かのパソコン雑誌でこの問題を BASIC で解く記事があって読んだ記憶があるんですよね 私が読んでた雑誌というと Oh!MZ か ゲーム誌になる前の テクノポリス だと思うんですが 算数とか数学で習った知識をアルゴリズムにして BASIC にするという 教育的でありながらフレンドリーでフランクで若い読者に向けて親切ないい記事だな という印象で覚えていました 気になってネットで調べたら解答をいろいろと取り揃えてるサイトがあった 履修で言えば中学生で習う話とのことです そう書かれていた某知恵袋では 一元一階方程式で解いてました 未知数である角を X とした場合 長針が
154 一周する間に 短針は って感じで解くなら確かに中学生だなあ 代わりに小学生期では そういう状態になるのは一日に何回あるでしょう みたいに問われてたかな なんか時計のキットみたいなのをグリグリいじって確認したような気がする あと他のサイトではさらっと数式で出してる解答もあれば Excel で表にして出したのもありバラエティがある ここでは 精度を出す方針にする まずは秒単位 次に 1/100 秒まで 原理的にはもっと精度を出せるんですが とりあえずそこまで プログラムの原理に納得した方は他の組み合わせにもチャレンジしてください それもやってみたら 次は時計であることではなく 他の問題に応用できないか考えてください 応用の仕方がわかると面白くなります ループが多いと時間がかかる 効率のいい探索方法 180 に一番近い数値を表示する 桁 (Gear) を切り替えて収束させていく グラフィクスに残すと楽しい
155 (X11-BASIC) ' clocklinex.bas ' 両側から範囲を狭めていく方法 ' 時計の針と目盛りをグラフィカルに図示 ' 解の配列 Dim ldeg(12) Dim sdeg(12) Count = 0 ' 針の初期位置 linit = 0 sinit = 0 larow1 = 0 larow2 = 0 sarow1 = 0 sarow2 = 0 ' 1 速 Gear = 1 dshot = 360 / 12 / 12 dlong = 360 / 12 ' Loop While sinit < 360 While linit < 720 larow2 = larow1 + dlong sarow2 = sarow1 + dshot ' Critical Point の判定 Judge = (180 - (larow2 - sarow2)) * (180 - (larow1 - sarow1)) ' Print Judge Using "######.###", (180 - (larow2 - sarow2)) Using "###.###", (180 - (larow1 - sarow1)) Using "###.###", "Gear"; Gear If Judge <= 0 Then
156 Print Judge Using "######.###", (180 - (larow2 - sarow2)) Using "###.###", (180 - (larow1 - sarow1)) Using "###.###", "Gear"; Gear Break Endif ' 次への準備 larow1 = larow2 sarow1 = sarow2 Wend ' シフトチェンジ If Gear <= 1 Then Gear = 2 dshot = 360 / 12 / 12 / 60 dlong = 360 / 12 / 60 Else If Gear = 2 Then Gear = 3 dshot = 360 / 12 / 12 / 60 / 60 dlong = 360 / 12 / 60 / 60 Else If Gear = 3 Then Gear = 4 dshot = 360 / 12 / 12 / 60 / 60 / 100 dlong = 360 / 12 / 60 / 60 / 100 Else ' 角度 => 時計表記へ hh = int(sarow1 * 12 / 360) mm = int(larow1 * 60 / 360) ss = int(((larow1 * 60 / 360) - int(larow1 * 60 / 360)) * 60) dd = ((((larow1 * 60 / 360) - int(larow1 * 60 / 360)) * 60) - int(((larow1 * 60 / 360) - int(larow1 * 60 / 360)) * 60)) * 100 If larow1 > 360 Then mm = int((larow1-360) * 60 / 360)
157 Endif sdeg(count) = sarow1 ldeg(count) = larow1 Count = Count + 1 Print hh Using "##"; ":"; mm Using "##"; ":"; ss Using "##"; ".";dd Using "###", "short="; sarow1 Using "###.#", "long="; larow1 Using "###.#" Print Gear = 1 dshot = 360 / 12 / 12 dlong = 360 / 12 ' 長針を 0 に初期化 短針も時の位置にセット linit = 0 larow1 = 0 larow2 = 0 sinit = sinit / 12 sarow1 = sinit sarow2 = sinit Endif Wend Print "-Fin: "; sarow2; " [deg]", larow2; " [deg]" ' グラフィクス ' 画面設定 ShowPage Pause 1 Get_Geometry 1, bx, by, Width, Height If Height > 320 ' big screen brafan = Height / 5 inpfac = 0.75 inphf = 0.8
158 depth = 6 density = 5 Else ' small screen brafan = Width / 3.2 inpfac = 1 inphf = 1 depth = 4 density = 3 Endif Print "-Width,Height = "; Width; ","; Height Clearw ' CenterX = Width / 2 CenterY = Height / 2 LongLine = Min(Width, Height) / 2 ShotLine = LongLine * 0.8 dc = / 12 ' 目盛り描画 ' Print "- Mark Draw" ' Print "mxpos", "mypos" For i = 0 To (Count - 1) Grau = Get_Color(64000, 64000, 64000) Color Grau mxpos = int(centerx + LongLine * sin(2 * i * pi / 12)) mypos = int(centery - LongLine * cos(2 * i * pi / 12)) Circle mxpos, mypos, 5 tm$ = Str$(i) Deftext 0,0.2,0.2,0 Ltext mxpos, mypos, tm$ Print mxpos, mypos
159 Next i ' 針描画 ' Print "- Arow Draw" ' Print "CenterX", "CenterY", "lxpos", "lypos", "sxpos", "sypos" For i = 0 To (Count - 1) Grau = Get_Color(dc * i, dc * (Count - i), 64000) Color Grau lxpos = int(centerx + LongLine * sin(ldeg(i) * pi / 180)) lypos = int(centery - LongLine * cos(ldeg(i) * pi / 180)) Line CenterX, CenterY, lxpos, lypos sxpos = int(centerx + ShotLine * sin(sdeg(i) * pi / 180)) sypos = int(centery - ShotLine * cos(sdeg(i) * pi / 180)) Line CenterX, CenterY, sxpos, sypos Print CenterX, CenterY, lxpos, lypos, sxpos, sypos Next i ' グラフィクス後処理 ShowPage Stop 'Pause 10 'Quit End (Result) holy@mint ~ $ xbasic clockline5x.bas 0:32: short= 16.4 long= :38: short= 49.1 long= :43: short= 81.8 long= :49: short=114.5 long= :54: short=147.3 long= :59: short=180.0 long= : 5: short=212.7 long=392.7
160 8:10: short=245.5 long= :16: short=278.2 long= :21:49. 9 short=310.9 long= :27: short=343.6 long= :32: short=376.4 long= Fin: 360 [deg] 0 [deg]
161 GUI の制御 X11-BASIC にも GUI 関係の部品があります ATARI-ST の GEM 環境を継承してるんだと思うんです なんとなくレトロ な 古きよきコンピュータの味わいがあって私は好きです ただし グラフィクス命令の延長で作られているので日 本語の対応はされていません また昨今の GUI コンポーネ ントを使った Visual プログラミングのような IDE があるわ けでもありません 逆にシンプルで単一のファイルの中で コードを書けます タッチスクリーンが主流たるインター フェイスの Android 端末なら プルダウンメニューやポッ プアップメニュー ( リスト ) など応用できると思います これらの部品は リソース コンストラクション セッ ト (RCS) というツールを使って作成されるとのこと RSC の 詳しいことは公式マニュアルを参照してください GUI 部品を使う前には座標系の定義が必要です しかし通 常 自動的に初期位置を決めてくれます 自分でカスタマ イズすることもできますが 自動で決めてくれることで 使用してる環境の画面のアスペクト比やシステムフォント が違う場合でも 同じような操作感を得ることができます ダイアログボックス ダイアログボックスはユーザからの入力によく使われま す Alert や FileSelect は ダイアログボックスの典型で す
162 Form_do() 関数は ダイアログボックスのもっとも単純な 使い方です 単純に Exit や Touchexit のあるオブジェクト ツリーを構築するには Form_do()1 を呼びだせばいいです 命令 :Alert シンプルな Alert ボックスを表示させます 書式 :Alert <type>, <message-string>, <default-button>, <button-string>, <num-var> [, <string-var>] 説明 : ユーザの入力を問い合わせたりするアラートボックスを表示します <type> アラートシンボルを選びます 0=none, 1="!", 2="?", 3="stop" です <message-string> メインとなる文です 一行は というシンボルで分割されます 編集可能なフィールドは Chr$(27) で始まります までが編集可能になります <button-string> ボタンの中の文字列です で分けて書きます <default-button> リターンキーを押したらハイライトになるボタンになります <num-var> この変数は選ばれたボタンの数値を設定します <string-var> これはユーザが設定できるテキストインプットの文字列変数です このフィールドは Chr$(13) で分割します (X11-BASIC) ' alertes1x.bas Alert 3, "This file is write protected._you can only read or delete it.", 1, "OK DELETE CANCEL", sel Quit
163 End (X11-BASIC) ' alertes2x.bas ' ALERT No.1 Alert 1, "Pick a button", 1, "Left Right", a ' ALERT No.2 Alert 0, "You pressed Button" + STR$(a), 0, "OK", a ' Example of editable fields i = 1 name$ = "TEST01" posx$ = "N " t$ = "Edit waypoint: Name:" + chr$(27) + name$ + " " t$ = t$ + "Position: " + chr$(27) + posx$ + " " Alert 0, t$, 1, "OK UPDATE DELETE CANCEL", a, f$ While Len(f$) Wort_Sep f$, CHR$(13), 0, a$, f$ Print "Field"; i; ": ", a$ Inc i Wend Quit End 命令としてではなく 関数として返り値を得る手もあり ます 関数 :Form_Alert() 書式 :<num-result> = Form_Alert(<default-button>, <string$>)
164 説明 : アラートボタンを表示させます Form_Alert は選択したボタンの番号を返します default button デフォルトではボタンなし (0=none) です string$ この文字列はアラートボックスのメッセージになります ここで大括弧記号は文字列の一部になります 例えば "$[$i$]$$[$message$]$$[$buttons$] みたいな感じになります 小文字 i はアラートシンボルの番号で整数です (X11-BASIC) ' alertes3x.bas ~Form_Alert(1, "[0][This is my message!][ok]") Quit End 命令 :FileSelect これでパスやファイルを指定するのがすごく楽になります デフォルト値を設定しておくことで いちいちキーボードから入力する手間が省けます 書式 :FileSelect <title$>, <path$>, <default$>, <string-variable> 説明 : ファイルセレクトボックスを開きます <title$> ファイルセレクトボックスのタイトルを短めに入れます 例えば Select a.doc file to open... という感じ <path$> もしこれを指定しなければデフォルトが指定されます パス名は (UNIX にはないですが ) ドライブの指定 コロン パス ファイルマスクなど
165 の情報が完全に含めて下さい ファイルマスクというのは * ( アスタリスク ) で表現されるワイルドカードキャラクタのことです <default$> ファイルセレクト箇所に表示されるファイル名です "" とするとデフォルトファイル名なしになります <string-variable> FileSelect はパスを含む選択したファイル名の文字列を返します その文字列を返す変数です CANCEL を選択すると空白文字列が変数に代入されます 例を実行すると 変数 file$ にパスとファイル名が代入されます (X11-BASIC) ' fselectx.bas FileSelect "Load File", "./*.bas", "input.dat", file$ Print file$ Quit End (Result)
166 関数 :ListSelect() 書式 :num = ListSelect(title$, list$()) 説明 :ListSelect() はグラフィカルなリスト選択を表示します そのリストはユーザが定義する任意の配列 list$() からなります 返す値は配列の添字になります また何のアイテムも選択されないときは-1 を返します (X11-BASIC) ' listselectx.bas Dim list$(4) title$ = "List A to D"
167 list$(0) = "<Element A>" list$(1) = "<Element B>" list$(2) = "<Element C>" list$(3) = "<Element D>" num = ListSelect(title$, list$()) Print "You selected List No."; num End (Result) メニュープログラムのオプションをメニューを用いることによって選択できるようにしているアプリケーションが多いと思います X11-BASIC では独自にポップアップメニューとドロップダウンリストボックスが使用できます ここに示す例は 簡単なドロップダウンメニューの取扱いについてです
168 命令 :Menu 書式 :Menu 説明 : メニュー選択アクションを動作させます このコマンドは Event に位置づけられる命令です 使用する前に Menudef 命令で定義しておく必要があります イベントに類するため Menu は普通ループの中で用いられます ( 例 ) Menudef field$(), menuaction Do Pause 0.05 Menu Loop End Procedure menuaction(k)... Return 命令 :Menudef 書式 :Menudef array$(), <procname> 説明 : メニューの中から選んだ項目の数値を <procname> で定義するプロシージャへ渡します この命令は array$() の文字列からなるメニューヘッダを読みます それらのヘッダは メニュータイトルとメ
169 ニュー項目からなります 空白文字 "" はメニュー文字列の終端を意味します <procname> メニューエントリを選択するとどう動かすかを制御するサブプロシージャを指示します ( 例 ) ' menudef160303x.bas field$() = ["INFO"," Menutest ","","FILE"," new"," open..."," save","\ save as..."," "," print"," "," Quit","",""] Menudef field$(), menuaction Do Pause 0.05 Menu Loop End Procedure menuaction(k) Print "MENU selected "; k; " contents: "; field$(k) If field$(k) = " Quit" Then Quit Endif Return 命令 :Menukill 書式 :Menukill 説明 :Menudef によって定義された Menu に関する決め事を忘れ去ります
170 命令 :Menuset 書式 :Menuset n,x 説明 : メニューエントリ n の数値 x を変更します x=0 normal, reset marker (HOCH) x=1 (HOCH) set marker x=2 = set menu-point non selectable x=3 set menu-point selectable x=4 check the menu entry - permanent non selectable サンプルプログラムこれら GUI 関係の命令を集大成したサンプルプログラムを示します こんな画面が表示されるはずです この画面はトップダウンメニューの [Info] を選んで そのプルダウンメニュー [What This] を選ぶと表示されるダイアログボックスです (Result)
171 (X11-BASIC) ' menux.bas ' Test-program for Drop-Down-Menus Dim field$(50), slist$(1) cflag = 0! チェックマークの On/Off qflag = 0 ' OS の設定 If Unix? < 0 Then HomeDir$ = "/home/holy/" Else If Win32? < 0 Then HomeDir$ = "c:\my Document\owner\" Else If Android? < 0 Then HomeDir$ = "/storage/emulated/0/" Else HomeDir$ = "" Endif ' グラフィクス画面設定 Openw 1 Pause 0.5
172 Get_Geometry 1, bx, by, Width, Height If Height > 320 Then ' big screen brafan = Height / 5 inpfac = 0.75 inphf = 0.8 depth = 6 density = 5 Else ' small screen brafan = Width / 3.2 inpfac = 1 inphf = 1 depth = 4 density = 3 Endif Clearw Grau = Get_Color(32000, 32000, 32000) Color Grau Pbox 0, 0, Width, Height ' メニュー項目のセットと宣言 For i = 0 To 50 Read field$(i) Exit If field$(i) = "***" Next i field$(i) = ""! Data 文の最後の文字列 "***" を空白に置き換える Menudef field$(), MenuAction ' ループ Repeat Delay 0.05 Menu
173 Until (qflag > 0) Closew Quit End ' 選択したメニューのアクション内容 Procedure MenuAction(k) Local button If field$(k) = " Quit" Then qflag = 1 Else If field$(k) = " What This" button = Form_Alert(1, "[0][--- What This --- menu160307x.bas Test-program for Drop-Down-Menus][ OK ]") Print "Button Flag:"; button Else If field$(k) = " Open" FileSelect "Open File", HomeDir$ + "*.bas", "*.bas", file$ Print "Select Open File Name : "; file$ Else If field$(k) = " Save As" FileSelect "Open File", HomeDir$ + "*.*", "output.dat", file$ Print "Select Save File Name : "; file$ Else If field$(k) = " List" slist$() = ["Dead", "Alive"] num = ListSelect("Select List", slist$()) If num < 0 Then Print "You pressed Cancel Button" Text 10, 50, "You pressed Cancel Button" Else Print "List No."; num; " = "; slist$(num) Endif Else If field$(k) = " Button" Alert 0, "Choose " + Chr$(27) + "any Action", 1, "OK UPDATE DELETE CANCEL", a, f$
174 Print "a = "; a Print "f$ = "; f$ Else If field$(k) = " Help" Alert 0, "You pressed Help Button", 0, "OK", a Print "a = "; a Else If field$(k) = " Online Help" cflag = not cflag Menuset k, 4 * abs(cflag) Endif Return ' EndProcedure ' メニュー項目 Data "Info", " What This", "" Data "File", " New", " Open", " Save", " Save As"," ", " Quit", "" Data "Edit", " Cut", " Copy", " Paste", "" Data "Tool", " List", " Button", "" Data "Help", " Help", " Online Help", "" Data "***"
175 参考文献 Microsoft BASIC 習熟者のための Full BASIC 入門 白石和夫 ( 仮称 ) 十進 BASIC による JIS Full BASIC 入門の手引き From the Software Design Gallery 第 1 回 パソコン プログラミング言語の歴史 (1) - 行番号 StarSuite 7 Office Suite A Sun ONE Software Offering Basic プログラマ向けガイド 2003, Revision A
176 あとがき筆者はプログラミングなどについてのブログを書いてい ます この本の内容は そのブログに少しずつ書き溜めて きた X11-BASIC に関する導入部をまとめたものです 検索エンジンで X11-BASIC を検索すると この言語には わりとユーザはいるし ワークグループもあるんだなあと 思います 世界的な視野から見れば この X11-BASIC とい う環境は それほどマイナーではないんですね しかし 日本で X11-BASIC について書かれたウェブサイトは少なく シンタックスについて解説した方がまだない状態でした それで英語の文献を読みつつ 稚拙ながら翻訳した文を書 き溜めた 自分用のマニュアルというのが実際のところで す 本書では BASIC 言語としての基礎部分までにとどめまし た 理由は KDP の推奨として電子書籍のファイルサイズを 1MByte 以下にとどめた方が良い というご指導のためです おそらくダウンロードにかかる通信時間 料金の兼ね合い なんでしょう それでも内容のボリュームとして そのへ んで区切ってよかったと思います ブログの記事には次のステップとして いろんな分野へ の応用プログラムを掲載しています 続きの気になる方は そちらサイトをご覧になってください 最後ですが これだけ良くできたプログラミング言語を 無料で提供してくれてる Markus Hoffmann 氏と愉快な仲間
177 たちへ ありがとうと言わせていただきます この環境が無料ってのはホントすごいことですよ! それと私より 若い人特に学生さん伝えておこうと思います 別に プログラミングでなくてもいいから ハードウェア工作でも音楽でも CG でもいいんです この道のことに関しては オレ 結構イケるんだぜ みたいな熱中できるモノをなにか持ってください 2016/05/06 ブログ 牛と戯れた日々を想って このマニュアルの著作権は放棄しませんが 転載は好きなようにしてください このマニュアルよりももっとよくできたものが出来るのならそれに越したことはないと思います すでにあるソースは有効に利用する というのはプログラマの良い伝統です みんなが幸せ
178 付録シェル的使い方電卓気分で使える PC で動く言語として十進 ( 仮称 )BASIC を推してるんですが それじゃ X11-BASIC を使うと便利なことは何かと問われたら こういう使いかたを推します X11-BASIC プログラムを記述したソースファイルの先頭に X11-BASIC インタプリタがあるパスを記述して #! /usr/bin/xbasic Print "yes" Quit End のようなコードを保存 ( 例えば test.bas とか ) ターミナルで先ほどの行を追加したファイルに実行権を 加えます chmod +x test.bas ターミナルのプロンプトで./test.bas とすると holy@901:~$./test.bas yes
179 のように実行されます 通常 xbasic test.bas のようにしますが ヘッダに #! [path] を加えると上のような使い方も可能というわけです これはシェルスクリプトに実行権を与えて使うのと同じことです 当然 そのように bash や csh から呼び出すこともできます Android の場合は デスクトップに X11-BASIC のショートカットを作成してインタプリタを起動することができます そのときもコードの終わりに quit の一行を加えておけば 処理が終了したら X11-BASIC インタプリタも閉じるようにするようにできます Android ショートカットの場合は ヘッダの #! はいらないようですね 文字列処理する場合 日本語が使えない点で X11-BASIC は使いづらい感がどうしてもあります けれどスクリプトを使いたい状況 例えば毎日実行する定形化した繰り返し作業なんかでは便利です シェルで動く各種スクリプトと連携をとるのが簡単という点で使い甲斐があると思います
180 起動オプションの使い方 X11-BASIC インタプリタを起動するさいに 起動オプションをいくつか指定することができます 次の起動オプションが用意されています xbasic <filename> [input.bas] という filename のプログラムを実行します -l リードオンリーで実行しない -e <command> BASIC の命令を実行します --eval <expression> expression で表された式を計算します --daemon デーモンモードで実行します -h --help ヘルプを表示します --help <topic> topic のヘルプを表示します -version バージョン等の情報を表示します 例 : xbasic testme.bas xbasic -l dontrunme.bas xbasic -e 'ALERT 1,"Hello!",1," OK ",b' xbasic --eval 1+3-4*3 xbasic --help "*nl*" デーモン的使い方コマンドラインオプションの-daemon は ( ターミナルで接続することなしで ) デーモンモードでインタプリタを実行させます そのため入力についてのプロンプトが返ってきません このモードはバックグラウンドで X11-BASIC プログ
181 ラムを実行させたいときに有用でしょう 例 :X11-BASIC インタプリタで TCP ソケットポート番号 1371 でユーザを作成して実行するには - /etc/inetd.conf での設定 xbasic stream tcp nowait xbasic /usr/sbin/tcpd /bin/xbasic --daemon - /etc/services での設定 xbasic1371/tcp この例はデーモンステーションについてということに注意してください あなたのシステムのセキュリティホールを作る原因にもなるので X11-BASIC を本来こういう使い方はしません コンパイラの使い方 xbc コンパイラの使い方を説明します これを使えば X11-BASIC インタプリタよりも 10 倍早くなるとのことです それと インタプリタがない環境へも単独の実行ファイルで渡すことができます Linux 版 UNIX や Linux での X11 グラフィクスエンジンとして SDL ライブラリ (Simple Directmedia Layer 略して SDL) を使っ
182 ています ないしはグラフィックなしとして扱われます SDL との関係を図に張り付けます この図は Wikipedia の SDL の項目から持ってきたものです この図で言う所の "Application" 層が X11-BASIC インタプリタにあたります SDL について詳しいわけではないんですが Windows や Android とのクロスプラットホームが実現してるのはこのおかげが大きいんでしょう X11-BASIC インストールで make した後 make を実行した ディレクトリ直下に x11basic.a と libx11basic.so.(ver) が
183 出来ていると思います それらを /usr/lib 以下にをコピーします make を実行したディレクトリ直下に xbc も出来てますので そこにソースファイルをコピーして xbc [ ソースファイル名 ] と入力すればコンパイルできます 出力ファイルは [ ソースファイル名 ].o という中間ファイルと b.out という実行ファイルができます パスを通すとか エイリアスを設定するとか工夫してもいいですし コンパイルの実行までシェルで組んでしまってもいいですね いろいろ工夫のしようがあると思います xbc の使い方は ヘルプで見ることができます xbc --help X11-Basic Compiler V.1.22 (c) Markus Hoffmann X11-BASIC Version: :51:12 xxxx 1.22 Usage: xbc [options] file... Options: -h, --help Display this information --dynamic link with shared library libx11basic.so --static link with static library (default) -b only precompile -c precompile and compile, but do not link -l produce linkable object file (no executable) -L <path> use path as library path (default: /usr/lib) -C keep comments
184 --bytecode produce a bytecode file -bytecode produce a bytecode file --virtualm use virtual machine framework instead of psydo-interpreter -virtualm use virtual machine framework instead of psydo-interpreter --pseudo pseudo-compile -shared produce shared object file --win32 produce Windows.exe file -win32 produce Windows.exe file -o <file> Place the output into <file> Windows 版 MS-Windows 版も SDL のサポートを受けています SDL がない場合はグラフィックスなしモードになります 心配しなくても X11-BASIC の ZIP パッケージには SDL.DLL が入ってるのでそのまま解凍すればいいです 他の PC に持って行って使うときにはすべきですけどね コンパイルは ZIP ファイルを解凍したフォルダ (SDL.dll がある ) に BASIC プログラムのソースファイルをコピーして コマンドプロンプトで xbc [ ファイル名 ] と入力すればコンパイルできます
185 コンパイルの途中で コンパイルの仕方 出力ファイル 名 コンパイルした後に実行するかどうか 聞いてきます コンパイルの仕方の選択肢は次のようになります 1. スタンドアローンの exe ファイルを作成します 2.C 言語に変換してから tcc コンパイラを使います 3. バイトコードだけ出力します 4. 見掛け上のコンパイル tcc を使ってください X11-BASIC だけなら 1 の選択肢を取るしかありません 他の選択肢を選ぶにはそれ相応のツールをインストールしておく必要があります この後は exe ファイルの名前を指定します 最後にコンパイルしたらそのまま実行するかどうか聞かれます
186 これで Windows の実行ファイルができたと思います 私はこのレトロというかモンドコンピュータ的なウィンドウが好きです X11-BASIC の FileSelect 命令とか Menu 命令で作る GUI のスタイルがこうなので ATARI ST で使われたウィンドウ環境がこういうスタイルだったのだと当時をしのばれます 今から見ると味わい深いですよね Android 版 /bas ディレクトリ以下にプログラムソースファイルがあれば メニューから Load して Compile すれば 拡張子.b というファイルができます Android のガジェットに このショートカットを画面に登録するツールがあるので それで画面上にアイコンを作ればいいと思います
187 Quick Reference 1. 予約された変数名すでに予約済みの変数があります これらは普通の変数として使えないキーワードです うっかりこの名前を使うことで エラーになることがあります そういうときは LET 命令を使ってみてください ふつう変数名の終わりはコマンド名とは違うものです int ANDROID? Android OS なら-1 それ以外なら 0 int COLS テキストターミナルの行数 int CRSCOL 現在テキストカーソルがある行の位置 int CRSLIN 現在テキストカーソルがある列の位置 flt CTIMER CPU システム時計 ( 秒 ) int FALSE 最後に発生したエラー番号 int ERR 常数 :0 int GPS? GPS 機能が使えれば TRUE そうでなければ 0 flt GPS_ALT GPS(Altitude m) flt GPS_LAT GPS(latitude deg) flt GPS_LON GPS(longitude deg) int MOUSEK マウスボタン状態 int MOUSES Shift,Alt,Ctrl,Caps キーの状態 int MOUSEX マウス座標 x int MOUSEY マウス座標 y int PC プログラムカウンタ flt PI 円周率 常数 : int ROWS テキストターミナルの列数 int SENSOR? センサが使用可能か (TRUE) int SP スタックポインタ
188 int STIMER システム内時計 flt TIMER Unix システム時計 (float) int TRUE 常数 :-1 int UNIX? UNIX(Linux, BSD) なら-1 それ以外なら 0 int WIN32? MS-Windows 32bit なら-1 それ以外なら 0 DATE$ 本日の日付 FILEEVENT$ ファイルにイベントがあったか INKEY$ キーボードバッファ TERMINALNAME$ 端末名称 TIME$ 現在の時間 TRACE$ 現在トレース中のプログラムの行数 2.Conditions 状態の表現は FALSE の場合は 0 TRUE の場合は-1 と決められています これらの状態を論理演算 AND, OR, XOR 等で演算することもできます 3.Numbers and Constants 数値の初期値には 0x という 16 進数が入ります 文字列の初期値は空白 "" です 配列は [,, ;,, ;,, ] のような形式です
189 4.Operators 演算子は次のように定義されており 上の方ほど優先さ れます 0. () ( 括弧 ) 1. ^ ( 累乗 ) 2. * / ( 乗算, 除算 ) 3. \ (modulo) ( 減算, 加算 ) 5. MOD DIV (modulus,...) 6. < > = <> <= >= ( 比較演算子 ) 7. AND OR XOR NOT EQV IMP ( 倫理演算子 ) 5.Abbreviations インタプリタの対話式ダイレクトモードではコマンドを省略形で指示できます 例えば q を入力したら QUIT と解釈してくれるとかです また次のような略記をダイレクトモードでもプログラムコードでも使えます REM? GOSUB ~ VOID! 行末に加えるコメント & EVAL / indirect command
190 6.Interpreter Commands CLEAR すべての変数を初期化します CONT STOP した後に入力すると続きを実行します DUMP 使ってる変数をとにかくリストアップする DUMP 関数やプロシージャをリストアップする DUMP ":" ラベルがあればリストアップする DUMP "#" 開いてるファイルをリストアップする DUMP "K" list of implemented commands DUMP "F" list of internal functions ECHO ON/OFF TRON/TROFF と同じ EDIT プログラムを編集するためにデフォルトのエディタを呼び出します HELP <expr> 短いヘルプを出力します LIST [s,e] (s 行目から e 行目まで ) プログラムリストを表示します LOAD file$ プログラムを読み込みます NEW すべての変数の値を初期化して停止します PLIST formatted listing PROGRAM options set title and compiler options PSAVE a$ writes the reformatted BASIC-program into file a$ QUIT X11-BASIC インタプリタの終了 REM comment コメント RUN プログラムの実行 STOP プログラムの中断 SAVE [file$] BASIC プログラムのファイルへの書き出し TROFF トレースモードをオフします TRON デバッグ用トレースモードをオンします VERSION X11-Basic のバージョンと日付 XLOAD コンテクストメニューからプログラムを読み込みます XRUN コンテクストメニューからプログラムを読み込んで実行します
191 7.Flow Control Commands AFTER n,procedure n 秒後にサブプロシージャ procedure を実行します BREAK EXIT IF が TRUE のときと同じ動作をします CASE const 条件分岐 SELECT DEFAULT ENDSELECT 等も参照のこと CHAIN bas$ 他のプログラムを起動します CONTINUE STOP した後に入力すると続きを実行します DEFAULT 条件分岐で使います SELECT CASE ENDSELECT も参照のこと DEFFN 行に続く数式の関数を定義します DO * LOOP ループします DOWNTO IF * ELSE * ENDIF を参照 FOR... DOWNTO IF * ELSE * ENDIF を参照 ELSE 条件分岐 If 構文の IF ENDIF を参照のこと END プログラムの終了 インタラクティブモードに復帰します ENDFUNCTION 関数の終わり FUNCTION を参照のこと ENDIF 条件分岐 If 構文の IF ELSE を参照のこと ENDSELECT 条件分岐で使います SELECT CASE DEFAULT も参照のこと EVERY n,procedure n 秒毎にプロシージャを実行します EXIT IF a 状態 a が真 (TRUE) ならループを抜け出します FOR * NEXT ループを制御する構文です FUNCTION * ENDFUNC 関数の開始箇所から終了箇所までを意味します GOSUB proc(...) サブルーチンを呼び出します GOTO label label へジャンプします IF * ELSE * ENDIF 条件分岐 LOOP DO * LOOP を参照 NEXT FOR * NEXT を参照 ON BREAK GOSUB proc ブレークしたら飛んでいくプロシージャの行き先 ON ERROR GOSUB proc エラーが起きたら飛んでいくプロシージャの行き先 ON * GOSUB proc1,... 値によって飛んでいくサブルーチンを割り振る ON * GOTO label1,... 値によって飛んでいくラベルを割り振る REPEAT REPEAT * UNTIL というループ構文です
192 RESUME エラーが起きても待機状態でいます RETURN PROCEDURE の終了 SELECT expr SELECT * CASE * DEFAULT * ENDSELECT を参照 UNTIL exp REPEAT * UNTIL というループ構文です SPAWN procedure Spawn new thread 8.Console Input/Output Commands BEEP TTY/ コンソールにて音を鳴らします 1 で On 0 で Off BELL BEEP と同じ CLS テキストスクリーンを初期化します FLUSH バッファをはき出します FORM_INPUT t$ 初期値として文字列を代入 HOME テキストカーソルをホームポジションに動かします INPUT [#n,]["text";] var 変数に値や文字列を入力します LINEINPUT [#n,]t$ channel/ole/console から一行読み込みます LOCATE row,column テキストコンソール上 column row にカーソルを移します PRINT a;b$ コンソールへ出力 PRINT AT(x,y); テキストカーソルを x 列,y 行に表示します PRINT COLOR(x,y); テキストの色を変更します PRINT TAB(x); テキストカーソルを x 列に移します PRINT SPC(x); テキストカーソルを x 列に移します PRINT a USING f$ フォーマットにしたがって数値を出力します PUTBACK a put back a char to console 9.File Input/Output Commands BGET #f,a,n read n bytes from file #f to address a BLOAD f$,a[,l] reads entire file (given by name) to address a BPUT #f,a,n writes n bytes from address a to file/channel f
193 BSAVE f$,a,l saves l bytes in memory at address a to file f$ CHDIR path$ ワーキングディレクトリのパス path$ を変えます CHMOD file$,m ファイルのパーミッションを変更 CLOSE [[#]n] ファイル I/O のチャンネルやリンクを閉じます FLUSH [#n] ファイルへバッファをはき出します KILL file$ ファイルの削除 MAP maps a file into memory UNMAP unmaps memory MKDIR path$ ディレクトリの作成 OPEN m$,#n,file$ 入出力可能なファイルまたはソケットを開きます OUT #n,a out byte a to channel n PRINT #n; ファイルやチャンネルに出力します PUTBACK [#n,]a put back a char to channel/file/console RELSEEK #n,d Place filepointer on new relative position RENAME file$,dst$ ファイルのリネームもしくは移動 RMDIR path$ 空のディレクトリを削除 SEEK #n,d ファイルのポインタを相対的に d だけ移動します TOUCH #n ファイルのタイムスタンプ変更 WATCH file$ monitor file changes 10.Variable Manipulation Commands ABSOLUTE x,adr% Assigns the address to the variable x. ARRAYCOPY dst(),src() 配列 dst() に配列 src() をコピー ARRAYFILL a(),b 配列を値で埋めます CLR a,b,c(),f$ ここでは a=0;b=0;c()=[];f$="" となります DEC var var=var-1 と同意 DIM 配列の宣言をします ERASE a()[,...] 配列を消します INC a 変数 a だけ増やします LET a=b 代入する命令です
194 LOCAL var[,...] プロシージャや関数内で使うローカル変数を宣言します SORT a(),n[,b()] 配列をソート SWAP a,b 変数の中身を交換 VAR vars declare arguments to be passed "by reference" 11.Memory Manipulation Commands ABSOLUTE x,adr% Assigns the address to the variable x. BMOVE q,z,n copies a block of n bytes from address q to z DPOKE adr,word write short int word to adr FREE adr% Frees a previously allocated memory block. LPOKE adr,long writes long int value to pointer adr MFREE adr% Frees a previously allocated memory block. MSYNC adr%,l flushes changes map memory back to disk POKE adr,byte write byte to pointer adr SHM_DETACH adr% detaches the shared memory segment SHM_FREE adr% frees the shared memory segment 12.Math commands ADD 変数 b に変数 a を加えます DEC var var=var-1 と同じ ただしこっちの方が速い DIV a,b a=a/b と同じ ただし こっちの方が速い FFT a(),i 一次元配列の高速フーリエ変換 FIT x(),y()[,yerr()],n,func(x,a,b,c,...) fits function to data FIT_LINEAR x(),y()[,[xerr(),]yerr()],n,a,b[,siga,sigb,chi2,q] linear regression with errors FIT_POLY x(),y(),dy(),n%,a(),m% fit a polynom to datapoints INC var var=var+1 と同じ ただしこっちの方が速い MUL a,b a=a*b と同じ ただしこっちの方が速い SORT a(),n[,b()] sorts n values of a() to incrementing order
195 SUB a,b a=a-b と同じ ただしこっちの方が速い 13.Other Commands CALL adr[,par,...] EXEC を参照 CONNECT #n,t$[,i%] connect a channel DATA 1,"Hallo",... 後に書いた文字や数値をデータとして扱います DELAY sec sec だけ待機します PAUSE と同義 ERROR n エラー番号 n を実行します EVAL t$ X11-BASIC の命令を含む t$ を実行します EXEC adr[,var,...] ポインタ adr の C 言語のサブルーチンを呼び出します GET_LOCATION,,,,,,, 端末の位置を返します GPS ON/OFF GPS デバイスを On/Off LINK #n,t$ load shared object file t$ UNLINK #n unload shared object file MERGE f$ Merges bas-file to actual program code NOP 操作も動作もしません NOOP 操作も動作もしません PAUSE sec sec 秒待機します PIPE #l,#k links two file channels PLAYSOUND c,s$ WAV サンプルを奏でます PLAYSOUNDFILE file$ 音楽ファイルを奏でます PROCEDURE proc(p1,...) プロシージャの先頭 RANDOMIZE [seed] 乱数生成の種を設定 READ var DATA 命令を順に読みます RECEIVE #n,t$ ソケットからのメッセージを返します RESTORE [label] READ 命令のポインタをセットします label で指示できます RETURN expr FUNCTION の終わりに expr を返します RSRC_LOAD file$ GEM rsc-file (ATARI ST) を読み込みます RSRC_FREE GEM rsc-file (frees) を読み込みます
196 SEND #n,t$ ソケットへメッセージを送ります SENSOR ON/OFF SENSOR スイッチの On/Off SETENV t$=a$ a$ の値を環境変数 t$ に代入します SOUND freq 内臓スピーカーから音を出します SPLIT t$,d$,mode,a$,b$ 文字列 t$ をデリミタ d$ で分けて a$ と b$ に代入します SHELL t$ t$ に書かれたシェルコマンドを実行します SPEAK t$ t$ に書かれた文字列をしゃべらせます SYSTEM t$ t$ に書かれたシェルのコマンドを実行します UNLINK #n un-links shared object #n VOID a calculates expression a and discard result WAVE c,f, 音楽シンセサイザを制御します WORT_SEP SPLIT と同じ 14.Graphic commands 14.1.Drawing and painting BOUNDARY f 境界の On/Off BOX x1,y1,x2,y2 枠の描画 CIRCLE x,y,r,, 円の描画 CLIP,,,,, clipping function COLOR f[,b] 前面 ( 背面 ) のカラー設定 COPYAREA,,,,, 画面上の矩形領域をコピー CURVE,,,,,,, cubic Bezier-curve DEFFILL c,a,b 内部を埋めるスタイルとパターン設定 DEFLINE a,b 線幅や線種の設定 DEFMARK c,a,g set color, size, type (POLYMARK) DEFMOUSE i マウスカーソルの種類設定 DEFTEXT c,s,r,g ltext によるテキストのプロパティ設定 DRAW [[x1,y1] TO] x2,y2 描線
197 ELLIPSE x,y,a,b[,a1,a2] 楕円の描画 FILL x,y flood fill GET x,y,w,h,g$ 領域のパタンをビットマップとして g$ に取得 GPRINT グラフィックウィンドウへ文字列を表示 GRAPHMODE mode グラフィックモードの設定 LINE x1,y1,x2,y2 描線 LTEXT x,y,t$ 描線によるテキスト PBOX x1,y1,x2,y2 中身も埋まったボックス PCIRCLE x,y,r[,a1,a2] 中身も埋まった円 PELLIPSE x,y,a,b[,a1,a2] 中身も埋まった楕円 PLOT x,y 点描 POLYLINE n,x(),y() 配列 x(),y() による多角形 POLYFILL n,x(),y() 中身も埋まった多角形 POLYMARK n,x(),y() draw polygon points PRBOX x1,y1,x2,y2 中身も埋まった丸めボックス PUT x,y,g$ g$ のビットマップを貼り付け PUT_BITMAP t$,i,i,i,i map bitmap RBOX x1,y1,x2,y2 丸めボックスを描画 SCOPE a(),typ,ys,yo fast plot of data a() SCOPE y(),x(),typ,ys,yo,xs,xo fast 2D plot of data SETFONT f$ ビットマップフォントの設定 SETMOUSE x,y マウスカーソルの設定 SGET screen$ グラフィックを screen$ へキャプチャ SPUT screen$ screen$ のビットマップをウィンドウへ貼り付け TEXT x,y,t$ テキストを描画 (bitmap font) 14.2.Screen/Window commands CLEARW [#n] グラフィックウィンドウの初期化 CLOSEW [#n] グラフィックウィンドウを閉じる FULLW n フルスクリーンのウィンドウを開く
198 GET_GEOMETRY,,,, グラフィックウィンドウのサイズを返す GET_SCREENSIZE,,,, スクリーンのサイズを返す INFOW n,t$ ウィンドウの情報を設定 MOVEW n,x,y グラフィックウィンドウを移動 OPENW n グラフィックウィンドウを開く ROOTWINDOW スクリーンの背景を描画 NOROOTWINDOW switch back to normal output SAVESCREEN file$ スクリーンのビットマップをファイルへ保存 SAVEWINDOW file$ ウィンドウのビットマップをファイルへ保存 SCREEN n スクリーンモードの選択 SHOWPAGE 直近まで行われたグラフィック操作を反映する SIZEW n,w,h グラフィックウィンドウのサイズ TITLEW n,t$ グラフィックウィンドウのタイトル TOPW n グラフィックウィンドウを前面に表示する USEWINDOW #n direct graphics output to window n VSYNC SHOWPAGE と同じ 14.3.GUI/User input commands ALERT a,b$,c,d$,var[,ret$] ユーザ入力を待機する Alert/Infobox を表示する EVENT,,,,,,,, イベントが起きるまで待機 FILESELECT tit$,path$,dflt$,f$ ファイル選択ボックスを表示 HIDEM マウスカーソルを隠す KEYEVENT a,b キーが押されるまで待機 LISTSELECT tit$,list$() リスト選択ボックスを表示 MENUDEF m$(),proc 配列 m$() からメニュータイトルやアイテムを読む MENUKILL メニューの消去 MENUSET n,x change menu-point #n with value x MENU STOP メニューのスイッチを Off する ONMENU execute the menu and
199 MENU メニューイベントを待機 MOUSE x,y,k マウス位置と状態の取得 MOUSEEVENT,,, マウスイベントを待機 MOTIONEVENT,,, マウスの動作を待機 OBJC_ADD t%,o%,c% オブジェクトツリーに追加 OBJC_DELETE t%,o% オブジェクトツリーから削除 RSRC_LOAD file$ ATARI の GUI GEM のリソースをロード RSRC_FREE ATARI の GUI GEM のリソースを解法 SHOWM マウスカーソルを表示 15.File Input/Output functions d%=device(file$) ファイルのデバイス番号を返します b=eof(#n) ファイルの終わりに達したら TRUE を返します b=exist(fname$) fname$ というファイルが存在すれば TRUE を返します a=freefile() Returns first free filenumber or -1 a$=fsfirst$(path$,,) ファイルシステムにある最初のファイルを探します a$=fsnext$() 次にあるファイルを探します c=inp(#n) チャンネルやファイルからバイト数を読みます c=inp?(#n) 読むことのできるバイト数か a=inp&(#n) チャンネルやファイルから 1word(2 Bytes) 読みます i=inp%(#n) チャンネルやファイルから 1long(4 Bytes) 読みます t$=input$(#n,num) ファイルまたはチャンネル n から num バイト読みます ret=ioctl(#n,d%,) チャンネルやファイルの設定を返します t$=lineinput$(#n) ファイルまたはチャンネル n から 1 行読みます p=loc(#n) ファイルポジションインディケータを返します l=lof(#n) ファイルの長さ ( 全文字数 ) を返します l%=size(file$) ファイルのサイズを返します t$=terminalname$(#n) ターミナル接続したデバイス #n の名前を返します
200 16.Variable/String Manipulation functions adr%=arrptr(b()) pointer to array descriptors a=asc(t$) 文字列の最初の文字の ASCII コードを返す b$=bin$(a[,n]) バイナリを文字列に変換 t$=chr$(a) 文字列を ASCII コードへ変換 a$=declose$(t$) removes enclosing characters from string a=dim?(a()) 配列 a() の要素数を返します a$=enclose$(t$[,p$]) encloses a string f=glob(a$,b$[,flags]) 文字列 a$ がパタン b$ に合致したら TRUE を返します t$=hex$(a[,n]) a を 16 進数にして返す t$=inline$(a$) 6 ビット ASCII コードから 8-bit バイナリに変換 a=instr(s1$,s2$[,n]) s1$ に s2$ が含まれるか a=tally(t$,s$) t$ のなかにある s$ の数を返す b%=int(a) 整数へ変換する t$=left$(a$[,n]) 文字列 a$ を左から n 文字返す t$=leftof$(a$,b$) 文字列 a$ をパタン b$ で分割して左側を返します l=len(t$) 文字列の長さを返す u$=lower$(t$) t$ のテキストを小文字に変換 l=ltextlen(t$) テキストのサイズを返す m$=mid$(t$,s[,l]) 文字列 t$ の左から s 文字目から l バイトだけ返します t$=mka$(a()) convert a whole array into a string t$=mki$(i) convert integer to 2-byte string t$=mkl$(i) convert integer to 4-byte string t$=mkf$(a) convert float to 4 byte string t$=mkd$(a) convert float to 8 byte string o$=oct$(d,n) convert integer d to string with octal number t$=replace$(a$,s$,r$) a$ にある s$ を r$ に書き換えます t$=reverse$(a$) 文字列を反転して返します t$=right$(a$[,n]) 文字列 a$ の右から n 文字を返す t$=rightof$(a$,b$) a$ を b$ で分割した右側を返します
201 a=rinstr(s1$,s2$[,n]) s1$ の右側から s2$ のある位置を返します t$=space$(i) i 個のスペースを返します t$=str$(a[,b,c]) 数値を文字列に変換 t$=string$(i,w$) 文字列 w$ を i 個コピーする u$=trim$(t$) 文字列 t$ の空白を除去する u$=xtrim$(t$) 文字列 t$ の空白を除去する u$=ucase$(t$) 文字列 t$ を大文字に変換する u$=upper$(t$) 文字列 t$ を大文字に変換する u$=using$(a,f$) 数値 a の表示形式を整形 a=val(t$) ASCII 文字列を数値に変換します i=val?(t$) returns number of chars which are part of a number adr%=varptr(v) returns pointer to variable u$=word$(b$,n) 文字列 b$ の第 n 文字目を返します e=wort_sep(t$,d$,m,a$,b$) splits t$ into parts 17.Data compression and coding functions b$=arid$(a$) order-0 adaptive arithmetic decoding b$=arie$(a$) order-0 adaptive arithmetic encoding b$=bwtd$(a$) inverse Burrows-Wheeler transform b$=bwte$(a$) Burrows-Wheeler transform c$=compress$(a$) 文字列を圧縮します c$=uncompress$(a$) 文字列を解凍します c%=crc(t$[,oc]) 32 bit checksum e$=encrypt$(t$,key$) encrypts a message t$=decrypt$(e$,key$) decrypts a message b$=mtfd$(a$) Move To Front decoding b$=mtfe$(a$) Move To Front encoding b()=cva(a$) returns array reconstructed from the string b%=cvi(a$) convert 2-byte string to integer b%=cvl(a$) convert 4-byte string to integer
202 b=cvs(a$) convert 4-byte string to float b=cvf(a$) convert 4-byte string to float b=cvd(a$) convert 8-byte string to double t$=inline$(a$) 6-bit ASCII to 8-bit binary conversion t$=reverse$(a$) return the reverses of a string b$=rld$(a$) run length decoding b$=rle$(a$) run length encoding 18.Memory Manipulation functions adr%=arrptr(b()) pointer to array descriptors i%=dpeek(adr%) read word from pointer adr b%=lpeek(adr%) reads long (4 Bytes) from address adr%=malloc(n%) allocates size bytes of memory adr%=mshrink(adr%,n%) reduces the size of a storage area d%=peek(a%) reads Byte from address a adr%=realloc(oadr%,n%) changes the size of a storage area adr%=shm_attach(id) attaches the shared memory segment id=shm_malloc(size,key) returns the identifier of the shared memory segment p.506 adr%=sym_adr(#n,s$) return pointer to symbol from shared object file adr%=varptr(v) returns pointer to variable 19.Logic functions c%=and(a%,b%) 論理計算 c=(a AND b) c%=or(a%,b%) 論理計算 c=(a OR b) c%=xor(a%,b%) 論理計算 c=(a XOR b) c%=eqv(a%,b%) 論理計算 c=(a EQV b) c%=imp(a%,b%) 論理計算 c=(a IMP b) b%=bchg(x%,bit%) x のビットを 0 と 1 を反転
203 b%=bclr(x%,bit%) x のビットを 0 に b%=bset(x%,bit%) x のビットを 1 に b%=btst(x%,bit%) x のビットが 1 なら-1 を返す b%=byte(x%) same as b=x AND 255 b%=card(x%) same as b=x AND 0xffff b%=word(x%) same as b=x AND 0xffff b%=even(d) d が奇数なら TRUE b%=odd(d) d が偶数なら TRUE b%=gray(a) Gray code. if a<0: inverse Gray code b%=shl(a) ビットを左へシフトする b%=shr(a) ビットを右へシフトする b%=swap(a) Swaps High and Low words of a 20.Math functions The math function library contains a comprehensive set of mathematics functions, including: trigonometric 三角関数 hyperbolic ハイパブリック関数 logarithmic ( 底が e である場合と 10 である場合 ) exponential ( 底が e である場合と 10 である場合 ) miscellaneous ( 平方根 累乗 etc.) 数学関数のいくつかはベクトルや行列で定義されてます b=abs(a) 絶対値 b = a c=add(a,b) 加算 c = a + b b=cbrt(a) 三平方 b = 3 a a=ceil(b) truncate number
204 a=cint(b) truncate number (note: differs from INT()!) z=combin(n,k) z = (n k)! k! c=div(a,b) 除算 c = a/b b()=fft(a()[,f%]) 高速フーリエ変換 a=fix(b) round number to integer a=floor(b) round number down to integer b=frac(a) a の非整数部 ( 小数点以下の数 ) y=gamma(x) gamma function y = Γ(x) y=lgamma(x) logarithm of gamma function y = lnγ(x) a=hypot(x,y) a = x 2 + y 2 b=int(a) 整数化 小数点以下切り捨て b()=inv(a()) 正方行列の逆行列を計算 i=sgn(a) 正負の符号とゼロ b=sqr(a) 平方 b = a b=sqrt(a) 平方 b = a b=trunc(a) truncate number b=ln(a) 自然対数 b=log(a) 自然対数 ( 底が e) b=log10(a) 底が 10 の対数 b=logb(x) 底が 2 の対数 b=log1p(x) b = log(1 + x) accurate near zero c=mod(a,b) c=(a MOD b) と同じ c=mul(a,b) 乗算 c = a b b=exp(a) exponential function b = e x (e to the x) b=expm1(a) exponential function minus 1 b = e x 1 b=fact(a) 階乗 b = a! a=pred(x) returns the preceding integer of x a=succ(x) returns the next higher integer b()=solve(a(),x()) solve linear equation system z=variat(n,k) number of permutations of n elements
205 20.1.Angles 角度は引数も返り値も共にラジアンです b=rad(a) デグリー ( 度 ) をラジアンへ変換 b=deg(a) ラジアンをデグリー ( 度 ) へ変換 Trigonometric functions b=sin(a) 正弦関数 b=cos(a) 余弦関数 b=tan(a) タンジェント b=asin(a) アークサイン b=acos(a) アークコサイン b=atan(a) アークタンジェント b=atn(a) アークタンジェント b=atan2(a,c) extended arc-tangent b=sinh(a) ハイパブリックサイン b=cosh(a) ハイパブリックコサイン b=tanh(a) ハイパブリックタンジェント b=asinh(a) ハイパブリックアークサイン b=acosh(a) ハイパブリックアークコサイン b=atanh(a) ハイパブリックアークタンジェント 20.3.Random numbers a=gasdev(dummy) ガウス分布に基づいた乱数 a=rand(dummy) 整数の乱数 a=random(n) 0 から n までの整数の乱数 a=rnd(dummy) 0 から 1 までの乱数 a=srand(seed) 乱数のシードを設定 RANDOMIZE と同じ
206 21.System functions ret%=call(adr%[,par]) マシン語コードまたは C 言語のサブルーチンを呼び出す t$=env$(n$) 環境変数 n$ の値を読みます t$=err$(i) エラーメッセージ ret=exec(adr[,var]) EXEC を参照 整数を返します i%=fork() creates a child process d$=juldate$(a) Julian day a=julian(date$) date$ by Julian day a a$=param$(i) i th word from the commandline t$=prg$(i) program line a=sensor(i) get the value from the i th sensor t$=system$(n$) n$ で書かれたシェルのコマンドを実行して文字列に返します t$=unixtime$(i) TIMER から time$ を得る d$=unixdate$(i) TIMER から date$ を得る 22.Graphic functions c=color_rgb(r,g,b[,a]) rgb(a) 値を与えることで色を得る a=event?(mask%) ペンディング中のグラフィクスイベントがあれば TRUE を返す a=form_alert(n,t$) デフォルトでボタン n のあるメッセージボックスを表示 ~FORM_CENTER(adr%,x,y,w,h) centers the object tree on screen a=form_dial(,,,,,,,,) complex function for screen preparation a=form_do(i) do dialog c=get_color(r,g,b) rgb(a) 値を与えることで色を得る d=objc_draw(,,,,) draw object tree ob=objc_find(tree,x,y) return object number by coordinates a=objc_offset(t%,o,x,y) calculate absolute object coordinates
207 c=point(x,y) returns color of pixel of graphic in window c=ptst(x,y) returns color of pixel of graphic in window a=rsrc_gaddr(typ,nr) get pointer to object tree 23.Other functions a=eval(t$) evaluate expression contained in t$ m=max(a,b,c,...) 最大値を返す m=max(f()) not implemented yet m=min(a,b,c,...) 最小値を返す m=min(array()) not implemented yet m=min(function()) not implemented yet
書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf
情報処理基礎 C 言語についてプログラミング言語は 1950 年以前の機械語 アセンブリ言語 ( アセンブラ ) の開発を始めとして 現在までに非常に多くの言語が開発 発表された 情報処理基礎で習う C 言語は 1972 年にアメリカの AT&T ベル研究所でオペレーションシステムである UNIX を作成するために開発された C 言語は現在使われている多数のプログラミング言語に大きな影響を与えている
プログラミング基礎
C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス
PowerPoint Presentation
プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include
Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード]
Borland C++ Compiler の 使用方法 解説書 (v1.1) 1 準備 (1/2) 1. スタートメニューから コントロールパネル を開いて その中に デスクトップのカスタマイズ フォルダーオプション があるので開く エクスプローラー内の ツール フォルダーオプション などからも開ける 2. 表示 タブにある 登録されている拡張子は表示しない のチェックを外して OKを押す これでファイルの拡張子が表示されるようになった
Microsoft Word - CygwinでPython.docx
Cygwin でプログラミング 2018/4/9 千葉 数値計算は計算プログラムを書いて行うわけですが プログラムには様々な 言語 があるので そのうちどれかを選択する必要があります プログラム言語には 人間が書いたプログラムを一度計算機用に翻訳したのち計算を実行するものと 人間が書いたプログラムを計算機が読んでそのまま実行するものとがあります ( 若干不正確な説明ですが ) 前者を システム言語
プログラミング実習I
プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 [email protected] 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,
Microsoft Word - VBA基礎(6).docx
あるクラスの算数の平均点と理科の平均点を読み込み 総点を計算するプログラムを考えてみましょう 一クラスだけ読み込む場合は test50 のようなプログラムになります プログラムの流れとしては非常に簡単です Sub test50() a = InputBox(" バナナ組の算数の平均点を入力してください ") b = InputBox(" バナナ組の理科の平均点を入力してください ") MsgBox
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
Microsoft Word - VBA基礎(3).docx
上に中和滴定のフローチャートを示しました この中で溶液の色を判断する部分があります このような判断はプログラムではどのように行うのでしょうか 判断に使う命令は IF 文を使います IF は英語で もし何々なら という意味になります 条件判断条件判断には次の命令を使います If 条件式 1 Then ElseIf 条件式 2 Then ElseIf 条件式 3 Then 実行文群 1 実行文群 2 実行文群
PowerPoint プレゼンテーション
講座を行う前に 自己紹介 僕と上回生について 1 年生同士で少しお話しよう! オリエンテーションの宿題 アルゴロジック http://home.jeita.or.jp/is/highschool/algo/index3.html どこまでできましたか? あまりできなかった人はこれから全部クリアしよう! 2016 年度 C 言語講座 第一回目 2016/6/11 fumi 今回の目標 プログラムを書いて実行するやり方を覚える
Java講座
~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト
ガイダンス
情報科学 B 第 2 回変数 1 今日やること Java プログラムの書き方 変数とは何か? 2 Java プログラムの書き方 3 作業手順 Java 言語を用いてソースコードを記述する (Cpad エディタを使用 ) コンパイル (Cpad エディタを使用 ) 実行 (Cpad エディタを使用 ) エラーが出たらどうしたらよいか??? 4 書き方 これから作成する Hello.java 命令文 メソッドブロック
このうち ツールバーが表示されていないときは メニューバーから [ 表示 (V)] [ ツールバー (T)] の [ 標準のボタン (S)] [ アドレスバー (A)] と [ ツールバーを固定する (B)] をクリックしてチェックを付けておくとよい また ツールバーはユーザ ( 利用者 ) が変更
ファイル操作 アプリケーションソフトウェアなどで作成したデータはディスクにファイルとして保存される そのファイルに関してコピーや削除などの基本的な操作について実習する また ファイルを整理するためのフォルダの作成などの実習をする (A) ファイル名 ファイル名はデータなどのファイルをディスクに保存しておくときに付ける名前である データファイルはどんどん増えていくので 何のデータであるのかわかりやすいファイル名を付けるようにする
JavaプログラミングⅠ
Java プログラミング Ⅰ 2 回目 ようこそ Java へ 今日の講義で学ぶ内容 画面へのメッセージの表示 文字や文字列 数値を表現するリテラル 制御コードを表すエスケープシーケンス 画面出力の基本形 ソースファイル名 : クラス名.java class クラス名 System.out.println(" ここに出力したい文字列 1 行目 "); System.out.println(" ここに出力したい文字列
eYACHO 管理者ガイド
eyacho 管理者ガイド 第 1 版 - ios は Cisco の米国およびその他の国における商標または登録商標であり ライセンスに基づき使用されています - Apple ipad は Apple Inc. の商標です - Microsoft, Excel および Internet Explorer は 米国 Microsoft Corporation の 米国およびその他の国における登録商標または商標です
sinfI2005_VBA.doc
sinfi2005_vba.doc MS-ExcelVBA 基礎 (Visual Basic for Application). 主な仕様一覧 () データ型 主なもの 型 型名 型宣言文字 長さ 内容 整数型 Integer % 2 バイト -32,768 32,767 長整数型 Long & 4 バイト -2,47,483,648 2,47,483,647 単精度浮動小数点数 Single 型!
JavaプログラミングⅠ
Java プログラミング Ⅰ 6 回目 if 文と if else 文 今日の講義で学ぶ内容 関係演算子 if 文と if~else 文 if 文の入れ子 関係演算子 関係演算子 ==,!=, >, >=,
Si 知識情報処理
242311 Si, 285301 MS 第 12 回 竹平真則 [email protected] 2015/12/21 1 本日の内容 1. 先週のおさらい 2. PHP のスクリプトを実際に動かしてみる 3. RDB についての説明 2015/12/21 2 資料の URL http://peacenet.info/m2is 2015/12/21 3 注意事項 ( その
Taro-Basicの基礎・はじめに(公
Basic の基礎 はじめに 0. 目次 1. はじめに 1. 1 ファイル フォルダとは 1. 2 Tiny Basic の起動と停止 1. 3 Tiny Basic の実行 1. 4 簡単なプログラム - 1 - 1. はじめに 1. 1 ファイル フォルダとは データの集まりをファイルといい 名前を付けて区別する フォルダ ( ディレクトリともいう ) という特別なファイルは ファイルが登録できるようになっている
ExcelVBA
EXCEL VBA REGLECASSE YU SATO 目次 はじめに 開発タブの表示 拡張子 VBEの起動と初期設定 モジュールの挿入 削除 プロジェクト モジュール プロシージャ 変数の宣言 (Dim) If~Then For~Next 応用 :If~ThenとFor~Next ボタンの作成 最後に Subプロシージャ 基本説明 セルの指定 (Range) 変数とデータ型 (String,Long)
PowerPoint プレゼンテーション
Excel VBA の基本 1 VBA Visual Basic for Applications Office シリーズに搭載されているプログラミング言語 マクロを作成するために使われる 1 プログラミングとは 人間の意図した処理を行うようにコンピュータに指示を与えること セル A1 の内容をセル B1 にコピーしなさいセル A1 の背景色を赤色にしなさいあれをしなさいこれをしなさい 上から順番に実行
講習No.1
プログラムはどこに保存され, どこで実行されるのか? 復習 ハードディスク キーボード Central Processing Unit 例えば i7, ARM, Cortex-A17 ディスプレイ 例えば 4G バイト メモリ プログラムは, ワープロ文章などと同様, ハードディスクなどにファイルとして保存されている. プログラムは, メモリ上に呼び出されて ( ロード ) 実行される. プログラムの作成
Word2013基礎 基本操作
OA ベーシック Word2013 基礎基本操作 1 / 8 Word2013 基礎基本操作 基本操作前編 (WORD 基本操作 ) Word の起動と終了 操作 Word を起動します 1[ スタート画面 ] で [Microsoft Word2013] のタイルをクリックします Word が起動します タスクバーには Word のボタンが表示されます 2[ 白紙の文書 ] をクリックします 新規文書が表示されます
Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕
Java Script プログラミング入門 3-6~3-7 茨城大学工学部情報工学科 08T4018Y 小幡智裕 3-6 組み込み関数 組み込み関数とは JavaScript の内部にあらかじめ用意されている関数のこと ユーザ定義の関数と同様に 関数名のみで呼び出すことができる 3-6-1 文字列を式として評価する関数 eval() 関数 引数 : string 式として評価する文字列 戻り値 :
char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く
変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを
PowerPoint プレゼンテーション
2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd
NS-Draw Ver
第 2 章インストール 本章では コンピュータへの NS-Draw のインストール方法について解説します 次の STEP1~3の順番で説明を進めていきます 2.1 インストール 2.2 ライセンスの確認 2.3 回路シミュレーションの実行までの確認 2.1 インストールインストーラのメニューに従って インストール作業を行ってください インストール先を c:\program Files にすると Windows
エクセルの基礎を学びながら、金額を入力すると自動的に計算され、1年分の集計も表示される「おこづかい帳」を作りしょう
Excel2007 Windows7 出納簿を作って 毎日の現金の入金 出金を記入し 差引残高 を表示させましょう 1. Excel を起動しましょう... 1 2. タイトルと項目を入力しましょう... 1 3. No. を入力しましょう... 1 4. 罫線を引きましょう... 2 5. タイトルの書式設定をしましょう... 2 6. 項目の書式設定をしましょう... 3 7. 桁区切りスタイルを設定しましょう...
Microsoft Word - VB.doc
第 1 章 初めてのプログラミング 本章では カウントアップというボタンを押すと表示されている値が1ずつ増加し カウントダウンというボタンを押すと表示されている値が1ずつ減少する簡単な機能のプログラムを作り これを通して Visual Basic.NET によるプログラム開発の概要を学んでいきます 1.1 起動とプロジェクトの新規作成 Visual Studio.NET の起動とプロジェクトの新規作成の方法を
情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤
情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤 2017.12.7 前回の演習問題の解答例 1. 四則演算のできる計算機のプログラム ( 括弧も使える ) 2. 実数の扱える四則演算の計算機のプログラム ( 実数 も というより実数 が が正しかったです ) 3. 変数も扱える四則演算の計算機のプログラム ( 変数と実数が扱える ) 演習問題 1 で行うべきこと
Microsoft PowerPoint - prog04.ppt
プログラミング言語 2 第 04 回 (2007 年 05 月 14 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 05 月 14 日分と書いてある部分が 本日の教材です 本日の内容
メソッドのまとめ
メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか
MS-ExcelVBA 基礎 (Visual Basic for Application)
MS-ExcelVBA 基礎 (Visual Basic for Application). 主な仕様一覧 () データ型 ( 主なもの ) 型型名型宣言文字長さ内容整数型 Integer % バイト -, ~, 長整数型 Long & バイト -,,, ~,,, 単精度浮動小数点数型倍精度浮動小数点数型 Single! バイト負値 : -.0E ~ -.0E- 正値 :.0E- ~.0E Double
目次 1. 変換の対象 砂防指定地 XML 作成メニュー シェープファイルからXMLへ変換 砂防指定地 XMLとシェープファイルの対応.csv 変換処理 CSVファイルによる属性指定... 5
砂防指定地 XML 作成説明書 2012/12/18 有限会社ジオ コーチ システムズ http://www.geocoach.co.jp/ [email protected] 砂防指定地 XML 作成 プログラムについての説明書です この説明書は次のバージョンに対応しています アプリケーション名バージョン日付 砂防指定地 XML 作成 7.0.5 2012/12/18 プログラムのインストールについては
PowerPoint プレゼンテーション
プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/
プログラミング基礎I(再)
山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全
スライド 1
ラベル屋さん HOME かんたんマニュアル リンクコース 目次 STEP 1-2 : ( 基礎編 ) 用紙の選択と文字の入力 STEP 3 : ( 基礎編 ) リンクの設定 STEP 4 : ( 基礎編 ) リンクデータの入力と印刷 STEP 5 : ( 応用編 ) リンクデータの入力 1 STEP 6 : ( 応用編 ) リンクデータの入力 2 STEP 7-8 : ( 応用編 ) リンク機能で使ったデータをコピーしたい場合
Microsoft PowerPoint - prog06.ppt
プログラミング言語 2 第 06 回 (2007 年 06 月 11 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 06 月 11 日分と書いてある部分が 本日の教材です 本日の内容
コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n
コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n を入力してもらい その後 1 から n までの全ての整数の合計 sum を計算し 最後にその sum
FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り
FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作ります FORTRAN の場合 OPEN 文でファイルを開いた後 標準入力の場合と同様に READ 文でデータを読みこみます
Windows ユーザー名に全角が含まれている場合は インストールできません のエラーが表示される場合の対処法 手順 1 管理者権限のある Windows ユーザーでログインした上で 以下の処理を行ってください 画面左下の 旗のマークを左クリックし 続いて表示される一覧から 設定 ( 左側に歯車のよ
取引上手くん 9 のインストール時にエラーが表示される際の対処法 ~Windows10~ 本ドキュメントは Windows10 のパソコンにおいて 取引上手くん 9 のインストールが正常にできなかった場合の対処法 をまとめたものです なお インストールの手順そのものにつきましては 別ドキュメント ( 取引上手くん 9 のインストール説明書 または about.pdf ) をご覧ください インストーラー
数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留
第 10 章分割コンパイル 1 ソースを分割する今まで出てきたソースは全て一つのソースファイルにソースを記述してきました しかし ソースが長くなっていくと全てを一つのファイルに書くと読みづらくなります そこで ソースを複数のファイルに分割してコンパイルを行う分割コンパイルをします 今章は章名にもなっている 分割コンパイルの方法についてやります 分割コンパイルする時は大抵 関連性のある機能ごとにファイルにまとめます
ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar
ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spark API との通信 このラーニングモジュールでは Python を使用した Spark API とのインターフェイスを扱います
GSLetterNeo vol 年 7 月 形式手法コトハジメ TLA + Toolbox を使って (2)- 熊澤努 sra.co.jp はじめに GSLetterNeo Vol.130 で TLA + Toolbox を紹介しました 今回からより詳しく T
GSLetterNeo vol.132 2019 年 7 月 形式手法コトハジメ TLA + Toolbox を使って (2)- 熊澤努 kumazawa @ sra.co.jp はじめに GSLetterNeo Vol.130 で TLA + Toolbox を紹介しました 今回からより詳しく TLA + Toolbox について説明していきます 今回は TLA + Toolbox のインストールの仕方から
Microsoft PowerPoint - CproNt02.ppt [互換モード]
第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント
プログラミング実習I
プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 [email protected] 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.
Microsoft Word A02
1 / 10 ページ キャリアアップコンピューティング 第 2 講 [ 全 15 講 ] 2018 年度 2 / 10 ページ 第 2 講ビジネスドキュメントの基本 2-1 Word の起動 画面構成 Word を起動し 各部の名称と機能を確認してみましょう 2 1 3 6 4 5 名称 機能 1 タイトルバー アプリケーション名とファイル名が表示されます 2 クイックアクセスツールバー よく使うコマンドを登録できます
3.Cygwin で日本語を使いたい Cygwin で以下のコマンドを実行すると それ以降 メッセージが日本語になります export LANG=ja_JP.UTF-8 これは 文字コードを日本語の UTF-8 に設定することを意味しています UTF-8 は Cygwin で標準の文字コードで, 多
Cygwin 使いこなしマニュアル 2011/10/17 1.Cygwin の起動 Cygwin のインストールが完了したら 一般ユーザーで Windows にログインし Cygwin を起動してみましょう 下の図は ユーザー名 densan でログインして Cygwin を起動した後 いくつかコマンドを実行してみたところです 2.Cygwin のファイルはどこにある? Windows から Cygwin
マクロの実行許可設定をする方法 Excel2010 で 2010 でマクロを有効にする方法について説明します 参考 URL:
マクロの実行許可設定をする方法 Excel2010 で 2010 でマクロを有効にする方法について説明します 参考 URL: http://excel2010.kokodane.com/excel2010macro_01.htm http://span.jp/office2010_manual/excel_vba/basic/start-quit.html Excel2010 でマクロを有効にする
Microsoft Word - Word1.doc
Word 2007 について ( その 1) 新しくなった Word 2007 の操作法について 従来の Word との相違点を教科書に沿って説明する ただし 私自身 まだ Word 2007 を使い込んではおらず 間違いなどもあるかも知れない そうした点についてはご指摘いただければ幸いである なお 以下において [ ] で囲った部分は教科書のページを意味する Word の起動 [p.47] Word
基本的な利用法
(R で ) 塩基配列解析 基本的な利用法 Macintosh 版 到達目標 : このスライドに書かれている程度のことは自在にできるようにしてエラーへの対処法を身につける 1. 必要なパッケージのインストールが正しくできているかどうかの自力での判定 および個別のパッケージのインストール 2. 作業ディレクトリの変更 3. テキストエディタで自在に入出力ファイル名の変更 ( どんなファイル名のものがどこに生成されるかという全体像の把握
PowerPoint プレゼンテーション
計算機実習 Ⅰ FORTRAN 担当 2018.05.29 本日の課題 プログラムの基本ルールを理解し 以下が含まれるプログラムを作成する (1) 文法の基礎 ( フローチャートなど ) (2) 変数宣言 (3) 入出力 (4) 四則演算 (5) 組込関数 (6) 判定文 (7) リダイレクション PROGRAM MAIN INTEGER I, J, K REAL A, B, C CHARACTER
Python の基本事項の学習 このラーニングラボでは Python のシンタックス ( 構文 ) スコープ ( 有効範囲 ) 変数 演算子 単純な条件分岐の基本事項を学習します 目標 所要時間 :45 分 Python の基本的なインデントとスコープを理解しよう 変数の割り当て方法と使用方法を学習
Python の基本事項の学習 このラーニングラボでは Python のシンタックス ( 構文 ) スコープ ( 有効範囲 ) 変数 演算子 単純な条件分岐の基本事項を学習します 目標 所要時間 :45 分 Python の基本的なインデントとスコープを理解しよう 変数の割り当て方法と使用方法を学習しよう Python 割り当て演算子と比較演算子を使用してみよう Python 条件分岐を使ってみよう
スクールCOBOL2002
3. 関連資料 - よく使われる機能の操作方法 - (a) ファイルの入出力処理 - 順ファイル等を使ったプログラムの実行 - - 目次 -. はじめに 2. コーディング上の指定 3. 順ファイルの使用方法 4. プリンタへの出力方法 5. 索引ファイルの使用方法 6. 終わりに 2 . はじめに 本説明書では 簡単なプログラム ( ファイル等を使わないプログラム ) の作成からコンパイル 実行までの使用方法は既に理解しているものとして
ch2_android_2pri.indd
Android SDK をインストールしよう Android Developers サイトから Android SDK をダウンロードして インストールします 1 インターネットブラウザのアドレスバーに http://dl.google.com/android/ installer_r20-windows.exe と入力して g キーを押す 1 ファイルを保存するメッセージが表示される 2 [ 保存
Microsoft PowerPoint - kougi2.ppt
C プログラミング演習 第 2 回 Microsoft Visual Studio.NET を使ってみよう 説明 例題 1. プログラム実行の体験 コンピュータを役に立つ道具として実感する 次ページのプログラムを使って, Microsoft Visual Studio.NETでの C++ ソースファイル編集, ビルド, テスト実行の一連の過程を体験する 例題 1 のプログラムの機能 計算の繰り返し
目次 1. 動作環境チェック 動作必要環境 Java のインストール Java のインストール Firebird のインストール Firebird のインストール Adobe Reader のインストール
ORCA PROJECT Linux 対応版インストールマニュアル (Version 2.0.0 対応 ) Ubuntu 10.04 Lucid 用 2.0.0 版 2013 年 3 月 8 日 目次 1. 動作環境チェック...3 1.1. 動作必要環境...3 2. Java のインストール...3 2.1. Java のインストール...3 3. Firebird のインストール...4 3.1.
スクールCOBOL2002
(h) 登録集原文の指定方法 . 登録集原文の指定方法 複数の COBOL プログラムに共通の記述を別のソースファイルとしておき COPY 文で取り込むことができます 登録集原文の概念図を下欄に示します このようにすると コーディング量を削減でき 記述ミスもなくなるため 開発効率を高めることができます ここでは 第 章で実習した reidai.cbl というソースファイルの DATA0 と YYMMDD
Microsoft PowerPoint - VBA解説1.ppt [互換モード]
九州大学工学部地球環境工学科船舶海洋システム工学コース 計算工学演習第一 演習資料担当 : 木村 Excel 上のマクロを利用してプログラムを組む Visual Basic for Applications (VBA) のテクニック Excel のマクロとは? 一連の操作を自動的に行う機能 例 ) セル ( マス目 ) に数字を 1 から順番に埋めていく Excel のマクロでどんなプログラムが作れるのか?
このルールをそのまま正規表現として書くと 下記のようになります ^A[0-9]{2}00[0-9]{3}([0-9]{2})?$ ちょっと難しく見えるかもしれませんが 下記のような対応になっています 最初 固定 年度 固定 通番 ( 枝番 ) 最後 ルール "A" 数字 2 桁 0 を 2 桁 数字
正規表現について 作成日 : 2016/01/21 作成者 : 西村 正規表現? 正規表現 (Regular Expression Regex) というと難しいもののように感じますが 正規表現 というのは 文字のパターンを表したもの です ( 例 ) これはソエルで使用している見積書の番号です A1500033 この番号は 下記のルールで付けられています 固定 年度 固定 通番 ( 枝番 ) ルール
C#の基本
C# の基本 ~ 開発環境の使い方 ~ C# とは プログラミング言語のひとつであり C C++ Java 等に並ぶ代表的な言語の一つである 容易に GUI( グラフィックやボタンとの連携ができる ) プログラミングが可能である メモリ管理等の煩雑な操作が必要なく 比較的初心者向きの言語である C# の利点 C C++ に比べて メモリ管理が必要ない GUIが作りやすい Javaに比べて コードの制限が少ない
各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作
マイナンバー管理表 操作説明書 管理者用 2015 年 11 月 30 日 ( 初版 ) 概要 マイナンバー管理表 の動作環境は以下の通りです 対象 OS バージョン Windows7 Windows8 Windows8.1 Windows10 対象 Excel バージョン Excel2010 Excel2013 対象ファイル形式 Microsoft Excel マクロ有効ワークシート (.xlsm)
数量的アプローチ 年 6 月 11 日 イントロダクション データ分析をマスターする 12 のレッスン ウェブサポートページ ( 有斐閣 ) 水落研究室 R http:
イントロダクション データ分析をマスターする 12 のレッスン ウェブサポートページ ( 有斐閣 ) http://yuhikaku-nibu.txt-nifty.com/blog/2017/09/22103.html 水落研究室 R http://depts.nanzan-u.ac.jp/ugrad/ps/mizuochi/r.html 1 この授業では統計ソフト R を使って分析を行います データを扱うソフトとして
Microsoft Word - 18環設演付録0508.doc
Excel の関数について 注 ) 下記の内容は,Excel のバージョンや OS の違いによって, 多少異なる場合があります 1. 演算子 等式はすべて等号 (=) から始まります 算術演算子には, 次のようなものがあります 内が,Excel 上で打ち込むものです 足し算 +, 引き算 -, かけ算 *, わり算 /, べき乗 ^ 2. 三角関数 メニューバーの [ 挿入 ] ダイアログボックスの
テキストファイルの入出力1
テキストファイルの入出力 1 0. 今回の目的前回までは 2 回にわたって繰り返しについて学んできました 今回からテキストファイルの入出力について学ぶことにします 1. テキストファイルへの出力 1.1 テキストファイルについてテキストファイルとは コンピュータで扱うことが出来るファイルの中で最も基本的なファイルであり どの様な OS でもサポートされているファイル形式です Windows においては
インテル(R) Visual Fortran コンパイラ 10.0
インテル (R) Visual Fortran コンパイラー 10.0 日本語版スペシャル エディション 入門ガイド 目次 概要インテル (R) Visual Fortran コンパイラーの設定はじめに検証用ソースファイル適切なインストールの確認コンパイラーの起動 ( コマンドライン ) コンパイル ( 最適化オプションなし ) 実行 / プログラムの検証コンパイル ( 最適化オプションあり ) 実行
