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:

Modul-Ebenen-Code zu groß

 
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
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 21.04.2015, 17:23    Titel: Modul-Ebenen-Code zu groß Antworten mit Zitat

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 verlegen

* mit FB wäre das wohl nicht passiert? zwinkern
_________________
Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
dreael
Administrator


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

BeitragVerfasst am: 21.04.2015, 18:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 22.04.2015, 08:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 22.04.2015, 09:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 22.04.2015, 10:05    Titel: Prozeduren / Funktionen nutzen Antworten mit Zitat

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, 11:45, insgesamt 3-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 191

BeitragVerfasst am: 22.04.2015, 10:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 22.04.2015, 11:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 949
Wohnort: Austria

BeitragVerfasst am: 22.04.2015, 12:29    Titel: Re: Modul-Ebenen-Code zu groß Antworten mit Zitat

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? zwinkern

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 lächeln
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 22.04.2015, 13:04    Titel: Antworten mit Zitat

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... zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 22.04.2015, 13:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 22.04.2015, 14:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
dreael
Administrator


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

BeitragVerfasst am: 22.04.2015, 19:08    Titel: Re: Prozeduren / Funktionen nutzen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 23.04.2015, 09:03    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
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