Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Mehrere Werte für eine Variable

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Keks



Anmeldungsdatum: 03.11.2007
Beiträge: 156
Wohnort: Dose

BeitragVerfasst am: 09.03.2008, 13:50    Titel: Mehrere Werte für eine Variable Antworten mit Zitat

Nein, ich meine kein Array. Eher sowas:

variable = 43, 2, 56, 21, 23

Ist sowas irgendwie möglich? Mir kommt es halt drauf an, dass es möglichst wenig Schreiberei ist.


Danke lächeln
_________________
RUN "brain.exe"
Datei nicht gefunden
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 09.03.2008, 14:03    Titel: Antworten mit Zitat

Hallo,

in FreeBasic könntest du dazu eine verkettete Liste von Integer-Variablen nehmen, aber in QB geht das leider nicht. Am einfachsten ist es also, ein Array zu verwenden. Du könntest alternativ allerdings eine String-Variable nehmen und die komma-getrennten Werte daraus auslesen, aber das ist eher aufwendiger als die Nutzung eines Arrays.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 09.03.2008, 15:50    Titel: Antworten mit Zitat

Hallo

Wenn es, wie in deinem Beispiel, bei fünf ganzahligen Werten im Bereich von 0-63 bleibt, dann könntest du diese 5x6 Bit in eine 32-Bit LONG INTEGER packen.

Code:
CLS

wert%(0) = 43
wert%(1) = 2
wert%(2) = 56
wert%(3) = 21
wert%(4) = 23

variable& = wert%(0)           'Werte in variable& packen
FOR a = 1 TO 4
 variable& = variable& + wert%(a) * (64 ^ a)
NEXT

FOR a = 0 TO 4                 'und wieder entpacken
 maske& = 0
 FOR b = a * 6 TO a * 6 + 5
  maske& = maske& + 2 ^ b
 NEXT
wertneu%(a) = (variable& AND maske&) / 64 ^ a
NEXT

FOR a = 0 TO 4                 'Anzeigen
 PRINT wertneu%(a)
NEXT


Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Keks



Anmeldungsdatum: 03.11.2007
Beiträge: 156
Wohnort: Dose

BeitragVerfasst am: 09.03.2008, 19:09    Titel: Antworten mit Zitat

Ah ok. Es geht halt um die Deklarierung, deswegen bringt das da oben nicht so viel.

Dann muss ich halt schreiben^^
_________________
RUN "brain.exe"
Datei nicht gefunden
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 09.03.2008, 21:26    Titel: Antworten mit Zitat

Nur zur Information: QB kennt keine Array()-Funktion wie beispielsweise PHP und VBScript; am ehensten eignet sich daher das Laden des Arrays mittels READ und DATA, also
Code:
DIM variable%(1 TO 5)

FOR i%=1 TO 5
  READ variable%(i%)
NEXT i%
DATA 43, 2, 56, 21, 23

Wenn es um grössere Datenmengen geht, solltest Du die Werte besser sogar ab einer separaten Datei einlesen, um den ohnehin knappen konventionellen Speicher nicht unnötig zu belasten!
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 10.03.2008, 13:52    Titel: Antworten mit Zitat

du könntest dafür einen extra Typ machen.
hmm ich hoff ich screib das jetzt richtig ist schon ne Weile her dass
ich das das letzte Mal gemacht hab^^

Code:

TYPE variable
 a as integer
 b as integer
 c as integer
end TYPE
declare function v( a as integer, b as integer, c as integer) as variable
dim x as variable
x=v(1,2,3)

function v( a as integer, b as integer, c as integer) as variable
v.a=a
v.b=b
v.c=c
end function


Source funktioniert wahrscheinlich nciht hab sitz hier grad im Büro und
hab Mittagspause kanns also nicht testen
verwundert
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Keks



Anmeldungsdatum: 03.11.2007
Beiträge: 156
Wohnort: Dose

BeitragVerfasst am: 10.03.2008, 15:36    Titel: Antworten mit Zitat

Ja, sowas wäre sehr praktisch.

Bei dem Code hängt es am as variable, da wird , , ) oder Ende der Anweisung erwartet. Lässt man es weg, funktionier die Funktion nicht.
_________________
RUN "brain.exe"
Datei nicht gefunden
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 10.03.2008, 17:13    Titel: Antworten mit Zitat

Keks hat Folgendes geschrieben:
Ja, sowas wäre sehr praktisch.

Bei dem Code hängt es am as variable, da wird , , ) oder Ende der Anweisung erwartet. Lässt man es weg, funktionier die Funktion nicht.

Nein. Die Zeile
Code:
DIM x as variable
muß drin sein, damit Du X als Variable vom Typ "Variable" ansprechen kannst (ein anderer Name für den Variablentyp wäre auch sinnvoller).
Außerdem braucht eine Function einen Rückgabewert. Sonst läßt sich das auch per Sub lösen.
Allerdings sollte man die Dimensionierung der Variable innerhalb der Sub vornehmen:
Code:
sub v( a as integer, b as integer, c as integer)
Dim x as variable
x.a=a
x.b=b
x.c=c
end sub

Wenn Du die Werte des UDT außerhalb der Funktion brauchst, empfiehlt es sich, den UDT als Referenz mit zu übergeben:


Code:
Type variable
   a As Integer
   b As Integer
   c As Integer
End Type
Declare sub v(ByRef x as variable, a as integer, b as integer, c as integer)
Dim x As variable
sub v(ByRef x as variable, a as integer, b as integer, c as integer)
x.a=a
x.b=b
x.c=c
End sub

v(x, 1, 2, 3)

Print x.a; x.b; x.c
sleep

_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Keks



Anmeldungsdatum: 03.11.2007
Beiträge: 156
Wohnort: Dose

BeitragVerfasst am: 10.03.2008, 18:16    Titel: Antworten mit Zitat

Funktioniert das bei dir?

Bei mir meckert Quickbasic bei "ByRef x as variable,".
_________________
RUN "brain.exe"
Datei nicht gefunden
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 10.03.2008, 18:20    Titel: Antworten mit Zitat

Lass mal das ByRef weg, das ist FreeBASIC-spezifisch.
Passender Ersatz in QB war glaub ich der Aufruf der Sub über CALL.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 10.03.2008, 18:36    Titel: Antworten mit Zitat

konnte man byref in QB nicht auch explizit angeben?
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 10.03.2008, 18:38    Titel: Antworten mit Zitat

Jedenfalls nicht in QBasic:
Referenz: ByRef
Referenz: ByRef hat Folgendes geschrieben:

Unterschiede zu QB:
Neu in FreeBASIC
[...]

_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 10.03.2008, 18:42    Titel: Antworten mit Zitat

Stimmt... Aber die Fehlermeldung dazu ist schon krass, hatte das gar nicht mehr so in Erinnerung durchgeknallt

_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 10.03.2008, 20:59    Titel: Antworten mit Zitat

Keks hat Folgendes geschrieben:
Funktioniert das bei dir?

Bei mir meckert Quickbasic bei "ByRef x as variable,".

Ach, QuickBasic...! Hättest Du frühersagen sollen. Ich habs mit FB gemacht, und da läuft es.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 10.03.2008, 22:52    Titel: Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
Hättest Du frühersagen sollen. Ich habs mit FB gemacht, und da läuft es.


Vielleicht hättest du auch einfach früher nachsehen sollenen, in welchem Unterforum du antwortest zwinkern

Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 11.03.2008, 08:58    Titel: Antworten mit Zitat

An dieser Stelle sei ausdrücklich auf

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html

Speziell Untertitel "Möglichkeitsgrenzen im Unterprogrammkonzept von QuickBASIC" beachten!

In FreeBasic wurden, wie mir in der dortigen Befehlsreferenz auch schon aufgefallen sind, diverse derartige Sprachkonstrukte hineingenommen.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 11.03.2008, 11:06    Titel: Antworten mit Zitat

So, hab jetzt nochmal nachgeschaut: Parameterübergabe "ByRef" ist bei QBasic der Standard. Das kann man also weglassen. Die Declaration "ByRef" gibt es in QBasic nicht. "ByVal" geht nur bei Unterprogrammen aus anderen Sprachen.

Hier das Programm unter QuickBasic getestet:
Code:
TYPE OwnVar
a AS INTEGER
b AS INTEGER
c AS INTEGER
END TYPE

DECLARE SUB ChangeOwnVar (X AS OwnVar, a AS INTEGER, b AS INTEGER, c AS INTEGER)
DIM X AS OwnVar

CALL ChangeOwnVar(X, 1, 2, 3)
PRINT X.a; X.b; X.c

'sleep     'Nur, wenn in FB mit -lang qb compiliert wird

SUB ChangeOwnVar (X AS OwnVar, a AS INTEGER, b AS INTEGER, c AS INTEGER)
X.a = a
X.b = b
X.c = c
END SUB


_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 11.03.2008, 13:39    Titel: Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
Die Declaration "ByRef" gibt es in QBasic nicht. "ByVal" geht nur bei Unterprogrammen aus anderen Sprachen.


Nicht ganz.

Code:
'***************************************************************************
' CALLREVA.BAS = Unterschied zwischen "Call by Reference" und "by Value"
' ============
' Dieses QBasic-Programm demonstriert anschaulich den Unterschied
' zwischen den beiden Parameteruebergabe-Methoden "Call by Reference" und
' "Call by Value".
'
' An die SUB quadrat wird die Variable a% als Parameter uebergeben. Einmal
' "by reference" und einmal "by Value" (Parameterwert in Klammern).  Die
' SUB quadriert den uebergebenen Parameter und zeigt das Ergebnis an.
' Wie man sieht, veraendert die SUB bei "Call by reference" den Wert der
' Parametervariablen a% des Hauptprogramms von 3 auf 9, waehrend sie bei
' "Call by Value"' unveraendert bleibt.
'
' (c) Thomas Antoni, 23.2.2005  -  www.qbasic.de
'***************************************************************************
'
DECLARE SUB quadrat (b%)
CLS
PRINT "Call by Reference"
PRINT "-----------------"
a% = 3
PRINT "Vor dem Aufruf der Sub hat a% im Hauptprogramm den Wert"; a%
CALL quadrat(a%)
     'Es wird die Adresse von a% an die SUB uebergeben
PRINT "Nach dem Aufruf der Sub hat a% im Hauptprogramm den Wert"; a%
'
PRINT
PRINT "Call by Value"
PRINT "-----------------"
a% = 3
PRINT "Vor dem Aufruf der Sub hat a% im Hauptprogramm den Wert"; a%
CALL quadrat((a%))
     'a% in Klammern => Es wird der Wert von a% uebergeben
PRINT "Nach dem Aufruf der Sub hat a% im Hauptprogramm den Wert"; a%
SLEEP
END

'
SUB quadrat (b%)
b% = b% ^ 2
PRINT b%
END SUB

_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 11.03.2008, 14:55    Titel: Antworten mit Zitat

Danke, Lutz, den Trick mit den Klammern kannte ich noch nicht verlegen . Dachte schon mit Schrecken, call by Value wäre in QB gar nicht möglich. grinsen

Noch ein Vorteil bei FreeBasic: Da muß ich mir nicht die ganzen Präfixe und Zusatzzeichen merken. ByVal, ByRef, as Integer usw ist doch viel verständlicher als ((x)), (x), %, &... happy
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.


Zuletzt bearbeitet von Elektronix am 11.03.2008, 14:57, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 11.03.2008, 14:56    Titel: Antworten mit Zitat

Übrigens derartige Probleme und Details wie BYVAL/BYREF werden ansonsten auch in meinem zuvor genannten Artikel ausführlich diskutiert.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz