"$0000FF" zu $0000FF werden lassen? [gelöst]

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Tennisball

Betreff: "$0000FF" zu $0000FF werden lassen? [gelöst]

BeitragDi, Nov 24, 2009 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich hab folgendes Problem:
Ich lese Farbwerte aus einer Textdatei, also:
Code: [AUSKLAPPEN]
$000000
$FFFFFF
$0000FF
usw...


Dann habe ich ein Array colors$[2], in dem ich das speichere.
Nun möchte z.B. machen
Code: [AUSKLAPPEN]
color 0,0,colors$[2]
plot x,y
...oder...
writepixelfast(x,y,colors$[2])


Nun habe ich aber festgestellt, dass sowas hier:
Code: [AUSKLAPPEN]
Color 0,0,"$0000FF"

Print "haaaaaaaallllllloooooooo!!!!!!!"

WaitKey()
End

nicht funktioniert.

Meine Frage ist nun:
Wie kann ich das mit dem String-Array lösen?

mfg,
Tennisball
  • Zuletzt bearbeitet von Tennisball am Di, Nov 24, 2009 22:39, insgesamt einmal bearbeitet

Nicdel

BeitragDi, Nov 24, 2009 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
WritePixelFast, String zu Int casten und mit den beschriebenen Formeln umwandeln.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

DjDETE

BeitragDi, Nov 24, 2009 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Überprüfen ob der "" enthalten sind und ggf. löschen.
Instr Len Mid
MfG
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Tennisball

BeitragDi, Nov 24, 2009 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
@Nicdel : runtimeerror Int(colors[2])
Resultat : 0

@DjDete : Ich glaube du hast mich falsch verstanden... "s sind ja um Strings immer drum, siehe 3. "Code" von mir da oben.

Nicdel

BeitragDi, Nov 24, 2009 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast recht, das casten funktioniert nicht...
Lösung: https://www.blitzforum.de/foru...php?t=9424
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

Kruemelator

BeitragDi, Nov 24, 2009 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist nicht sehr schön, aber es funktioniert Laughing
Hex liefert zwar nur Großbuchstaben zurück in Blitz, aber funktioniert auch wenn man z.B. "$Af04dB" hat.
Code: [AUSKLAPPEN]
wert$ = "$ff0aFF"
For stelle=0 To 5
   wertstring$ = Mid(wert$,7-stelle,2)
   If Asc(wertstring$) >= 48 And Asc(wertstring$) <= 57 Then
      farbwert = farbwert + 16^stelle * (Asc(wertstring$)-48)
   EndIf
   If Asc(wertstring$) >= 65 And Asc(wertstring$) <= 70 Then
      farbwert = farbwert + 16^stelle * (Asc(wertstring$)-55)
   EndIf
   If Asc(wertstring$) >= 97 And Asc(wertstring$) <= 102 Then
      farbwert = farbwert + 16^stelle * (Asc(wertstring$)-87)
   EndIf
Next


Print farbwert
Print Hex(farbwert)
WaitKey()
End

mpmxyz

BeitragDi, Nov 24, 2009 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe für einen hier veröffentlichten Ini-Reader eine "Int2"-Funktion geschrieben.
Die wandelt Strings so in Integer um, wie es auch der Blitzcompiler mit den Zahlen im Code macht:
(Nur bei Floats funktioniert diese Funktion nicht so 100%ig.)

BlitzBasic: [AUSKLAPPEN]
Function HexToInt(HexS$);Umwandlung eines hexadezimalen Zahlenstrings in einen Integer
Local ZW
Local ZW2
Local Integer
HexS$=Upper(HexS$)
For ZW=1 To Len(HexS$)
Select Mid(HexS$,ZW,1)
Case "0"
Integer=Integer Shl 4
Integer=Integer Or $0
Case "1"
Integer=Integer Shl 4
Integer=Integer Or $1
Case "2"
Integer=Integer Shl 4
Integer=Integer Or $2
Case "3"
Integer=Integer Shl 4
Integer=Integer Or $3
Case "4"
Integer=Integer Shl 4
Integer=Integer Or $4
Case "5"
Integer=Integer Shl 4
Integer=Integer Or $5
Case "6"
Integer=Integer Shl 4
Integer=Integer Or $6
Case "7"
Integer=Integer Shl 4
Integer=Integer Or $7
Case "8"
Integer=Integer Shl 4
Integer=Integer Or $8
Case "9"
Integer=Integer Shl 4
Integer=Integer Or $9
Case "A"
Integer=Integer Shl 4
Integer=Integer Or $A
Case "B"
Integer=Integer Shl 4
Integer=Integer Or $B
Case "C"
Integer=Integer Shl 4
Integer=Integer Or $C
Case "D"
Integer=Integer Shl 4
Integer=Integer Or $D
Case "E"
Integer=Integer Shl 4
Integer=Integer Or $E
Case "F"
Integer=Integer Shl 4
Integer=Integer Or $F
Default
Return Integer
End Select
Next
Return Integer
End Function

Function BinToInt(BinS$);Umwandlung eines binären Zahlenstrings in einen Integer
Local ZW
Local Integer
For ZW=1 To Len(BinS$)
Select Mid(BinS$,ZW,1)
Case "0"
Integer=Integer Shl 1
Integer=Integer Or %0
Case "1"
Integer=Integer Shl 1
Integer=Integer Or %1
Default
Return Integer
End Select
Next
Return Integer
End Function

Function Int2%(val$);Umwandlung eines "Integerstrings" in einen Integer
Select Left(val$,1)
Case "$";Eine hexadezimale Zahl
Return HexToInt(Mid(val$,2,Len(val$)-1))
Case "%";Eine Binärziffer
Return BinToInt(Mid(val$,2,Len(val$)-1))
Default
Return Int(val$)
End Select
End Function


Die sollte wahrscheinlich mehr als genug können.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Tennisball

BeitragDi, Nov 24, 2009 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Bedanke mich bei allen, es funktioniert bestens Smile
 

BBPro2

BeitragMi, Nov 25, 2009 4:07
Antworten mit Zitat
Benutzer-Profile anzeigen
wie ihr ma alle keine ahnung von laufzeit habt...
das effizienteste ist obv mein code...

Code: [AUSKLAPPEN]
Function getHex (s$)
maxvalue = 16 ^ Len(s$) - 1

If Len (s$) < 8 Then
zeros = 8 - Len (s$)
   For i = 1 To zeros
      s$ = "0" + s$
   Next
End If

For i = 0 To maxvalue
If Hex$ (i) = s$ Then Return i
Next

End Function



obviously O(n) !

D2006

Administrator

BeitragMi, Nov 25, 2009 9:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ein Witz oder?

Wenn du zum Beispiel "$FFFFFF" konvertieren willst, ist dein n gleich 16.777.215. Du benötigst also so viele Durchläufe, bist du einen Treffer hast. Und du musst so oft die Hex-Funktion von BB aufrufen. Teurer geht's kaum. Die vorher geposteten Version benötigen da in ihrer Schleife gerade mal 6 Durchläufe.

Rolling Eyes
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Noobody

BeitragMi, Nov 25, 2009 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
BBPro2 hat Folgendes geschrieben:
obviously O(n) !

Dafür sind die Codes der anderen O(1) Wink
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Eingeproggt

BeitragMi, Nov 25, 2009 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
[trash]

BBPro2 hat Folgendes geschrieben:
und ich studiere informatik im 5. semester Wink


Jaja, jetzt versteh ich die Diksussion um Missstände an den Universitäten...

[/trash]
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

da_poller

BeitragMi, Nov 25, 2009 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
BBPro2 hat Folgendes geschrieben:
wie ihr ma alle keine ahnung von laufzeit habt...
das effizienteste ist obv mein code...

Code: [AUSKLAPPEN]
Function getHex (s$)
maxvalue = 16 ^ Len(s$) - 1

If Len (s$) < 8 Then
zeros = 8 - Len (s$)
   For i = 1 To zeros
      s$ = "0" + s$
   Next
End If

For i = 0 To maxvalue
If Hex$ (i) = s$ Then Return i
Next

End Function



obviously O(n) !


fur das, dass du angeblich im 5. semester informatik studierst solltest du gaaaanz vorsichtig mit solch herablassenden kommentaren sein. zum einen weil dein codevorschlag absolut hirnrissig ist, zum anderen weil gute und richtige lösungen bereits genannt wurden(von leuten die nciht studieren aber wohl mehr ahnung haben als du) und zum dritten weil 5. semester und dieser code deine glaubwürdigkkeit seeeeeeehr schmälern.

sorry musste raus.
 

BBPro2

BeitragMi, Nov 25, 2009 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
rofl.
ironie versteht hier obv ma keiner im forum. vor allem da_poller nicht.^^

das ist der schlechteste (ineffizient) noch sinnvolle (dennoch effektiv) algorithmus den
man für diese aufgabe erstellen kann.
alles andere was die laufzeit noch weiter erhöhen würde wäre sinnlose doppelte arbeit.

also nochmal im klartext für da_poller:
NICHTS an meiner aussage war ernst gemeint, es war reine ironie.


edit:
ich weiß nich wann und wo ich geschrieben hab dass ich 5. semester informatik studieren, muss jedoch ein tippfehler gewesen sein: ich studiere im 3.
auch wenns egal ist, da ich in der 8. klasse schon solchen code nicht ernsthaft fabriziert hätte ^^ - wollte es nur feststellen Wink

D2006

Administrator

BeitragMi, Nov 25, 2009 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann bitte ich dich, sowas zukünfig besser zu kennzeichnen. Stell dir vor, ein Anfänger kommt um die Ecke, liesat deinen Beitrag, als wäre er ernst gemeint und nutzt deinen Code. Fatal! Wink

PS: Das mit dem 5. Semester hast du hier geschrieben.
 

BBPro2

BeitragMi, Nov 25, 2009 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
ok vielen dank, habs grad mal editiert.

naja stell ich mir nich so schlimm vor - ein anfänger schreibt eh programme, bei denen
effektivität vor effizienz kommt - sollte er irgendwann so weit sein, dass er programme
schreibt bei denen effizienz tatsächlich wichtig wird, sollte er bereits weit genug sein meinen
code als humbug enttarnen zu können.
auch wenn er ggf (wie wohl die meisten hier) keinen sarkasmus versteht, so sollte er dennoch in
der lage sein schwachsinnigen code zu entlarven *g

wie dem auch sei, werd ich mich in zukunft halt zurückhalten was das angeht^^

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group