Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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;

}

Sorry, war im falschen Forum...

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

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

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?

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]

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:

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?

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

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]

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.