 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 24.07.2006, 17:51 Titel: Variable sichern |
|
|
ich möchte eine Variable so festlegen, dass man sie ab einer bestimmten stelle im programm nicht mehr ändern kann.
gibt es da einen befehl oder so? |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 24.07.2006, 18:21 Titel: |
|
|
Ob es mitten im Programm geht weiss ich nicht.
Allgemein geht Const.
QBasic 1.1 Online Hilfe hat Folgendes geschrieben: | Code: | Vereinbart symbolische Konstanten.
CONST Konstantenname = Ausdruck [,Konstantenname = Ausdruck]...
■ Konstantenname Der Name der Konstante. Der Name kann aus bis zu 40
Zeichen bestehen und muß mit einem Buchstaben beginnen.
Zulässige Zeichen sind A-Z, 0-9, und der Punkt (.).
■ Ausdruck Ein Ausdruck, der der Konstanten zugewiesen wird.
Der Ausdruck kann aus Literalen (z.B. 1.0), anderen
Konstanten, beliebigen arithmetischen oder logischen
Operatoren (außer Exponentiation (^)) oder nur aus
einer Zeichenfolge von Literalen bestehen.
Beispiel:
CONST PI = 3.141593
INPUT "Radius des Kreises: "; r
PRINT "Fläche = "; PI * r ^ 2 |
|
Kannst du bitte konkretere Angeben machen?
Was willst du genau?
Wie sieht der Code aus? _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
Dark_King

Anmeldungsdatum: 24.07.2006 Beiträge: 109 Wohnort: Neustetten - BW
|
Verfasst am: 24.07.2006, 18:47 Titel: |
|
|
bin dabei ein programm zu schreiben um sudoku zu lösen
Code: |
dim v(9,9) as integer
start:
INPUT "weiviele zahlen sind gegeben?"; zahlen
for zahlen = 1 to zahlen
input "welche position hat die zahl? (schreibe x,y)"; x,y
teil2:
INPUT "welchen wert hat die zahl?"; v(x, y)
if v(x, y) < 1 op v(x,y) > 9 then goto teil 2
'const v(x,y) = v(x,y)
next zahlen
cls
for y = 1 to 9
for x = 1 to 9
locate x, y: print using "#"; v(x,y)
next x
next y
|
des const hilft mir eigentlich schon weiter nur die klammern werden leider net anerkannt. gibt es nicht noch einen andern weg eine konstante festzulegen oder die klammern doch mit einzubaun? |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 24.07.2006, 19:06 Titel: |
|
|
Hi,
so würde ich das in FreeBASIC lösen(ungefähr..). Code: | 'Ä=Ž , Ö=™ , Ü=š ; ä=„ , ö=”, ü=� , ß=á ,§=õ , ©=¸
Option Explicit
Function SemiConst(New As String="", Admin As String="") As String
Static Fixed, Value As String
If Admin="DerDarfDas" Then 'AdminRechte vorhanden
Value=New 'Wert übernehmen
Fixed=1=1 '..und fixieren
Else
If Not Fixed Then 'noch nicht aufgerufen, dann Wert festlegen
Value=New 'Value="" ist kein Kriterium, kann ja Absicht sein
Fixed=1=1 'Flag setzen..
End If
End If
Function=Value 'Wert zurückgeben
End Function
?"SemiConst.Bas ¸2006 by ytwinky, MD"
?"SemiConst=<";SemiConst("Loose");">"
?"SemiConst=<";SemiConst("Fixed");">"
?"SemiConst=<";SemiConst("Changed", "DerDarfDas");">"
?"Getestet mit FB0.16bSE mit FBIde 0.47testing"
Sleep |
Geht vllt(mit kleinen Änderungen) auch unter QB 4.5(Function und Static gibts da auch)
As String muß ggfs durch $ oder so ersetzt werden, das Prinzip sollte aber klar werden..
btw:
Wenn Value nicht mehr geändert werden soll, dann einfach die Admin-Sache rauswerfen..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 25.07.2006, 08:57 Titel: |
|
|
ytwinky, du bringst mich auf eine Gute Idee.
Ich melde micht, wenn ich die Idee Codiert habe.
Edit:
So:
Code: | DECLARE SUB USet (vari1 AS ANY, vari2!)
DECLARE FUNCTION UGet! (vari1 AS ANY)
DECLARE SUB ULock (vari AS ANY)
DECLARE SUB UUnLock (vari AS ANY)
TYPE lockable
value AS INTEGER
status AS INTEGER
END TYPE
DIM a AS lockable
PRINT "Wir schreiben 25 in die nicht gesperrte Variabel a"
USet a, 25
PRINT "Wir lesen die Variabel a"
PRINT UGet(a)
PRINT
PRINT "Wir sperren die Variabel a"
ULock a
PRINT "Wir schreiben 100 in die gesperrte Variabel a"
USet a, 100
PRINT "Wir lesen die Variabel a"
PRINT UGet(a)
PRINT
PRINT "Wir sperren die Variabel"
UUnLock a
PRINT "Wir schreiben 100 in die entperrte Variabel a"
USet a, 100
PRINT "Wir lesen die Variabel a"
PRINT UGet(a)
SLEEP
FUNCTION UGet (vari1 AS lockable)
UGet = vari1.value
END FUNCTION
SUB ULock (vari AS lockable)
vari.status = -1
END SUB
SUB USet (vari1 AS lockable, vari2)
IF NOT vari1.status THEN vari1.value = vari2
END SUB
SUB UUnLock (vari AS lockable)
vari.status = 0
END SUB |
Edit:
FB nach QB Code _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Zuletzt bearbeitet von Michael Frey am 25.07.2006, 12:23, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 25.07.2006, 10:36 Titel: |
|
|
Und für Sparfüchse wie mich ist hier die Billiglösung:
Werte die, die nicht verändert werden dürfen, mach einfach negativ.
Willst du einen Wert verändert, mach vorher diese Abfrage:
Code: | IF v(x, y) >= 0 THEN v(x, y) = neuerWert |
Willst du den Wert ausgeben, benutze immer ABS, das macht aus negativen positive Zahlen und positive Zahlen bleiben positiv (ist halt die Betragsfunktion):
Diese Variante geht halt bei Sudoku noch gut, weil du ja eigentlich nur positive Zahlen in deinem Feld hast. Der Bereich ist sogar nur auf Zahlen von 1-9 begrenzt. Da könnte man sogar noch viel mehr rumkodieren. Aber das ist auch irgendwie billig und unschön.. .. in meinen Augen. _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 25.07.2006, 11:16 Titel: |
|
|
Es ging mir nicht um eine Billiglösung, sondern ums Prinzip..
..ich denke, Michael Frey hat das verstanden.
Ich habe als Typ String gewählt, weil er für diese Zwecke der Vielseitigste ist.
@Michael Frey:
Ich habe extra geschrieben, daß ich das ungefähr so lösen würde..
..QB4.5/PDS habe ich zwar installiert, aber nur, um Sachen nachzusehen, nicht um damit zu arbeiten..
Deshalb weiß ich auch nicht so genau über die Möglichkeiten von QB Bescheid.
Zusammenfassung:Aha, prinzipiell ist es möglich, eine Variable im Programm konstant zu machen..
(..und auch wieder variabel, und.. und..)
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
|
Nach oben |
|
 |
SpionAtom
Anmeldungsdatum: 10.01.2005 Beiträge: 395
|
Verfasst am: 25.07.2006, 12:40 Titel: |
|
|
ytwinky hat Folgendes geschrieben: | Es ging mir nicht um eine Billiglösung, sondern ums Prinzip.. |
Ja und mir gings um die Billiglösung, funktioniert einwandfrei bei Sudoku
Aber ihr habt schon recht. Das von Michael Frey gefällt mir auch am besten. _________________ Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht. |
|
Nach oben |
|
 |
|
|
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.
|
|