Welche Schleife nehm ich da?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Welche Schleife nehm ich da?

Beitrag von Scarabol »

Hi Leute,

ich hab folgende Struktur in meinem Programm, wie ihr seht arbeitet diese mit GOTO, aber da GOTO "unsauberer" Code ist würde ich das gerne durch eine Schleife ersetzen nur welche?

Code: Alles auswählen

    jump1:
    length = MyFunction()
    If length = 1000
      ... <- hier steht Code -> ...
      Goto jump1
    ElseIf length
      ... <- hier steht auch Code -> ...
    EndIf
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Code: Alles auswählen

Repeat
	len = MyFunc()

	If len = 1000
		... <- hier steht Code -> ... 
	Else
		... <- hier steht auch Code -> ...		
		Break;
	EndIf 

ForEver
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Das sieht in der Tat recht krank aus...

Hoffe diese Version geht, habs nicht probiert:

Code: Alles auswählen

Repeat
    length = MyFunction()
    If length = 1000
      ... <- hier steht Code -> ...
    ElseIf length ; Wat soll das sein?
      ... <- hier steht auch Code -> ...
    EndIf 
Until length <> 1000
edit: Edel war schneller
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Beitrag von NicknameFJ »

In Scarabols Code wird der zweite Codeabschnitt ( ... <- hier steht auch Code -> ... ) nur dann ausgeführt wenn length nicht den Wert 0 hat. Dies wird bei Edel nicht korrekt berücksichtigt

Müsste dann so aussehen:

Code: Alles auswählen


Repeat 
   len = MyFunc() 

   If len = 1000 
      ... <- hier steht Code -> ... 
   Elseif len
      ... <- hier steht auch Code -> ...       
      Break; 
   else
     ... <- hier wird kein Code mehr ausgeführt " -> ...
     Break;
   EndIf 

ForEver


@Kurzer

Kurzer hat geschrieben:

ElseIf length ; Wat soll das sein?
Dieser elseif Zweig wird nur dann ausgeführt, wenn length #true ist, d.h. einen Wert <> 0 hat

Ich hoffe ich habe mich jetzt hier auf die Schnelle nicht irgendwo vertan
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

NicknameFJ hat geschrieben:
Kurzer hat geschrieben:

ElseIf length ; Wat soll das sein?
Dieser elseif Zweig wird nur dann ausgeführt, wenn length #true ist, d.h. einen Wert <> 0 hat

Ich hoffe ich habe mich jetzt hier auf die Schnelle nicht irgendwo vertan
Ob das von Scarabol auch so gedacht war? Ich kann's mir nicht vorstellen. Einmal auf einen numerischen Wert prüfen, dann auf einen bool'schen Wert. :freak: Ist noch kranker als ein Gosub/Goto zu verwenden. :wink:
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Beitrag von NicknameFJ »

@Kurzer:

In PB gibt es keine richtigen Bool´sche Variablentypen.

Als #TRUE wird hier alles interpretiert was nicht 0 ist und #FALSE ist dann 0

Daher funktionieren solche Konstrukte wie

Code: Alles auswählen

if Testvariable
   DoIrgendwas
endif
korrekt.


Diese verkürzte Form benutzen übrigens in PB viele Programmierer - ist nicht krank.

Code: Alles auswählen

if Testvariable$
   DoIrgendwas
endif
ist die Kurzform für

Code: Alles auswählen

if Testvariable$ <> ""
   DoIrgendwas
endif
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Wir sind alle krank :D

@Kurzer
Ob dus glaubst oder nicht aber es wahr wirklich Absicht...

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Also so?

Code: Alles auswählen

Repeat
  len = MyFunc()

  If len
    If len = 1000
      ;... <- hier steht Code -> ...
    Else
      ;... <- hier steht auch Code -> ...
      Break;
    EndIf
  Else
    ;... <- hier steht auch Code -> ...
  EndIf
ForEver
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

oder so?

Code: Alles auswählen

Repeat
 length=MyFuntion()
    .... <- hier steht Code -> ...
Until length <> 1000
If length
   .... <- hier steht auch Code -> ...
EndIf
Gruß Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Beitrag von NicknameFJ »

@TS-Soft:

Deine Variante bricht die Schleife auch nicht ab, wenn der Rückgabewert der Procedure 0 war !
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Antworten