ABC anhand eines Wertes hochzählen und ausgeben

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    @Bagplatt,

    hast inzwischen viele Antworten bekommen.
    Hier meine versprochene Klasse

    VB.NET-Quellcode

    1. Public Class EineZelle
    2. Public Sub New(x As Integer, y As Integer, feldname As String)
    3. Me.X = x
    4. Me.Y = y
    5. Me.FeldName = feldname
    6. End Sub
    7. Public Property X() As Integer
    8. Get
    9. Return m_X
    10. End Get
    11. Private Set
    12. m_X = Value
    13. End Set
    14. End Property
    15. Private m_X As Integer
    16. Public Property Y() As Integer
    17. Get
    18. Return m_Y
    19. End Get
    20. Private Set
    21. m_Y = Value
    22. End Set
    23. End Property
    24. Private m_Y As Integer
    25. Public Property FeldName() As String
    26. Get
    27. Return m_FeldName
    28. End Get
    29. Private Set
    30. m_FeldName = Value
    31. End Set
    32. End Property
    33. Private m_FeldName As String
    34. Public Property FeldInhalt() As FeldInhalt
    35. Get
    36. Return m_FeldInhalt
    37. End Get
    38. Private Set
    39. m_FeldInhalt = Value
    40. End Set
    41. End Property
    42. Private m_FeldInhalt As FeldInhalt
    43. End Class
    44. Public Enum FeldInhalt
    45. Nichts
    46. SchiffBlau
    47. SchiffRot
    48. End Enum


    So würde ich das Array erstellen und befüllen

    VB.NET-Quellcode

    1. ' Das ist unsere Liste in der wir alle Zellen ablegen
    2. Private AlleZellen As New List(Of EineZelle)()
    3. Private currentLetters As String
    4. Private Sub Form1_Load(sender As Object, e As EventArgs)
    5. ' Wir erste´llen unser Array in einen eindimensionalen Liste
    6. For y As Integer = 0 To 100
    7. Me.currentLetters = "a"
    8. For x As Integer = 0 To 100
    9. Me.AlleZellen.Add(New EineZelle(x, y, currentLetters & y.ToString()))
    10. ' Nächste Feldbezeichnung erzeugen
    11. currentLetters = Me.CreateNextLetter(currentLetters)
    12. Next
    13. Next
    14. End Sub
    15. ''' <summary>
    16. ''' Erzeugt die Feldbezeichnungen
    17. ''' </summary>
    18. ''' <param name="currentLetter"></param>
    19. ''' <returns></returns>
    20. Private Function CreateNextLetter(currentLetter As String) As String
    21. Dim temp As Char = currentLetter.Last()
    22. If temp = "z"C Then
    23. Return currentLetter.Substring(0, currentLetter.Length - 1) + "za"
    24. Else
    25. Dim number As Integer = CInt(temp) + 1
    26. Return currentLetter.Substring(0, currentLetter.Length - 1) + CChar(number)
    27. End If
    28. End Function


    Hab den Code konvertieren lassen da ich in C# programmiere - hoffe der Converter hat alles richtig gemacht.

    Im Code wird eine 2D Feld in der Größe 101 x 101 erzeugt, willst das Ändern dann pass die Werte in den For-Schleifen an.

    Edit:
    So findest du eine Zelle (im Beispiel x = 50 und y = 50)

    VB.NET-Quellcode

    1. Dim Result As EineZelle = Me.AlleZellen.FirstOrDefault(Function(x) x.X = 50 AndAlso x.Y = 50)
    2. If Result IsNot Nothing Then
    3. ' Zelle gefunden
    4. Else
    5. ' Zelle nicht gefunden
    6. End If


    Gruss

    mikeb69

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „mikeb69“ ()

    @ErfinderDesRades: AFAICS stellt Dein Code eine Umrechnung von einer Zahl mit Basis 10 in eine Zahl mit beliebiger Basis dar.
    Ich glaube aber nicht, dass das Problem des TE mit einer Umrechnung möglich ist. Denn ich bin zu dem Schluss gekommen, dass dem Zielkoordinatensystem eine Art von Null fehlt. Den Knackpunkt sehe ich in dem Fall, dass nach Z ein AA kommt. Kein Zahlensystem erzeugt beim "Wechsel der Stufe" ein Ziffernfolge xx. Bei "normalen" Zahlensystemen könnte man viele Nullen vorwegstellen, ohne das Ergebnis zu verändern (0000000F = F). Bei dem TE-System geht das nicht, da ein passendes Symbol fehlt. Wenn man A=0 setzt, dann ergäbe Z+1=BA (so wie 10, Erhöhung der nächsten Stelle; bestätigt durch Dein Programm), es soll aber AA ergeben. Und das geht m.E. nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    AFAICS stellt Dein Code eine Umrechnung von einer Zahl mit Basis 10 in eine Zahl mit beliebiger Basis dar.
    Es gibt keine Zahlen der Basis 10.
    Zahlen sind halt Zahlen.
    Allenfalls Strings können ZahlenDarstellungen auf Basis eines Stellenwertsystems enthalten. Strings sind aber keine Zahlen.
    Was ich schrieb ist Parsen/Formatieren - also reversible Umwandlungen Zahl <-> String

    VaporiZed schrieb:

    Den Knackpunkt sehe ich in dem Fall, dass nach Z ein AA kommt.
    Jo, das ist komisch - nach Z sollte BA kommen, um der Logik eines normalen Stellenwertsystems gerecht zu werden.
    Wie gesagt: Bei mir repräsentiert A die 0 - nicht die 1

    Wenn man unbedingt AA nach Z braucht, dann ist das eben ein abgewandeltes Stellenwertsystem - tatsächlich gibts bei Zahlensystemen ja die verrücktesten Sachen.