GOTO oder nicht GOTO
Übersicht

HOT-BITGastBetreff: GOTO oder nicht GOTO |
![]() Antworten mit Zitat |
|
---|---|---|
Hi !
Da hier fast jeder schreit: *GOTO ist böse*, möchte ich diejenigen, die das am lautesten schreien, bitten, dieses Code-Schnipsel so zu ändern, daß man kein GOTO mehr braucht. Möchte ja auch noch was lernen ! Code: [AUSKLAPPEN] ;neue Münze setzen
If MilliSecs()-muenzzeit>10000 .eisprung brx=Rand(0,12):bry=Rand(0,12) For mue.muenzen=Each muenzen If mue\x=brx And mue\y=bry brzz=1:Exit Next brmit=brmit+1 If brzz And brmit<5 brzz=0:Goto eisprung If brzz brzz=0:brmit=0: Goto zweisprung If map(brx,bry) mue.muenzen=New muenzen mue\x=brx mue\y=bry mue\stat=Rand(0,12) mue\grossklein=1 mue\zeit=MilliSecs() muenzzeit=MilliSecs() EndIf brzz=0: brmit=0 .zweisprung EndIf Es geht darum: Es wird ein beliebiges Map-Teil ausgesucht, und dahingehend geprüft, ob schon eine Münze da drauf ist. Falls dem so ist, wird das wiederholt. Und zwar bis 5 mal. Wenn keine Münze auf so einem ausgewähltem Feld ist, dann wird ein neuer Type erstellt, und der Programm-Teil verlassen. Wenn aber eine Münze drauf sein sollte, muß der Programm-Teil auch nach den 5 Versuchen verlassen werden. Danke, Toni |
||
![]() |
Suco-XBetreff: .... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;neue Münze setzen If MilliSecs()-muenzzeit>10000 anzahl = 0 repeat brx=Rand(0,12):bry=Rand(0,12) For mue.muenzen=Each muenzen If mue\x=brx And mue\y=bry brzz=1 Exit Endif Next anzahl = anzahl+brzz If map(brx,bry) and brzz=0 mue.muenzen=New muenzen mue\x=brx mue\y=bry mue\stat=Rand(0,12) mue\grossklein=1 mue\zeit=MilliSecs() muenzzeit=MilliSecs() anzahl = 5 EndIf brzz=0: brmit=0 until anzahl >=5 EndIf So, letztes Edit das war. bye |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
- Zuletzt bearbeitet von Suco-X am Mo, Apr 12, 2004 19:29, insgesamt 4-mal bearbeitet
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;neue Münze setzen
... Falls ich ihn richtig verstanden habe - bin allerdings noch nicht ganz wach .
If MilliSecs()-muenzzeit>10000 For brmit = 1 to 5 brx=Rand(0,12):bry=Rand(0,12) For mue.muenzen=Each muenzen If mue\x=brx And mue\y=bry brzz=1:Exit Next If brzz = 0 Then Exit brzz = 0 Next If map(brx,bry) And brzz = 0 mue.muenzen=New muenzen mue\x=brx mue\y=bry mue\stat=Rand(0,12) mue\grossklein=1 mue\zeit=MilliSecs() muenzzeit=MilliSecs() EndIf brzz=0: brmit=0 EndIf P.S: EIsprung?! ^^ |
||
MrKeks.net |
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hallo !
Mir persönlich gefällt der Code von Inarie am besten. Hier habe ich mal die Vergleiche zusammen gestellt : Bei schlechtesten Bedingungen, also wenn überall schon besetzt ist. Code: [AUSKLAPPEN] Graphics 800,600
SeedRnd MilliSecs() Type muenzen Field x,y End Type Dim map(12,12) For i=0 To 12:For j=0 To 12:map(i,j)=1:Next:Next mue.muenzen=New muenzen mue\x=4:mue\y=4 brx=4:bry=4 zeit0=MilliSecs() For o=1 To 10000000 .eisprung brx=Rand(0,12):bry=Rand(0,12) For mue.muenzen=Each muenzen If mue\x=brx And mue\y=bry brzz=1:Exit Next brmit=brmit+1 If brzz And brmit<5 brzz=0:Goto eisprung If brzz brzz=0:brmit=0: Goto zweisprung If map(brx,bry) EndIf brmit=0 .zweisprung Next Print "Hot-Bit : " + (MilliSecs()-zeit0) zeit1=MilliSecs() For o=1 To 10000000 anzahl = 0 Repeat brx=Rand(0,12):bry=Rand(0,12) For mue.muenzen=Each muenzen If mue\x=brx And mue\y=bry brzz=1 Exit EndIf Next anzahl = anzahl+brzz If map(brx,bry) And brzz=0 anzahl = 5 EndIf brzz=0: brmit=0 Until anzahl <=5 Next Print "Suco : " + (MilliSecs()-zeit1) zeit2=MilliSecs() For o=1 To 10000000 ueberspringen = 0 vonvorne = 1 While vonvorne=1 And ueberspringen = 0 vonvorne = 0 brx=Rand(0,12):bry=Rand(0,12) For mue.muenzen=Each muenzen If mue\x=brx And mue\y=bry brzz=1:Exit Next brmit=brmit+1 If brzz And brmit<5 brzz=0 : vonvorne = 1 If brzz brzz=0:brmit=0 : ueberspringen = 1 If ueberspringen = 0 If map(brx,bry) EndIf brzz=0: brmit=0 End If Wend Next Print "ST : " + (MilliSecs()-zeit2) zeit3=MilliSecs() For o=1 To 10000000 For brmit = 1 To 5 brx=Rand(0,12):bry=Rand(0,12) For mue.muenzen=Each muenzen If mue\x=brx And mue\y=bry brzz=1:Exit Next If brzz = 0 Then Exit brzz = 0 Next If map(brx,bry) And brzz = 0 EndIf brzz=0: brmit=0 Next Print "Inarie : " + (MilliSecs()-zeit3) Print:Print "fertig" WaitKey End Jetzt kann man mal sehen, was etwas bringt, und was nicht ! Bei 10 Millionen Durchläufen. Sagt eure Meinung zur Lesbarkeit und Schnelligkeit der Codes ! Toni |
||
- Zuletzt bearbeitet von HOT-BIT am So, Apr 11, 2004 12:12, insgesamt einmal bearbeitet
![]() |
Abrexxes |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich schliesse mich HOT-BIT an,das ewige Gelaber um GOTO hat eher Kultkarakter als das es was mit gutem oder schlechtem Proggen zu tun hat.
Goto war zu C64 Zeiten notwendig und eine gute Hilfe.Ich will es nicht missen nur weil einige es UNCOOL finden. |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi !
Bei mir, auf einem 2600er, braucht das so um 2000 Millisecs() Bitte, wenn es geht, Ergebnisse her schreiben. Danke, Toni |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
ShadowTurtle hat Folgendes geschrieben: Inarie & Suco-X: Nun. Ihr versucht schon seit gestern abend hot-bit zu Helfen. Ich jedoch hatte gleich eine lösung vorlegen können. Jetzt sag ich euch mal das geheimnis: [..]. Aber das was ihr hier veranstalten tut muss man ja erst noch richtig debuggen ... Muuh, ich habe den code erst heute morgen, noch halb schlaftrunken, in einigen minuten dahingeschrieben ^^. trotzdem danke für deinen tipp.... wäre ich so nicht draufgekommen ![]() @debuggen: dein code ist definitiv falsch - die ueberspringen=0-bedingung müsste noch um vonvorne erweitert werden... das wend ist ohnehin blödsinnig gesetzt, was mir schon vorhin auffiel. dennoch hielt ich es nicht für nötig, darauf hinzuweisen. irgendwie hätte ich wissen müssen, dass dein ego dich dann aber dazu treiben würde, meinen code zu kommentieren. (wo soll da eigentlich was zu debuggen sein? =)) @linux: in diesem fall besteht aber keine zwingende notwendigkeit für goto und hotbits code ist nicht unbeingt einfach zu lesen, finde ich. @hotbit: bei mir liegen die werte von suco, dir und mir immer recht nah beieinander (immer so +/-20) und haben sich in der folge bei wiederholten durchläufen auch durchaus verschoben (mal war deins das schnellste, mal meins, mal sucox'). alles so um 4330ms auf meinem p3 933mhz mit sdram. st ist etwas weiter abgeschlagen bei 4800 ms. |
||
MrKeks.net |
.:_]TRaSh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich versteh' auch nicht was alle daran so schlimm finden.
Wenn der Befehl nur für n00bs ist sollte man ihn find ich erst garnicht einbauen. |
||
[20:17] IMurDOOM: hm irgendwie is die mitte des viehs kaputt
[20:17] TRaSh: ein bisschen [20:18] DarkAngel: es tut mir irgend wie leid |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
AMD XP 2000+
Suco: 2772 Hot-Bit: 2795 Inarie: 2802 ST: 2909 Der Unterschied ist also nicht so riesig mit ~130 ms, wie man sieht. Ich persönlich benutze immer noch Goto und bin eigentlich immer gut klargekommen damit ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Bigmichi |
![]() Antworten mit Zitat ![]() |
---|---|---|
AMD XP Athlon 3200+
(hatte aber mehre Programme auf) Suco: 1550 Hot-Bit: 1576 Inarie: 1656 ST: 1540 |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hallo !
Ja, danke für die Kommentare ! Hmm, das sollte aber schon bei gleichen Bedingungen getestet werden, denn sonst kann man das nicht gelten lassen. Inarie's Code sollte schon schneller sein, als der von ST. Denn hier werden ja ein paar Variablen mehr bearbeitet. Toni |
||
![]() |
Plasma(alt)Betreff: also |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich finde goto total ![]() weil dann in der exe ein jmp mehr drin ist ![]() |
||
DIV is dead ! |
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
schleifen landen in der exe auch nur als jmps.
es geht darum, dass GOTO einfach zu einem schlechten programmierstil verleitet. wenn es nur genutzt wird, um aus einer stark verschachtelten schleife zu springen ok... aber viele landen mal ein einer stelle, wo sie überlegen "hm, wie mach ich das jetzt am schnellsten? ach, einfach nen goto reingeklatscht. und hier noch eins und da auch noch und weils so schön is auch da noch". interessant aber, dass die goto-"vergötterer" oftmals die gleichen sind die der meinung sind, C würde aufgrund der vielen möglichkeiten einen schlechten codestil verursachen |
||
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich find es muss jeder für sich entscheiden ob er goto benutzt oder nicht, ich persönlich find es zu unübersichtlich das zu benutzen, und hab es auch noch nie gemacht ![]() |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier noch mal ein Benchmark:
AMD Athlon XP 1800+, WinXP Suco: 2175ms Inarie: 2210ms ST: 2402ms Hot-Bit: 2522ms Also etwa 300ms Unterschied bei 10.000.000 Durchäufen. Da kann man die Wahl wohl nach dem besten Codestyle treffen. |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
hab das bei mir auch getestet
Hotbit :2025 Suco : 2018 ST : 2151 Inarie: 2083 aber warum ist meiner so viel schneller wenn ich mir da die Werte von Hubsi ansehe oder Hot Bit mit einer 2600CPU bei meinen 2000+Ahtlon |
||
[BB2D | BB3D | BB+]
|
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi !
Das kann wohl nicht sein, oder ? Bei allen Testläufen war ja der Code von ST der langsamste. Ist aber interessant. Wahrscheinlich gibt es da noch Prozessor- Kriterien ? Edit: Ich habe Win-ME installiert. Toni |
||
![]() |
Suco-XBetreff: .... |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ ST : Ich besprach nach meinen ersten Post der nach 2 Minuten Kam mit Hot Bit das Problem genauer. Darum dauerte es etwas känger. Soll ich dir mal ein geheimnis verraten, dein Code ist scheiße. Du laberst was von deinem effizienten Code aber deinen Brainfuck kann man den Bach runter kippen. Also behalte doch deine schwachsinns Kommentare für dich.
bye |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group