ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

DTPでタグ付きテキストを生成したり、テストのデータ生成方法も、自動生成と同じ

2006-10-29 23:37:32 | Weblog

 シリーズ「仕様書からプログラムソースを生成する方法」というのを、やっていますが、それって、別に、プログラムを生成するためのものだけではないんです。

 書き忘れましたけど、
・プログラム開発でテストデータを作る方法や、
 →SQLのInsertコマンドの自動生成

・DTPで、タグ付きテキストや
 →XPressタグ、エディカラータグ、EDIANトリガーテキストなど

・XML等
 →データからXML,HTML
を作る方法も、同じ方法です(ただし、IF文の構造が入る)

つまり、
1.雛形を用意しておき、
2.Excelシートにデータを入れて
3.そのExcelシートから雛形に値を置き換えて対象ファイルを生成する
という方法でできて、そのとき、3の生成プログラムは、上記シリーズで紹介したように、
固定部分とシステムにより変わる部分にわけ、固定部分は、今まで説明してきたもの+IF文の構造+複数シート書き出しのための部分からできています。
(IF文の構造と複数シート書き出しのための部分は、今後説明します)

具体的に、どうやるのかについては、機会をみて書きたいと思います
(忘れていなければ)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Hello World以前のプログラム言語(その3:プログラムをまとめる)。

2006-10-29 18:21:32 | Weblog

 情報処理とは何?から、Hello Worldを各種言語で出力するまでの流れをかく、シリーズHello World以前のプログラム言語のつづきです(このシリーズは、土日に書きます)。

 コンピューターは情報を処理する機械で、
情報を処理するとは、必要な入力データ(情報)をいれて、なんらかの処理をさせて、目的となる出力データ(情報)を得ることであると書きました。
 で、問題は、その処理なんですが、どういう処理をさせたいかというのを書いたものがプログラムで、こんな文を使って書きます

1.処理を命令する文

2.条件によって、処理を分けるための文
   単純に条件をわける文
   繰り返しする文

3.変数を宣言する文

 ってことを、前回までに書きました。

 で、今回は、そのさき、プログラムをまとめる話を書きます。



■プログラムをまとめる

 というので、プログラムを上から順番に書いていくと、同じことが何回も出てきてしまいます。
 たとえば、20度づつ、ものを回転させて表示するということを考えましょう。
 この場合、
 1.現在のXY座標を20度回転させたときのXY座標を求めて
 2.それを表示します
 3.で、さらに20度回転させたときのXY座標を求めて
 4.それを表示します

 このとき、「XY座標を20度回転させたときのXY座標を求め」る部分と、「それを表示」する部分が、何回も繰り返し、出てきてしまいます。

 そこで、この、何回も出てくる部分をまとめようという考え方がでてきました。

 具体的にいうと、原点から、ある角度を回転させたXY座標を求めるという場合は、ここに書いたように、以下の処理を行います。

 1.ある角度(360度で表現する)を、360で割って、それに円周率の2倍をかける
 2.三角関数のsin(1で求めた値)をもとめる。これをsとする
 3.三角関数のcos(1で求めた値)をもとめる。これをcとする
 4.c*X座標-s*Y座標(*は乗算)を求め、それを新しいX座標とする
 5.s*X座標+c*Y座標(*は乗算)を求め、それを新しいY座標とする

実際には、もともとある回転しようとするものの中心を、まずは、その原点に持ってくるという処理がさらに入るのですが、まあ、それは省略して、上の処理をしないといけません。

 このとき、この5個の処理を何回も繰り返していたら大変なので

  角度、X座標、Y座標を渡してください。そしたら、回転結果を返します

 という処理をまとめて、つくっておいて、実際に使うときは、そのまとめた処理を呼び出すという形をとります。




■プログラムの2通りのまとめ方

 そのようにプログラムをまとめる場合ですが、とくに値が1つしか返す必要がない場合と、複数の値を返して欲しい場合、あるいはまったく返してくれなくていい場合というのがあります。なんで、1つしか返さない場合を分けて言うかというと、数学的に考えたとき、そういうものを特別に扱っているからです。

 数学的に、いくつかのものを入力して(もちろん、1個しか入れなくてもいい。0個というのは数学的にはないかもしれないが、コンピューター的にはカウンタや現在時刻取得である)、1つしか値を返さないものを、関数といいます。

 コンピューターのプログラムの世界でも、いくつかのものをいれて、1つしか返さないものを関数(ファンクション)といい、そうでないものを、サブルーチンといいます。

 Visual Basicでは、この区別ははっきりしていて、
   サブルーチンはSubと、はじめにかいて、
      そのまとまりのおわりには、End Subと書きます
   ファンクションはfunctionとはじめに書きます。
      そのまとまりのおわりには、End functionと書きます

 Javaの場合には、この書き方はあいまいで、subとfunctionの区別はありません。
 ただし、値を返せない場合は、返す値の型のところにvoidと書いて、値は返さないよ!
 と明示します。

 なお、複数の値を返す場合は、入力値を書き換えたり、呼び出したほうも、呼び出されたほうもアクセスできるところに返します。
 なので、複数の値を返すサブルーチンというのはないです。サブルーチンは値を返しません。(VBのsubは、値を返さない)。




 ちょっと話が複雑になってしまい、うまく、かけなかったですたが、とにかく、プログラムをまとめる方法があって、実際には、そのまとめた部分を呼び出すことによって、同じような処理を何回も書くことを防いでいるということです。
 書き方については、詳しく、もっと先の機会に書きます。

 次回のこのシリーズは、データのまとめ方です。




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ソフトバンクやウィルコムが流行ると、PLCは?っていうかノートPCでPLCは?

2006-10-29 14:48:37 | Weblog

 そうそう、最近、ここでもソフトバンクのX01HTやW-ZERO3を取り上げてますけど、こういうのが、会社に流行ってしまったとすると、最近話題の高速電力線通信、PLCより、無線LANのほうが、便利ってなってきちゃいますよねえ。。

 PLCは、家の中しか使えないけど、その上、コンセントにつながっていないと使えないけど、無線LANなら、家の中でも、コンセントなしでも使えるし、無線LAN対応のX01HTやW-ZERO3も使えるし、家の外でも公衆無線LANでも使えます。無線LANのほうが便利そう??

 っていうか、そもそも、PLCって、コンセントから無線をとるのはいいんだけど、ノートパソコンとかは、どーなるのかしら??

 ACアダプタなんだけど。。
 今のACアダプタだと、コンセントが、そのまま来ないんだけど。。

 PLC用のACアダプタとか、できるのかなあ?
 でも、ACアダプタって、壊れやすいんだけど(接触不良になりやすいと思う)
 ウィリアムのいたずらって、パソコン、いつもそこで壊れてしまう(>_<!)

 そーすると、買い替え。。。うーん(>_<!)

 すでにノートPC使ってる時点で、PLCより無線LANのほうが便利?

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

数学が嫌いなのは、何やってるかわかんないからじゃ、sinは、なんのためにあるかとか?

2006-10-29 12:04:12 | Weblog

 sinは、角度がわかったときに、それをY座標に変換するための関数です
 cosは、角度がわかったときに、それをX座標に変換するための関数です

 つまり、何度(30度とか)回転するというときのX座標、Y座標を求めるには、sinやcosを使います。

 ただし、求めるには、X座標の式とY座標の式2つ解かないといけません。
 この、いっぺんに処理する、便利な道具が、行列です。
 なので、回転するときには、回転のための行列というのを使います
 行列は、逆行列を求めることで、元の状態に戻すことができます。




 って、それと、なにが、コンピューターに関係あるの?っていう話になると思いますが。。。

 きのう、NHKこどもニュース?っていうんですか。。それを見ていたら、

 子供の理科嫌い、算数嫌いが進んでいると。。
 で、そーなると、コンピューターの技術者さんが減っちゃうと
 なので、インドに頼んでいる。。

 と、おいおい、という無茶な展開をしていたニュースがあったんです。




 後半の、コンピューターの技術者が減るからインドに頼むっていうのは、無茶があるし(安いからであって、日本にも、ウィリアムのいたずらが毎日遊んでブログ書いてるように、SE自体が足りないわけではない。単価が高いのが問題)、

 そもそも、コンピューター技術者が足りなくなるか。。
 っていうのは、昔の話を知っている人にとっては疑問(昔、SEが、大量に足らなくなると(当時の)通産省が言っていた時期があった。しかし、その後、開発環境が変わり、生産性が上がりなどで、実際に、そんなに言われるほどでは、なかった)。

 ただ、理科嫌い、算数嫌い、とくに算数嫌いが多いんだけど、それは無理もないなあ。。
 と思う。




 で、算数を好きになってもらおうと、いろんなゲームをやったりしているんだけど・・
 うん、ちょっとまて??理科と算数がきらいで、多分、国語や社会はそこまででもないんだよねえ。で、国語や社会はゲームで勉強するか?それなら、理解できるけど、国語や社会は普通に勉強しても、嫌いにならないとすると、ゲームはあんまり関係ないんじゃないか??

 国語や社会と、特に数学との大きな違いは、「今日は何を勉強している」というのが、理解可能なこと。

 たとえば、日本史で、鎌倉時代をやったら、今日、やった内容は?鎌倉時代です。源頼朝や、元寇や、北条政子という言葉を忘れても、わかんなくても、今日やった内容は鎌倉時代とわかります。
 そして、次に室町時代をやるときは、別に鎌倉時代のことを忘れても、(一部は関連しているのですが)多くの部分は関係ないです。新たな気持ちで、室町を聞けます。




 でも、数学や算数は、そうとはいえません。
 たとえば、sinをやるといったとき、何のためにやるのか、っていうのが、わかんない人もおおいです。なんてったって、昔、たしか「受験生ブルース」という歌の中に、「sin cos なんになる。おいらにゃおいらの夢がある」とか、いう歌があったとおもうんですよ。それくらいですから。。

 先生は、あんまり、これは、角度を座標にするための関数で、こういう関数がないと、コンピューターなんかで、図を回転させられない。なぜかというと、コンピューターは、絵をかくとき、X座標、Y座標に、点を書く形で、絵を描いているから。。

 っていう説明をすれば、何のためにやっているかわかるんだけど、こういう説明はしないです(厳密に言うと違うので、厳密を求める数学では、こういう言い方をしない)。

 なので、なんのためにやっているかよくわからず。。




 そして、数学や算数は、ある程度練習しないと身につかないのですが、(逆にある程度やり方はきまっていて、そのやり方を身に着けてしまえば、2流大学の数学ぐらいまでは解ける)なにやってるかわかんないので、練習もしないです。
 そうすると、何のためにやったかもわかんないし、やり方もわかんないので忘れちゃいます。

 そーなると、sinを使った三角関数の加法定理がわかりません。
 これがわかんないと、行列を使った回転の行列がわかりません。

 と、ドミノ倒し的にわかんないし、できなくなってしまいます。
 だから、嫌いってなってしまいます。
(理解できなくても、できればゲームみたいで、楽しいんだけど、そこまで、わかんないものを練習する気力はない)




 これが、原因だと思いますね。
 もっと難しい話になると、物理数学の直感的方法っていう本があったけど、それより、もっとやさしい、高校レベルの本ができる必要があるかも。。って、あるのかな(^^;)

 ただ、そういう形で教えてる先生は少ないと思うぞ。。

 じゃあ、おまえYou Tubeでやれよ!っていわれると、こまっちゃうんだけど。。
 ちなみに、それのコンピューター版みたいなのが、土日にやっている、
Hello World以前のプログラム言語で、今日もあとでやる予定。

P.S なぜ、三角関数の説明をしたかというと、そのテレビで、ケータイのキャラクタの回転について、回転行列を使ってやっていたから。。
 でも、あんなの、みんなが知らなくても、誰かが関数つくって、ライブラリにすれば、いいだけの話だと思うぞ。。(^^;)
 あ、この話から、あとでやる「Hello World以前のプログラム言語」を書こうかな(^^)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする