myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Zahl bereits vorhanden?

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 07.04.14, 12:07   #1
depream
Newbie
 
Registriert seit: Jan 2013
Beiträge: 64
Bedankt: 147
depream ist noch neu hier! | 0 Respekt Punkte
Standard 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.
depream ist offline   Mit Zitat antworten
Ungelesen 07.04.14, 12:49   #2
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

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"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 07.04.14, 15:19   #3
depream
Newbie
 
Registriert seit: Jan 2013
Beiträge: 64
Bedankt: 147
depream ist noch neu hier! | 0 Respekt Punkte
Standard

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.
depream ist offline   Mit Zitat antworten
Ungelesen 07.04.14, 15:38   #4
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

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"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 09.04.14, 00:33   #5
depream
Newbie
 
Registriert seit: Jan 2013
Beiträge: 64
Bedankt: 147
depream ist noch neu hier! | 0 Respekt Punkte
Standard

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)) << "   ";
        }
}
depream ist offline   Mit Zitat antworten
Ungelesen 09.04.14, 02:00   #6
Zerafir
Anfänger
 
Registriert seit: Jul 2009
Beiträge: 28
Bedankt: 20
Zerafir ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Zerafir ist offline   Mit Zitat antworten
Ungelesen 09.04.14, 10:57   #7
depream
Newbie
 
Registriert seit: Jan 2013
Beiträge: 64
Bedankt: 147
depream ist noch neu hier! | 0 Respekt Punkte
Standard

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?
depream ist offline   Mit Zitat antworten
Ungelesen 09.04.14, 11:03   #8
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

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"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 09.04.14, 14:06   #9
cinq
Newbie
 
Registriert seit: Apr 2010
Beiträge: 59
Bedankt: 15
cinq ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von depream Beitrag anzeigen
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.
cinq ist offline   Mit Zitat antworten
Ungelesen 09.04.14, 17:52   #10
Berlin1992
¥
 
Registriert seit: Jul 2013
Beiträge: 6
Bedankt: 3
Berlin1992 ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von cinq Beitrag anzeigen
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.
Berlin1992 ist offline   Mit Zitat antworten
Antwort


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

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:59 Uhr.


Sitemap

().