| 
				
					|  | 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, 17: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: 2531
 Wohnort: Hofen SH (Schweiz)
 
 | 
			
				|  Verfasst am: 21.04.2015, 18: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, 08: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, 09: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, 10: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, 11:45, insgesamt 3-mal bearbeitet
 |  |  
		| Nach oben |  |  
		|  |  
		| Nils 
 
 
 Anmeldungsdatum: 24.03.2006
 Beiträge: 191
 
 
 | 
			
				|  Verfasst am: 22.04.2015, 10: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, 11: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: 958
 Wohnort: Austria
 
 | 
			
				|  Verfasst am: 22.04.2015, 12: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: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 22.04.2015, 13: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:
 
 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. 	  | Nils hat Folgendes geschrieben: |  	  | * mit FB wäre das wohl nicht passiert? | 
 _________________
 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, 13: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: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 22.04.2015, 14: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: 2531
 Wohnort: Hofen SH (Schweiz)
 
 | 
			
				|  Verfasst am: 22.04.2015, 19: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: 1283
 Wohnort: Ruhrpott
 
 | 
			
				|  Verfasst am: 23.04.2015, 09: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.
 
 |  |