Programmier Fehler?
Übersicht

![]() |
TBP1Betreff: Programmier Fehler? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich hab letztens einfach mal zum Spaß ein kleines Programm geschrieben, welches einen verschiedene Bilder zeigt und anhand der Bewertung des Anwenders ein Ergebnis zieht. Die einzelnen Abfragen sehen ungefähr so aus: Code: [AUSKLAPPEN] .anfang1 Cls Text 0, 0, "Thema : Thema1" Flip Repeat If KeyDown(36) = 1 Then Goto haupt1 If KeyDown(49) = 1 D1 = 4 Goto anfang2 EndIf If KeyDown(1) = 1 Then Goto ende Forever .haupt1 bild = LoadImage("bilder/bild1.jpg") Cls DrawImage bild, 0, 0 Text 0, 700, "Bewerte: 1=gut, 2=geht, 3=nich mein fall" Flip Repeat If KeyDown(79) = 1 Or KeyDown(2) = 1 D1=1 Goto anfang2 EndIf If KeyDown(80) = 1 Or KeyDown(3) = 1 D1=2 Goto anfang2 EndIf If KeyDown(81) = 1 Or KeyDown(4) = 1 D1=3 Goto anfang2 EndIf Forever Die spätere Auswertung sieht so aus: Code: [AUSKLAPPEN] .ende Cls Text 0, 0, "männlein oder weiblein(m oder w)?" Flip Repeat If KeyDown(50) = 1 Then geschlecht = 1 Goto auswertung EndIf If KeyDown(17) = 1 Then geschlecht = 2 Goto auswertung EndIf Forever .auswertung ; Dies ist einfach eine Besonderheit für Frage 11 und 12 If D13=1 Or D14=1 Then If geschlecht = 1 ergebnis = "Ergebnis 4 män." EndIf If geschlecht = 2 ergebnis = "Ergebnis 4 wei." EndIf Goto auswertung2 EndIf ;Ab hier gehts erst richtig los Derg = D1 + D2 + D3 + D4 + D5 + D6 + D7 + D8 + D9 + D10 + D11 + D12 + D13 + D14 If Derg>39 And geschlecht = 1 ergebnis = "Ergebnis 1 män." Goto auswertung2 EndIf If Derg>39 And geschlecht = 2 ergebnis = "Ergebnis 2 wei." Goto auswertung2 EndIf If Derg=30 Or Derg=31 Or Derg=32 Or Derg=33 Or Derg=34 Or Derg=35 Or Derg=36 Or Derg=37 Or Derg=38 Or Derg=39 If geschlecht = 1 ergebnis = "Ergebnis 2 män." EndIf If geschlecht = 2 ergebnis = "Ergebnis 2 wei." EndIf Goto auswertung2 EndIf If Derg=20 Or derg=21 Or Derg=22 Or Derg=23 Or Derg=24 Or derg=25 Or derg=26 Or derg=27 Or derg=28 Or derg=29 If geschlecht = 1 ergebnis = "Ergebnis 3 män." EndIf If geschlecht = 2 ergebnis = "Ergebnis 3 wei." EndIf Goto auswertung2 EndIf If Derg<21 If geschlecht = 1 ergebnis = "Ergebnis 4 män." EndIf If geschlecht = 2 ergebnis = "Ergebnis 4 wei." EndIf Goto auswertung2 EndIf .auswertung2 Cls font3 = LoadFont("Courier",30, 0, 0, 0) Text 0, 0, "Der Test hat ergeben, dass du ein/e" SetFont font3 Text 50, 50, ergebnis SetFont font2 Text 0, 100, "bist." Flip Delay 5000 End So, jetzt schreibt er mir aber immer als ergebnis 0. Ich weiß nicht, woran es liegt. Die Eingaben des Anwenders bei den Bildern nimmt er an, Derg(ebnis) stimmt auch(leider nicht immer), aber die variable "ergebnis" ist immer 0. Was hab ich bloß falsch gemacht? |
||
![]() |
DA |
![]() Antworten mit Zitat ![]() |
---|---|---|
Darf ich dir raten nicht mehr dieses beschissene Goto zu benutzen?
Ich denke nicht nur ich sondern auch andere Forum mitglieder gucken deinen Code nicht nach schon alleine wegen dem Goto. Einmal oder zweimal geht ja noch, aber 10 oder 12 mal Goto zu benutzen ist einfach zu viel. Thx DarkAngel |
||
Deutscher Blitz Basic Chat |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gebe DarkAngel vollkommen recht. GOTOs sind böse... ![]() Versuche mal, dein Programm so umzuschreiben, dass du die GOTOs in Funktionen umwandelst. Ansonsten kann ich auf den ersten Blick nur sehen, dass die Variable Ergebnis nicht als String definiert worden ist...? Gina. |
||
www.jk-spiele.de |
![]() |
eXceptION |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn man goto richtig benutzt, kann es verdammt hilfreich sein... (es muss die code eben nicht unlesbar machen) | ||
Norweger...
Spreche aber verdammt gut 8086 |
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi..
Genau ! Ist auch meine Meinung. Toni |
||
![]() |
TBP1 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, ich werde nie wieder Goto's verwenden ![]() ![]() |
||
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Freut mich... ![]() Naja, das mit den GOTOs ist halt ne Wissenschaft für sich. Wenn man mit ner Programmiersprache arbeitet, die nichts anderes kennt, dann findet man schon Möglichkeiten, um den Code übersichtlich zu gestalten, aber Functions etc. wurden ja schließlich dafür erfunden, um es allen etwas leichter zu machen und daher sollte man davon auch Gebrauch machen... ![]() Viel Spaß noch, Gina. |
||
www.jk-spiele.de |
![]() |
eXceptION |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Gina: goto ist "viel" schneller als funktionen... kommt auf den compiler an... es ist aber nie langsamer...
beispiel: (assembly) [goto, 1-2 ticks] Code: [AUSKLAPPEN] mov bx, 8
@label: dec bx jnz @label //goto @label if ebx is <> 0, short, 1 tick xor ax, ax jmp @ende //goto @ende, short, 1 tick nop //for dword alignment @ende: mov ax,4c02 //int 21 command for returning to dos, errorcode 2 int 21 //dos interrupt [function, jumps 3-9 ticks] Code: [AUSKLAPPEN] mov bx, 8
call @label1 //call @label1, short, 2 tick xor ax, ax nop //for dword alignment @ende: mov ax,4c02 int 21 nop //for dword alignment @label1: push es //okay, push ds //ein guter compiler push si //würde das hier nicht machen... @label2: dec bx jnz @label2 //goto @label if ebx is <> 0, short, 1 tick pop si //das gute compiler würde auch dies nicht machen pop ds //auch dies nicht pop es //und auch dies nicht ret //return, 1 tick ausserdem, kannst du das hier machen: Code: [AUSKLAPPEN] for y = 0 to 239
for x = 0 to 319 if (readpixelfast(x, y) = $00FFFFFF) then goto skipbeide next next .skipbeide |
||
Norweger...
Spreche aber verdammt gut 8086 |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sicher ist GOTO das schnellste. Ein sehr guter Compiler setzt die Funktionen auch in schnelle GOTOs um, aber der Blitzbasic-Compiler gehört leider nicht dazu ![]() Naja, was solls, es ging ja auch eigentlich um die Lesbarkeit des Codes ![]() LG, Gina. |
||
www.jk-spiele.de |
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wer mit _blitzbasic_ programmiert, hat mit sicherheit andere sorgen, als wieviel pikosekunden man mit einem goto gegenüber einer funktion einsparen kann!
der spruch "kleinvieh macht auch mist" greift hier leider nicht, weil das vieh einfach ZU klein ist! ![]() und @exception: ein gute programmierer lässt eine solche situation garnicht erst entstehen, wo er goto's bräuchte... |
||
![]() |
garretBetreff: gosub |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da ich mich mit funktionen nicht sooo gut auskenne, nehme ich meist gosub. Meiner Meinung nach arbeitet das genau wie eine funktion (abgesehen davon dass es keinen Wert zurückgibt).
Außerdem ist Gosub nicht so verpönt wie Goto. ![]() Ach ja, die guten alten Basic 2.0-Zeiten am C64 (schwärm). Da war Goto DIE Wunderwaffe. ![]() Ist gosub eigentlich schneller als ne funktion? |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
![]() |
dominikBetreff: Re: gosub |
![]() Antworten mit Zitat ![]() |
---|---|---|
garret hat Folgendes geschrieben: Da ich mich mit funktionen nicht sooo gut auskenne, nehme ich meist gosub. Meiner Meinung nach arbeitet das genau wie eine funktion (abgesehen davon dass es keinen Wert zurückgibt).
Außerdem ist Gosub nicht so verpönt wie Goto. ![]() Ach ja, die guten alten Basic 2.0-Zeiten am C64 (schwärm). Da war Goto DIE Wunderwaffe. ![]() Ist gosub eigentlich schneller als ne funktion? Doch geht auch mit Return. |
||
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof. |
![]() |
Ebola33 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit den gotos. finde ich gar nicht so schlimm.
Eher das hier: If Derg=20 Or derg=21 Or Derg=22 Or Derg=23 Or Derg=24 Or derg=25 Or derg=26 Or derg=27 Or derg=28 Or derg=29 if Derg>19 and Derg<30 besser so. ![]() |
||
ansteckend... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lol, also der Vergleich mit JMP und CALL hinkt extrem. Am besten noch nur mit Globalen Variablen arbeiten, um PUSH/POP zu vermeiden usw. In großen Projekten wird OOP eingesetzt, das sind auch Speedkiller, aber bei tausenden Zeilen Code nimmt man soetwas gerne in Kauf. Also auf Goto und Gosub(wobei Gosub auch mit CALL aufgerufen wird) kann ein guter Programmierer immer verzichten.
mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
bear1 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß echt nich, was ihr alle immer mit eurem Goto habt. Ist doch en wunderbarer Befehl! Und wenn man eine Funktion hat, ändert das auch nichts daran, dass du woanders hinspringst. Ist nur umständlicher zu schreiben. | ||
Ja, ne...
Zum virtuellen Staat Eranien: http://www.eranien.de Zu meinem Blog: http://www.erixpage.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group