【告知】新たにソフトを開発中です!
ここ最近投稿ができていなくて申し訳ありません...
というのもここ1ヶ月くらいの間、今まで投稿に使っていた時間をあるソフトの開発にフルで注いでいます。
今私が開発しているソフトはその名も「FlowchartBuildExecutor」略して「FBE」です!
プログラミング食堂ではオリジナル流れ図の作成・配布を軸に活動していますが、今までは
- Javaでプログラムを書いて実行できるようにする
- 流れ図に置き換える
- ブログなどに投稿
といった流れで流れ図を作成してきました。しかしFBEを利用することで、直接流れ図を作成して、実行できるようにすることで、
作業時間の短縮ができる
自分(TBSten)以外の人でも比較的手軽に流れ図が作成できる
などのメリットがあるので開発を決めました。
趣味でソフトの開発は数は少ないですがしたことがあったので、その時の経験を生かして現在制作中です。
開発環境は以下の通りです。
とりあえずはWindows , Mac で動作するように開発していますが、その後の方針によってはスマホアプリ版も作成するかもしれません。
ソースコード・(ちょっとした)設計書を公開しているので興味がある方は是非ご覧ください!(ソースコードは結構な頻度で更新しています!)
開発が完了したらブログの方でもご報告させていただくので、今しばらくお待ちください!
設計
【TBStenの独り言】表現って何だろ~プログラミングは芸術~
【TBStenの独り言】シリーズは完全にTBSten得で、ただ単に話したい事を話すだけのクソつまらないシリーズです。たぶん読むのも途中からめんどくさくなるので適当に読み飛ばしてもらってOK! 第3回は、「表現とは」です。
表現とは
情報処理を学び始めると、「〇ビットで表現できる色の数は...」とか出てくると思うのですが、表現とはいったいどういう意味なのでしょうか?筆者の見解を話していこうと思います。
みなさんは学生の時、英単語をどのように覚えていましたか?私は特に単語を覚えるのが得意だったというわけではないのですが、英語を学ぶ上で気づいたことがあります。例えば、「りんごは英語でapple」といいますが、わたしはこうは覚えるべきではないと思っています。それが何故か知るためには、そもそも言語とは何か、ということを考えていきます。
さきほどの例で考えてみましょう。「りんごは英語でapple」と覚えてしまうとします。すると私の脳には「りんご=apple」と記憶してしまいます。
私は、上のようにではなく、下の図のようにイメージします。
(読者の方の中には「木構造みたいだな―」と思われる方がいらっしゃるかもしれません笑)
「りんご=apple」ではなく、「りんご=よく食べる赤い果物=apple」と言葉と言葉の間に「そのもののイメージ」や「実際にどのようなものなのか」・「どのような感情・考え方・もの・人なのか」といったものを挟んで想像します。これをこの記事では「イメージ」と呼ぶことにしましょう。
言葉を理解する際に、イメージをわざわざ挟むのは、「言葉とはイメージを文字や声で表現するためのツール」だと考えているからです。もともと人以外のすべての動物には言葉というものがありません。ですが、だからといって彼ら動物に感情が無い訳ではありません。お腹はすくし、眠たくもなる。人と動物が違うのはその感情を形のあるものに変えれるかどうかです。感情を形あるものに変えるためのツールが言葉・言語というわけです。
感情を伝えるために言語があります。ですが、その言語は1つではありません。日本には日本語、アメリカには英語といったように、人によって使う言語がたくさんあります。ですがどれも元々は感情を表したいがために使っていたもの。ですので言葉は本来感情を表すためだけにあるといっても過言ではないといえます。
appleという英単語を覚えるために「apple=りんご」と覚えてしまっては、感情を表すためだけにある言葉を、感情ではなく、違う言葉と結びつけてしまっているのです。これは言葉の本質を見失っており、ナンセンスだと思います。これが私が「りんご=よく食べる赤い果物=apple」と英語を覚えていた理由です。
ところで全く同じことがコンピュータにおいても言えます。日本語と英語であれば「赤=りんごや信号で止まれの色=red」と考えるところを日本語と機械語(コンピュータの言葉)であれば「赤=りんごや信号で止まれの色=00110010」と考えるわけです。
上のように言語が違うものの間(日本人とアメリカ人、日本人とコンピュータなど)で「イメージ」・感情・伝えたい何かを伝えるために、「イメージ」→「言葉」と変換をします。これが今回のテーマである表現だと思います。
そして、「イメージ」がどの言葉に変換されるかは、言語によって異なるわけです。つまり日本語の赤がパソコンの機械語で「00110010」に変換されることもあれば、スマホの機械語で「01010000」に変換されることもあるわけです。これを表現の仕方が違うと言ったりします。
プログラマとはいわば、機械に伝えたい「イメージ」をそれ専用の言語で表現する人と言えそうです。
表現は楽しい
人ははるか昔から自分の感情や「イメージ」を形あるものに変えることが大好きな生き物です。音楽や美術はその最たる例でしょう。自分の中にある感情を形ある言葉・メロディ・絵に載せているわけです。古来よりそれらを受け継ぎ、生活の娯楽として使ってきました。
私はそのような音楽や美術の仲間としてプログラミングがあると思っています。(心の中にある)機械にやってほしいことを専用の言語で表現することがプログラミングなので、「イメージ」を形あるものに変えることに当てはまるのではないでしょうか?
あなたの中の「こんなことを書いたらどう動くだろう?」「こういう風なゲームを作りたい」というポジティブな感情は、心の中にある「イメージ」を形あるソースコードに変えることを心の底から楽しんでいる証拠です。そんな自分に気づいたら、心の底からほめてあげましょう!
こんなどうでもいい話を最後まで読んでくれてありがとうございます! 良かったら☆スター☆を押してね!
【フローチャート】組み合わせ問題
今回は組み合わせ問題を作りました!
とある遊園地での出来事、「どのアトラクションに乗ればいいかが分かんない!」今回のプログラムはそんなときに使うプログラムです(意味不明)。
与えられたものの中からいくつか取り出し、条件にあう最適なものを取り出す、といった処理になっています。そのために全パターンを試していくといった処理があります。
【流れ図】
フローチャートセット
↓↓↓下のリンクからダウンロード↓↓↓
Amusement.zip - Google ドライブ
コメント
全ての組み合わせを試していくという処理は実は2種類の方法で実装できます。関数の再帰を利用した方法(今回はこちら)と、繰り返しをめちゃくちゃ使う方法です。後者は繰り返しが何重にもなるので、前者の方が優れた方法といえそうです。
ある日似たような問題を考えた時に、自分ははじめ繰り返しを何重にも重ねる方法しか思いつきませんでした笑笑。地獄の10重ループは今でも覚えています。。。
アドバイス
問題にするには結構な良問なんじゃないでしょうか。例えば問題中には「maxHappinessという配列の中の数を合計する」といった、変数・配列の名前には沿わない処理が出てきたり、組み合わせを求めるためのloop関数の引数は要チェックです。ぜひ参考にどうぞ!!
フローチャートセットについて
この記事ではフローチャートを掲載するだけでなく、実際にゲームとして遊べるように、Java言語で作成したプログラムを、フローチャートの画像とともに配布しています。記事のリンクをクリックするとGoogleドライブが開くので、画面上側(たぶん)のダウンロードボタンを押してダウンロードしてください。ゲームの起動方法などはReadMe.txtファイルを参照してください。利用規約については以下ページをご覧ください。
当ブログが配布するコンテンツの利用規約について - プログラミング食堂
何か質問があればコメントや連絡してください!
今日の余談
高校時代、先生にJavaで全組み合わせを求める問題を出されたことがあって、下みたいにただひたすらにfor文を重ねてたのを覚えています。
for(int a = 0;a < 10;a++){ for(int b = 0;b < 10;b++){ for(int c = 0;c < 10;c++){ for(int d = 0;d < 10;d++){ for(int e = 0;e < 10;e++){ : : : : : : : : : } } } } }
こんな読みにくいコード、皆さんは書かないようにしてくださいね。。。笑
作成者
TBSten(当記事管理者)
この記事が参考になったらぜひ高評価☆よろしくお願いします!