【mod5問】「その場で言われる通りに」(FE計算シリーズ)
「その場で言われた通りに計算すれば正解できる」問題多数出題されます。
他の技術系問題と違って「深い」専門知識は要りません。
ただ知っておきたい演算が2つあります。
a mod b:a ÷ bの余りを計算する
int(a):aを超えない整数値にする
今回は「mod」の問題だけを集めてみました。
私のIT専門学校では「計算問題と見るや捨てる」学生さんがチラホラいます。
問題を捨てる=合格ハードルを高めます。60%合格なら、100問中60問。もし5問捨てたら60/95 = 63%。地味にキツイんですよ。
少し粘り強くいきたいところ。1つ1つできること/簡単な問題から切り崩していきましょう。
それでは始めましょう!
導入 | modとint
IT資格で知っておきたい演算が2つあります。
a mod b:a ÷ bの余りを計算する
int(a):aを超えない整数値にする
5 ÷ 2 は、「 2.5」なり「2 余り 1」と分かります。
5 mod 2 = 1。余りだけを結果にする剰余演算子です。
intはちょっと混乱します。
int(1.1) = int(1.7) = 1 は分かりますよね。1.1を超えない整数、1.7を超えない整数、と考えれば良いから。
では、int(-3.3)は分かりますか?
答えは、int(-3.3)= -4。-4は-3.3を超えない(小さい)整数ですから。私は、ついつい「-3!」と答えたくなっちゃいます。
コンピュータではintや桁あふれを利用した「ちょっとずるい計算」をすることがあります。気をつけてくださいね。
ハッシュ値の衝突「シノニム」
正答はイ。
SEPの「S」「E」「P」に対応した数を表から読み取り、総和を計算し、27で割った余りをハッシュ値hとする、計算方法。
表より、Sは19, Eは5, Pは16、総和は40。27で割ると1余り13。よってハッシュ値hは3。
ア~エについても計算します。
ア:1+16+18 = 35、27で割ると1余り8。
イ:6+5+2 = 13、27で割ると0余り13。これ。
ウ:10+1+14= 25、27で割ると0あまり25。
エ:14+15+22= 51、27で割ると1あまり
SEPとイのFEBが同じ13になりました。
簡単な値で試してみよう
正答はイ。
数式を用いた解法がスマート。過去問道場さん「応用情報技術者平成23年秋期 午前問5」の解説の通りです。
せっかくなので力業で頑張ってみますか。適当に値をぶち込んで、衝突するa, b, nを考えます。
問われているのは、a mod n = b mod nになる条件。
a=2, b=7, n=5とかどうでしょうか。a mod n = 2 mod 5 = 2、 b mod n = 7 mod 5 = 2で衝突(シノニム)しています。
選択肢ア~エで当てはまるものを探します。
ア:a+b=2+7=9。n(n=5)の倍数、ではないです。
イ:a-b=2-7=-5。n(n=5)の倍数、ぽいです。
ウ:n(n=5)がa+b=2+7の倍数、ではないです。
エ:n(n=5)がa-b=2-7=-5の倍数、ぽいです。
イとエが候補で残りました。別の値で白黒つけます。
a=2, b=12。
イ:a-b=2-12=-10。n(n=5)の倍数、ぽいです。
エ:n(n=5)がa-b=2-12=-10の倍数、ではないです。5の倍数で、2倍や3倍なので、0.5倍は違いますね。
よって正答はイ。ちょっと「-」がついてたので不安になりますが、深くはき気にしません。(a=12, b=2で考えれば良いだけです)
進数変換を絡めた問題
正答はイ。
パリティビットは、データに誤りがあるかを検査するために負荷する数値。
偶数パリティとは、データの1の数が偶数になるように付加します。例えば、「000」ならパリティ「0」を付加して「0000」、「001」なら「1」を付加して「1001」とします。
まずは問題文の16進数「30」「3F」「7A」を2進数にします。
16進数→2進数の変換は、2通り。「16進数1桁を2進数4桁に変換」でも「16→10進数→2進数」でもOKです。
16進数30:0011 0000
16進数3F:0011 1111
16進数7A:0111 1010
ただし「7ビットの文字コード」と書いてあるので、一番左の「0」を削ります。
30の文字コード:011 0000
3Fの文字コード:011 1111
7Aの文字コード:111 1010
1の個数が偶数になるように、先頭にパリティビットを付加します。
30の文字コード:0011 0000:変わらず30
3Fの文字コード:0011 1111:変わらず3F
7Aの文字コード:1111 1010:変わってFA
よって正答はイ。
「重み」を絡めた問題
正答はア。
手順通りにやれば良い問題です。
7×1 + 3×2 + 9×3 + 4×4 = 56
56 mod 11 = 1 (5余り1なので)
11-1=10、の1の位は0、データ末尾に負荷して、73940
特段「学び」はないですが、重み・割った余り(mod)はよく出ます。
ハッシュ値をアドレスに使う例題
正答はイ。
データの値から、格納アドレスを算出する問題です。(2)と(3)がメインの手順、(1)(4)は状況説明。
3について、3 mod 5 = 3 (5余り3なので)。3+1=4 が格納アドレス、最初なので格納先にはデータないので、そのまま格納されます。
4について、4 mod 5 = 4。4+1=5。データはないので、そのまま格納。今データがあるのはアドレス4と5。
8について、8 mod 5 =3。3+1=4。データが既に「3」があるので、アドレス5に格納したいけど既に「4」があるので、アドレス6に。データがあるのは、アドレス4, 5, 6。
以上のように作業を進めます。
データ13がアドレス1に格納され、(1)~(4)にデータの移動は書かれていないので、データ13はアドレス1にずっと格納されます。
したがって正答はイの13。
なお、今回のハッシュ値で格納するアドレスを決めるメリット。「3」を探す時に「アドレス4以降にあるだろうな」と探索時間を短くできます。アドレス1から探す必要がありませんから。
データベースでも使われることもあります。
まとめ
お疲れ様でした。
a mod b:a ÷ bの余りを計算する
int(a):aを超えない整数値にする
の2点と >>指数の公式Note<< を学習すれば、数学的に学ぶべきことはほぼ網羅できます。あとは、中学校でやった方程式ぐらいですね。
今回のmodはただの割り算。ぜひ得点源にしてくださいね。
では、またご縁があったらお会いしましょう。
\力試しは修了試験で!4回分の解説です/
p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ
この記事が参加している募集
学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ