 
 
 
 
 
質問<3700>2008/3/30
次の問題をBASICプログラムで書きたいです。 問)10進法で表された数を2進法、16進法の表現に変換するプログラム を書きなさい。 2進法に変換するプログラムは作れたのですが、16進法に変換するプログ ラムの書き方が分かりません。よろしくお願いします ★希望★完全解答★
お便り2008/4/1
from=亀田馬志
高校数学の窓LaTeX版を参照して下さい。
お便り2008/4/1
from=nanaya
亀田さんありがとうございます。 16進法で表すときに用いるA~Fのアルファベットを プログラム上でどのように表したらよいのでしょうか? "16で割ったときの余剰が10のときはAと表す" というプログラムをつければよいのでしょうか?
お便り2008/4/3
from=亀田馬志
まあ、そう言う事です。 または、本編にも記述しましたが、「別にデータ構造を定義して」それを本体の計算用プログラムから 「参照する」と言う手もあります。 どちらでもお好きなように。 ただし、BASIC言語の場合、一応ANSI規格と言う「標準の」BASICの規格が制定されているのですが(日本 ではJIS)、かなり処理系によって実装が異なります。 よって、具体的に「どう書くのか?」と言う例を挙げる事は(Schemeでは簡単ですが)出来ません。処理系 依存になっちゃうんですね。 少なくとも、(BASICを一回もやったことがない)亀田が調べた限り、ネットで「BASIC入門」の検索かけた んですが、「標準BASIC」入門は全然ヒットせず、「十進BASIC」(これもJIS準拠と書いていますが、ある 程度"実用の"プログラムを書く以上、「仕様範囲外の独自定義命令」を使わないといけません)入門とか、 あるいは「TinyBasic」入門であるとか、それこそMicrosoftの「VisualBasic」入門であるとか、そう言う 「特定の」実装に関しての解説ばっかりでしたね。 従って、「一般的にどれでも通用する」BASICでのプログラムがどうなるのか、は全く見当が付かない、と 言う事です。 (意外にこの辺はBASIC言語の弱みです)。 まあ、仮に「どれかの」BASICでプログラムを書けたとしても、メンド臭くてしゃーないワケですが(笑)。↑ 亀田のLinuxでEmacs(テキストエディタ)でBASICのプログラムを書いているトコロ。 Emacsの上段でBASICのソースコード、下段で端末(ターミナル)を走らせて、上段で書かれたプログラムが どうやって走るかテストしながらプログラムを作る。 なお、Linuxでは若干十進BASICは不安定なので、Linux用でのyetanotherBASIC(yaBASIC、ANSI準拠)を走ら せようとしている。 ちなみに、上段はBASICのソースには見えないかもしれないが、れっきとしたBASICのソース。現代のBASIC は基本的に行番号はそれほど必要が無い。 また、一行目の #! /usr/bin/env yabasic と言うおまじないは「シェバング」と言われるモノでLinuxやFreeBSD等でお馴染みの流儀。この行を書く ことで「このソースファイルから」特定のプログラミング言語へアクセス出来る。 この例では「yabasicにアクセスせよ」と言っている。 なお、ソースコードの例は「十進BASIC入門」にあるピタゴラス数の計算コードだが、見事バグとして引っ かかってる。 下段端末に表示されている Error in /home/cametan/pita.bas, line 6: syntax error at "then" と言うのは、 「ソースコード(取りあえずpita.basと名づけた)6行目の"then"と言うのはシンタックスエラーです」 と言う表示。つまり「十進BASIC」で扱える「if~then」と言う形式は、他のANSI準拠のBASIC実装では 「動かない」と言う事。 こうなると全く手も足も出ない。制御構造まで違うと「全く違う言語」と言っても良く、「お手上げ」 である。 元々BASICは「実装依存」が大きい言語としては有名だったが、現代もその状況からは脱していないようだ。
お便り2008/4/5
from=亀田馬志
ええと、参考になるかどうか知りませんが、一応VBScriptで問題のコードを書いてみました。
Schemeヴァージョン程完璧じゃないんですが、こんな感じで。多少汚いかもしれませんが、大体一夜漬け
で勉強して作りましたし(笑)。
なお、知らない人もいるでしょうから簡単に紹介しておきますけど、VBScriptはMicrosoftのVisual
Basicの一種で、これはどんな(今主流の)Windowsパソコンにも入っています(新しくインストールしたり
買ったりする必要がない)。
久々に「この問題の為だけに」Windowsを起動しましたが(笑)、まあ、「どんなWindows機でも既に入って
る」上に「簡単に動く」と言う意味では、多分コンパティビリティとしては一番適切じゃないか、と。
純粋なBASICとすればどうだか知りませんが(笑)、まあ、コードをコピペすればすぐ動く、と言う意味では
確かめやすいでしょう。
以下のコードをWindowsのメモ帳(Notepad)にコピペして下さい。
'''ここからVBScript用ソース
dim a(36)
a(0) = 0: a(1) = 1: a(2) = 2: a(3) = 3: a(4) = 4
a(5) = 5: a(6) = 6: a(7) = 7: a(8) = 8: a(9) = 9
a(10) = "A": a(11) = "B": a(12) = "C": a(13) = "D": a(14) = "E": a(15) =
"F": a(16) = "G"
a(17) = "H": a(18) = "I": a(19) = "J": a(20) = "K": a(21) = "L": a(22) =
"M": a(23) = "N"
a(24) = "O": a(25) = "P": a(26) = "Q": a(27) = "R": a(28) = "S": a(29) =
"T": a(30) = "U"
a(31) = "V": a(32) = "W": a(33) = "X": a(34) = "Y": a(35) = "Z"
m = inputbox("mの値を入力して下さい", "mの入力")
n = inputbox("nの値を入力して下さい", "nの入力")
do while m <> 0
    i = m \ n
    j = m mod n
    ls = a(j) & ls
    m = i
loop
msgbox ls ,, n & "進数表示"
'''コピペはここまで。
これをメモ帳にコピペしてから、保存するんですが、例えば"decimal2npn.vbs"と言うように、拡張子に
".vbs"と付けてデスクトップ上に保存します。
Windowsで拡張子が見えない設定になってたりすれば困るんですが、もしそうだったら、
http://www.cdwavmp3.com/dl/extention/ext_hyouji.html
でも参考にして、拡張子を見えるようにWindowsを設定しておいて下さい。
メモ帳ではデフォルトで拡張子は".txt"なので、これじゃあマズいんで、名前は何でも構わないんで、
とにかく".vbs"とするようにするのが肝要です。
デスクトップ上に"decimal2npn.vbs"をセーブしたら、アイコンが出来てると思います。
それをダブルクリックすると、VBScriptが起動します。
VBScriptはWSH(Windows ScriptHost)と言うWindowsのアプリケーションを経由してブラウザ経由で動き
ます。まあ、そんなワケで、IE(InternetExplorer)が入ってるWindowsパソコンだったら簡単に動作を
確認できるでしょう。
 ↑
ソースはかなりScheme版のver4辺りに準拠するように苦労しましたが、かなりメンド臭かったですね(苦笑)。
DIM文で36要素を持つ配列を最初に宣言しているんですが、その要素を指定するのが結構大変でした。
ショートカットがあるのかもしれませんが、多分この辺は通常のBASICでも似たようなメンド臭さがある
のではないか、と。
配列番号を上手い具合に使って、計算本体から数字なり文字なりを参照させる、と言う構造は同じです。
なお、VBScriptはブラウザ経由で入出力を行うようになっているらしく、inputboxやmsgboxと言うのが
BASICで通常使われているinputやprintにあたる命令のようです。この辺りは「既に組み込みでのGUI
ツールの呼び出しが成される」前提で設計されているようで、簡易性で言うと確かに「通常のBASIC」
よりは使いやすいかも。
あとは繰り返し計算ですが、Schemeでは局所関数loopを定義して再帰呼び出ししていますが、似た感じで
使えそうなdo while loop構文を用いてVBScript版もロジックを構築しています。
iが0になった時点で計算を脱出する、って構造は同じですね。あとはSchemeでは局所関数loopの引数を
書き換える手段でしたが、VBScript版は、do while loop内で変数i , j , mを書き換えていく、と言う
構造になっています。やってることは同じですね。
まあ、参考にして下さい。
↑
ソースはかなりScheme版のver4辺りに準拠するように苦労しましたが、かなりメンド臭かったですね(苦笑)。
DIM文で36要素を持つ配列を最初に宣言しているんですが、その要素を指定するのが結構大変でした。
ショートカットがあるのかもしれませんが、多分この辺は通常のBASICでも似たようなメンド臭さがある
のではないか、と。
配列番号を上手い具合に使って、計算本体から数字なり文字なりを参照させる、と言う構造は同じです。
なお、VBScriptはブラウザ経由で入出力を行うようになっているらしく、inputboxやmsgboxと言うのが
BASICで通常使われているinputやprintにあたる命令のようです。この辺りは「既に組み込みでのGUI
ツールの呼び出しが成される」前提で設計されているようで、簡易性で言うと確かに「通常のBASIC」
よりは使いやすいかも。
あとは繰り返し計算ですが、Schemeでは局所関数loopを定義して再帰呼び出ししていますが、似た感じで
使えそうなdo while loop構文を用いてVBScript版もロジックを構築しています。
iが0になった時点で計算を脱出する、って構造は同じですね。あとはSchemeでは局所関数loopの引数を
書き換える手段でしたが、VBScript版は、do while loop内で変数i , j , mを書き換えていく、と言う
構造になっています。やってることは同じですね。
まあ、参考にして下さい。
 
 
 
 
