-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Grundwissen Subroutinen

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.04.2005
    Ort
    Bayern
    Alter
    31
    Beiträge
    336

    Grundwissen Subroutinen

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo
    was bedeuten denn diese Bytes in der Sub?
    Declare Sub Test(b1 As Byte , Byval B2 As Byte)

    Wo liegt denn der Unterschied wenn ich die Sub declariere oder wenn ich gleich gosub schreibe.

    ich verstehe nicht ganz was dieses Beispielprogramm so richtig macht.
    warum declarieren die B1 und B2?

    Code:
    Dim A As Byte , B As Byte                      'dimension some variables
    Declare Sub Test(b1 As Byte , Byval B2 As Byte)'declare the SUB program
    A = 65                                         'assign a value to variable A
    Call Test(a , 5)                               'call test with parameter A and constant
    Test A , 5                                     'alternative call
    Print A                                        'now print the new value
    End
    
    Sub Test(b1 As Byte , Byval B2 As Byte)        'use the same variable names as  'the declared one
    Print B1                                       'print it
    Print Bcd(b2)
    B1 = 10                                        'reassign the variable
    B2 = 15                                        'reassign the variable
    End Sub

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    also die b1 und b2 stehen für übergabeparameter, so nennt man die, d.h. wenn du die sub mit call Test(1,2) aufrufst, wird erstmal in b1 ne 1 gespeichert, und in b2 ne 2, dann kannste das in der subroutine weiterverwenden, also kannste schreiben "print b1*b2" udn der wird dir 2 ausgeben, weil 1*2 = 2 iss...

    ich hoffe das iss soweit klar, die haben das dann noch erweitert, so dass die gesagt haben, die zweite variable iss byval, die erste iss (dadurch, dass das der standard ist) byref
    byval heißt, dass nur der wert übernommen wird, aus der übergebenen zahl, und bei byref wird die gesamte referenz übergeben, also der speicherort, wo die variable drinliegt. d.h. in die b1 kann man jetzt auch was reinschreiben, weil der ort der speicherung bekannt ist, und dieser ort nun neu beschrieben werden kann, daher wird beim print a auch 10 ausgegeben werden, die b1 wurde ans a zurückübergeben, da die beiden die selbe speicheradresse teilen.

    das mit dem gosub ist etwas älter, und das gibts auch in vielen anderen leichten programmiersprachen, aber da gibts eben nicht den vorteil, dass du sagen kannst: ich möchte jetzt diesen wert mit übergeben, so dass du damit weiterarbeiten kannst.

    hastes alles verstanden? iss nen bissl schwer zu erklärn, aber ich versuchs gern nochmal anschaulicher ^^

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.04.2005
    Ort
    Bayern
    Alter
    31
    Beiträge
    336
    danke schon mal für die Erklärung

    doch warum ist der gosub Befehl nicht besser? hier kann ich ja mit allen Variablen die ich am Anfang mit dim deklariere benutzen.
    also schreibe ich b1 = 1 und b2 = 2 dann kann ich das ja in der gosub benutzen.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    die beiden vars b1 und b2 sind nur in der subroutine aktiv, so kann man außerhalb der subroutine die variablen noch deklarieren, so denke ich, dann gehen die nich verloren

    außerdem iss ne subroutine viel übersichtlicher ^^

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    51
    Beiträge
    576
    >>außerdem iss ne subroutine viel übersichtlicher ^^
    braucht aber auch mehr Speicher !!

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.03.2004
    Beiträge
    185
    Gosub Test
    und
    Declare Sub Test() : Call Test()
    sind vom Speicherbedarf identisch, wenn keine Parameter übergegen werden.
    Gosub ist nur die alte Schreibweise.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    29
    Beiträge
    1.614
    declare brauchtn stückn mehr stack, aber das iss nich das ding...

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Was ins Fleisch geht, ist die Sache mit "byval". Denn da findet ein Copy in das Frame statt, und das tut weh, abgesehen mal vom Platz. Muß man halt leider angeben, wenn man auch nur ein einziges Mal eine Konstante übergeben will.
    Sonst kann man sagen, declare und all-argumente nur dann, wenn die SUB re-entrant sein soll, also wenn sie sich zum Beispiel selbst aufrufen will. Sonst ist es sparsamer, die Argumente in globalen DIM's anzulegen, genauso wie ev. LOCAL's.
    Schön strukturiert ist das halt dann leider nicht.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    51
    Beiträge
    576
    >declare brauchtn stückn mehr stack, aber das iss nich das ding...
    Ein Aufruf brauchte bei mir ca. 30 Byte mehr Speicher als mit Gosub.
    Wenn ich das 20mal aufrufe , habe ich schon 600byte umsonst verschenkt.
    Da bleibe ich lieber bei den Gosubs.
    Ist dann zwar nicht so übersichtlich aber dafür sparsamer.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    30.12.2005
    Ort
    Tann / ZH
    Alter
    61
    Beiträge
    264
    Zitat Zitat von Roberto
    >declare brauchtn stückn mehr stack, aber das iss nich das ding...
    Ein Aufruf brauchte bei mir ca. 30 Byte mehr Speicher als mit Gosub.
    Wenn ich das 20mal aufrufe , habe ich schon 600byte umsonst verschenkt.
    Da bleibe ich lieber bei den Gosubs.
    Ist dann zwar nicht so übersichtlich aber dafür sparsamer.
    Du rechnest falsch ...
    Nach jedem Aufruf deiner Subrutine werden die Variablen auf dem stack wieder freigegeben. Scheinbar hast Du die Wirkungsweise des Stacks noch nicht ganz verstanden...
    Ausser Du rufts deine Subrutine rekursiv auf...
    Dann dürftest Du in kurzer Zeit ein grösseres Problem haben.
    MfG
    Ruedi

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •