logo

logo

メールマガジン・新着情報一覧

  1. TOP
  2. メールマガジン・新着情報一覧
  3. E-0152.DMISでバブルソートを実装— Y.T

2023.12.27

E-0152.DMISでバブルソートを実装— Y.T

◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

DMISでバブルソートを実装

発行:エスオーエル株式会社
https://www.sol-j.co.jp

連載「測定の新常識!?SOLがお伝えするノウハウ!」
2023年12月27日号 VOL.152

平素は格別のお引き立てを賜り、厚く御礼申し上げます。
X線CTによる精密測定やアプリケーション開発情報などをテーマに、
無料にてメールマガジンを配信いたしております。

◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇



みなさま、はじめまして。
今回初めてメルマガを書きます、
営業技術グループの米村と言います。

初めて書くのに2023年最後というトリを
務めることとなり戦々恐々としておりますが
暖かい目で見守りながら読んで頂ければ幸いです。

初めましてということで、簡単に自己紹介からいたします。

高校・大学は情報系で様々なプログラミング言語を学び、
得意な言語はC、C++。
広く浅く学んだ範囲ではBASIC、VisualBasic、
Java、JavaScript、Parl、Ruby辺りを、
少し変わったところではFPGAやCPLDで使われる
VHDLというものも学びました。

そして現在は業務で携わっている、
Werthの測定機の測定プログラムで使われている言語である
DMISという言語を勉強中です。

WerthのソフトウェアであるWinWerthでは測定プログラムを
作成する際はDMISのコードを直接触ることなく
グラフィカルなインターフェースで直感的にプログラムを作成できます。
ですので、ユーザーがDMISのコードを
見る、触るということはほぼないかと思われます。

ただ、測定プログラムのDMISのコードを少し弄れると
便利に使うことができたりします。
例としては、複数のサンプルを測定した後に
その複数のサンプルデータの解析を
ループを使って順次行うといった処理を作ることによって
作業の手間を少し減らしたりできます。

話は戻りまして、
学生時代に様々なプログラミング言語を学んできましたが
新しいプログラミング言語を学ぶ際に
いつも初めに作っていたプログラムがあったのを思い出しました。

そしてまだDMISでは作ってなかったな、ということに気付きましたので、
今回はそのプログラムをDMISで実装してみました。

タイトルでネタバレをしていますが、
いつも作っているプログラムというのは
ソーティングアルゴリズムである「バブルソート」になります。

ソーティングアルゴリズムというのは
複数の数値が不規則に並んでいる状態のものを
昇順、あるいは降順に並び替えるというものになります。
バブルソートはその中でも最もポピュラーで単純なものになります。

「バブル」と名前が付いている通り、
イメージとしましては縦に不規則に並んでいる数字の羅列の底から
泡(バブル)が浮かんでくるように順番に
数値を入れ替えていくというものになります。

なぜプログラムの学びはじめにバブルソートの
プログラムを作るのかと疑問に思われるかもしれませんが、
バブルソートを実装するにあたり
「順次処理」、「分岐処理」、「繰り返し処理」の3大処理や
変数や配列などが必要になりますので、
そのプログラミング言語の文法を知るのに丁度良いからになります。

今回は数値の個数を10個、数値1~10をランダムに配列に格納して、
それをソートしてみました。
表示部、ソート部のDMISのコードは以下となります。

------------------------------------------------------------------------------------------------
TEXT / OUTPUT, 'Before'
TEXT / OUTPUT, '$Ary[1],$Ary[2],$Ary[3],$Ary[4],$Ary[5],$Ary[6],$Ary[7],$Ary[8],$Ary[9],$Ary[10]'

FOR / $x = 1, TO, 9
  FOR / $y = 1, TO, 10 - $x
    IF / $Ary[11 - $y] > $Ary[10 - $y] , (NEXTLOOP)
      LET / $tmp = $Ary[11 - $y]
      LET / $Ary[11 - $y] = $Ary[10 - $y]
      LET / $Ary[10 - $y] = $tmp
    (NEXTLOOP)
  NEXT / $y
NEXT / $x

TEXT / OUTPUT, 'After'
TEXT / OUTPUT, '$Ary[1],$Ary[2],$Ary[3],$Ary[4],$Ary[5],$Ary[6],$Ary[7],$Ary[8],$Ary[9],$Ary[10]'
------------------------------------------------------------------------------------------------

※9、10、11などの即値を本来は処理内で使わない方が良いですが、
 今回は簡単なため使用しています。

上記のコードをWinWerth上で実行した時の結果が以下となります。

----------------------
Before
10,8,2,1,4,3,9,6,7,5
After
1,2,3,4,5,6,7,8,9,10
----------------------

処理前後で数値が並び替えられていることが確認できました。
プログラミングをかじったことのある人なら上記のコードを見て
「あぁ、DMISはこういう文法なんだな」と感じられるかなと思います。

上記のコードで登場した「FOR文」を使うことにより、
例で挙げた複数サンプルの解析作業を
順次行うといったプログラムを作ることができます。

今回の内容は以上となります。

2023年も最後となります。
今年も弊社のメールマガジンを
読んで頂きありがとうございます。

来年も引き続き様々な情報を発信してまいりますので、
読んで頂ければ幸いです。

良いお年をお迎えください。


--
T.Y

一覧に戻る

お問い合わせ Contact

048-441-1133

お問合せフォーム