Wie fülle ich ein array mit zufälligen Werten aus einem Bereich? (Duplikate sind OK.)
Ich bin neu in C++, ich habe ein problem mit array-manipulation. Ich habe ein array von X mit der Länge 100, die ich füllen muss der Wert von X mit ganzzahligen Wert von 1 bis 10 (1,2,3,4,5,6,7,8,9,10) nach dem Zufallsprinzip.
Ich weiß, dass es doppelte, vielleicht wie 1 gedruckt zehnmal, etc, aber das ist wirklich das was ich will.
Hier ist was ich habe:
einem array von X:
int X[100];
Hier ist mein code-snippet:
int* X = NULL;
int* val = NULL;
int length1= 100;
int length2= 10;
X = new int[length1];
val = new int[length2];
int i;
int j;
for (i = 0; i < isi; i++) {
val[i] = i;
for (j = 0; j < length1; j++) {
if (j > i) {
X[j] = val[i];
} else {
X[j] = val[0];
}
cout << "X[" << j << "] = " << X[j] << "\n";
Sleep(1);
}
}
Code oben macht das array X vom index 0 bis 99 hat den Wert 0, dann index 0 bis 99 hat den Wert 1 und für die anderen index, bis der index von 0 bis 99 hat den Wert 9.
Dies ist nicht das, was ich will, was ich will, ist, es zu machen (wenn es nicht random) index 0 bis 9 muss der Wert 0, dann 10-bis 19-Wert von 1 ... bis-index von 90 bis 99 hat den Wert 9. Hoffe, dass meine Erklärung klar.
Habe ich eine Frage bei stackoverflow: Wie würdest du ein array von 10000 mit nur Werte von 1-1000 inclusive?
Aber immer noch nicht lösen können mein problem meiner selbst.
Kann jemand bitte geben Sie mir Lösung dafür.
Danke im Voraus
std::generate
und es hat gleichmäßige Verteilungen.Ich denke, die OP ist auf einer grundlegenden Ebene. wie gefragt, wo ist das verdammte random-Funktion in C++, wie man einen loop, also auf.
Ja, ich bin noch neu, kann jemand bitte erklären Sie mir die basic.
Ich habe versucht, mit Schleifen-innere Schleife auf und setzen Sie die array-Wert für die Schleife variabel, kann es erreicht werden, wie diese? Ich werde mein code-snippet, um die Frage deutlich zu machen
Ja, bitte 🙂 Auch eine klare Beschreibung, warum es nicht funktioniert, falls relevant, einschließlich der compiler-Fehler verbatim.
InformationsquelleAutor codelop | 2014-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind zwei Möglichkeiten, um dieses problem zu lösen - denn dies ist eine Lernerfahrung, die nur pseudo-code (und entsprechenden links). Jede "Aufgabe" kann nachgeschlagen werden gelöst und getrennt. Beachten Sie, dass weder Methode verwendet eine sekundäre array.
Wenn der Betrag jeder Zahl in der letzten Folge braucht nicht das gleiche zu sein (zB. 2 vielleicht erscheint 17-mal), dann betrachten die folgende Schleife-und-weisen-random Ansatz. Ein standard-C-for-each-Schleife ist ausreichend.
Wenn die Menge der zahlen müssen das gleiche zu sein, dann betrachten Sie füllen das array und dann mischen Sie es. Die modulo-operator ist sehr praktisch hier. (Dies setzt Voraus, die array-Länge ist ein Vielfaches von der Größe der Gruppe.)
Für den shuffle sehen Fisher-Yates, das zeigt auch eine C-Implementierung - es gibt "mehr C++" Möglichkeiten, aber dies ist eine gute Technik zu erlernen und zu üben, mit Schlaufen. (Eine kühle Eigenschaft über Fisher-Yates-ist, dass sobald ein Element vertauscht, in der aktuelle index bei der letzten swap-Position - so ist die shuffle-Schleife modifiziert werden, um shuffle und sofort eine Aktion ausführen, wie z.B. die Anzeige des Wertes.)
In beiden Fällen eine random - Funktion sollte verwendet werden; sonst werden die zahlen nicht sein .. random.
InformationsquelleAutor user2864740
Für eine Ausgabe können Sie
#include <iostream>
und dannstd::cout << "r[" << i << "] = " << r[i] << "\n"
innerhalb der Schleife nach jedem Auftrag.Wenn Sie wollen seed random number generator für eine andere Reihenfolge, dann
#include <time.h>
und dannsrand(time(NULL))
vor Ihrem ersten Aufrufrand
.Bei allem Respekt, Sortieren eines Arrays von Integer-zahlen in C++ wurde erklärt, ausreichend über das internet und StackOverflow schon. Es ist leicht zu finden. Ich hoffe, dass die random array-code über Ihre Frage beantwortet.
Danke @Darren Stein, tatsächlich hilft es aber ich kann nur wählen Sie eine Antwort, die user2864740 Antwort für die Lernerfahrung und pseudocode gegeben. Danke
InformationsquelleAutor Darren Stone
Können Sie auch
generate
Funktion:Es ist Teil der standard-Bibliothek, so dass es nutzbar sein soll (Sie müssen
include <random>
oder versuchenstd::random_device
)Ja, ich habe versucht, dass in einem anderen Projekt, aber minGW-compiler scheint nicht unterstützen es noch. Hier ist die Fehlermeldung:
error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options
InformationsquelleAutor w.b
Schleife über die Elemente einer Sammlung, die die meisten natürlichen C++ - Schleife ist der - range-basiert für Schleife.
Etwas zuordnen muss, um jedes Element, das formale Element name sollte einen Bezug, also:
Diese dient jedes Element des Arrays in der Reihenfolge, um den code markiert durch ein Kommentar.
Gibt es zwei verschiedene random-Generatoren in C++, der alten C-Bibliothek, die nur ein paar Funktionen, und die Allgemeine und modern, aber auch nicht-so-einfach-zu-verstehen C++11-Dingens. Ich schlage vor, Sie google es, und versuchen herauszufinden Dinge. Stellen Sie neue, speziellere Frage, ob/Wann stecken.
X
ist das array.item
ist ein beliebiger name gewählt werden, stehen für ein Element des Arrays (Sie bekommen eine andere jedes mal um die Schleife, und in dieser Reihenfolge).auto&
ist die Art deritem
; kann man auch schreibenint&
da Sie wissen, dass die grundlegende Art istint
. Die&
sagt, dass dies ist ein Verweis. Wenn es eine Referenz, die Sie können ändern Sie das Element im array, im Gegensatz zu, wenn es eine Kopie, in dem Fall ändern, es ändert nicht die ursprünglichen array-Element.oh, und der Doppelpunkt
:
ist nur ein Teil der Reihe basiertfor
Schleife syntax.InformationsquelleAutor Cheers and hth. - Alf
Ich denke, andere haben darauf hingewiesen, aber Sie haben zu schreiben zunächst die pre-compiler-Direktive
#include <ctime>
und verwenden Sie dann die srand-Funktion. Die meisten würden sagen, dass Sie nicht verwenden, aber da Sie und ich sind die Grundlagen unserer Lehrer, bzw. starten Sie Sie uns mit. Und es könnte die Arbeit mit Ihrem compiler.Hier ist ein link um mehr darüber zu erfahren. Ich würde kommentiert haben, aber ich kann nicht.
http://www.cplusplus.com/reference/cstdlib/srand/
InformationsquelleAutor Arturo