HOME»応用情報技術者試験掲示板»何を言っているのかが理解できません
投稿する

[1442] 何を言っているのかが理解できません

 さん(No.1) 
26進数で表せという問題があるとおもうのですが、あれほど理解できない問題はありませんでした。

三ヶ月考えても理解できなかったです。


あれはいったいなにがどうなっているのでしょうか?

2019.01.22 21:41
寒がりおじさんさん(No.2) 
この投稿は投稿者により削除されました。(2019.01.26 13:54)
2019.01.26 13:54
双葉さん(No.3) 
平成28年春期 午前問2ですね。
こういう問題は、簡単な例で考えてから、同じ方法を使って解くと手っ取り早いです。
この問題は数字表記の仕組みを知っているかを問う問題です。
数字桁の重みを考えます。

10進数の234を例にして考えてみます。
234(10)のときは、
2 * 10 ^ 2 + 3 * 10 ^ 1 + 4 * 10 ^ 0 (「^」は塁乗を表す)
です。10の2乗は100でそれが2つある、10の1乗は10でそれが3つある、
10の0乗は1でそれが4つある。ゆえに、200 + 30 + 4 = 234になっています。
これが、数字表記の仕組みです。

いきなり26進数を考えるのはきついので、10進数を2進数にするときの手順を
考えます。上の考え方を利用した方法です。高校数学あたりでも習っている
方法だと思います。
ここでは、13(10)を2進数に基数変換するときの手順を考えます。

2)13
2) 6 … 1
2) 3 … 0
   1 … 1

表記の都合でわかりにくくなってしまいましたが、12を2で割って6で剰余が1、
さらに6を2で割って3で剰余が0それを繰り返していって、下から「1101」
と数字を拾うと13(10)を2進数にできます。
上と同じ考え方だと、
1 * 2 ^ 3 + 1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0
です。8 + 4 + 0 + 1 = 13です。

さて、本題に入って、123(10)を26進数に基数変換します。上の方法と同じ方法を
取ります。

26)123
    4 … 19

123を26で割って商が4で剰余が19です。
同じ数字の拾い方をします。すると、(4)(19)となります。ここで、数字を文字に
置き換えることを考えます。16進数でアラビア数字で表せない数字をA〜Fの英字に
置き換えたときの要領です。この問題では、0〜9のアラビア数字の部分の表記を
使わずにA〜Zの英字を使うように指定されているので、
A = 0、B = 1、C = 2、D = 3、E = 4、F = 5、G = 6、H = 7、I = 8、J = 9、K = 10
L = 11、M = 12、N = 13、O = 14、P = 15、Q = 16、R = 17、S = 18、T = 19、U = 20
V = 21、W = 22、X = 23、Y = 24、Z = 25
です。 すると、(4)は「E」に置き換えて表現して、19は「T」と表現します。
すると「ET」になり、これが答えです。
2019.01.23 01:27
ささにしきさん(No.4) 
2進数、16進数をご理解されてなければ、これらの理解から始めたほうがいいです。
26進数はこれらの応用です。
言い換えれば26進数がわからなければ、2進数、16進数もわかっていない事になります。
2019.01.23 09:17
みつおさん(No.5) 
分からなくても

他の問題で点数取れば

いいんじゃない?

たぶん。
2019.01.23 22:18
双葉さん(No.6) 
サンプルプログラムをC#でコーディングしてみました。
コンソールアプリケーションです。マイナスの値や小数点は
考慮していないので、入力は正の整数のみでお願いします。
トレースしてもらえれば、やっていることが分かりやすいと思います。
環境のある方はどうぞ。

using System;
namespace abc
{
    class ex
    {
        static void Main(string[] args)
        {
            Console.WriteLine("数字を入力してください。");
            var n = long.Parse(Console.ReadLine());
            var ans = "";

            do
            {
                ans = (char)('A' + n % 26) + ans;
                n /= 26;
            } while (n > 0);

            Console.WriteLine(ans);
            Console.ReadLine();
        }
    }
}
2019.01.26 12:09
メタルでソリッドさん(No.7) 
これを使うとしたらどんな場面なのでしょう?
非難じゃなくて疑問です。
2019.01.28 16:16
助け人さん(No.8) 
AP ゴールドマイスター
情報処理技術者試験を目指すなら、n(2、8、10、16、・・・)進数くらい理解しているでしょう、という問です。ただ、26進数が使われる場面は、およそ思いつきません。

また、3か月かかってもわからなかったのが、いろいろな方からこれだけ丁寧な回答をもらってこの1週間で少しでもわかったかどうかをリアクションした方がいいのでは?
2019.01.28 19:12
メタルでソリッドさん(No.9) 
返事ありがとうございます。
私はスレッド立てたものではありません。

2019.01.29 07:36
助け人さん(No.10) 
AP ゴールドマイスター
メタルでソリッドさん

一部は貴方向け、それ以外はスレ主さん向けで、ややこしくてすみませんでした。

ろくに調べずに26進数は思いつかないと書きましたが、迂闊でした。一つありました。Excelの列番号です。
A、B、・・・、Z、AA、AB、・・・
2019.01.29 08:01
双葉さん(No.11) 
桁の繰り上がりで説明してみることにします。

いきなり26進数ではなくて、最初は使い慣れた10進数で考えてみます。
10進数は、1つの桁につき10個の状態を表現できます。一般的に、この10個の状態には、
0〜9という数字を割り当てます。ところが、10(0から数えて11個目)は1桁では表現できないので、
10の位に繰り上がります。10の位の正体ですが、1の位を10倍したものです。
つまり10の位の数字は、1の位の(10の1乗倍)の重みがあるわけです。
例えば、25という10進数の数字があるとします。1の位の数字はそのまま5ですが、10の位の2を
そのまま足して7と認識することはないでしょう。数字では2でも、実際には10の1乗分の重みが
あるので20の意味があります。10の1乗の重みがある数字が2個だから、2 * (10の1乗 =10)で
計算をして20となり、1の位の5を加算して、最終的に25という数字を認識しているはずです。
10進数は身の回りに溢れていて、接する機会が多いためにこの手続きを無意識にしています。
蛇足かもしれませんが、100の位は10の位のさらに10倍の重みがあります。つまり、1の位から
みると10の2乗  = 100倍の重みになります。

さて、26進数で考えますが仕組みは10進数と同じです。違いは私たちが普段使い慣れていないと
いうことだけです。26進数ではこの問題ではA〜Zの表記を使います。数字がZ
(Aから数えて26番目)までは、1桁で表現できますがその次の数字は繰り上がりを
起こします。BAです。最初にBがくることに違和感を感じるかもしれませんが、
10進数のときに9の次が「00」でなくて「10」であることを考えると納得できると思います。
この問題ではBが10進数の1の役割をしていますので。桁上がりした部分の重みは、
26の1乗 = 26です。26の位となります。この問題では、出てきませんが
さらに桁上がりした桁の重みは26の2乗 = 676で、676の位です。

さて、ここからようやく、基数変換の本題です。やはり、10進数から考えます。
10進数から10進数なので、厳密には意味がおかしいですが解説ですのでご容赦を。
123という10進数を10進数にするときの手順を考えます。
次から出てくる10で除算するのは、1桁あたりにつき10個の状態を表せるからです。
123を10で除算すると、商が12で剰余が3です。3は1の位に収まることになるので、
1の位は3で確定です。次に10の位に収めることを考えます。1の位から溢れたのは、
先ほどの商12です。これを10の位に押し込もうとするのですが、まだ足りません。
12を10で除算して、商が1で剰余が2です。10の位は2が確定です。100の位を考える
必要が出てきました。先ほどの商が1なので、これを10で除算して商が0で剰余1に
なりました。100の位は1で確定です。商が0となったので、もう収まりきらない
数はないので1000の位は考えなくていいです。
ここで終了して結果は「123」です。当たり前のように感じるのは、
10進数を普段使い慣れていて、無意識にこれを実行しているからです。
もし、1000の位以降も考えるなら0を10で除算して商0で剰余0、
「0123」です。これ以降も延々と0が続きます。数字の頭の0は通常省くので、
これ以上やらなくていいわけです。

さて、本題の中の本題。10進数の123を26進数に基数変換します。やることは10進数のときと
同じですが、26進数では1桁あたり26個の状態を表しますから、26で除算して剰余を
求めていくことになります。ただ、10進数と違い剰余の数も26あるので、
まずは使い慣れた10進数の文字で考えてから、26進数の文字置き換えます。

123を26で除算して、商が4で剰余が19になります。26の0乗の位、26の0乗は
1ですから、ここも10進数のときと同じ名前の1の位ですが、10進数の1の位とは
収まる数の個数が違うことに注意してください。10進数の1の位に19は収まり
切りませんが、26進数の1の位では収まります。19を問題の表記に合わせてTと
表現します。これで1の位は確定です。次に10進数のときと同様に、まだ収まっていない
数を処理します。溢れた分は一つ上の位26の1乗 = 26の位)に押し込みます。
商が4だったので、これが溢れています。4を26で除算して、
商が0で剰余が4です。26の位に4が収まりました。問題の表記に合わせてEと表現します。
この上の桁については商が0なので考える必要なしです。
2019.01.29 12:46
メタルでソリッドさん(No.12) 
助け人様ありがとうございます。
エクセルがそうなんですね。
成る程。
2019.01.30 07:58

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop