|
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 |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 21.04.2015, 18:23 Titel: Modul-Ebenen-Code zu groß |
|
|
Hallo Gemeinde!
Wollte geschwind ein altes Programm von mir an eine eilige Geschichte anpassen. Schon kriege ich obigen Fehler. Verflixt auch!*
- Woher kommt das? Ausschließlich von QB oder hängt das auch mit dem Rechner zusammen auf dem ich das laufen ließ?
- Wie kann ich das auf die Schnelle bereinigen?
(In der Hilfe steht sub function einfügen. Habe aber keine Erfahrung wie das geht. Neu eingefügt habe ich nur eine gosub ... return mit einer Menge if-Anweisungen dazwischen. Wie krieg ich das im Handumdrehen und ohne neue Komplikationen geregelt?)
- Hilft es geremarkten Code zu löschen?
- Hilft es Rem Kommentare zu löschen?
Das Teil, das ich eingefügt habe sieht so aus:
Code: | Dolfa2000:
LWa$ = "Most Dick&Doof a2000=A3000"
IF dbf$ <> "" THEN RETURN
nb = vnb / 2
IF nb <= .041 THEN db = .3: RETURN
IF nb <= .064 THEN db = .275: RETURN
IF nb <= .089 THEN db = .24: RETURN
IF nb <= .114 THEN db = .185: RETURN
IF nb <= .138 THEN db = .17: RETURN
IF nb <= .163 THEN db = .16: RETURN
IF nb <= .188 THEN db = .15: RETURN
IF nb <= .214 THEN db = .14: RETURN
IF nb <= .283 THEN db = .135: RETURN
IF nb <= .261 THEN db = .13: RETURN
RETURN: END
Dolfa3000:
LWa$ = "Most Dick&Doof a3000"
IF dbf$ <> "" THEN RETURN
nb = vnb / 2
IF nb <= .041 THEN db = .3: RETURN
IF nb <= .064 THEN db = .275: RETURN
IF nb <= .089 THEN db = .24: RETURN
IF nb <= .114 THEN db = .185: RETURN
IF nb <= .138 THEN db = .17: RETURN
IF nb <= .163 THEN db = .16: RETURN
IF nb <= .188 THEN db = .15: RETURN
IF nb <= .214 THEN db = .14: RETURN
IF nb <= .283 THEN db = .135: RETURN
IF nb <= .261 THEN db = .13: RETURN
RETURN: END
Dolfa4000:
LWa$ = "Most Dick&Doof a4000"
IF dbf$ <> "" THEN RETURN
nb = vnb / 2
IF nb <= .041 THEN db = .4: RETURN
IF nb <= .064 THEN db = .35: RETURN
IF nb <= .089 THEN db = .285: RETURN
IF nb <= .114 THEN db = .24: RETURN
IF nb <= .138 THEN db = .205: RETURN
IF nb <= .163 THEN db = .185: RETURN
IF nb <= .188 THEN db = .175: RETURN
IF nb <= .214 THEN db = .155: RETURN
IF nb <= .283 THEN db = .15: RETURN
IF nb <= .261 THEN db = .145: RETURN
RETURN: END
Dolfa5000:
LWa$ = "Most Dick&Doof a5000"
IF dbf$ <> "" THEN RETURN
nb = vnb / 2
IF nb <= .041 THEN db = .435: RETURN
IF nb <= .064 THEN db = .375: RETURN
IF nb <= .089 THEN db = .315: RETURN
IF nb <= .114 THEN db = .27: RETURN
IF nb <= .138 THEN db = .24: RETURN
IF nb <= .163 THEN db = .215: RETURN
IF nb <= .188 THEN db = .185: RETURN
IF nb <= .214 THEN db = .165: RETURN
IF nb <= .283 THEN db = .16: RETURN
IF nb <= .261 THEN db = .15: RETURN
RETURN: END
Dolfa6000:
LWa$ = "Most Dick&Doof a6000"
IF dbf$ <> "" THEN RETURN
nb = vnb / 2
IF nb <= .041 THEN db = .45: RETURN
IF nb <= .064 THEN db = .4: RETURN
IF nb <= .089 THEN db = .345: RETURN
IF nb <= .114 THEN db = .295: RETURN
IF nb <= .138 THEN db = .255: RETURN
IF nb <= .163 THEN db = .23: RETURN
IF nb <= .188 THEN db = .21: RETURN
IF nb <= .214 THEN db = .19: RETURN
IF nb <= .283 THEN db = .18: RETURN
IF nb <= .261 THEN db = .165: RETURN
RETURN: END
Mostdx2000:
LWc$ = "Most Dick&Doof c2000=C3000"
IF dx$ <> "" THEN RETURN
nb = vnb / 2
IF nb <= .041 THEN dx = .405: RETURN
IF nb <= .064 THEN dx = .36: RETURN
IF nb <= .089 THEN dx = .3: RETURN
IF nb <= .114 THEN dx = .28: RETURN
IF nb <= .138 THEN dx = .28: RETURN
IF nb <= .163 THEN dx = .27: RETURN
IF nb <= .188 THEN dx = .27: RETURN
IF nb <= .214 THEN dx = .27: RETURN
IF nb <= .283 THEN dx = .27: RETURN
IF nb <= .261 THEN dx = .27: RETURN
RETURN: END
Mostdx3000:
LWc$ = "Most Dick&Doof c3000"
IF dx$ <> "" THEN RETURN
nb = vnb / 2
IF nb <= .041 THEN dx = .405: RETURN
IF nb <= .064 THEN dx = .36: RETURN
IF nb <= .089 THEN dx = .3: RETURN
IF nb <= .114 THEN dx = .28: RETURN
IF nb <= .138 THEN dx = .28: RETURN
IF nb <= .163 THEN dx = .27: RETURN
IF nb <= .188 THEN dx = .27: RETURN
IF nb <= .214 THEN dx = .27: RETURN
IF nb <= .283 THEN dx = .27: RETURN
IF nb <= .261 THEN dx = .27: RETURN
RETURN: END
Mostdx4000:
Ldx$ = "Most Dick&Doof c4000"
IF dx$ <> "" THEN RETURN
nb = vnb / 2
IF nb <= .041 THEN dx = .43: RETURN
IF nb <= .064 THEN dx = .4: RETURN
IF nb <= .089 THEN dx = .33: RETURN
IF nb <= .114 THEN dx = .3: RETURN
IF nb <= .138 THEN dx = .29: RETURN
IF nb <= .163 THEN dx = .29: RETURN
IF nb <= .188 THEN dx = .28: RETURN
IF nb <= .214 THEN dx = .28: RETURN
IF nb <= .283 THEN dx = .28: RETURN
IF nb <= .261 THEN dx = .28: RETURN
RETURN: END
Mostdx5000:
LWc$ = "Most Dick&Doof c5000"
IF dx$ <> "" THEN RETURN
nb = vnb / 2
IF nb <= .041 THEN dx = .53: RETURN
IF nb <= .064 THEN dx = .45: RETURN
IF nb <= .089 THEN dx = .375: RETURN
IF nb <= .114 THEN dx = .34: RETURN
IF nb <= .138 THEN dx = .31: RETURN
IF nb <= .163 THEN dx = .3: RETURN
IF nb <= .188 THEN dx = .29: RETURN
IF nb <= .214 THEN dx = .29: RETURN
IF nb <= .283 THEN dx = .285: RETURN
IF nb <= .261 THEN dx = .28: RETURN
RETURN: END
Mostdx6000:
LW$ = "Most Dick&Doof c6000"
IF dx$ <> "" THEN RETURN
nb = vnb / 2
IF nb <= .041 THEN dx = .545: RETURN
IF nb <= .064 THEN dx = .455: RETURN
IF nb <= .089 THEN dx = .39: RETURN
IF nb <= .114 THEN dx = .35: RETURN
IF nb <= .138 THEN dx = .33: RETURN
IF nb <= .163 THEN dx = .305: RETURN
IF nb <= .188 THEN dx = .295: RETURN
IF nb <= .214 THEN dx = .29: RETURN
IF nb <= .283 THEN dx = .285: RETURN
IF nb <= .261 THEN dx = .28: RETURN
RETURN: END
|
grüsse Nils
* mit FB wäre das wohl nicht passiert? _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 21.04.2015, 19:52 Titel: |
|
|
Bedenke die MS-DOS-typischen Einschränkungen vom Real Mode, insbesondere die 64 KB-Speichersegementierung, ebenso die Limitierung des konventionellen Speichers (da nützt der Einbau von zusätzlichen RAM-Riegel im Gigabyte-Bereich übrigens nichts - ist ein adressiertechnisches Limit!).
Der gezeigte Code passt wieder einmal wunderbar zu
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Anfaengerfehler.html
d.h. so ein richtig typischer Copy&Paste-Code. Lösung also, wenn es in die 64 KB hineinpassen soll: All diese Zahlen zunächst einmal in Arrays nehmen, mittels binärer Suche das Interval ausfindig machen, wo sich nb befindet, um dann dx entsprechend setzen zu können. Um auch die vielen GOSUB-Labels eliminieren zu können das Array noch zweidimensional, so dass der zweite Index den passenden Mostdx?000-Block selektiert.
Array aus DATA-Zeilen zu Beginn laden oder bei grösserem Umfang ab Datei. In FB natürlich eine Array-Konstante möglich.
=> In dem Sinn ist also ein passendes Refactoring Deines Codes sehr sinnvoll. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 22.04.2015, 09:32 Titel: |
|
|
Moin dreael!
Danke für Deine Hinweise! Leider helfen die mir auf die Schnelle nicht weiter. Eines ist doch klar: Das ist ein gewachsenes Programm in das immer wieder Code eingefügt worden ist.
Schade, dass Du auf meine expliziten Fragen nicht eingegangen bist. Das hätte mir weitergeholfen.
grüsse nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 22.04.2015, 10:52 Titel: |
|
|
Zitat: | Danke für Deine Hinweise! Leider helfen die mir auf die Schnelle nicht weiter. Eines ist doch klar: Das ist ein gewachsenes Programm in das immer wieder Code eingefügt worden ist.
Schade, dass Du auf meine expliziten Fragen nicht eingegangen bist. Das hätte mir weitergeholfen. |
Du musst auch "uns" Helfer verstehen. Es ist nicht gerade einfach zu verstehen was dein Programmschnipsel eigentlich bewirken soll, da er total unkommentiert, unstrukuriert, umständlich und altmodisch ist.
Grundsätzlich sehe ich aber auf den ersten Blick, dass man das ganze auch in weniger als 50 Zeilen schreiben könnte. Man kann die Daten in eine oder mehrere externe Dateien verlagern und all die Vergleiche innerhalb einer Schleife laufen lassen. Immer dann, wenn sich die beinahe gleiche Zeile mehr als 5 mal wiederholt, ist Verbesserungsbedarf da!
Code: | Function HoleDWert(lw As String,nb As Single) As Single
Open "QBTest.txt" For Input As #1
Do Until Eof(1)
Input #1, a$,b$
If a$= lw Then
Do Until Eof(1)
Input #1, a$,b$
If Val(a$)= 0 Then
Close #1
Exit Function
EndIf
aval! = Val(a$)
bval! = Val(b$)
If nb <= aval! Then
HoleDWert = bval!
Close #1
Exit Function
EndIf
Loop
EndIf
Loop
Close #1
End Function
Dim lwblablub As String
Dim nb As Single
Dim vnb As Single
Dim d As Single
lwblablub = "Most Dick&Doof a2000=A3000"
vnb = .3
nb = vnb / 2
Print HoleDWert(lwblablub,nb)
Print
Print
lwblablub = "Most Dick&Doof c2000=C3000"
Print HoleDWert(lwblablub,nb)
Sleep
End |
Die Datei könnte so sein.
QTest.txt
Code: | "Most Dick&Doof a2000=A3000",0
0.041, 0.3
0.064, 0.275
0.089, 0.24
0.114, 0.185
0.138, 0.17
0.163, 0.16
0.188, 0.15
0.214, 0.14
0.283, 0.135
0.261, 0.13
"Most Dick&Doof a3000",0
0.041, 0.3
0.064, 0.275
0.089, 0.24
0.114, 0.185
0.138, 0.17
0.163, 0.16
0.188, 0.15
0.214, 0.14
0.283, 0.135
0.261, 0.13
"Most Dick&Doof a4000",0
0.041, 0.4
0.064, 0.35
0.089, 0.285
0.114, 0.24
0.138, 0.205
0.163, 0.185
0.188, 0.175
0.214, 0.155
0.283, 0.15
0.261, 0.145
"Most Dick&Doof a5000",0
0.041, 0.435
0.064, 0.375
0.089, 0.315
0.114, 0.27
0.138, 0.24
0.163, 0.215
0.188, 0.185
0.214, 0.165
0.283, 0.16
0.261, 0.15
"Most Dick&Doof a6000",0
0.041, 0.45
0.064, 0.4
0.089, 0.345
0.114, 0.295
0.138, 0.255
0.163, 0.23
0.188, 0.21
0.214, 0.19
0.283, 0.18
0.261, 0.165
"Most Dick&Doof c2000=C3000",1
0.041, .405
0.064, .36
0.089, .3
0.114, .28
0.138, .28
0.163, .27
0.188, .27
0.214, .27
0.283, .27
0.261, .27
"Most Dick&Doof c3000",1
0.041, .405
0.064, .36
0.089, .3
0.114, .28
0.138, .28
0.163, .27
0.188, .27
0.214, .27
0.283, .27
0.261, .27
"Most Dick&Doof c4000",2
0.041, .43
0.064, .4
0.089, .33
0.114, .3
0.138, .29
0.163, .29
0.188, .28
0.214, .28
0.283, .28
0.261, .28
"Most Dick&Doof c5000",1
0.041, .53
0.064, .45
0.089, .375
0.114, .34
0.138, .31
0.163, .3
0.188, .29
0.214, .29
0.283, .285
0.261, .28
"Most Dick&Doof c6000",3
0.041, .545
0.064, .455
0.089, .39
0.114, .35
0.138, .33
0.163, .305
0.188, .295
0.214, .29
0.283, .285
0.261, .28 |
|
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 22.04.2015, 11:05 Titel: Prozeduren / Funktionen nutzen |
|
|
Eine Sache die wir dir immer wieder sagen: nutze Sub's und Function's, denn damit reduzierst du die Fehler in deinen Programmen.
Prozeduren( mit Rückgabewert Function bzw ohne=Sub) ermöglichen es dir erst sauberen Code zu schreiben. Ohne Prozeduren kannst du auch gleich in Assembler programmieren. Du kannst damit viel besser das Programm in kleine Häppchen unterteilen, die sich gegenseitig nicht ungewollt beinflussen können, sondern nur wenn und wie du es willst. Das steuert man dann über die Paramater.
Und bitte schau dir Nochmal "Type" an.
Das hier mal als Beispiel:
Code: | Type TPunkt
x As Single
y As Single
End Type
Type TViereck
mitte As TPunkt
ecken(1 To 4) As TPunkt
End Type
Function ErzeugeRechteck(m As TPunkt,h As Single,b As Single) As TViereck
Dim rechteck As TViereck
rechteck.mitte = m
rechteck.ecken(1).x = m.x + h / 2
rechteck.ecken(1).y = m.y + b / 2
rechteck.ecken(2).x = m.x - h / 2
rechteck.ecken(2).y = m.y + b / 2
rechteck.ecken(3).x = m.x - h / 2
rechteck.ecken(3).y = m.y - b / 2
rechteck.ecken(4).x = m.x + h / 2
rechteck.ecken(4).y = m.y - b / 2
ErzeugeRechteck = rechteck
End Function
Function ErzeugeQuadrat(m As TPunkt,l As Single) As TViereck
Dim quadrat As TViereck
quadrat.mitte = m
quadrat.ecken(1).x = m.x + l / 2
quadrat.ecken(1).y = m.y + l / 2
quadrat.ecken(2).x = m.x - l / 2
quadrat.ecken(2).y = m.y + l / 2
quadrat.ecken(3).x = m.x - l / 2
quadrat.ecken(3).y = m.y - l / 2
quadrat.ecken(4).x = m.x + l / 2
quadrat.ecken(4).y = m.y - l / 2
ErzeugeQuadrat = Quadrat
End Function
Sub ZeichneViereck(ByVal viereck As TViereck)
Dim i As Integer
Dim lb As Integer
Dim ub As Integer
lb = LBound(viereck.ecken)
ub = UBound(viereck.ecken)
For i = lb+1 To ub
Line (viereck.ecken(i-1).x,viereck.ecken(i-1).y) -(viereck.ecken(i).x,viereck.ecken(i).y)
Next
Line (viereck.ecken(lb).x,viereck.ecken(lb).y) -(viereck.ecken(ub).x,viereck.ecken(ub).y)
End Sub
Function Koordinate(ByVal punkt As TPunkt) As String
Dim ko As String
ko = "(" + Str$(punkt.x) + "," + Str$(punkt.y) +")"
Koordinate = ko
End Function
Function KoordinatenViereck(ByVal viereck As TViereck) As String
Dim i As Integer
Dim koordinaten As String
koordinaten = "mitte"+Koordinate(viereck.mitte)
For i = LBound(viereck.ecken) To UBound(viereck.ecken)
koordinaten = koordinaten + ","+ Koordinate(viereck.ecken(i))
Next
KoordinatenViereck = koordinaten
End Function
Sub SkaliereViereck(ByRef viereck As TViereck, faktor As Single)
Dim i As Integer
For i = LBound(viereck.ecken) To UBound(viereck.ecken)
viereck.ecken(i).x = (viereck.ecken(i).x - viereck.mitte.x) * faktor + viereck.ecken(i).x
viereck.ecken(i).y = (viereck.ecken(i).y - viereck.mitte.y) * faktor + viereck.ecken(i).y
Next
End Sub
Screen 12
Dim viereck As TViereck
Dim mittelpunkt As TPunkt
mittelpunkt.x=200
mittelpunkt.y=100
viereck = ErzeugeRechteck(mittelpunkt,20,50)
ZeichneViereck viereck
Print KoordinatenViereck(viereck)
SkaliereViereck viereck,0.5
ZeichneViereck viereck
Print KoordinatenViereck(viereck)
viereck = ErzeugeQuadrat(mittelpunkt,100)
ZeichneViereck viereck
sleep
END |
Zuletzt bearbeitet von RockTheSchock am 22.04.2015, 12:45, insgesamt 3-mal bearbeitet |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 22.04.2015, 11:54 Titel: |
|
|
Hi RockTheShock!
Danke für Deinen Beitrag und Deinen Code.
Mir geht es jetzt nicht darum einen Code elegant zu gestalten, sondern sehr kurzfristig das geänderte Prog laufen zu sehen.
Ich dachte ich hätte das zum Ausdruck gebracht als ich den fred öffnete.
- Woher kommt das? Ausschließlich von QB oder hängt das auch mit dem Rechner zusammen auf dem ich das laufen ließ?
- Wie kann ich das auf die Schnelle bereinigen?
- Hilft es geremarkten Code zu löschen?
- Hilft es Rem Kommentare zu löschen?
Ich schaue mir Dienen Code gerne an und werde daraus lernen. Jetzt -auf die Schnelle- kann ich da nichts übernehmen, denn ich muß hauptsächlich darauf achten, dass mein prog die richtigen Ergebnisse liefert. Werde also zunächst ein gosub einfügen, dann die Remarks löschen und danach falls erforderlich überflüssigen code.
grüsse _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 22.04.2015, 12:58 Titel: |
|
|
Die Fehlermeldung sagt exakt was das Problem ist. Wenn du QuickBasic 4.5 nutzt (nicht QBASIC 1.1) dann kannst du dein Programm in Module aufteilen. Ansonsten kannst du nur versuchen die Größe des Moduls zu verringern.
Jedes Modul kann maximal 64KB groß sein.
Code: | IF nb <= .041 THEN db = .3: RETURN
IF nb <= .064 THEN db = .275: RETURN
IF nb <= .089 THEN db = .24: RETURN
IF nb <= .114 THEN db = .185: RETURN
IF nb <= .138 THEN db = .17: RETURN
IF nb <= .163 THEN db = .16: RETURN
IF nb <= .188 THEN db = .15: RETURN
IF nb <= .214 THEN db = .14: RETURN
IF nb <= .283 THEN db = .135: RETURN
IF nb <= .261 THEN db = .13: RETURN
|
Das hier muss deutlich kürzer gehen!
Für jeden Abschnitt Irgendwie so:
Code: |
Dolfa2000:
LWa$ = "Most Dick&Doof a2000=A3000"
If dbf$ <> "" THEN Return
nb = vnb / 2
db=HoleDWert(LWa$ ,nb)
Return: END
|
Anderer Abschnitt:
Code: |
Mostdx2000:
LWc$ = "Most Dick&Doof c2000=C3000"
IF dx$ <> "" THEN RETURN
nb = vnb / 2
dx=HoleDWert(LWc$ ,nb):Return
RETURN: END
|
|
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
Verfasst am: 22.04.2015, 13:29 Titel: Re: Modul-Ebenen-Code zu groß |
|
|
Nils hat Folgendes geschrieben: | - Woher kommt das? Ausschließlich von QB oder hängt das auch mit dem Rechner zusammen auf dem ich das laufen ließ? |
Man kann mehrere Schuldige finden:
1. Dein hässlicher Programmierstil, der eine Menge überflüssigen Code erzeugt und dadurch das Programm unnötig aufbläht.
2. Die Modul-Größenbeschränkung von QB, die mit Alter von QB selbst begründet ist (damals war RAM noch mangelware).
Nils hat Folgendes geschrieben: | - Wie kann ich das auf die Schnelle bereinigen?
(In der Hilfe steht sub function einfügen. Habe aber keine Erfahrung wie das geht. Neu eingefügt habe ich nur eine gosub ... return mit einer Menge if-Anweisungen dazwischen. Wie krieg ich das im Handumdrehen und ohne neue Komplikationen geregelt?) |
Am schnellsten geht es wohl wenn du FreeBasic verwendest, um den Code zu kompilieren. Es ist zwar unmöglich exakt zu beurteilen ob es dabei Probleme geben wird weil du ja nur ein kleines Code-Stückchen hier veröffentlicht hast, aber wenn der rest des Codes auch in etwa so ausschaut wie der veröffentlichte, dann sollten keine/sehr wenige Änderungen am Source nötig sein.
Aufwendiger, aber wegen der hässlichen Struktur definitiv sinnvoll, wäre es den Code zu restrukturieren, also u.a. in Subs/Functions und/oder Module aufzuteilen. Wie das geht findest du großteils in unserem Wiki (z.B. http://www.freebasic-portal.de/tutorials/anfaengerkurs-4-unterprogramme-10.html). Außerdem gibt es ja auch noch die sehr gute in QB integrierte Hilfe.
Nils hat Folgendes geschrieben: | - Hilft es geremarkten Code zu löschen?
- Hilft es Rem Kommentare zu löschen? |
Kommentare sind Kommentare, egal ob da Code oder sonst irgendetwas drin steht, es wird vom Compiler/Interpreter ignoriert. (Meta-befehle wie etwa "REM $INCLUDE ..." sind keine Kommentare ansich, auch wenn sie mit REM anfangen). (Also nein, es hilft nicht Kommentare zu löschen)
Nils hat Folgendes geschrieben: | * mit FB wäre das wohl nicht passiert? |
In der Tat. Wie heißts so schön: Selbsterkenntnis is der erste Weg zur Besserung. Wär nur schön wenn man das dann auch gleich in Taten umsetzen würde _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 22.04.2015, 14:04 Titel: |
|
|
Hallo Nils!
"Auf die Schnelle" könntest du eigentlich nur versuchen, den eingefügten Code in ein eigenes Modul zu packen und die Module über "CHAIN" zu verketten, wobei du dann für eine geeignete Ablaufsteuerung sorgen müsstest, etwa in dieser Art:
mod1.bas: Code: | COMMON flag%
IF flag% = 1 THEN GOTO weiter
CLS
PRINT "modul1.1"
CHAIN "c:\mod2.bas"
weiter:
PRINT "modul1.2"
|
mod2.bas: Code: | COMMON flag%
PRINT "modul2"
flag% = 1
CHAIN "c:\mod1.bas"
|
Das hilft dir dann dabei, die Übersicht komplett zu verlieren...
Gruß
grindstone
EDIT:
Nils hat Folgendes geschrieben: | * mit FB wäre das wohl nicht passiert? | Das kannst du selber ausprobieren. Installiere FB und compiliere dein Programm mit "fbc -lang qb -s console". Meiner Erfahrung nach müsste das problemlos funktionieren. _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 22.04.2015, 14:40 Titel: |
|
|
Zitat: | den eingefügten Code in ein eigenes Modul zu packen und die Module über "CHAIN" zu verketten |
Genau das ist eigentlich der falsche Ansatz! Du musst Gosub / Return blöcke in SUBs verwandeln, die du dann sicher in ein anderes Modul auslagern kannst. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 22.04.2015, 15:01 Titel: |
|
|
Meiner Information nach ist das aber nur mit QuickBasic möglich. Bei QBasic geht Verkettung nur mit CHAIN oder RUN.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2509 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 22.04.2015, 20:08 Titel: Re: Prozeduren / Funktionen nutzen |
|
|
RockTheSchock hat Folgendes geschrieben: | Eine Sache die wir dir immer wieder sagen: nutze Sub's und Function's, denn damit reduzierst du die Fehler in deinen Programmen. |
Hier von mir ebenfalls ein speziell für QB geschriebener Artikel:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html
Gilt natürlich für FreeBasic auch bzw. dort sind viel dort diskutierte Sachen, die in QB noch nicht möglich sind, in FB möglich.
RockTheSchock hat Folgendes geschrieben: | Und bitte schau dir Nochmal "Type" an. |
TYPE ist die wichtige Vorstufe für die objektorientierte Software-Entwicklung, also wenn die SUBs und FUNCTIONs als sog. Methoden zum Objekt gehören.
In QB sind nur eigenständige SUBs und FUNCTIONs sowie losgelöste TYPE-Strukturen möglich, in FreeBasic ist Objektorientierung inzwischen in vollen Zügen möglich, d.h. es sind fast alle wichtigen Paradigmen vorhanden.
@Nils: Am besten stellst Du einmal die komplette Software im jetzigen Zustand als Download im Quelltext zur Verfügung und versuchst den Zweck der Software, also die zu lösende Aufgabe (von QB einmal komplett losgelöst!) wie ein Pflichtenheft zu formulieren, so dass Du damit eine Firma beauftragen könntest.
Sobald alles vorliegt, können wir Dich bei der Verbesserung entsprechend etwas coachen, d.h. durch den Entwicklungsprozess führen. Das heisst: Ausführen, d.h. erledigen musst Du es, aber wir können Dir jeweils den passenden nächsten Schritt empfehlen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1215 Wohnort: Ruhrpott
|
Verfasst am: 23.04.2015, 10:03 Titel: |
|
|
@Nils: Es wäre auch gut zu wissen, ob du QBasic (den Interpreter) oder QuickBasic (den Compiler) verwendest.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
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.
|
|