Heat-Hazeの日記

ネット上で様々の有益な情報を発信する人に感謝。

Structorizer

NSチャートというものがある。プログラムのフローを箱の入れ子で表現したものである。フローチャートは複雑な処理になると流れが読みにくくなる、同じアルゴリズムでも書き方によって見た目が異なる図ができるという問題がある。 それに比べ、NSチャートはより実際のプログラムの構造に近い形で記述できるので同じような図にないりやすい。ただし、goto,breakのようなジャンプ命令の表現がうまくできない(と思う)。 NSチャートの欠点として処理の一部を修正しようとすると、どうしても全体的に書き直さなければならない点がある。手書きだと大変面倒でNSチャートがあまり使われなかった理由なのだろう。

NSチャートが記述できるフリーソフトがないかと探していたところ、Structorizerというルクセンブルグ生まれのソフトを見つけた。

f:id:Heat-Haze:20160802230312p:plain

ライセンスはGPLJavaで作られている。言語の設定は英語以外にフランス語、ドイツ語、中国語等に対応している。日本語は残念ながら対応していない様子。なので英語設定で使うがチャートに日本語を入力しても問題なく表示される。構文の初期設定がなぜかフランス語になっている。

f:id:Heat-Haze:20160802230313p:plain

なので設定を変更して英語に直した。

f:id:Heat-Haze:20160802230314p:plain

作成したNSチャートはPNG,EMF,SVG,PDFの形式で出力可能。また、CやJavaソースコードとして出力可能である。 例えば下のようなNSチャートをCのソースとして出力すると

f:id:Heat-Haze:20160802230315p:plain

次のようになる。

// function isLeapYear( int year ) 
// Generated by Structorizer 3.24-14 

#include <stdio.h>

// うるう年か判定する 
// TODO: Revise the return type and declare the parameters. 
int isLeapYear(int year)
{
    // TODO: declare your variables here: 
    
    // TODO: 
    // For any input using the 'scanf' function you need to fill the first argument. 
    // http://en.wikipedia.org/wiki/Scanf#Format_string_specifications 
    
    // TODO: 
    // For any output using the 'printf' function you need to fill the first argument: 
    // http://en.wikipedia.org/wiki/Printf#printf_format_placeholders 
    
    if (year % 100 == 0)
    {
        if (year % 400 == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        if (year % 4 == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

NSチャートの欠点である修正が面倒な点も編集ソフトがあれば気にならない。プログラムの設計をする際にNSチャートを使ってみようと思う。