GOTO oder nicht GOTO

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2, 3  Weiter

Neue Antwort erstellen

 

lettorTrepuS

BeitragSo, Apr 11, 2004 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Apr 11, 2004 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Apr 11, 2004 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Mr.Keks

BeitragSo, Apr 11, 2004 19:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
Zitat:
Fazit: Dieser Wettbewerb ist wegen falschen statistiken ungültig. Am besten nochmal ein "contest", wo aber jede routine als eigenes Programm getestet wird.
Begründung: Ist euch noch nicht aufgefallen das die meisten ergebnissen den selben rank haben wie diese im Programm programmiert sind? ;
man bekommt ja fast schon das gefühl, da ist jemand ein schlechter verlierer Smile im programm ist die reihen folge: hotbit, sucox, du, ich. bei den ergebnissen bist du immer leicht abgeschlagen weiter hinten. eigentlich blödsinn bei einer position in der mitte von einflüssen durch die reihenfolge im code zu sprechen.
MrKeks.net
 

lettorTrepuS

BeitragSo, Apr 11, 2004 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

HOT-BIT

Gast

BeitragSo, Apr 11, 2004 21:33
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 !
Smile

Toni
 

HOT-BIT

Gast

BeitragSo, Apr 11, 2004 21:46
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

TheShadow

Moderator

BeitragSo, Apr 11, 2004 22:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 12, 2004 0:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 12, 2004 1:14
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

MasterK

BeitragMo, Apr 12, 2004 1:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 12, 2004 8:22
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 12, 2004 9:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 12, 2004 10:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile wenn man alle ifsachen mit goto machen würde, würde man ja garnichts mehr blicken Smile

versuchs mal mit meinem neuesten code! der ist bei mir zumindest etwas schneller...
MrKeks.net

wunderkind

BeitragMo, Apr 12, 2004 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
1580

Gossi

BeitragMo, Apr 12, 2004 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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-BIT

Gast

BeitragMo, Apr 12, 2004 14:00
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

BeitragMo, Apr 12, 2004 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

Mr.Keks

BeitragMo, Apr 12, 2004 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
@hotbit: sag mal etwas genauer, was da nicht stimmt! ich find's irgendwie nicht Confused
MrKeks.net
 

HOT-BIT

Gast

BeitragMo, Apr 12, 2004 18:40
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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group