Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Was ist reaktionsschneller SELCET CASE oder IF?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 03.05.2011, 16:11    Titel: Was ist reaktionsschneller SELCET CASE oder IF? Antworten mit Zitat

Was ist reaktionsschneller SELCET CASE oder IF?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 03.05.2011, 16:25    Titel: Antworten mit Zitat

Die Antwort ist FreeBASIC ist schneller.

Wenn du dir unter QB Gedanken um Select Case und If machst, dann wär das ein Zeichen um zu wechseln.

Allgemein kann man sagen, dass Select Case schneller sein sollte als lange If-Anweisungen mit vielen ElseIf. Der Code wird intern über Sprungtabellen geregelt und deswegen sollte es schneller sein. Bei kurzen Anweisungen dürfte es sich nicht viel nehmen.

Unter FreeBASIC hättest du noch die Möglichkeit Select Case mit Konstanten durchlaufen zu lassen, was hier nochmals optimiert wurde.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 03.05.2011, 16:28    Titel: Antworten mit Zitat

Ich glaube nicht, dass man allgemein sagen kann, dass eines auf jeden Fall immer schneller sein muss, aber bei SELECT CASE findet die Auswertung auf jeden Fall nur einmal statt. Mit
Code:
SELECT CASE komplizierteAuswertung()
  CASE 1 : ...
  CASE 2 : ...
  ...
END SELECT

bist du also sicher schneller als mit
Code:
IF komplizierteAuswertung() = 1 THEN
 ...
ELSEIF komplizierteAuswertung() = 2 THEN
  ...
END IF

Das mit den Konstanten hat MOD ja schon gesagt
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 03.05.2011, 17:01    Titel: Antworten mit Zitat

Naja, auf meinem Rechner fällt mir das nicht so auf.
Aber da das Programm auch auf einem XT laufen soll, ist es wohl besser die Rotine zu ersetzen.

Zu FB.
VBDOS reicht mir für mein ansprüche noch.
Also werde ich erstmal nicht wechsel.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 03.05.2011, 17:46    Titel: Antworten mit Zitat

Ein Programm, das auf einem XT schnell laufen soll, würde ich in allererster Linie mal nicht mit Q/F/VBASIC schreiben.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 04.05.2011, 18:22    Titel: Antworten mit Zitat

Wenn du wirklich wissen willst, was schneller ist, lass die jeweiligen Kontrollstrukturen in einer Schleife jeweils 10000 mal laufen, und stopp die Zeit, die sie brauchen. Dann weißte bescheid zwinkern
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 04.05.2011, 18:25    Titel: Antworten mit Zitat

Das wär vermutlich nicht aussagekräftig genug, da die CPU gerne auch mal stoppt um andere Programme laufen zu lassen. Man müsste den Test schon mehrmals und am Besten auf mehreren Maschinen wiederholen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 04.05.2011, 18:25    Titel: Antworten mit Zitat

1. Da ich ich weiß wie ich das machen soll kommen ich gleich zu 2.
2. Jetzt müsste ich die fragen wie ich das machen soll, aber jetzt komme ich zu 3.
3. Kannst mir kein Beispiel-Code schreiben?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 04.05.2011, 19:41    Titel: Antworten mit Zitat

nixsager hat Folgendes geschrieben:
3. Kannst mir kein Beispiel-Code schreiben?
Sir, Jawohl, Sir, sofort, Sir, hier bitte, Sir!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
SpionAtom



Anmeldungsdatum: 10.01.2005
Beiträge: 395

BeitragVerfasst am: 10.05.2011, 20:15    Titel: Antworten mit Zitat

ich werde keinen kompletten Code schreiben, aber hier ein bisl:
Code:

durchlaeufe = 32000
startzeit = TIMER
FOR i = 1 TO durchlaeufe
     IF bla THEN
        ...
     ELS IF blub THEN
        ...
     ELSE IF blib THEN
        ...
     ELSE
        ...
     END IF
NEXT
zeit_1 = TIMER - startzeit 'hier wird die benötigte Zeit errechnet

startzeit = TIMER
FOR i = 1 TO durchlaeufe
     SELECT zeugs
        CASE bla: ....
        CASE blub: ....
        CASE blib: ....
        CASE ELSE: ....
     END SELECT
NEXT
zeit_2 = TIMER - startzeit 'hier wird die benötigte Zeit errechnet

PRINT "Zeit 1: ", zeit_1
PRINT "Zeit 2: ", zeit_2



irgendwie so, hab lange kein QB mehr gemacht.. neutral
_________________
Inzwischen gehöre ich auch zu den BlitzBasicern. Also verzeiht mir, wenn mir mal ein LOCATE 100, 100 oder dergleichen rausrutscht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nixsager



Anmeldungsdatum: 16.08.2007
Beiträge: 70

BeitragVerfasst am: 10.05.2011, 20:33    Titel: Antworten mit Zitat

Danke.

Ich dachte irgendwie an eine andere Lösung, aber ich werde es mal ausprobieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz