2012-03-16 1 views
-1

Visual Basicでは、再帰を使用しない10進数から英数字の数値ベースのコンバータライブラリを探しています。Visual Basic(または擬似コードアルゴリズム)の小数点から英数字の番号のベースコンバータライブラリを再帰なしで探します

私が見つかりました:デモアプリケーションを含む http://visualstudiomagazine.com/articles/2010/07/20/when-hexadecimal-is-not-enough.aspx

をしかし、それは再帰を使用していることを発見しました。再帰を使用したときの問題は、ライブラリを自分のVisual Studio Express 2010 Visual Basicプロジェクトに統合しようとすると明らかになりました。スタックオーバーフロー例外が発生しました。

スタックに割り当てられたサイズのメモリを増やすことを考えましたが、変換する値によって再帰の深さが異なる可能性があるため、これが何であるかを判断するのは難しいかもしれません。

私の状況では、信頼性の高い決定的な解決策が必要です。そのため、再帰を使用するというアイデアを無視することをお勧めします。

私はもっと多くの研究を行い、アルゴリズムをゼロから作成しようとしますが、既に存在する場合はホイールを再発明しません。ここでの検索は、私が探していたものを私にあまり与えてくれませんでした。

Visual Basicでは、既存の非再帰小数点から英数字コンバータライブラリの方向を指摘できますか?

+1

これにはリンクがあります(再帰を使用するかどうかはチェックされていません):http://www.devx.com/vb2themax/Tip/19316 – assylias

+0

+1 @assyliasありがとうございます。今すぐチェックしてください... – therobyouknow

+0

うん、再帰的に見える:)私は一見を持っている、それは最も読みやすいコードではなく、戻り値として関数名を使用するVBは誤解を招く可能性がありますが、はい、再帰的であるようです。だから私はそれを私のVisual Studio 2010 Express Visual Basicプロジェクトに統合してテストします。私は戻って、その後に、もしあなたが答えとしてこれを提供すれば、それを受け入れ、upvoteすることができるはずです。 – therobyouknow

答えて

0

私が自分自身に提供するこのソリューションは、動作するように見えます。しかし、これは一方向変換であるためです。他の図書館は相違点の間を行き来する双方向の変換を目指していますが、どちらの方法も必要ありません。


Public Class BaseConverter 


    Public Shared Function ConvertToBase(num As Integer, nbase As Integer) As String 

     Dim retval = "" 

     Dim chars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 

     ' check if we can convert to another base 
     If (nbase chars.Length) Then 
      retval = "" 
     End If 

     Dim r As Integer 

     Dim newNumber As String = "" 

     ' in r we have the offset of the char that was converted to the new base 
     While num >= nbase 
      r = num Mod nbase 
      newNumber = chars(r) & newNumber 

      'use: num = Convert.ToInt32(num/nbase) 
      '(if available on your system) 
      'otherwise: 
      num = num \ nbase 
      ' notice the back slash \ - this is integer division, i.e the calculation only reports back the whole number of times that 
      ' the divider will go into the number to be divided, e.g. 7 \ 2 produces 3 (contrasted with 7/2 produces 3.5, 
      ' float which would cause the compiler to fail the compile with a type mismatch) 
     End While 

     ' the last number to convert 
     newNumber = chars(num) & newNumber 

     Return newNumber 
    End Function 


End Class 

Iは、以下のリンクでC#コードに基づいて、Visual Basicで上記のコード作成:

クレジット:http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/5babf71f-4375-40aa-971a-21c1f0b9762b/ を(「英数字に小数(ベース10)へ変換(ベース36) 「)


public String ConvertToBase(int num, int nbase) 
{ 
    String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 

    // check if we can convert to another base 
    if(nbase chars.Length) 
     return ""; 

    int r; 
    String newNumber = ""; 

    // in r we have the offset of the char that was converted to the new base 
    while(num >= nbase) 
    { 
     r = num % nbase; 
     newNumber = chars[r] + newNumber; 
     num = num/nbase; 
    } 
    // the last number to convert 
    newNumber = chars[num] + newNumber; 

    return newNumber; 
} 

@assylias私は仕事にdevx.com/vb2themax/Tip/19316を取得できませんでした - 私は戻って間違った値を得ました。しかし、提案に感謝します。

動作する証拠はありません。私は、Visual Studio Express 2010 Visual Basicでコードの宣言と構造を調整して成功裏に構築しました。その後、Visual Studio Express 2010のVisual Basicデバッガでコードをステップ実行すると、コードに従うのが難しくなります。変数名は明白ではなく、何をしているのかに関するコメントはありません。私はそれが基本的な変換を行うためにそれをしているように見えなかったことを私が理解していたから、それはありませんでした。

関連する問題