アルゴリズムの問題の回答に納得がいきません。
変換対象をDEC、基数をBASEに格納し、基数変換を行うというものです。
配列Bの添え字は「1」から始まり、DECをBASEで割った余りを
求める関数MODはあらかじめ用意されているものとする。
1.変数Iに1を格納、変数DECに変換対象を格納、変数BASEに基数を格納。
2.MOD(DEC,BASE)の結果を変数Nに格納。
3.NをB(I)に格納。
4.I + 1 をIに格納。
5.「 」の結果を変数DECに格納。
6.DEC=0なら処理終了、それ以外は(2) の処理へ戻る。
「 」内を埋める問題です。
私の答えは「(DEC - N) / BASE」だったのですが、正解は「DEC / BASE」でした。
DECからN(余り)を引いてからBASEで割らないと、
割り切れない場合、最悪いつまで経っても「DEC=0」にはならなくなってしまうと思うのですが、そうではないのでしょうか?
正解は「DEC / BASE」で、あっているのでしょうか?
Perlでプログラムを書いて(配列Bの添え字は0からにして、whileの条件式を「DEC != 0」にしました)試してみましたが、
「DEC / BASE」だと、割り切れない場合、結果の0の数がえらいことになってしまいました(^^;)
ちゃんと勉強し始めたのがつい最近なので説明がうまくできませんが、どなたか解るかた教えてくださいm(_ _)m
No.2ベストアンサー
- 回答日時:
> 私の答えは「(DEC - N) / BASE」だったのですが、正解は「DEC / BASE」でした。
> DECからN(余り)を引いてからBASEで割らないと、
> 割り切れない場合、最悪いつまで経っても「DEC=0」にはならなくなってしまうと思うのですが、そうではないのでしょうか?
そのアルゴリズムは何言語の話ですか?
例えばC言語なら、整数型の演算結果はすべて整数です。
割り算のようなものでは、1/10以下の位まで商を計算しません。
DEC = 40 ÷ 3
とすれば、40 ÷ 3 = 13余り1なので、DECには13の値が格納されます
(DECが整数型変数なら)。
40 ÷ 3 = 13.333…ですが、整数型の変数は小数が格納できないので、整数値が格納されることになります。
また、
DEC = 2 ÷ 3
となれば、2 ÷ 3 = 0余り2なので、DECには0の値が代入されます。
なので、変数の型によってはDEC / BASEでも良いと思います。
余りを最初から引かなくても、対応できるんです。
他の言語でも、整数型変数を使っていればDEC / BASEで問題なく動作するはずです。
回答ありがとうございます!
特に言語の指定はありませんでした。
なるほど。整数型の変数なら、余りを引かなくても良いのですね!
問題に整数のみという指定も特になかったので、
普通に割って小数まで計算していました(^^;)
ありがとうございました。
No.3
- 回答日時:
う~ん....
「純粋に」アルゴリズムの問題だとすると, 何も仮定せず「DEC/BASE」としちゃダメです. 言い換えれば, どこかに「整数同士の除算は小数を切り捨てて整数とする」などと書いてあれば OK.
アルゴリズムは本来 language-independent であるべきなんだけどなぁ....
回答ありがとうございます!
そうなんですよね。「整数同士の除算は小数を切り捨てて整数とする」等の記述があれば悩まなかったのに(^^;
特定の言語を習得する前に読むようなテキストなので、純粋なアルゴリズムの問題だと思います。
ありがとうございました!
No.1
- 回答日時:
>私の答えは「(DEC - N) / BASE」だったのですが、正解は「DEC / BASE」でした。
コンピュータは 「/」 演算をする際、小数部を捨てるので、両者は同じ結果を得るでしょう(正数ならね)。
>Perlでプログラムを書いて(略)
そのプログラムを補足にどうぞ。
この回答への補足
回答ありがとうございます!
「/」演算では、小数部は捨てられてしまうのですね。
以下は私が書いたPerlのプログラムです。
use strict;
use warnings;
print "変換対象を入力。\n";
my $dec = <STDIN>;
print "基数を入力。\n";
my $base = <STDIN>;
my $i = 0;
my $n = 0;
my @b = (0);
while ($dec != 0) {
$n = $dec % $base;
$b[$i] = $n;
$i = $i + 1;
$dec = $dec / $base;
}
print @b, "\n";
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 関数について 2 2022/08/15 13:44
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- PHP PHP MySql ページング 2 2022/09/20 06:38
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- ノートパソコン エクセルの入力で 1 2022/12/15 11:24
- JavaScript 助けてください‼︎ javascriptで質問があります。 配列を定義して、 29342、45342 3 2022/06/26 22:06
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
Dijkstraて
-
多変数関数の最小値を求めるプ...
-
[ EXCEL VBA ] 図形を読み込む...
-
Stuck
-
プログラミングの才能のある無...
-
Fotranで最小公倍数
-
アルゴリズムのB木について
-
Cプログラミング
-
よくプログラミングをやるにあ...
-
Visual studio2019 C#で生まれ...
-
画像から文字を認識してテキス...
-
アルゴリズムとは、フローチャ...
-
OpenCVのライセンスについて
-
乗換案内の作り方が知りたいです。
-
C++行列計算プログラム
-
パズルが好きな人ってプログラ...
-
携帯のパスワードについてです。
-
アルゴリズムとプロトコールの違い
-
一番近い組み合わせを見つけるには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
Dijkstraて
-
Stuck
-
[ EXCEL VBA ] 図形を読み込む...
-
BCDについて
-
アルゴリズムとプロトコールの違い
-
期間重複チェックがわかりません
-
グループを均等に分けるには?...
-
三次元形状曲面の導出法
-
あいまい検索(文字列一致率)
-
Visual studio2019 C#で生まれ...
-
gooという検索エンジンの後にGo...
-
フリーセルの難易度について
-
CRC-CCITT16の算出法
-
経路探索について
-
C♯で電卓を作成しています。演...
-
理系の高校生です。大学で情報...
-
OpenCVのライセンスについて
-
偏りのある乱数のアルゴリズム
-
詰め将棋をとくのは、アルゴリ...
おすすめ情報