Array an zufälliger Stelle füllen



  • Hi,
    bin neu im Forum und hoffe das ich richtig bin.
    Ich wollte mein Array an einer zufälligen Stelle mit einem 'Z' füllen.
    Könntet ihr mir vielleicht ein Tipp geben?

    Vielleicht was mit stand??
    Danke schonmal für eure Antworten.

    #include <stdio.h>
    #include <cstdlib>
    
    int main() {
    char array[25][25];
       for(int i=0;i<25;i++){
           for(int j=0;j<25;j++){
               array[i][j]='O';
    
           }
       }
    
        for(int i=0; i<25; i++) {
    
    	for(int j=0; j<25; j++) {
    		printf("%c ",array[i][j]);
    	}
    	printf("\n");
    }
    
        return 0;
    }
    


  • An welcher Stelle hängst du denn fest? Eigentlich gibts da kein großes Geheimnis. Einfach zwei Zufallszahlen generieren und an diesen Stellen ins Array schreiben. Für Zufallszahlen siehe rand.


  • Mod

    Soll das C oder C++ sein? Du fragst im C++-Forum, aber der Code ist, bis auf eine (unnötige) Zeile, C.

    In C:
    srand initialisiert den globalen (Pseudo!) Zufallsgenerator mit einem Anfangswert:
    http://en.cppreference.com/w/c/numeric/random/srand
    Wenn man srand nicht benutzt, wird der globale Generator am Programmbeginn mit 0 initialisiert, das heißt, man erhält bei jedem Programmablauf die gleiche Sequenz von "Zufalls"zahlen. Das kann erwünscht sein oder auch nicht. Falls nicht, dann bietet es sich an, den Zufallsgenerator vor der Ziehung mit einem Wert zu initialisieren, der bei jedem Programmstart unterschiedlich ist. Beispielsweise die Uhrzeit (aber Computeruhren sind oft nur auf 1 Sekunde genau!), die Prozessnummer (falls das Betriebssystem Prozessnummern hat*) oder mit einer vom Betriebssystem gelieferten Zufallszahl (falls das Betriebssystem so etwas hat*).

    Mit rand lässt man sich vom globalen Generator eine ganzzahlige Zufallszahl generieren, zwischen 0 und der Konstante RAND_MAX. Wie du diese Zahl auf eine Zahl im gewünschten Bereich umrechnen kannst, überlasse ich mal dir zur Übung. Mathematik.
    http://en.cppreference.com/w/c/numeric/random/rand

    In C++ gibt es prinzipiell auch srand und rand, aber es gibt vor allem auch nicht-globale Zufallsgeneratoren, automatische Umrechner, und Quellen echter Zufallszahlen zur Initialisierung. Alles ganz ohne dass man das Betriebssystem für so etwas bemühen müsste. Aber da dein Code so sehr nach C aussieht, spare ich mir eine Beschreibung, bis ich nicht genau weiß, ob es C++ oder C sein soll.

    Und dann machst du das eben 1 Mal oder 94 Mal. Bei den 94 Mal ist die Frage, ob eine Koordinate auch doppelt vorkommen darf oder nicht. Falls kein Wert doppelt vorkommen darf: Falls 94 klein ist gegenüber der Zahl möglicher Werte (also der Zahl der Felder in deinem Array), kann man einfach prüfen, ob da schon ein X ist oder nicht, falls ja wiederholt man die Ziehung. Falls 94 ungefähr gleich groß ist wie die Zahl der Felder, bietet es sich an, eine Liste möglicher Felder zu führen. Dann werden Werte zufällig aus der Liste gestrichen und gezogene Werte vor der nächsten Ziehung entfernt.

    *: Wird es in aller Regel!



  • Sorry hab wohl das falsche Forum gewählt.Sollte C sein.

    Ich glaube,dass ich es nicht richtig formuliert habe. Ich habe ein Array 25*25,das mit "O" gefüllt ist.Jetzt will ich, dass es an einer zufälligen Stelle mit einem "Z" gefüllt wird.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum C (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Easy43 schrieb:

    Ich glaube,dass ich es nicht richtig formuliert habe. Ich habe ein Array 25*25,das mit "O" gefüllt ist.Jetzt will ich, dass es an einer zufälligen Stelle mit einem "Z" gefüllt wird.

    Und inwiefern wurde die Frage nicht beantwortet, außer dass ich 'X' statt 'Z' geschrieben habe?

    Wenn du Probleme damit hast, dann musst du deine Probleme konkreter erklären.



  • Schau dir doch die Beispiele von rand/srand auf den verlinkten Seiten an und versuche diese in dein Programm einzubauen. Wenn es an etwas konkretem scheitert oder das Programm nicht das macht was du erwartest fragst du nochmal nach.



  • sebi707 schrieb:

    An welcher Stelle hängst du denn fest? Eigentlich gibts da kein großes Geheimnis. Einfach zwei Zufallszahlen generieren und an diesen Stellen ins Array schreiben. Für Zufallszahlen siehe rand.

    Wieso empfiehlst du absichtlich einen schlechteren Zufallszahlengenerator, wo es doch minstd_rand gibt (C++11)?

    https://www.c-plusplus.net/forum/334173-20#2465716



  • Weil C++11 nunmal kein C ist.



  • Eigentlich empfehle ich sonst immer gerne die neuen C++11 Zufallszahlengeneratoren aber ich habe es mir hier mal gespart, da der TO wohl Anfänger ist und die neuen Zufallsgeneratoren schon komplizierter zu initialisieren und zu benutzen sind.



  • So habe es endlich geschafft.
    War wohl gestern bisschen spät,als ich versuch habe mein Problem zu schildern.
    Sry...

    #include <stdio.h>
    #include <cstdlib>
    
    int main() {
        char array[25][25];
        for(int i=0;i<25;i++){
            for(int j=0;j<25;j++){
                array[i][j]= {'O'};
            }
        }
        array[rand()%26][rand()%26]='Z';   //Zufällige Stelle mit einem Z
        array[rand()%26][rand()%26]='R';   //Zufällige Stelle mit einem R
        for(int r=0;r<94;r++){             //an 94 zufälligen Stellen
           array[rand()%26][rand()%26]='H'; //H
    
        }
        // Schleife fuer Zeilen, Y-Achse
        for(int i=0; i<25; i++) {
            // Schleife fuer Spalten, X-Achse
            for(int j=0; j<25; j++) {
                printf("%c ",array[i][j]);
            }
           printf("\n");
        }
    
        return 0;
    }
    

    Gruss Easy43



  • Durch das %26 bekommst du Zahlen von 0 bis 25 (einschließlich der Grenzen).

    Der maximale gültige Index in deinem Feld ist aber nur 24.
    Im Zweifelsfall schreibst du über die Grenzen hinaus.

    Und du wirst bei jedem Programmstart das gleiche Bild erhalten.



  • Danke für dein Hinweis. Ist mir nicht aufgefallen.
    Wie kann ich das machen, dass die Buchstaben jedesmal an zufälligen Stellen platziert werden?

    Hab an der %26 rumgespielt, aber immer dasselbe Bild.

    Gruß Easy43


  • Mod

    Schön, dass du Antworten, an denen andere Leute 20 Minuten geschrieben haben, so geflissentlich ignorierst.


Anmelden zum Antworten