忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【BI技術者認定試験対策】データ構造の基本「スタック」を攻略!PushとPopの違いを整理

アルゴリズムやプログラミングの基礎となる「データ構造」。その中でも、後入れ先出し(LIFO)の構造を持つ「スタック」は、バイオインフォマティクスの配列解析や再帰的な計算でも頻繁に登場する重要な概念です。今回は、その基本操作を確実に覚えましょう。

1. 問題:スタックへの操作

【 問題 】 データ構造の一つである「スタック(stack)」において、新しいオブジェクトをデータ構造の末尾に追加する操作を何と呼ぶでしょうか?

① プッシュ(Push)   ② ポップ(Pop)   ③ プット(Put)   ④ ゲット(Get)

2. 正解:スタック操作の正解

正解: ① プッシュ(Push)

3. 解説:スタック(積まれた本)の世界

スタックの挙動を理解するコツは、机の上に積み上げられた「本」をイメージすることです。


[ スタックの基本(LIFO) ]

最後に積んだものが、最初に取り出される「後入れ先出し」の世界です。

(Last-In, First-Out)


[ 用語の整理 ]

プッシュ(Push):データをスタックの最上部に追加(積む)する操作。

ポップ(Pop):スタックの最上部からデータを取り除く操作。



[ 消去法での確認 ]

・プット(Put)やゲット(Get)は一般的な値の代入や取得を指します。

・ホップ(Hop)はネットワーク等で使われる別分野の用語です。

1. データ構造の特定: 今回のテーマであるスタックは、一番上(末尾)に対してのみ操作を行うデータ構造です。

2. 動作の暗記: 本を一番上に「押し込む」からプッシュ、一番上が「ポンと飛び出す」からポップ、とイメージで結びつけると忘れません。


4. まとめ

「スタック=プッシュして積む、ポップして出す」というセットを反射的に思い出せるようにしましょう。キュー(Queue)の「エンキュー/デキュー」と混同しやすいポイントなので、まずはこのスタックの動作を完璧にマスターするのが、データ構造攻略の第一歩です!



PR

【Java Mac環境構築】IntelliJ IDEAでJava開発をスタート:JDKの選択で躓いた経験と解決策

1. 導入:なぜIntelliJ IDEAを選んだのか

プロのJavaエンジニアの間で圧倒的なシェアを誇るIDE(統合開発環境)、それが「IntelliJ IDEA」です。Eclipseなど他の選択肢もありますが、今回はその強力な補完機能とモダンな操作性を探求するため、MacにCommunity Editionを導入してみました。

2. インストールはシンプル:ドラッグ&ドロップの世界

1.公式サイトからMac用の**.dmg**ファイルをダウンロード。

2.Applicationsフォルダへドラッグ&ドロップ。 Macらしい直感的なインストールで、ここまでは順調でした。

3. プロジェクト作成と「JDK」の罠

新規プロジェクト作成時、一つの壁にぶつかりました。

発生したトラブル: すでにMacにインストールされていたJDKを指定したところ、なぜかプロジェクトのビルドがうまくいきませんでした。

解決策: 悩んだ末、IntelliJの機能にある**「Download JDK...」**から「Oracle OpenJDK」を直接ダウンロードして設定し直したところ、嘘のようにスムーズに解決しました。

プロの現場でも「環境変数」や「パス」の不一致でハマることは多いと聞きます。IDEが推奨するクリーンな設定をそのまま受け入れる柔軟さも、時には必要だと学びました。

4. Java 21以降のモダンな「Hello World」に挑戦

今回は、最新のJavaで導入された「簡易メインメソッド(Unnamed Classes and Instance Main Methods)」のスタイルを意識してコードを書きました。


【検証したコード】

Java
void main() {

    IO.println(String.format("Hello World!!"));

}

従来の public static void main(String[] args) というおまじないを省略できるこの書き方は、初心者にもプロの素早い検証にも非常に有用だと感じます。

5. 実行結果と今後の展望

実行ボタン(▶)一つでコンソールに Hello World!! と出力された瞬間、自分だけの開発環境が整った実感が湧きました。

今後は、先に導入した「H2 Database」とこの「IntelliJ」を連携させ、実際のアプリケーション開発へ一歩踏み出してみたいと思います。



【VBA】Do While...Loopの使い方!条件を満たす間処理を繰り返す基本構造

VBAで繰り返し処理を行う際、For...Next と並んでよく使われるのが Do While...Loop です。「変数が10未満の間」や「セルが空欄でない間」といった、柔軟な条件指定ができるため、実務でのデータ処理において非常に重宝します。

1. 基本文法:Do While...Loop

ループの開始時に条件を判定し、その条件が True(真) である間、中の処理を繰り返し実行します。条件が False になった瞬間にループを抜けます。

[ 構文 ]
Do While 条件式
    ' 繰り返したい処理
Loop

2. 実践サンプル:1から10までカウントアップ

ポイント:ループ内で条件に関わる変数を更新する

以下の例では、変数 i が10になるまで処理を繰り返します。ループの中で i = i + 1 を忘れると、条件がいつまでも満たされたままになり、無限ループに陥るため注意が必要です。

Sub MySub()
  Dim i As Integer
  
  i = 0  ' 初期化
  
  ' i が 10 より小さい間は繰り返す
  Do While i < 10
    i = i + 1
    Debug.Print i
  Loop
End Sub

3. 実行結果

イミディエイトウィンドウに、1から10までの数値が順番に出力されます。

1
2
3
4
5
6
7
8
9
10

4. エンジニアの視点:For文との使い分けと「無限ループ」対策

1. 使い分けの基準: 回数が決まっている時は For...Next、回数が決まっておらず「データが終わるまで」のような動的な条件の時は Do While を使います。特に、外部ファイル(CSVやDBのレコード)を1行ずつ読み込むような「いけいけ」な処理には Do While が最適です。
2. 無限ループの回避: 条件式が常に True になってしまうと、Excelがフリーズします。もし止まらなくなったら [Ctrl] + [Pause/Break] キーで中断しましょう。開発中は、念のためループ内に DoEvents を入れておくと、強制終了しやすくなるのでおすすめです。
3. 条件判定のタイミング: Do While は最初に判定しますが、Loop While と書くと最後に判定(一度は必ず実行)するようになります。このあたりの制御を使いこなせるようになると、IT技術者としてより緻密なロジックが組めるようになります。


5. まとめ

「条件が整っている間、ひたすら回す」。このシンプルな考え方が、複雑な業務自動化を支えます。変数の更新タイミングと条件式の関係をしっかりマスターして、自由自在にループを操れるようになりましょう。

【VBA】数値判定(IsNumeric)の使い方!計算エラーを未然に防ぐデータバリデーション

VBAで計算処理を行う際、変数の中身が数値ではないのに計算しようとすると「型が一致しません」というエラーが発生してしまいます。IsNumeric関数を使えば、対象のデータが数値として扱えるかどうかを事前に判定できるため、安全なプログラムを書くことが可能になります。

1. 基本文法:IsNumeric関数

引数に指定した値が、数値として認識できる場合は True、認識できない場合は False を返します。整数だけでなく、小数や「数値として解釈可能な文字列」も判定対象となります。

[ 構文 ]
IsNumeric( 判定したい値 )

2. 実践サンプル:データの数値判定

ポイント:文字列の「"123"」もTrueになる柔軟な判定

数値そのものはもちろん、計算可能なデータであれば True を返す特性を理解しておきましょう。

Sub Macro1()
  Debug.Print IsNumeric(1)        ' 結果: True (整数)
  Debug.Print IsNumeric(0.5)      ' 結果: True (小数)

  Dim str1 As String
  str1 = "aa"
  Debug.Print IsNumeric(str1)    ' 結果: False (アルファベット)
End Sub

3. 実行結果

イミディエイトウィンドウには、判定結果が論理値で表示されます。

True
True
False

4. エンジニアの視点:IsNumericの「癖」に注意

1. 意外な判定結果: IsNumeric は非常に柔軟です。例えば IsNumeric("1,234") や IsNumeric("&HFF")(16進数)も True を返します。厳密に「数字だけ」を許可したい場合は、他のチェックとの併用も検討しましょう。
2. 実務での活用法: ユーザーに入力させた値が数値でない場合に、「数値を入力してください」と警告(MsgBox)を出すガード句として使うのが一般的です。これにより、マクロが途中で落ちるという「いけいけ」でない状況を防げます。
3. データクリーニング: データベース(PostgreSQLやOracle等)へデータを移行する前の事前チェックとしても有効です。型エラーによるインポート失敗を防ぐために、VBA側で IsNumeric を使ってエラー行を抽出するロジックは非常に「理系」的で効率的です。


5. まとめ

「計算する前に、まず IsNumeric」。この習慣をつけるだけで、マクロの信頼性は飛躍的に向上します。外部から来る不確定なデータを扱う際こそ、この関数でデータの正当性をしっかりと見極めていきましょう。



【VBA】乱数(Rnd)の使い方!ランダムな数値を生成して処理に変化を持たせる方法

プログラムの中で、実行するたびに異なる数値を使いたい場面があります。VBAでは Rnd関数 を使うことで、0以上1未満の乱数を発生させることができます。ゲームの要素だけでなく、データのサンプリングやテストデータの自動生成など、実務でも幅広く活用される機能です。

1. 基本文法:Randomize と Rnd

乱数を使用する際は、必ず Randomize ステートメントを先に実行するのが鉄則です。これを行わないと、マクロを起動し直した際に「毎回同じパターンの乱数」が発生してしまい、本当の意味でのランダムになりません。

Randomize
乱数ジェネレータをシステムタイマーの値で初期化します。

Rnd()
0以上、1未満の範囲(0.000... ~ 0.999...)の小数を返します。

2. 実践サンプル:乱数の発生と出力

ポイント:実行前に必ず「Randomize」で初期化する

最もシンプルな、0から1の間の小数をイミディエイトウィンドウに出力するコードです。

Sub Macro1()
  ' 乱数系列を初期化(これ重要!)
  Randomize

  ' 0以上1未満の乱数を発生させて出力
  Debug.Print Rnd()
End Sub

3. 実行結果

実行するたびに、以下のようなランダムな小数が出力されます。

0.7055475
0.533424
0.2869222

4. エンジニアの視点:実務で使える「整数の乱数」の作り方

1. 範囲指定のテクニック: 実務では「1から100までの整数」が欲しい場合が多いです。その場合は、以下の公式を使います。
Int((最大値 - 最小値 + 1) * Rnd + 最小値)
例えば1〜100なら、Int(100 * Rnd + 1) と記述すればOKです。
2. Randomizeのタイミング: Randomize は一つのマクロ処理の中で一度だけ実行すれば十分です。ループの中で何度も実行すると、逆にランダム性が損なわれることがあるため注意しましょう。
3. 再現性の確保: あえて Randomize を使わずに、Rnd(-1) などの引数を与えて「決まったパターンの乱数」を出すこともあります。これはデバッグ時に「前回と同じ乱数でバグを再現したい」といった場合に役立つ「いけいけ」な高等テクニックです。


5. まとめ

「まずは Randomize、次に Rnd」。このセットを覚えるだけで、VBAに「偶然」の要素を取り込むことができます。データのシャッフルや抽選ツールなど、乱数を使いこなして一味違うツール作成に挑戦してみてください。