Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
|
07.04.14, 12:07
|
#1
|
Newbie
Registriert seit: Jan 2013
Beiträge: 64
Bedankt: 147
|
Zahl bereits vorhanden?
Hallo,
ich habe ein Problem mit einem C++ Programm.
Wollte überprüfen ob die Zahl bereits vorhanden ist.
Code:
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
vector<int> ziehung;
int rand_zahl;
bool ist_vorhanden;
for (int i = 0; i < 20; i++) {
rand_zahl = rand() % 20;
for (int j=0; j<20; j++) {
if (rand_zahl==ziehung.at(j)) {
ist_vorhanden = true;
}
else {
ist_vorhanden = false;
}
}
if (ist_vorhanden == false) {
ziehung.push_back(rand_zahl);
}
}
}
Möchte folgendes erreichen:
Wenn die Zahl bereits vorhanden ist, soll er diese Zahl nicht reinschreiben, aber trotzdem insgesamt 20 Zahlen in den Vector packen.
Danke im Vorraus.
|
|
|
07.04.14, 12:49
|
#2
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
|
Du überprüfst nicht alle Elemente in 'ziehung', du überprüfst immer nur das Element an der Stelle'j'.
EDIT: Außerdem ist das was du da machst relativ Sinnfrei da du 20 "zufällige" zahlen zwischen 0 und 19 generierst. Was zur Folge hat das jede Zahl einmal vorkommt.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
|
|
|
07.04.14, 15:19
|
#3
|
Newbie
Registriert seit: Jan 2013
Beiträge: 64
Bedankt: 147
|
aber da ist doch eine for-schleife die hochzählt (eine zweite for-schleife).
ja dieses mit dem modulo war falsch, sollte 100 sein.. (zahlen von 0-100).
aber sollte eben nicht doppelt im vector vorkommen.
|
|
|
07.04.14, 15:38
|
#4
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
|
In deiner for-Schleife überprüfst du ob an dieser stelle des Vektors deine Zahl 'rand_zahl' steht. Da der Vektor aber leer ist kann an dieser Stelle nicht deine Zahl stehen, also wird die Zahl auch immer an den Vektor angehängt.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
|
|
|
09.04.14, 00:33
|
#5
|
Newbie
Registriert seit: Jan 2013
Beiträge: 64
Bedankt: 147
|
Habe meinen Code etwas erweitert und er funktioniert im bereich "Zahl bereits vorhanden?" ohne jegliche Probleme.
Meine nächste Frage wäre, ich möchte das es den Vector so lange füllt, bis der Vector X Zahlen hat.
Wenn ich bei "ziehung.size() <= 5" mache, füllt er mir jedoch 6 Zahlen auf.. Er macht also quasi immer meinen Wunsch + 1.
Code:
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
vector<int> ziehung;
int rand_zahl;
bool ist_vorhanden;
bool is_greater;
while (ziehung.size() <= 5) {
rand_zahl = rand() % 100000;
if (rand_zahl > 50) {
is_greater = true;
}
else {
is_greater = false;
}
for (int i = 0; i < ziehung.size(); i++) {
if (ziehung.at(i) == rand_zahl) {
ist_vorhanden = true;
} else {
ist_vorhanden = false;
}
}
if (!ist_vorhanden && !is_greater) {
ziehung.push_back(rand_zahl);
}
}
for (int j = 0; j < ziehung.size(); j++) {
cout << (ziehung.at(j)) << " ";
}
}
|
|
|
09.04.14, 02:00
|
#6
|
Anfänger
Registriert seit: Jul 2009
Beiträge: 28
Bedankt: 20
|
Er macht immer einen mehr als du willst, weil du ziehung.size() <= 5 abfragst.
Somit muss ziehung.size mindestens 6 zurückgeben, damit deine while-Schleife aufhört und in dem Moment befinden sich ja bereits 6 Zahlen in deinem Vector, da ziehung.size die aktuelle größe deines Vectors zurückgibt.
|
|
|
09.04.14, 10:57
|
#7
|
Newbie
Registriert seit: Jan 2013
Beiträge: 64
Bedankt: 147
|
wenn ich den int-Wert 5 als const deklarieren würde, müsste ich also "5-1" machen.
Code:
const int maximum_size = 5;
while (ziehung.size() <= (maximum_size - 1) { ... }
hätte ich eigentlich eine alternative dafür um es genau mit einem konstanten zu erledigen?
|
|
|
09.04.14, 11:03
|
#8
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
|
Wenn ich nicht falsch verstanden habe was du willst, ist das rigendwie zu kompliziert was du da machst:
Code:
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> ziehung;
int rand_zahl=0;
int count=0;
srand((unsigned)time(NULL));
while (count < 20) {
rand_zahl = rand() % 100;
if(!(find(ziehung.begin(), ziehung.end(), rand_zahl) != ziehung.end())) {
/*zahl noch nicht vorhanden*/
ziehung.push_back(rand_zahl);
count ++;
}
}
return 0;
}
Das liefert dir 20 zufällige Zahlen.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
|
|
|
09.04.14, 14:06
|
#9
|
Newbie
Registriert seit: Apr 2010
Beiträge: 59
Bedankt: 15
|
Zitat:
Zitat von depream
wenn ich den int-Wert 5 als const deklarieren würde, müsste ich also "5-1" machen.
|
Wieso schreibst du nicht einfach <5 , damit hättest du 5 Zahlen.
Bei Java fängt er immer bei 0 an ,wird bei C++ sicher nicht anders sein.
Das ist dann auch der Grund wieso du 6 Zahlen bekommst weil du ja schreibst
<= 5 somit hast 0,1,2,3,4,5 ; mit <5 bekommste 0,1,2,3,4 also deine 5 Zahlen.
|
|
|
09.04.14, 17:52
|
#10
|
¥
Registriert seit: Jul 2013
Beiträge: 6
Bedankt: 3
|
Zitat:
Zitat von cinq
Bei Java fängt er immer bei 0 an ,wird bei C++ sicher nicht
|
Stimmt, weil Sun für Java die C-Syntax zu 100% abgekupfert hat.
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:59 Uhr.
().
|