![見出し画像](https://assets.st-note.com/production/uploads/images/150092229/rectangle_large_type_2_3919ad6e4cd0cfc94bfcf8647a32e788.png?width=1200)
基本情報技術者試験の科目BをJavaとPythonのプログラムで考える No.2
基本情報技術者試験で出題されるプログラム言語が疑似言語に変更されましたね。合格に向けて学習を進めるにおいては、やはり普段から使っているプログラム言語に置き換えて考えてみたいですよね。
このサイトでは、IPA情報処理推進機構で公開されている科目Bのプログラミングの問題を中心に、疑似言語をJavaとPythonのコードに置き換えて解説していきます。
1日1問の解説を発信していく予定です。基本情報技術者試験の合格を目指されている方のお役に立てれば幸いです。
令和6年度基本情報技術者試験 科目 B 公開問題
問2 文字列の2進数から10進数を求める
2進数 10進数
00001 1
00010 2
00100 4
01000 8
10000 16
上の表は2進数と10進数の対応を表しています。
2倍すると2進数の1の桁が左に移動していますね。
文字列の”10010”を整数に変換するアルゴリズムを考えましょう。
先の表で見たように2をかけることで、2進数表記は1が左にずれます。
そこに、
文字列”10010”を左から一文字ずつ整数の0か1に変換して足していきます。
--------------------------------------------------------------------------------
( )内はresultの値です。値の変化に着目してください。
result = 0
(0)
result = result × 2 + 1 // "10010" の1文字目を整数1に変換して足す
(1) (0)
result = result × 2 + 0 // "10010" の2文字目を整数0に変換して足す
(10) (1)
result = result × 2 + 0 //"10010" の3文字目を整数0に変換して足す
(100) (10)
result = result × 2 + 1 // "10010" の4文字目を整数1に変換して足す
(1001) (100)
result = result × 2 + 0 //"10010" の5文字目を整数0に変換して足す
(10010) (1001)
1.Javaのコードで考えてみよう
問題に登場するint関数は、Integer.parseInt()メソッドで実現しています。
package kamokuB;
public class R6_Sample02 {
//引数として与えられた,“0”と“1”だけから成る,1文字以上の文字列を,
//符号なしの 2 進数と解釈したときの整数値を返す
static int convDecimal(String binary){
int i, length, result = 0;
length = binary.length();
for (i = 0;i < length;i++)
result = result * 2 + Integer.parseInt(binary.substring(i,i+1));
return result;
}
public static void main(String[] args) {
int num = convDecimal("10010");
System.out.println(num);
}
}
2.Pythonのコードで考えてみよう
# R6サンプル問題2
def conv_decimal(binary):
length = len(binary)
result = 0
for i in range(length):
result = result * 2 + int(binary[i])
return result
# 関数呼び出し
num = conv_decimal("10010")
print(num)
いかがでしょうか。
2進数の知識は、科目Aでもよく出題されますので、しっかりと理解しましょう。
この記事が気に入ったらサポートをしてみませんか?