![]() ハードウェアやソフトウェアを気ままに研究する
by 新(しん) カテゴリ
全体なんでも 備忘録 マスメディア 携帯から 動力車 食・健康 ソフトウェア プログラム言語 未分類 以前の記事
2005年 12月2005年 11月 2005年 10月 お気に入りブログ
最新のコメント
メモ帳ですよ
メモ帳だよー
最新のトラックバック
ライフログ
検索
おすすめキーワード(PR)
ファン
バナーを置くならここが良いかな |
BASIC言語の処理を行うプログラムはそれぞれの環境用に大抵存在します。ここではWindows95のDOS窓でも使えるDOS用のBASIC言語を処理する無料で利用できるソフトを紹介します。それを用いて学びましょう。
http://www.rkmath.rikkyo.ac.jp/~kida/ubasic.htm UBASIC、DOS用のソフトです。無料で使えます。ダウンロードして解凍して下さい。このソフトを選んだ理由はダイレクトモードがある点です。 『Ubv32.exe』をダブルクリックすると実行されます。 立ち上げたら、早速触ってみましょう。 パソコンは電子計算機なのだから、計算をさせてみましょうか。 1+1 エンターキーを押して、変化がありません・・・?1+1 おかしい、計算もできないのか?_ そんな事はありません。ただ、計算結果を『表示する』命令をしていなかったのですよ。パソコンは電卓のように、計算のみに特化した機械では無く、色々な事が出来る汎用機械なので、計算結果をいちいち表示させる命令を付けないといけないのです。 理屈がわかってしまえば簡単ですね。先の計算結果を表示する命令を加えれば良いのです。 BASIC言語で画面に表示する命令は『PRINT』です。これは印刷すると言う意味の英語です。パソコン、もといコンピュータは、昔は出力結果を紙に印刷していたので、その名残ですね。 それではもう一度計算をさせてみましょうか。 print 1+1 印刷しなさい、1+1の結果を、の意味です。アメリカで作られた言語なので語順も英語(米語?)ですね。大文字小文字は区別されません。エンターキーを押すと結果が出ます。print 1+1 ひとつ出来ると何でもしたくなりますね。今度は、2 OK _ print 1-2 結果は負の数になる筈です。エンターキーを押して、print 1-2 気づきましたか?最初の『1+1』の結果は『 2』で、次の『1-2』の結果が『-1』です。正の数の場合は数字の前に空白がありますね。これはプラスの意味なのです。空白になっているのは、普通プラスなんて数式以外では書きませんよね。それと同じです。-1 OK _ 『print』で出力された数字には、数字の前に、正の場合は空白、負の場合はマイナスが付きます。当たり前のようですが、何故か多くのBASIC言語を教えるサイトでは書かれていません。重要なのでおぼえておきましょう。 BASIC言語では加算と正の数は『+』、減算と負の数は『-』が使われます。しかし乗算は『*』、除算は『/』が使われます。考えてみればカケルとかワルとか、特殊な記号ですね。でも除算の/は、分数みたいで何となくわかりやすいでしょう。*も慣れれば違和感ありません。 これらの四則演算子で自由に計算をしてみてください。 はい?何乗はどうするか、ですか。階乗の場合は『^』これです。顔文字の目ですね。使い方は『2^8』このようになります。二の八条ですね。『()』括弧も使えるので『2^(8-1)』このような計算も可能です。ちなみに大括弧{}は使えません。全て『()』で代用します。 平方根ですか。これは関数になります。スクエアですので『sqr(2)』などのように使います。具体的には『print sqr(2)』とすると二の平方根、一夜一夜に人見頃なので『 1.4142135623730950487』と出ます。 BASIC言語での計算のおさらいをしましょう。 print ((1+2*3)-4)/5 大括弧が使えないために、全て『()』を使います。print ((1+2*3)-4)/5 結果は0.6ですね。加算よりも乗算の方が優先されます。もうひとつ、0.6 OK _ print 1/sqr(9) これは1からルート9を割っています。すなわち『1÷3』と同じですね。print 1/sqr(9) 正しい結果になりますね。0.3333333333333333333 OK _ 所で扱える数に限りはあるのでしょうか? 普通のプログラム言語では数値を整数、実数などとして区別します。整数とは小数点を使わない数値、実数とは小数点を使う数値です。区別する理由は処理能力とCPU(中央処理装置、モトローラ製の場合はMPU)のレジスタの大きさと数に依存します。 要するに、電卓のメモリー機能だと思ってください。メモリー機能は一つの数値しか記憶できません。複数の数値を記憶するためには、紙か何かに書き留めるしか方法がありません。それは面倒で電卓のメモリー機能より操作が遅いですね。それと同様に、一度に使える数の桁数を限定することで、処理速度を上げる工夫なのです。 当時のパソコン、もといコンピュータはメモリの値段が高く、どうがんばっても経済的に512バイトや4キロバイトしか実装できない状態だったのです。キロバイトですよ。携帯画像よりも少ない容量です。 そんなに少ないメモリーにBASIC言語を入れてしまう、当時はそんな時代で、それをいち早く実現したビルゲイツ君がマイクロソフトを創設したのは有名な話です。 そんな昔の名残が使える数の桁数に影響しているのです。 当時のBASIC言語を実装したコンピュータの多くは8ビットCPUを搭載していました。これは最低8ビットの処理が可能と言う意味です。工夫すれば16ビット処理も難なくこなせます。しかしそれ以上ともなると面倒になるのです。 8ビットとは2の8乗、256の事です。0から255の数値が使えます。しかしこれでは使い物になりません。そこで数値の場合は16ビット処理をします。2の16乗なので、0から65535まで使える・・・と思いきや、実は-32768から+32767まで使えるのです。負の数も使えないと困るでしょう? この数値は整数ですね。さっき出てきた言葉です。実数も使いたいですね。しかし16ビット処理で実数は使い辛そうです・・・。 そこで実数を有効に使うために32ビット処理をするのです。言うがやすしで、実際は大変面倒な処理なのですよ。 8ビットCPUでも16ビット処理は比較的簡単です。しかし32ビット処理ともなると面倒なのです。その手順を説明します。
国家予算の計算をさせようとおもったら64ビット処理が必要で、さらにこの倍以上の手間がかかるのです。 たかが四則演算でもこんなに大変な処理が必要なのです。そんな時代の言語仕様が今も引き継がれているのです。 勿論最新のプログラム言語ソフトは、64ビットCPUで普通に64ビットを使えるメモリーで『A*B=C』等と計算できますよ。 このUBASICの場合は、実数が64ビット処理されているようです。COBOL言語の代わりもできそうです。 今度はもっと複雑な計算をさせてみましょう。身近な話題として・・・。 700MBのCD-Rに2時間の動画を記録させたい時のビットレートを求めよ。 print 700*1024/60/120*8 媒体の記録容量の単位をキロに、それから時間を割り、キロバイトをキロビットに変換する。print 700*1024/60/120*8 796Kbps(キロビット・パー・セコンド)になりますね。796.444444444444444444 OK _ それでは同じく3時間記録したい。 print 700*1024/60/180*8 カーソルキーを『120』の『2』に合わせて『8』に変えてエンターキーを押すと便利ですね。これをスクリーンエディット機能と言います。530.9629629629629629628 OK _ まだまだ画質が良さそうです(WMVの場合ね)。今度は4時間記録したい。ええと、4時間は・・・4*6で・・・240か・・・面倒だな・・・。 コンピュータなのだから、もっと便利にできるはずです。 特定の計算結果を何かに蓄える、電卓のメモリーのような機能があると便利ですね。それに、いちいちPRINTなんて書くのも面倒です。 そんな時にはプログラムを組むと良いのです。先の計算をプログラムで組んでみましょう。 プログラムを組む時は行を表す行番号を入力しなくてはなりません。普通は10間隔で入力します。これは後から行の間に付け足す時の為です。昔のBASIC言語には行番号を整理する機能が無かった名残です。 10 print 700*1024/60/240*8 エンターキーを押すと行番号付きのプログラムが作成されます。本当にプログラムが作られたのか確認して見ましょう。それにはプログラムの『リスト』を表示します。list このように入力してエンターキーを押すと、さっき入力したプログラムが出てくるはずです。list 出ました・・・って、何だよ『1 +1』って・・・。1 +1 10 print 700*1024/60/240*8 OK _ これは一番最初に入力したものです。BASIC言語ではこれを行番号付きのプログラムと解釈したのです。勿論『+1』なんて意味がありません。消してしまいましょう。消し方は単に行番号を入力してエンターキーを押します。 1 『list』コマンドで確認しましょう。_ list うまく行きました。しかしこれは、数値を入力してエンターを押すと、その行のプログラムが消える事を意味します。気をつけましょう。10 print 700*1024/60/240*8 OK _ それではこのプログラムを実行させましょうか。実行させるには『RUN』コマンドを使います。プログラムを走らせる意味ですね。 run 行番号無しの時と同じ結果になる筈です。run これを、時間だけを入力するように出来ないか?398.222222222222222222 OK _ それには『入力する』命令を追加すれば良さそうですね。入力は英語で『INPUT』ですが、これだけでは入力した数値がどうなるのかわかりません。何かに記憶させる必要があります。 そうですね、電卓のメモリーのようなものに数値を記憶させてはどうでしょうか。そうすれば毎回時間だけ入力すれば手間が無くて便利ですね。 毎回数値が変わる、変わる数値、変数・・・そう、それには変数に数値を代入すれば良いのです。古いBASIC言語では英文字2文字以内で変数を表しますが、最近のは結構長い名前が付けられるようです。 今回は分を入力するので、ミニッツの『M』にします。入力した値を変数Mに入力するので、『INPUT M』となります。 これらを踏まえてプログラムを組みましょうか。先に行番号10が使われたので、その手前の5にINPUT文を入れましょう。 list これだけでは何も変化しません。入力した分が変数Mに代入されているのだから、行番号10の『240』を『M』に変えましょう。スクリーンエディット機能を活用して、5 input M 10 print 700*1024/60/240*8 5 input M 出来ました。念のためにリストを表示させてから実行させましょう。10 print 700*1024/60/M*8 list 分の入力待ちになりました。今度は5時間、300分を入力してみます。5 input M 10 print 700*1024/60/M*8 OK run ? _ run 成功です。これで毎回RUNさせるだけで何度でも試す事ができます。しかし318Kbpsでは画質が荒いな・・・それでは1時間ならどうかな。? 300 318.5777777777777777777 run おおー高画質・・・って、便利にはなったけど、毎回『RUN』って入力するのも面倒だな・・・。? 60 1592.8888888888888888885 人間とは欲深い生き物です。しかしもっともな話で、もっと便利になる筈です。 数値を入力して、結果を表示させて、それで終わるからいけないのです。結果を表示させたら、また数値の入力を行えばもっと便利になりますね。 でも無限に続かれても困ります。ありえない入力数値、0を入力すると終わるようにしましょうか。 それには繰り返す処理が必要です。良く考えてみましょう。
先ず5行と10行の間、7行にしましょうか、そこに入力数値が0の場合はプログラムを終了する命令を加えます。条件判断ですね。もし変数Mが0なら終わる。もしは『IF』で条件は『M=0』、なら『then』、終わるは『end』と、出来ました。殆ど英語ですね。 list そして10行の次に繰り返す命令、20行にしましょうか、その行から5行に行けば良いですね、行く、『GO』、何処へ、『TO 5』、合わせて『GOTO 5』と、こんな感じです。5 input M 7 if M=0 then end 10 print 700*1024/60/M*8 OK _ list 実行させましょう。5 input M 7 if M=0 then end 10 print 700*1024/60/M*8 20 goto 5 OK _ run 完璧ですね♪? 60 1592.8888888888888888885 ? 50 1911.4666666666666666662 ? 25 6822.9333333333333333329 ? 0 OK _ しかし何だな、他人にとっては何をするプログラムかわからないな・・・。 それでは説明文を加えてみましょう。PRINT文で文字を表示させるのです。ただ、そのままでは数値と文字の区別が付きません。数値は演算できるけど、文字は繋いだりする位しか出来ませんから、区別します。 文字を表示させるには、文字の前後に『"』引用符、ダブルクォーティーションマークを付けます。『ふ』の部分です。シフトキーを押しながら『ふ』って言うか、『2』ですね。 プログラムの説明なら、一番最初に書きますか。1行に何をするプログラムなのかを書きましょう。 list 良くわかりました。でも何を入力するの?1 print "700MBのCD-Rに動画を記録するためのビットレートを算出する" 5 input M 7 if M=0 then end 10 print 700*1024/60/M*8 OK _ 入力する前に何を入力するのかを表示させると良いですね。PRINT文で表示させても良いけど、INPUT文でも表示できるのですよ。 list 文字表示と変数Mの間にセミコロン『;』を書きました。これは繋げる意味です。PRINT文とINPUT文で使えます。1 print "700MBのCD-Rに動画を記録するためのビットレートを算出する" 5 input "時間(分単位)を入力せよ:";M 7 if M=0 then end 10 print 700*1024/60/M*8 OK _ run うーむ、傑作じゃ。是非保存して未来永劫語り伝えたい!700MBのCD-Rに動画を記録するためのビットレートを算出する 時間(分単位)を入力せよ:? 30 3185.7777777777777777775 時間(分単位)を入力せよ:? 45 2123.8518518518518518518 時間(分単位)を入力せよ:? 0 OK _ 折角のプログラムなので保存しましょう。保存するには『SAVE』コマンドを使います。ファイルネームは『kbps』としましょうか。8文字以内の半角英数文字にします。これはDOSの決まりです。 save "kbps" プログラムが保存されました。これを『セーブした』と言います。OK _ さて、保存したのだから、今のプログラムは消しても良いですね。新しい状態にしましょう。新しい、『NEW』コマンドを使います。 new 本当に消えました。冗談だったのゴモゴモ・・・。OK list OK _ 安心して下さい。保存してあるので読み出してみましょう。『LOAD』コマンドを使います。 load "kbps" これを『ロードした』と言います。OK list 1 print "700MBのCD-Rに動画を記録するためのビットレートを算出する" 5 input "時間(分単位)を入力せよ:";M 7 if M=0 then end 10 print 700*1024/60/M*8 OK _ しかしプログラムは何処に保存されているのでしょうか? それはこのUBASICがある所にあります。『kbps.ub』となっていますね。 今回はここまで。 んだそうだ。PASCAL好きな私には笑えないお笑い文だ。
http://www.genpaku.org/realprogrammerj.html 昔の話さ。構造化処理の脅威に右往左往しているプログラマが書いたのだろう。差し詰めヨン様にファンのおじょうさん達を持って行かれたみのもんた氏が書いたような文章だ。 この話の中で『クレイ』と言う当時のスーパーコンピュータの話が出てくる。今ではペンティアムマシンの方が高速処理できる。そんな時代の話なのさ。 ちなみにクレイコンピュータの内部構造は勿論パイプライン処理されているが、特徴的なのがチェイニング処理。これは上位レジスタの演算終了を待たずに下位レジスタが次の処理に移行する機能だ。 こんな事書いても誰も理解しないだろう。理解できない癖に、やたらあのCPUが良い、このCPUは駄目だ、とか言うし、パソコンを自作した、とか平気で言う。CPUの動作の基本はアドレッシング、フェッチ、デコード、エグゼキュートだ、位理解してから言って欲しいね・・・。 この話の中で 現在のプランでは、ガリレオ宇宙機は火星を通過して木星にいたるまで、重力アシスト軌道を用いることになっている。この軌道は火星表面からわずか 80±3 キロを通過する。これほど厳しい条件では、誰も PASCAL プログラム(と PASCAL プログラマ)を信用して航法を任せようとはしないだろう。と書いてある。『メートルとフィートを間違えて』言うセリフじゃ無いね。もっとも著作者は、距離の単位の間違いまで考えていなかっただろうけど・・・。 FORTRANは科学技術計算に優れている言語で、PASCALは構造化処理の入門用の言語だ。同じプログラム言語だからと言って同一視するのは誤り。適材適所があるでしょ。 http://web.sfc.keio.ac.jp/~masudako/class/computer/proglang/fort_pas.html FORTRAN言語とPASCAL言語の比較。どちらが優れているとかでは無いよ。 この話の中で 本物のプログラマはCOBOLを使わない。COBOL はちんけなアプリケーションプログラマが使うものだ。と書かれている。COBOL言語は英語が理解できれば三日で習得できる事務処理に適した言語だ。数兆円の計算もこなせる言語はそんなに無い。 http://hp.vector.co.jp/authors/VA003991/kouza/beginner/kouza_cobol.html このサイトにもあるように、COBOL言語では最大18桁の数値演算が出来る。十京まで扱える。お金の勘定には十分過ぎる。標準でこれだけの事が出来て、素人でも三日で習得できる即戦力な言語だ。 それに比べてFORTRAN言語では実数型で浮動少数、整数型で-2147483648以上2147483647以下の数値しか扱えない。これは32ビット型の場合だ。フォローしておくと、64ビット型のFORTRANも存在するらしいので、その場合は-9223372036854775808以上9223372036854775807以下の数値が使える。これならお金の勘定にも使える。しかしCOBOL言語では桁揃えなども出来るしね、やはり適材適所だ。 http://www.din.or.jp/~awk/column/Real_Programmers.html COBOL言語に関しては、このページも参考になるかな。 PASCAL言語についても書いておくと、C言語のように関数が作れるので、多倍長変数などの関数を作れば、事実上何桁の数値でも使える。それはC 言語も同じ。 C言語とPASCAL言語を比較するのは、ビジネスジェット機とプロペラ練習機を比べるようなものだと言われることもある。どちらも空の安全を守るスペシャリストである意味では同じだ。これも適材適所の問題だな。 C言語は低レベル言語だ。高級言語のPASCAL言語などとは違う。同じALGOL系言語だけれど、C言語は自由で、処理速度も速く、拡張性も良く、習得もそれだけ長期間になる。しかし使いこなせば最強だろうね。だから多くの人が使っている。今はC++とかC#かな。私はCしか知らないし。 http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=041408 PASCAL言語とC言語に関しては、こんなページも参考になる。 http://hp.vector.co.jp/authors/VA006065/c-cpp/macprog/macprog2.txt このページも読んで。 http://www28.tok2.com/home/kasayan86/index.htm 実際にそれぞれの言語を使ってみたいなら、このサイトが参考になる。なかなかハイテクなおじさんのサイトだ。 http://www.roesler-ac.de/wolfram/hello.htm Hello world!に興味があれば、ここを見る。それぞれの言語の特徴が良くわかるよ。 12月10日追記: http://web.sfc.keio.ac.jp/~masudako/class/computer/awk/langs.html 『しっかりした言語と手軽な言語』について興味深い。 http://www2.nsknet.or.jp/~azuma/b/b0001.htm 私が常日頃『BASIC言語はBasicFORTRANから来た言葉でビギナーズなんたらの意味は誤りだ』と言っている根拠みたいな事が書かれているので紹介する。 クエン酸を服用すると疲れが取れる事は知っている。でもどうやって服用するの?
検索して調べてみました。 これを参考にして、小匙五杯を500mlのペットボトルに入れて水で溶かして飲んだけど、すっぱくてたまりません。仕方が無いので500mlペットボトルを二本追加して薄めたけど、まだきついですね。 今度は500mlのペットボトルに小匙一杯で試してみます。 ![]() 雪か降った。 複道はこんな感じ。しかし滑らないね。北海道の車のタイヤは特殊なんだ。 主道は、とっくに溶けているさ。北海道の道路(整備)は特別なんだ。 今朝は寒かった。
外を見たら、雪が積もっていた。 根雪になるのだろうか・・・? 根雪になるなら、一番下の最初の雪は、『かよ』ちゃんは見られなかったね。夜中に降るんだもの・・・。 ![]() 100均で買った。ルービックキューブと違って動きが悪く、指を痛めてしまった。 子供の頃遊んだ時は、どんなに頑張っても二面しか合わせられなかったが、今はすんなり二面まで合わせられる。子供の頃の記憶が生かされているんだな。 攻略法を調べて六面を揃えてみようか…。
最近ツタヤの会員になりました。そこで気づいたのは、各店舗に特色がある事です。
北海道札幌市に限って、レンタルビデオのお徳情報を書き留めておきます。 蔦屋書店元町店 東区北二十四条東21丁目1-2 電話番号:011-786-8808 営業時間:深夜3時~深夜3時(全アイテム) ★★レンタルキャンペーン★★ TSUTAYA発寒14条店 西区発寒14条3丁目3番11号 電話番号:011-671-5488 営業時間:朝9時~深夜2時(年中無休) ☆☆旧作VHS・DVDレンタルは毎日100円!!☆☆ TSUTAYA南郷13丁目店 白石区南郷通南13丁目5-1-1 電話番号:011-865-8106 営業時間:朝10時~深夜12時(レンタル・セル)年中無休 レンタルビデオCD及び、CD販売を豊富に取りそろえております。ご来店をお待ちしております。毎月9のつく日は、旧作ビデオ100円レンタルデー! TSUTAYA新琴似店 北区新琴似四条17丁目1-20 電話番号:011-768-1234 営業時間:朝10時~深夜12時 毎月第1・第3火曜日は、旧作ビデオ・DVDを100円レンタル実施中!! TSUTAYAあいの里店 北区あいの里一条6-2-2 電話番号:011-778-5109 営業時間:朝10時~夜10時(1F BOOKコーナー) 朝10時~夜11時(2F レンタルコーナー)年中無休
だん吉が太陽光のみで走っていないと断言するブログを見つけたのは先の書き込みの通りです。本当でしょうか?
例のサイトでは、だん吉くんを電気自動車と同じスペックだと思い込んで計算した所、ソーラーパネルでフル充電するのに13日かかると弾き出した。 私は彼とは逆の方法で計算してみる。 だん吉君には8個のバッテリーが詰まれています(私にはそのように見えます)。12Vのバッテリーを8個直列に接続すると96Vになります。使用しているモーターは、96Vか100V位だと判断します。 ソーラーパネルの発電能力は概ね彼の意見通りなので、一日の発電能力を250W/5.5h、1375W/hとします。 だん吉君が活躍するのは週一日として、充電に当てられる日数は六日間ですね。つまり、 1375W/h × 6日 = 8250W/h バッテリー全体の電圧は96Vなので、 8250W/h ÷ 96V = 85.9375A/h よって、六日間もあれば12Vで60A/hのバッテリー8個をフル充電できることになります。 ・・・なんだ問題ないではないか。彼は一体何を計算してゆるせないでいるのか・・・。 もしかして私の目が悪いのかも知れません。仮にバッテリーが12個でモーターが144Vで動作するとして計算します。 8250W/h ÷ 144V = 57.29166666A/h それでも十分といえます。 …なんだかおかしいとは思いませんか?皆様方。 彼は一体何を計算していたのだろう・・・? ちなみに彼が計算した元の電気自動車はダイハツハイゼットEVで、200V電源を用いて充電します。一般家庭で200Vを借りられるとは考えられず、だん吉君の設計段階でも、万が一の事を考えて一般家庭の100V電源で充電できるように作られていると考えれば、バッテリー8個(96V)若しくは12個(144V)仕様が妥当だと考えられます。普通に考えればわかる事なんだけど・・・。
|





