vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Wie mache ich Union aus C++ in Visual Basic 2008? 
Autor: leuchtmuschel
Datum: 02.12.08 20:12

@DaveS

Nach dem Fehlschlag vom Einstieg in die Programmierung mit SQL- Datenbank (hatte ich mir nach den Versprechungen von Microsoft im Anfängerlehrgang einfacher vorgestellt!) hatte ich zur Übung einen einfachen programmierbaren Taschenrechner mit UPN (Bekannt von HP-Rechnern) programmiert. Dieser Taschenrechner funktioniert inzwischen schon recht gut und muß nur noch bereinigt werden.

Ich möchte jetzt einen zweiten programmierbaren Taschenrechner zur Übung programmieren. Er soll einen Stack (X-, Y-, Z-, T- und LastX-Register), Speicher-Register für Daten R(0) bis R(999) und einen Programmspeicher (0000 bis 9999 mit je 3 Bytes) haben.

Mein jetziger Taschenrechner kann nur mit Double im Stack rechnen, hat einen Programmspeicher (000 bis 999 mit je 1 Byte) und hat die wichtigsten Funktionen wie +, -,*, /, ^, RUN, STOP, SST, BST.

Der Arbeitsspeicher wird bei meinem ersten Taschenrechner durch diese Klasse bereitgestellt:

Public Class Memory
Protected Shared _X As Double
Usw.

Der Datenaustausch erfolgt über:

Public Shared Property X()
Usw.

End Class
Die Befehle und die Befehlsdecodierung werden über diese Klasse bereitgestellt:

Public Class Command
 
    Public Shared Sub Multiply()
        Memory.LastX = Memory.X
        Memory.X = Memory.Y * Memory.X
        Call StackDown()
        Memory.MakeStackUp = True
    End Sub
...
End Class
Alle Befehle sind darin immer als
Public Shared Sub
bzw.
Function
in dieser Class enthalten.

Die Form
Public Class Taschenrechner
enthält den Code für die Tastatur-Buttons und die Anzeige in TextBoxen. Ist alles möglichst einfach gehalten…

Jetzt zur Aufgabe: Es wäre sehr schön, wenn die Register, ähnlich wie Variant, verschiedene Datentypen enthalten könnten. Mein jetziger Entwurf sieht folgende Lösung vor:

Byte 0 vom Register enthält die Information welcher Datentyp vorliegt:
Dim Typ As Byte
Ab Byte 1 enthält ein Register die Daten As:
Long, Double, Decimal, Complex, String, Vektor2, Vektor3 , Date
Der Code ist wie folgt geplant:

Memory.X.Typ=1
Memory.X.IntegerVar = 25
Memory.Y=Memory.X
oder

Memory.X = Multiply(Memory.Y, Memory.X)
wird z.B. 19 00 00 im Programmspeicher

Der programmierbare Befehl lautet:

Public Shared Function Multiply(X As RegisterVariant, Y As RegisterVariant) As _
  RegisterVariant
dann

Select Case
mit
X.Typ
und
Y.Typ
Der Aufruf der eigentlichen Rechenfunktionen erfolgt mit Überladen. Das kann der Compiler ja leicht am Datentyp beim Aufruf zuordnen.

So kann der zweite Taschenrechner mit seinen Funktionen “gefüllt” werden.

Tja, das ist eine ganze Menge Überlegung drin. Union wäre günstig gewesen. Was nun? Ich brauche eine Idee.

Ich kann das Ganze auch einfach mit Structure programmieren und verschwendeten Speicherplatz in jedem Register in Kauf nehmen...
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Wie mache ich Union aus C++ in Visual Basic 2008?777leuchtmuschel02.12.08 14:23
Re: Wie mache ich Union aus C++ in Visual Basic 2008?518ModeratorDaveS02.12.08 14:39
Re: Wie mache ich Union aus C++ in Visual Basic 2008?514leuchtmuschel02.12.08 20:12
Re: Wie mache ich Union aus C++ in Visual Basic 2008?502ModeratorDaveS02.12.08 20:44
Re: Wie mache ich Union aus C++ in Visual Basic 2008?490leuchtmuschel02.12.08 23:28

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel