Jabber Geschrieben 24. Mai 2003 Geschrieben 24. Mai 2003 Hallo zusammen, ich habe folgendes Problem: Ich würde gerne das die Buchstaben von A bis Z zufällig den Feldern zugeordent werden. ( also nicht ABCDE..sondern die Ausgabe sollte dann z.B....MAFGJL aussehen). Leider klappt das nicht so richtig. Vielleicht hätte jemand einen Tipp für mich. Was mach ich falsch?? Mit rand () müsste doch eigentlich richtig sein, oder? Thx #include <stdlib.h> #include <iostream.h> #include <conio.h> main() { char Buchstaben [26]; int i; randomize(); for (i=65; i<91; i++) { Buchstaben=rand(); cout << (char) i; } getch(); return 0; } Zitieren
Crow T. Robot Geschrieben 24. Mai 2003 Geschrieben 24. Mai 2003 Sorry, war im falschen Forum... Zitieren
nic_power Geschrieben 24. Mai 2003 Geschrieben 24. Mai 2003 Hallo, rand() liefert einen int Wert zurück, den Du einem Char-Array zuweist. Das gibt natürlich Probleme, da die Datentypen einen unterschiedliche Größe haben. Mit einem integer-Array sollte es funktioniert. Eine andere Möglichkeit ist, den Rückgabewert von rand() entsprechend zu konvertieren, in dem Du den Wertebereich auf den eines Chars reduzierst. Nic Zitieren
Diablo999 Geschrieben 24. Mai 2003 Geschrieben 24. Mai 2003 1. Der zugriff auf dein Array ist nicht ganz korrekt: for (i=65; i<91; i++) { Buchstaben[i]=rand(); Buchstaben ist ein 0-basiiertes Array, also musst du auch mit 0-x zugreifen: z.B. for (i=65; i<91; i++) { Buchstaben[i - 65]=rand(); Wenn du das nicht machst kannst du ganz schöne Probleme bekommen (--> Access Violation). 2. rand() liefert dir nen Integerwert wie von nic_power schon erwähnt wurde, du willst ja aber nur werte von 65 - 91, also das Alphabet... so in etwa: bla = (char) 65 + ( (float) rand() / (float) (RAND_MAX / (91 - 65)) ) Ich hoffe das stimmt jetzt so, habs nicht getestet... Diablo999 Zitieren
nic_power Geschrieben 24. Mai 2003 Geschrieben 24. Mai 2003 Original geschrieben von Diablo999 bla = (char) 65 + ( (float) rand() / (float) (RAND_MAX / (91 - 65)) ) Das kann man auch einfacher haben: rand()%27+65 Nic Zitieren
Jabber Geschrieben 24. Mai 2003 Autor Geschrieben 24. Mai 2003 Das mit den Zufallsbuchstaben funktioniert. {Buchstaben [i]=rand()%26+65; Jetzt würde ich das ganze gerne mit mehrdimensionalen Feldern füllen. Habe es jetzt erstmal mit einer verschachtelten for-Schleife probiert. Klappt aber leider noch nicht so ganz. Schaut euch das mal an: #include <stdlib.h> #include <iostream.h> #include <conio.h> main() { char Buchstaben [26] ; int i,x,y; randomize(); for (i=65; i<91; i++) { Buchstaben [i]=rand()%26+65; for (x=1; x<=10; x=x+1){ cout << Buchstaben [i] <<"\n"; Buchstaben [i]=rand()%26+65; for (y=1; y<40; y=y+1) cout << Buchstaben [i]; } getch(); return 0; } } Er gibt immer eine ganze Zeile das selbe Zeichen aus. Ich möchte aber das die jeweilige Zeilen auch gemischt sind. z.B. : weqüpfbzidbvshsd mdhfbynbxcorteipm pqzrimkfdlpytrgfhvs ....usw Wie könnte ich das mit den mehrdimensionalen Feldern realsieren? Zitieren
sPoOL Geschrieben 26. Mai 2003 Geschrieben 26. Mai 2003 müßte eigentlich gehen... allerdings kann ichs nicht überprüfen #include <stdlib.h> #include <iostream.h> #include <conio.h> #define ROWS 5 // anzahl deiner zeilen... main() { char Buchstaben [ROWS][26] ; int i,k; randomize(); for( k=0; k<ROWS; k++ ) { for (i=65; i<91; i++) { Buchstaben[k][i]=rand()%26+65; cout << Buchstaben [k][i]; } cout <<"\n"; } getch(); return 0; [/php] Zitieren
Jabber Geschrieben 26. Mai 2003 Autor Geschrieben 26. Mai 2003 Das sieht gut aus !! Was hast du jetzt genau gemacht ? Was kann man mit define alles machen? Wie könnte ich jetzt z.B. einer Zeile ein Wort zu ordnen? Ich habe mir das in etwa so vorgestellt: ZDVFBFBEISPIELXHFBFVCH In dieser Zeile ist das Wort Beispiel zu sehen. Die anderen Felder sind mit Zufallsbuchstaben gefüllt. Wie muss ich das Wort deklarieren damit die restlichen Felder mit Zufallsbuchstaben gefüllt werden ?? Kann das ganze noch nicht so gut umsetzen. Zitieren
sPoOL Geschrieben 26. Mai 2003 Geschrieben 26. Mai 2003 mit define setzt du für einen wert eine "variable" du hast dadurch den vorteil im gesamten quellcode nur eine stelle zu ändern wenn du zb die 5 auf 10 ändern möchtest. was ich gemacht habe? #include <stdlib.h> #include <iostream.h> #include <conio.h> #define ROWS 5 // anzahl deiner zeilen... // du könntest diese zeile auch weglassen und weiter // unten char Buchstaben[5][26]; schreiben main() { char Buchstaben [ROWS][26] ; // praktisch steht Buchstaben [5][26] da // das erste [] repräsentiert die erste dimension die zeite [] die zweite // und immer so weiter falls du mal mehr als 2 dimensionen benötigst int i,k; randomize(); // hier wird abgearbeitet k steht in diesm fall für die "erste" dimension // und i für die "zweite" // abgearbeitet wird das dann in etwa so: // 1. schleife fängt mit 0 an // start 2. schleife // setze Buchstabe[0][Wert 2. Schleife] = Zufallsbuchstabe... // das wird bis zum abbruch kriterium der 2ten schleife durchgeführt // danach wird der wert der 1ten schleife auf 1 erhöht und die 2te schleife // generriert wieder zufallszahlen Buchstabe[1][0...n]=Zufallsbuchstabe // gleichzeitig wird ja dann der wert noch ausgegeben... for( k=0; k<ROWS; k++ ) { for (i=65; i<91; i++) { Buchstaben[k][i]=rand()%26+65; cout << Buchstaben [k][i]; } cout <<"\n"; } getch(); return 0; } [/php] ich hoffe ich hab das einigermaßen verständlich rübergebracht... :floet: soll das wort zur laufzeit eingefügt werden oder willst das hardcodieren? Zitieren
nic_power Geschrieben 26. Mai 2003 Geschrieben 26. Mai 2003 Hallo, Na, wenn das mal funktioniert Du bist mit der Variablen "i" weit ausserhalb des Arrays, da Deine Laufvariable erst bei 65 beginnt (das Array jedoch bereits bei 25 aufhört). #define ist auch keine Variable, sondern "Suche und Ersetze" durch den C-Praeprozessor, nicht durch den eigentlichen Compiler. D.h. überall im Code, wo "ROWS" auftaucht, wird dies _vor_ dem Übersetzen durch den #definierten Wert ausgetauscht. Nic Zitieren
sPoOL Geschrieben 27. Mai 2003 Geschrieben 27. Mai 2003 okok... for( k=0; k<ROWS; k++ ) { for (i=0; i<26; i++) { Buchstaben[k][i]=rand()%26+65; cout << Buchstaben [k][i]; } cout <<"\n"; } [/php] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.