見出し画像

【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。余りだけを結果にする剰余演算子です。

IT資格では、「+」「-」「×(または *)」「÷(または /)」に加えて、「mod」と「累乗(2の3乗など)」も使うので知っておいてくださいね。


intはちょっと混乱します。

int(1.1) = int(1.7) = 1 は分かりますよね。1.1を超えない整数、1.7を超えない整数、と考えれば良いから。

では、int(-3.3)は分かりますか?

答えは、int(-3.3)= -4。-4は-3.3を超えない(小さい)整数ですから。私は、ついつい「-3!」と答えたくなっちゃいます。

コンピュータではintや桁あふれを利用した「ちょっとずるい計算」をすることがあります。気をつけてくださいね。



ハッシュ値の衝突「シノニム」

基本情報技術者修了試験 令和06年01月問06 令和04年12月問08

正答はイ。

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になりました。

なお、違う値から生成したハッシュ値が被ってしまうことを「シノニム」と云います。ITパスポートレベルなので覚えておきましょう。



簡単な値で試してみよう

基本情報技術者修了試験 令和03年06月問08

正答はイ。

数式を用いた解法がスマート。過去問道場さん「応用情報技術者平成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で考えれば良いだけです)



進数変換を絡めた問題

基本情報技術者修了試験 令和05年12月問03 令和04年12月問06

正答はイ。

パリティビットは、データに誤りがあるかを検査するために負荷する数値。

偶数パリティとは、データの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

2進数は4桁ずつ空白で区切ると見やすいですね。

ただし「7ビットの文字コード」と書いてあるので、一番左の「0」を削ります。

  • 30の文字コード:011 0000

  • 3Fの文字コード:011 1111

  • 7Aの文字コード:111 1010

1の個数が偶数になるように、先頭にパリティビットを付加します。

  • 30の文字コード:0011 0000:変わらず30

  • 3Fの文字コード:0011 1111:変わらず3F

  • 7Aの文字コード:1111 1010:変わってFA

よって正答はイ。


なお、進数変換のやり方(逆割り法など)を忘れても、書き出して粘りましょう。むしろ暗算でやろうとしないでください。そういう「隙」が失点につながります。粘り強さと慎重さが合格の秘訣です。



「重み」を絡めた問題

基本情報技術者修了試験 令和05年06月問17 令和04年01月問23

正答はア。

手順通りにやれば良い問題です。

  1. 7×1 + 3×2 + 9×3 + 4×4 = 56

  2. 56 mod 11 = 1 (5余り1なので)

  3. 11-1=10、の1の位は0、データ末尾に負荷して、73940


特段「学び」はないですが、重み・割った余り(mod)はよく出ます。



ハッシュ値をアドレスに使う例題

基本情報技術者修了試験 令和03年12月問19

正答はイ。

データの値から、格納アドレスを算出する問題です。(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が有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ