Erster Buchstabe immer gleich

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Woody the woodiest

Betreff: Erster Buchstabe immer gleich

BeitragSa, Jan 01, 2005 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich folgnde Funktion ausführe, und die damit generierten Namen im Programm anzeige, ist der Anfangsbuchstabe jedes Namens beim wiederholten Aufrufen der Funktion, der selbe wie bei den vorigen Malen.
Wenn ich die Namen aber in mehreren Textdateien speichere, ist der erste Buchstabe verschieden.


Code: [AUSKLAPPEN]

function Namensgenerierung()
 for a=0 to Namenanzahl
  for b=0 to Laenge(a)
   Namen$(a)=Namen$(a)+chr$(rand(Ersterbuchstabe,Letzterbuchstabe))
  next
 next
end function


Ich hab eine Ahnung, woran das liegen könnte:
Für jede dieser Textdateien hab ich das Programm extra einmal gestartet, als die Namen aber im Programm generiert wurden, war das während einem Programmstart. Ich weiß aber nicht, wie ich das beheben kann.
Danke im Voraus
Am Sonntag sind die Autobahnen leer, so kann man ruhig in Urlaub fahren.
Würden alle so denken, wären die Autobahnen am Sonntag voll.
Warum sind sie es trotzdem nicht?
Weil der Großteil der Bevölkerung gar nicht denken KANN.
 

D²O

BeitragSa, Jan 01, 2005 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
SEEDRND MILLISECS() ????
Blitz+; Blitz3d; BlitzMax; GLBasic; Purebasic;
GameMaker Studio 1.4xx; AGK;
 

Woody the woodiest

BeitragSo, Jan 02, 2005 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist schon im Code enthalten!
Am Sonntag sind die Autobahnen leer, so kann man ruhig in Urlaub fahren.
Würden alle so denken, wären die Autobahnen am Sonntag voll.
Warum sind sie es trotzdem nicht?
Weil der Großteil der Bevölkerung gar nicht denken KANN.

BladeRunner

Moderator

BeitragSo, Jan 02, 2005 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
vielleicht in deiner Mainloop enthalten? Je nachdem wie flott dein Proggie rennt weird dann der Zufallsgenerator zig-hunderte male mit demselben Wert initialisiert. Ergebnis: Gleiche Buchstaben...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Woody the woodiest

BeitragSo, Jan 02, 2005 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal der etwas vollständigere code, damit keine Irrtümer auftauchen.
@Bladerunnne:rSeedrnd millisecs() ist nicht in der Hauptschleife.

Code: [AUSKLAPPEN]


seedrnd millisecs()

const Namenanzahl=176
const mindestzahl=2
const mindestzahl=14
const Ersterbuchstabe=97
const Letzterbuchstabe=122

For a=0 To Namenanzahl
   If Laengenauswahl=0 Then
    Laenge(a)=Rand(Mindestzahl,Hoechstzahl)
   End If
Next

Function Namensgenerierung()
 For a=0 To Namenanzahl
  For b=0 To Laenge(a)
   Namen$(a)=Namen$(a)+Chr$(Rand(Ersterbuchstabe,Letzterbuchstabe))
  Next
 Next
End Function

Function Anfangsbuchstabegross()

 For a=0 To Namenanzahl
   Anfangsbuchstabe(a)=Asc(Upper$(Left$(Namen$(a),1)))  ;Der erste Buchstabe (von links) wird groß gemacht
   Namen$(a)=Chr$(Anfangsbuchstabe(a))+Right$(Namen$(a),Laenge(a)-1)
 Next
End Function

repeat
 
  if Generieren=1 then
   Generieren
    Anfangsbuchstabegross
    Generieren=0
  end if
 
until keyhit(1)
Am Sonntag sind die Autobahnen leer, so kann man ruhig in Urlaub fahren.
Würden alle so denken, wären die Autobahnen am Sonntag voll.
Warum sind sie es trotzdem nicht?
Weil der Großteil der Bevölkerung gar nicht denken KANN.

BladeRunner

Moderator

BeitragSo, Jan 02, 2005 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Da der Code nichtmal ansatzweise Komplett ist (eine ganze Ladung Dims fehlen, Syntaxfehler drin etc.) wird dir so kaum jemand helfen können.

Beispiele: generieren alleinstehend. Compiler meckert (zurecht) dass er die Funktion Generieren nicht kennt.
Zweimal Mindestanzahl als Konstante definiert.
und und und...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Woody the woodiest

BeitragSo, Jan 02, 2005 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist der ganze Code, die Images müsst ihr noch in den richtigen Folder kopieren:
Die Images:
http://www.sucox.art-fx.org/Bl...APTISM.png
http://www.sucox.art-fx.org/Bl...APTISM.png
http://www.sucox.art-fx.org/Bl...e_JLTW.png
http://www.sucox.art-fx.org/Bl...APTISM.png

Code: [AUSKLAPPEN]

Graphics 800,600,32,1          ;Vollbild mit Auflösung 800x600x32
SetBuffer BackBuffer()   
AppTitle "BAPTISM"

;Hintergrundfarbe
ClsColor 60,130,255
Color 0,0,0

SeedRnd MilliSecs()            ;Saat basiert auf vergangener Zeit seit PC-Start

;Font laden
Buttonbeschriftung=LoadFont("Franklin Gothic Medium",18,1,0,0)
Namenfont=LoadFont("Franklin Gothic Medium",16,0,0,0)



;----------------
;Images laden    |
;----------------

Mauszeiger=LoadImage("Mauszeiger_BAPTISM.png")
Anzeigeflaeche=LoadImage("Anzeigefläche_JLTW.png")
Namenanzeigeflaeche=LoadImage("Namenanzeigefläche_BAPTISM.png")
Buttonvorlage=LoadImage("Buttonvorlage_BAPTISM.png")

;-------------
;Arrays       |
;-------------

Dim Namen$(Namenanzahl)           ;Array für die zufällig generierten Namen (80 Stück)
Dim Laenge(Namenanzahl)           ;Array für die Länge jedes Namens
Dim Vokale(4)                     ;ASCII-Codes für die Vokale "a,e,i,o,u"
Dim Konsonanten(20)               ;ASCII-Codes für die Konsonanten
Dim Anfangsbuchstabe(Namenanzahl) ;ASCII-Code für den ersten Buchstaben jedes Namens 


;--------------------
;Arrays füllen      |
;--------------------

;Array "Vokale" füllen
Vokale(0)=97
Vokale(1)=101
Vokale(2)=105
Vokale(3)=112
Vokale(4)=117

;Array "Konsonanten" füllen

Konsonanten(0)=98
Konsonanten(1)=99
Konsonanten(2)=100

Konsonanten(3)=102
Konsonanten(4)=103
Konsonanten(5)=104

For a=6 To 11
 For b=106 To 111
  Konsonanten(a)=b
 Next
Next

Konsonanten(12)=113
Konsonanten(13)=114
Konsonanten(14)=115
Konsonanten(15)=116

Konsonanten(16)=118
Konsonanten(17)=119
Konsonanten(18)=120
Konsonanten(19)=121
Konsonanten(20)=122
 
;--------------------------
;Variablen/Konstanten     |
;--------------------------

;Konstanten

Const Namenanzahl=176          ;Anzahl der Namen im Array "Namen"
Const Mindestzahl=2            ;Mindestanzahl der Buchstaben in einem Namen
Const Hoechstzahl=12           ;Höchstzahl von Buchstaben in einem Namen
Const Ersterbuchstabe=97       ;ASCII-Code für den ersten Buchstaben "a"
Const Letzterbuchstabe=122     ;ASCII-Code für den letzten Buchstaben "z"

;Positionen Buttons, Anzeigeflächen etc.

;Anzeigeflächen
Const NamenanzeigeflaecheX=190
Const NamenanzeigeflaecheY=70

Const AnzeigeflaecheX=35
Const AnzeigeflaecheY=40

;Buttons
Const GenerierenbuttonX=57
Const GenerierenbuttonY=88

Const SpeichernbuttonX=57
Const SpeichernbuttonY=122
 
Const EinstellungenbuttonX=57
Const EinstellungenbuttonY=158

Const EndbuttonX=57
Const EndbuttonY=498

;Variablen


;--------------------
;Funktionen        |
;-------------------

;Funktion zur zufälligen Bestimmung der Länge der Namen
 
 Function Laengenbestimmung()
  For a=0 To Namenanzahl
   If Laengenauswahl=0 Then
    Laenge(a)=Rand(Mindestzahl,Hoechstzahl)
   End If
  Next
 End Function

;Funktion zum Generieren der Namen

Function Namensgenerierung()
 For a=0 To Namenanzahl
  For b=0 To Laenge(a)
   Namen$(a)=Namen$(a)+Chr$(Rand(Ersterbuchstabe,Letzterbuchstabe))
  Next
 Next
End Function
 
;Funktion zum großmachen der Anfangsbuchstaben der Namen

Function Anfangsbuchstabegross()
 For a=0 To Namenanzahl
   Anfangsbuchstabe(a)=Asc(Upper$(Left$(Namen$(a),1)))  ;Der erste Buchstabe (von links) wird groß gemacht
   Namen$(a)=Chr$(Anfangsbuchstabe(a))+Right$(Namen$(a),Laenge(a)-1)
 Next
End Function


;Funktion zum Speichern


;Standardpfad und -dateiname

Benutzerdefiniert=1

Global Pfad$="C:\Programme\"
Global Dateiname$="Namen"
 


Function Speichern()
 Daten=WriteFile(Pfad + Dateiname + ".txt")
 
 For a=0 To Namenanzahl
  WriteLine Daten,Namen$(a)
 Next

 CloseFile Daten
End Function

;Funktion zum Optimieren der Namen (Verhindert, dass mehr als zwei Konsonanten/Vokale hintereinander stehen)

Function Optimierung()
 For a=0 To Namenanzahl
  For b=0 To 4
   For c=0 To Hoechstzahl
    If Mid$(Namen$(a),1,1)=Vokale(b) And Mid$(Namen$(a),2,1)=Vokale(b) And Mid$(Namen$(a),3,1)=Vokale(b) Then
     Abschnitt=Rand(4)
     If Abschnitt=0 Then
      Namen$(a)=Replace(Namen$(a),Mid$(Namen$(a),3,1),Rand(98,100))
     End If
     If Abschnittg=1 Then
      Namen$(a)=Replace(Namen$(a),Mid$(Namen$(a),3,1),Rand(102,104))
     End If
     If Abschnitt=2 Then
      Namen$(a)=Replace(Namen$(a),Mid$(Namen$(a),3,1),Rand(106,111))
     End If
     If Abschnitt=3 Then
      Namen$(a)=Replace(Namen$(a),Mid$(Namen$(a),3,1),Rand(113,116))
     End If
     If Abschnitt=4 Then
      Namen$(a)=Replace(Namen$(a),Mid$(Namen$(a),3,1),Rand(118,122))
     End If
    End If
   Next
  Next
 Next
End Function

;--------------------
;Hauptschleife      |
;--------------------

Repeat
 Cls
 
 
 ;-------|------------|
 ;-------|------------|
 ;BENUTZEROBERFLÄCHE--|
 ;-------|------------|
 ;-------|------------|
 
 
 ;----------------------
 ;Buttons etc. malen   |
 ;----------------------
 
 ;Anzeigefläche
 DrawImage Anzeigeflaeche,AnzeigeflaecheX,AnzeigeflaecheY
 
 ;Namenanzeigeflaeche
 DrawImage Namenanzeigeflaeche,NamenanzeigeflaecheX,NamenanzeigeflaecheY
 
 ;Generierenbutton
 DrawImage Buttonvorlage,GenerierenbuttonX,GenerierenbuttonY
 
 ;Speichernbutton
 DrawImage Buttonvorlage,SpeichernbuttonX,SpeichernbuttonY
 
 ;Einstellungenbutton
 DrawImage Buttonvorlage,EinstellungenbuttonX,EinstellungenbuttonY
 
 ;Endebutton
 DrawImage Buttonvorlage,EndbuttonX,EndbuttonY
 
 ;------------------------
 ;Buttons beschriften    |
 ;------------------------
 
 SetFont Buttonbeschriftung         ;Font für die Beschriftung der Buttons setzen
 
 ;Generierenbutton
 Text GenerierenbuttonX+13,GenerierenbuttonY+3,"Generieren",0,0
 
 ;Speichernbutton
 Text SpeichernbuttonX+15,SpeichernbuttonY+3,"Speichern",0,0
 
 ;Einstellungenbutton
 Text EinstellungenbuttonX+5,EinstellungenbuttonY+2,"Einstellungen",0,0
 
 ;Endebutton
 Text EndbuttonX+32,EndbuttonY+2,"Ende",0,0
 
 
 
 
 ;------------------------------------
 ;Kollisionsabfragen und die Folgen  |
 ;------------------------------------
 
 ;-----------
 ;Hotkeys   |
 ;-----------
 
 ;Hotkey zum Generieren
 If KeyDown(34) Then
  Generieren=1
 End If
 
 ;Hotkey zum Speichern
 If KeyDown(31) Then
  Speichern=1
 End If
 
 ;Hotkey zum Einstellen
 If KeyDown(18) Then
  Einstellungen=1
 End If
 
 ;---------------------
 ;Gedrückte Buttons   |
 ;---------------------

 ;Beim Drücken des Endebuttons
 If ImagesCollide(Mauszeiger,MauszeigerX,MauszeigerY,0,Buttonvorlage,EndbuttonX,EndbuttonY,0) And MouseDown(1) Then
  Beenden=1
 End If
 
 ;Beim Drücken des Generierenbuttons
 If ImagesCollide(Mauszeiger,MauszeigerX,MauszeigerY,0,Buttonvorlage,GenerierenbuttonX,GenerierenbuttonY,0) And MouseDown(1) Then
  Generieren=1
 End If
 
 If Generieren=1 Then
 
  Einstellungen=0
  Speichern=0
 
  ;Funktionen aufrufen
  Laengenbestimmung        ;Länge wird für jeden Namen zufällig bestimmt
  Namensgenerierung        ;Namen werden generiert
  ;Optimierung              ;Namen werden optimiet
 
  Anfangsbuchstabegross     ;Anfangsbuchstaben werden groß gemacht
  Generieren=0
 End If

 
 ;Beim Drücken des Speichernbuttons
 If ImagesCollide(Mauszeiger,MauszeigerX,MauszeigerY,0,Buttonvorlage,SpeichernbuttonX,SpeichernbuttonY,0) And MouseHit(1) Then
  Speichern=1
 End If
 
 If Speichern=1 Then
 
  Generieren=0
  Einstellungen=0
  ;Funktion zum Speichern aufrufen
  Speichern
 End If
 
 
 ;Beim Drücken des Einstellungenbuttons
 
 If ImagesCollide(Mauszeiger,MauszeigerX,MauszeigerY,0,Buttonvorlage,EinstellungenbuttonX,EinstellungenbuttonY,0) And MouseDown(1) Then
  Einstellungen=1
 End If
 
 If Einstellungen=1 Then
  Generieren=0
  Speichern=0
   
 End If
 
 
 ;-----------------------------------------
 ;Namen auf Namenanzeigefläche anzeigen   |
 ;-----------------------------------------
 
 SetFont Namenfont
 
 ;Erste Spalte
 For a=0 To 35
  Text 197,89+a*12,Namen$(a),0,0
 Next
 
 ;Zweite Spalte
 For a=35 To 70
  Text 297,89+(a-35)*12,Namen$(a),0,0
 Next
 
 ;Dritte Spalte
 For a=71 To 106
  Text 397,89+(a-71)*12,Namen$(a),0,0
 Next
 
 ;Vierte Spalte
 For a=106 To 141
  Text 497,89+(a-106)*12,Namen$(a),0,0
 Next
 
 ;Fünfte Spalte
 For a=141 To 176
  Text 597,89+(a-141)*12,Namen$(a),0,0
 Next
 
 ;---------------
 ;Mauszeiger    |
 ;---------------
 
 
 MauszeigerX=MouseX()
 MauszeigerY=MouseY()
 
 DrawImage Mauszeiger,MauszeigerX,MauszeigerY

 
 Flip
Until Beenden=1 Or KeyHit(1)


End
Am Sonntag sind die Autobahnen leer, so kann man ruhig in Urlaub fahren.
Würden alle so denken, wären die Autobahnen am Sonntag voll.
Warum sind sie es trotzdem nicht?
Weil der Großteil der Bevölkerung gar nicht denken KANN.

Ralf

BeitragSo, Jan 02, 2005 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Code: [AUSKLAPPEN]
Function Namensgenerierung()
   For a=0 To Namenanzahl
      namen$(a)="" ; Diese Zeile musst Du einfügen, dann klappt es auch
      For b=0 To Laenge(a)
         Namen$(a)=Namen$(a)+Chr$(Rand(Ersterbuchstabe,Letzterbuchstabe))
      Next
   Next
End Function

Vor dem 2. Aufruf der Funktion werden die Inhalte des Dim-Feldes Namen$ nicht gelöscht. Darum bleibt der ertste Buchtstabe immer gleich.

Ralf
 

Woody the woodiest

BeitragSo, Jan 02, 2005 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Thx
hab jetzt aber wieder ein Problem und da ich keinen neuen thread aufmachen will, post ich das einfach hierrein, weil es sich um das gleiche prog handelt.
Also, ich hab jetzt ein Funktion geschrieben, die die Namen optimieren soll (sollen glaubwürdig klingen), die noch nciht fertig ist, aber schon einen Bug aufweist.

Code: [AUSKLAPPEN]

Function Optimierung()
 For a=0 To Namenanzahl
  For b=0 To 4
   For c=0 To Laenge(a)
    If Chr$(Mid$(Namen$(a),c,1))=b Then
     Buchstabenarten(a,c)=0
     Else Buchstabenarten(a,c)=1
    End If
   Next
  Next
 Next
End Function

Es kommt die Fehlermeldung "Parameter must be greater than 0", wenn ich das Prog ausführe.
Damit ihr den Bug bereinigen könnt, müsst ihr die Optimierungsfunktion des obenstehenden Programms(die einfaach nur bullshit ist) von mir einfach durch die hier im Post oben stehende Funktion ersetzen.
Thx im Voraus
Am Sonntag sind die Autobahnen leer, so kann man ruhig in Urlaub fahren.
Würden alle so denken, wären die Autobahnen am Sonntag voll.
Warum sind sie es trotzdem nicht?
Weil der Großteil der Bevölkerung gar nicht denken KANN.

Ralf

BeitragSo, Jan 02, 2005 22:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Zitat:
Von mir bekommst du SICHER keine Tipps mehr !

Denn wenn du dich nicht mal für etwas bedanken kannst, dann bleib wo der Pfeffer wächst !

Ich muss Hot-Bit Recht geben.
Deinen Code durchzusehen, den Fehler finden, und dies auch noch verständlich zu schreiben kostet Zeit.
Da kann man doch zumindest ein kleines Feedback erwarten, ob der Tipp nun gehofen hat oder nicht.
So ist mir das auch zu einseitig!

Ralf
 

Woody the woodiest

BeitragSo, Jan 02, 2005 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
@hot bit
Ich bedank mich doch immer im Voraus, damit ich nacher nicht noch extra einen neuen Post machen muss und ihr euch dann beschwert, dass ich meinem postzähler durch Bedankungen erhöhe. Howgh!

@Ralf
denk doch mal ein bisschen nach! Wenn ich nichts mehr schreib, heißt das, dass es geholfen hat, ist das Prob aber immer noch nicht gelöst, schreib ichs dann auch (bei meinem post nach deiner Antowrt steht am Anfang sogar ein Thx)

Thx im Voraus
Am Sonntag sind die Autobahnen leer, so kann man ruhig in Urlaub fahren.
Würden alle so denken, wären die Autobahnen am Sonntag voll.
Warum sind sie es trotzdem nicht?
Weil der Großteil der Bevölkerung gar nicht denken KANN.

d-bug

BeitragMo, Jan 03, 2005 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir fiel als erstes mal ins Auge, daß du versuchst den nullten Buchstaben ausfindig zu machen. Very Happy

Bei MID mußt du immer mit 1 beginnen !!!

Code: [AUSKLAPPEN]
Function Optimierung()
 For a=0 To Namenanzahl
  For b=0 To 4
   For c=1 To Laenge(a)
    If Chr$(Mid$(Namen$(a),c,1))=b Then
     Buchstabenarten(a,c)=0
     Else Buchstabenarten(a,c)=1
    End If
   Next
  Next
 Next
End Function


So, und jetzt noch was generelles :

Schau mal in die f..king Hilfe, da stehen solche Sachen schon mal drin ! 8)

Weil das sind wirklich ziemlich einfache Bugs gewesen...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group