Zum Inhalt springen

Felder mit rand () versehen klappt nicht!


Jabber

Empfohlene Beiträge

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 :D

#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;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. :rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...