GOTO oder nicht GOTO
Übersicht

Gehe zu Seite Zurück 1, 2, 3 Weiter
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
es gibt dann noch grosse unterschiede zwischen den einzelnen BB Versionen
Demo BB3D : ca 2100 ms Demo B Plus :ca 4000ms Vollversion 1.80 BB2D : ca 2700ms woran liegt das denn, da es ja immer heißt das alle Versionen die 2D Sache mit drin haben ?! |
||
[BB2D | BB3D | BB+]
|
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 ![]() |
---|---|---|
ShadowTurtle hat Folgendes geschrieben: Inarie: Du vergisst eine tatsache. Until prüft immer erst wenn eine sache geschehen ist. While jedoch nicht. Von daher akiert until nicht wie goto. hmm, ich habe mal eben gesucht und weder in deinem noch meinem code ein until gefunden ![]() Zitat: Fazit: Dieser Wettbewerb ist wegen falschen statistiken ungültig. Am besten nochmal ein "contest", wo aber jede routine als eigenes Programm getestet wird.
man bekommt ja fast schon das gefühl, da ist jemand ein schlechter verlierer Begründung: Ist euch noch nicht aufgefallen das die meisten ergebnissen den selben rank haben wie diese im Programm programmiert sind? ; ![]() |
||
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 !
Oje-oje, das sollte ja kein Wettbewerb sein ! Sondern einfach nur um zu zeigen, wie man mit oder ohne GOTO, ein Problem löst. ST: Werde jetzt auch testen, wenn du an erster Stelle bist. Vielleicht beruhigt dich das etwas ! ![]() Toni |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hallo !
So, auf ST's Wunsch, die neue Reihung des Test's: ST = 2132 ms Inarie = 1987 ms Suco = 1961 ms Hot-Bit = 2004 ms 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 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 Exit brzz = 0 Next If map(brx,bry) And brzz = 0 EndIf brzz=0: brmit=0 Next Print "Inarie : " + (MilliSecs()-zeit3) 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) 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) Print:Print "fertig" WaitKey End Hoffentlich kommt nicht noch wer, und sagt *weiter weg* oder so ! Ich glaube, daß nun alles geklärt ist. Danke, Toni |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: 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
ich fühle mich leicht angesprochen... ich vergöttere zwar goto nicht - manchmal ist es damit jedoch einfacher - und innerhalb einer funktion sind goto's harmlos. C Codes sehen aber tatsächlich furchtbar aus. Besonders die vielen Pointer - sieht schlimmer aus, als eine Goto-Invasion... |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
Innerhalb einer Function kann man GOTO verwenden,
kommt aber eleganter wenn man es lässt. Es gibt aber auch Leute die springen damit wild im Code rum, und blicken am Ende nimmer durch. |
||
solitaire |
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
TheShadow hat Folgendes geschrieben: C Codes sehen aber tatsächlich furchtbar aus. Besonders die vielen Pointer - sieht schlimmer aus, als eine Goto-Invasion...
pointer sind richtig eingesetzt ein sehr mächtiges werkzeug. wüsste auch nicht, was daran so schlimm aussehen sollte. anstelle den wert einer variable oder ein objekt zu speichern, wird eben die speicheradresse gespeichert. was ist so schlimm daran? |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
so, st zuliebe habe ich das ganze jetzt auch mal in getrennten codes angeschaut. es gibt bei mir (b3d) kaum unterschiede zu den werten im sammelcode, aber ok. da ich jetzt meinen code schon in bb geladen hatte, habe ich ihn noch etwas verändert.
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 zeit3=MilliSecs() For o=1 To 10000000 brmit = 1 While brmit < 6 brmit = brmit +1 brx=Rand(0,12):bry=Rand(0,12) For mue.muenzen=Each muenzen If mue\x=brx And mue\y=bry brmit = 6 Exit ElseIf map(brx,bry) ;... brmit = 6 Exit EndIf Next Wend Next Print "Inarie : " + (MilliSecs()-zeit3) Print:Print "fertig" WaitKey End |
||
MrKeks.net |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
ST: 1754
Inarie: 1698 Suco: 1638 Hot-Bit: 1610 Mehrmals durchgeführt, Mittelwert gebildet. Ändert am Resultat allerdings wenig bis nichts. Maschine: AMD Athlon 64 3200+/ 2000MHz / 1MB Cache / FSB400, 1 GB Ram, W2K ... hach geht's mir gut 8) |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
goto ist oftmals wirklich im nanosekundenbereich schneller - aber das bringt nichts. und du musst zugeben, dass hotbits code etwas umständlich zu lesen ist: er hat eine fornext/while-schleife etwas umständlich mit gotos geschrieben und mit dem zweisprung-goto ein if imitiert - das bringt's nicht ![]() ![]() versuchs mal mit meinem neuesten code! der ist bei mir zumindest etwas schneller... |
||
MrKeks.net |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
1580 | ||
![]() |
Gossi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich persönlich hab mir das benutzen von Goto's ebenfalls abgewöhnt. Allerdings ist mein Code dennoch von Labels durchseht. Ich markiere damit alle wichtigen Code-Stellen (wo Grafiken geladen werden, Konstanten definiert werden und sowas). Mit dem Fenster rechts kann ich dann fröhlich jede Stele leicht finden. | ||
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind. |
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hallo !
@Inarie: Dein Code stimmt nicht ! Lass mal die Variablen ausdrucken ! Es sollte so funktionieren: - Zufalls-Feld auswählen - Alle Münzen durchgehen, und schauen, ob schon eine drauf ist - wenn eine drauf ist, bis zu 5 mal wiederholen - wenn keine drauf ist, eine Münze setzen - ansonsten Routine verlassen Hier habe ich nun mal ohne GOTO gecodet : 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 brmit=0 zeit5=MilliSecs() For o=1 To 10000000 Repeat brzz=0 ; brx=Rand(0,12):bry=Rand(0,12) brx=4:bry=4 brmit=brmit+1 For mue.muenzen=Each muenzen If mue\x=brx And mue\y=bry brzz=1: Exit Next Until brmit>4 Or (Not brzz) If brzz= 0 If map(brx,bry) EndIf EndIf brmit=0 Next Print "Hot-Bit : " + (MilliSecs()-zeit5) Print:Print "fertig" WaitKey End Ich glaube, daß es so richtig ist ! Jetzt können wir ja mal vergleichen. @ST: wenn du nur Blödsinn redest, dann laß es hier lieber. Es war schön, daß du dich auch hingesetzt, und mit gemacht hast, aber es sollte nur informativ sein ! Toni |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Goto innerhalb einer kleinen Funktion ist eine Sache.
Es ist zwar auch leicht unsauber und wird häufig aus reiner "Faulheit" genutzt weil man sich nicht überlegen will, wie man es geschickt (und dank der Gedanken häufig auch um einiges effizienter) lösen kann. Aber ein Goto in einem normalen Programmcode ist der totale Horror ... Und das es den Code oft unlesbarer und unverständlicher macht, beweist glaub schon dieses Beispiel hier ![]() |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
@hotbit: sag mal etwas genauer, was da nicht stimmt! ich find's irgendwie nicht ![]() |
||
MrKeks.net |
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hei !
@Inarie: Ich werde nun mal deinen letzten Code testen.... @all: Habe hier mal ein paar Variable dazu gegeben, damit man sieht, wie das funktionieren soll. Wenn brx und bry den Wert 4 haben, muß das Programm ja 50.000.000 mal durchlaufen werden. Das läßt sich nachvollziehen, indem man die Zeile mit den Zufallszahlen und die darunter liegende tauscht. Am besten einfach mal ausprobieren ! Wenn wer noch welche Fragen hat, bitte nur zu. Toni 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 brmit=0 zeit5=MilliSecs() For o=1 To 10000000 Repeat brzz=1 brx=Rand(3,4):bry=Rand(3,4) ; brx=4: bry=4 ; Diese Zeile statt der vorigen nehmen If brx=4 And bry=4 c=c+1 brmit=brmit+1 :b=b+1 For mue.muenzen=Each muenzen If mue\x=brx And mue\y=bry brzz=0: a=a+1: Exit Next Until brmit>4 Or brzz If brzz If map(brx,bry) f=f+1 EndIf EndIf brmit=0 Next Print "Hot-Bit : " + (MilliSecs()-zeit5)+ " Durchl : "+a+" brmit = "+b+" gesetzte Felder : "+f Print:Print "(brx=4 und bry=4)= "+c Print:Print "fertig" WaitKey End ... |
||
Gehe zu Seite Zurück 1, 2, 3 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group