B
Hallo zusammen
Danke für die Antworten, die ich leider erst jetzt gelesen habe und doch schon eine Lösung gefunden habe dank eines Denkanstosses unseres Progress-Programmierers, der mir gezeigt hat wie er das ganze im Progress geschreiben hat.
Vor 10min habe ich das Lottospiel noch ganz fertig geschrieben und wollte euch noch meine Lösung vorstellen, inklusive Auswertung, Zahlengenerator und Resultat. Die ganzen Kommentare im Code waren für das Debugging, lasst euch davon nicht iritieren. Der Code ist wahrscheinlich viel zulange für das was ich machen wollte aber jeder fängt mal klein bzw. in diesem Fall mit nem grossen Code an
#include <iostream>
#include <cstdlib>
#include <string>
#include <time.h>
using namespace std;
int zahleneingabe();
int main() {
int userzahl[6] = {0, 0, 0, 0, 0, 0};
int genzahl[6] = {0, 0, 0, 0, 0, 0};
int neuezahl, neuegen, i, j, resultat=0;
const int x=1,y=46;
for(i=0; i<6; i++){
neuezahl=zahleneingabe();
//cout<<"neuezahl: "<<neuezahl;
if(neuezahl < 1 || neuezahl > 46){
cout<<"\n Zahl ungueltig!\n";//<<i;
i--;
}
else{
//cout<<"else";
for(j=-1;j<i;j++){
//cout<<"neu: "<<neuezahl;
if(userzahl[j]==neuezahl){
cout<<"\n Zahl schon vorhanden!\n";//<<userzahl[j]<<" : "<<neuezahl<<" "<<" j: "<<j<<" i: "<<i;
i--;
}else{
userzahl[i] = neuezahl;
}
}
}
}
cout<<"\n Ihre Zahlen: "<<userzahl[0]<<" "<<userzahl[1]<<" "<<userzahl[2]<<" "<<userzahl[3]<<" "<<userzahl[4]<<" "<<userzahl[5]<<endl;
//cout<<"\n Lottozahlen werden erzeugt!\n";
srand((unsigned)time(NULL));
for(int k=0; k<6; k++){
genzahl[k] = (rand()%46);
genzahl[k]++;
for(int l=0; l<k; l++){
if(genzahl[k]==genzahl[l]){
k--;
}
}
}
cout<<"\n Lottozahlen: "<<genzahl[0]<<" "<<genzahl[1]<<" "<<genzahl[2]<<" "<<genzahl[3]<<" "<<genzahl[4]<<" "<<genzahl[5]<<"\n";
//cout<<"\n Zahlen werden verglichen";
for(int m=0;m<6;m++){
for(int n=0;n<6;n++){
if(genzahl[m]==userzahl[n]){
resultat++;
}
}
}
//cout<<"\n Resultat wird ausgegeben";
if(resultat==0){
cout<<"\n Sie haben "<<resultat<<" von 6 Zahlen richtig! Sorry, versuch es nocheinmal!\n\n";
}else{
cout<<"\n Sie haben "<<resultat<<" von 6 Zahlen richtig! Glueckwunsch!\n\n";
}
cin.get();
return 0;
}
int zahleneingabe(){
int neuezahl;
cout<<"\n Bitte Zahl eingeben: ";
cin>>neuezahl;
return neuezahl;
}
Irgendwann vieleicht einmal Noch verstehe ich deinen Code nicht.
cpppro schrieb:
Wenn du mal gross bist, lernst du solche Programme zu schreiben:
#include <iostream>
#include <algorithm>
#include <iterator>
#include <boost/algorithm/clamp.hpp>
#include <boost/range/algorithm/count.hpp>
#include <boost/iterator/filter_iterator.hpp>
int main()
{
std::vector<int> userzahl;
std::copy_n(boost::make_filter_iterator([&](int i){
return (i==boost::algorithm::clamp(i, 1, 46) && !boost::range::count(userzahl, i)) || !(std::cout << "Ungueltige Eingabe\n"); },
std::istream_iterator<int>(std::cin)),
6,
std::back_inserter(userzahl));
}
Ja wir haben Stunden damit verbracht bis wir auf eine Lösung gekommen sind um genau zusein 1,5 Arbeitstage. Naja aber nur so lernt man. Danke für deine ausfürhliche Antwort ich werde mir davon noch Notizen machen und noch in meinen Code einbinden so gut es geht.
Werner Salomon schrieb:
Ja, ja - ein scheinbares einfache Problem; und doch so schwierig!
Nehmen wir mal an Du überlegst, wie es in Deinem Programm ab Zeile 7 weiter geht. Dort soll eine Zahl eingegeben und geprüft werden. Bei negativem Prüfergebnis soll die Eingabe wiederholt werden.
Beginne wie folgt:
for(;;) // forever, bis Eingabe ok (s.u.)
{
cout << "\n Bitte geben sie eine Zahl ein: ";
cin >> userzahl[i];
// und hier kommt jetzt die Prüfung; falls alles ok, wird die Schleife mit 'break;' verlassen
}
Zuerst die Prüfung, ob die Zahl im Intervall von 1 bis 46 liegt:
const int MINI = 1;
const int MAXI = 46; // Konstanten vermeiden die Redundanz von Zahlen
const int N = 6;
int userzahl[N];
for (int i = 0; i < N; ++i) {
for(;;) // forever, bis Eingabe ok (s.u.)
{
cout << "\n Bitte geben sie eine Zahl ein: ";
cin >> userzahl[i];
if( MINI <= userzahl[i] && userzahl[i] <= MAXI ) // prüfe ob die Zahl im geforderten Intervall liegt
{ // die Zahl liegt im Intervall
// ... ggf. weitere Prüfungen
break; // Schleife verlassen, Eingabe ist ok
}
else
{ // die Zahl liegt nicht im Intervall
cout << " Ungueltige Eingabe - Zahl liegt nicht im geforderten Intervall [" << MINI << ".." << MAXI << "]" << endl;
}
}
Der "set" befehl ist mir noch unbekannt und konnte den Code nur teilweise verstehen. Aber trotzdem Danke
TNA schrieb:
Wie wäre es damit, für die Überprüfung ob eine Zahl bereits vorhanden ist einfach ein Set zu nehmen, dann kann man sich die Aufwändige Schleife sparen und die Zahlen sind gleich sortiert, was bei Lottozahlen ja durchaus sinnvoll ist.
Ihr könnt nach Lust und Laune meinen Code noch in Fetzen reissen und Verbesserunsvorschläge bringen. Wie gesagt man lernt ja nie aus
Nochmals Danke für all die Hilfe
Gruss Thomas