Wörter Drehen V 1.00

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Wörter Drehen V 1.00

Beitrag von Andesdaf »

kein großer Trick dabei, einfach für alle die zu faul sind das selber zu coden
(braucht sowiso auch nur 5 Min, wollte es aber trotzdem reinstellen).

Code: Alles auswählen

Procedure.s TurnWords(psString.s)
  String.s = psString
  Leer.s   = ""
  Lenght.i = Len(String)
  For i=0 To Lenght-1
    Leer+Mid(String,Lenght-i,1)
  Next
  ProcedureReturn Leer
EndProcedure

Debug TurnWords("Purebasic ist eine schöne Programmiersprache")
Zuletzt geändert von Andesdaf am 05.06.2009 18:55, insgesamt 1-mal geändert.
Win11 x64 | PB 6.20
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Und hier gleich mal die Profi-Version davon. Viel schneller, weil arbeitet mit Pointern:

Code: Alles auswählen

Procedure ReverseString(*Text.Character) 
   Protected *ende.Character=*Text+MemoryStringLength(*Text)<<#PB_Compiler_Unicode-SizeOf(Character) 
   While *Text < *Ende 
      Swap *Text\c, *ende\c 
      *Text+SizeOf(Character) 
      *ende-SizeOf(Character) 
   Wend 
EndProcedure 

test$="Hallo" 
ReverseString(@test$) 
Debug test$
Verändert direkt den übergebenen String.


Btw, diesen Thread hier gab es schon einmal.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Und der Unterschied is heftig:

Code: Alles auswählen

Procedure ReverseString(*Text.Character)
   Protected *ende.Character=*Text+MemoryStringLength(*Text)<<#PB_Compiler_Unicode-SizeOf(Character)
   While *Text < *Ende
      Swap *Text\c, *ende\c
      *Text+SizeOf(Character)
      *ende-SizeOf(Character)
   Wend
EndProcedure

Procedure.s TurnWords(psString.s)
  String.s = psString
  Leer.s   = ""
  Lenght.i = Len(String)
  For i=0 To Lenght-1
    Leer+Mid(String,Lenght-i,1)
  Next
  ProcedureReturn Leer
EndProcedure

#Check = 500000

OpenConsole()
Print ("Pointer... ")
test$ = "Purebasic ist eine schöne Programmiersprache"
Delay(100)
time = ElapsedMilliseconds()
For x = 0 To #Check
  ReverseString(@test$)
Next
pointer = ElapsedMilliseconds()-time
PrintN(StrF(pointer/1000,2)+"s")
Print ("String... ")
test$ = "Purebasic ist eine schöne Programmiersprache"
Delay(100)
time = ElapsedMilliseconds()
For x = 0 To #Check
  test$ = TurnWords(test$)
Next
string = ElapsedMilliseconds()-time
PrintN(StrF(string/1000,2)+"s")
PrintN("Pointer ist "+StrF(string/pointer,1)+" mal schneller als String")
Input()
Pointer... 0.13s
String... 7.52s
Pointer ist 57.4 mal schneller als String
(\/) (°,,,°) (\/)
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag von X360 Andy »

Code: Alles auswählen

Procedure.s DrehWort(DrehWort$)
  DrehWortLength = Len(DrehWort$)
  For DrehWortanfang = 1 To Drehwortlength
    DrehWortAusgabe$ + Mid(DrehWort$, DrehWortLength-DrehWortAnfang + 1, 1)
  Next : ProcedureReturn DrehWortAusgabe$
EndProcedure

Debug Drehwort("let it dreh")
Dies kann mithalten :D

EDIT
Verdammt das is ja fast das gleiche wie im ersten Post :?

Bei mir is das aber relativ schnell im vergleich

EDIT2
Verarschen ?
Damals als ich das getestet habe , war das fast genauso schnell.
Jetzt sagt der das es 71mal langsamer ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

KeyKon hat geschrieben:Und der Unterschied is heftig:
Bei mir ist Pointer (0,09 s) sogar 93,8 Mal schneller als String (8,84 s).
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Pointer... 0.05s
String... 3.73s
Pointer ist 79.4 mal schneller als String
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Beitrag von rolaf »

Pointer... 0.05s
String... 3.73s
Pointer ist 79.4 mal schneller als String
Juhu, da ich es ein zwei mal im Leben benutze habe ich jetzt deutlich mehr Zeit zur Verfügung. <)

:allright: !thcam nniS eis ow ad ,tug tsi gnureimitpO :thetsrev hcslaf thcin hcim rhI timaD
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Wiso? Das ganze steht doch stellvertretend dafür das man wenn man massiv Stringoperationen durchführen muss mit den Pointern besser gestellt ist...
(\/) (°,,,°) (\/)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

KeyKon hat geschrieben:Wiso? Das ganze steht doch stellvertretend dafür das man wenn man massiv Stringoperationen durchführen muss mit den Pointern besser gestellt ist...
Nein, unterschiedlicher koennen die Funktionen ja gar nicht sein, auch wenn
das Ergebnis gleich ist. Beide sind brauchbar, wobei ich die von and51, so
nicht nutzen wuerde, da sie viel zu unsicher ist.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Inwiefern unsicher?
(\/) (°,,,°) (\/)
Antworten