Lottozahlenprogramm Hilfe!
-
Achso, ähm... Der
vectorist einfach eine sicherere Methode alsnewunddeletezu benutzen.
Ist also ziemlich leicht wie du siehst.
-
Ich frage mich wie man bei solchen Fragestellungen/Fragern noch antwortet.
Und ihr habt ja echt teilweise noch Hoffnung, dass es den Fragestellern wichtig ist oder die sich mit der Materie beschäftigen oO
-
Skym0sh0 schrieb:
Ich frage mich wie man bei solchen Fragestellungen/Fragern noch antwortet.
Und ihr habt ja echt teilweise noch Hoffnung, dass es den Fragestellern wichtig ist oder die sich mit der Materie beschäftigen oOWenn es wirklich eine Hausaufgabe ist, dann muss er sich wohl damit beschäftigen, denn sonst wird er bald ein richtiges Problem in der Schule / Uni haben. Was er daraus macht ist nicht mein Ding.
-
#include <iostream> #include <vector> #include <ctime> template<typename T> void swap(T &var1, T &var2) { T temp = var1; var1 = var2; var2 = temp; } //Ok, aber std::swap würde uch gehen. Sagen wir mal, außer std::vector will man //die STL meiden. template<typename T> void mix_vector(std::vector<T> &vec) { srand((unsigned)time(NULL));//Nicht hier. Immer nur am ANfang der main() for(size_t i = 0; i < vec.size(); ++i) {//Warum alle und nicht nur max_nums? size_t ran_num1 = rand() % vec.size();//Ungeschickt. http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle size_t ran_num2 = rand() % vec.size(); swap(vec[ran_num1], vec[ran_num2]); } } template<typename T> void bubble_sort(std::vector<T> &vec) { bool swapped; do { swapped = false; for(size_t i = 0; i < vec.size()-1; ++i) { if(vec[i] > vec[i+1]) { swap(vec[i], vec[i+1]); swapped = true; } } } while(swapped); } //statt swapped ist es geschickter, den maximalen Index sich zu merken, wo //noch eine Vertauschung stattgefunden hatte und im nächsten Durchlauf bis //dahin nur zu laufen. int main() { const int LOTTO_NUMS = 49; int max_nums; do { std::cout << "Anzahl der Lottozahlen, die gezogen werden sollen: "; std::cin >> max_nums; } while(max_nums < 1 || max_nums > 12); std::vector<unsigned int> lotto_nums(LOTTO_NUMS); for(size_t i = 0; i < lotto_nums.size(); ++i) lotto_nums[i] = i+1; mix_vector(lotto_nums); for(size_t i = 0; i < LOTTO_NUMS-max_nums; ++i) lotto_nums.pop_back(); //lotto_nums.resize(max_nums); bubble_sort(lotto_nums); std::cout << "Die " << max_nums << " Lottozahlen lauten: "; for(int i = 0; i < max_nums; ++i) std::cout << lotto_nums[i] << ' '; }
-
Skym0sh0 schrieb:
Ich frage mich wie man bei solchen Fragestellungen/Fragern noch antwortet.
Und ihr habt ja echt teilweise noch Hoffnung, dass es den Fragestellern wichtig ist oder die sich mit der Materie beschäftigen oOich unterstelle mal, Du meinst hier nicht 'wie' sondern 'wieso man überhaupt antwortet'. Nun ich meinerseits neige dazu, in dieser Weise zu antworten:
#include <iostream> #include <algorithm> // copy, iter_swap #include <iterator> // ostream_iterator #include <numeric> // partial_sum #include <vector> #include <ctime> // std::time #include <cstdlib> // std::rand template< typename I, typename F > void random_drawing( I from, I to, I last, F rnd ) { using std::iter_swap; const std::ptrdiff_t sz = last - from; for( I i = from; i != to; ++i ) iter_swap( i, from + rnd() % sz ); } int main() { using namespace std; srand( static_cast< unsigned int >(time(nullptr)) ); const int N = 6; vector< int > zahlen( 49, 1 ); partial_sum( begin(zahlen), end(zahlen), begin(zahlen) ); // alle Zahlen von 1 bis 49 int anzBloecke; cout << "Wieviel Bloecke wollen Sie spielen? "; if( cin >> anzBloecke ) // warum das hier auf 12 begrenzen? { for( int block=1; block<=anzBloecke; ++block ) { random_drawing( begin(zahlen), begin(zahlen)+N, end(zahlen), std::rand ); // Ziehung von N Zahlen // -- sortieren und ausgeben sort( begin(zahlen), begin(zahlen)+N ); copy( begin(zahlen), begin(zahlen)+N, ostream_iterator< int >( cout << block << ".Block: ", " " ) ); cout << endl; } } return 0; }jetzt gibt es den Fragesteller betreffend mehrere Möglichkeiten:
1.) der Fragesteller versteht nichts und ignoriert die Antwort
2.) der Fragesteller gibt den Code als seine Hausarbeit ab und der Lehrer/Dozent sieht, dass sich das der Fragesteller nicht selbst erarbeitet haben kann und gibt ihm eine schlechte Note.
3.) (wie 2.) aber der Lehrer/Dozent akzeptiert das - dann ist er selber Schuld, die Noten an diesem Institut sind eh' nichts wert
4.) der Fragesteller versteht die Antwort zwar nicht, meint aber dass das so ok ist und beginnt, sich mit der Materie zu beschäftigen und gezielt nachzufragen.Das wären IMHO die Möglichkeiten mit fallender Wahrscheinlichkeit. Fall 4 würde mir am besten gefallen, aber passiert fast nie.
Und warum mache ich das jetzt (oder WTFIsUrQ, oder sonst wer) und das obwohl man manchmal dafür geschlagen wird oder die Antwort sofort vom Moderator gelöscht wird? - die Wahrheit ist: just coding for fun.volkard schrieb:
template<typename T> void swap(T &var1, T &var2) { ...} //Ok, aber std::swap würde uch gehen. Sagen wir mal, außer std::vector will man //die STL meiden.warum eigentlich? STL von Anfang an - std::swap ist wirklich nicht schwer zu verstehen.
Gruß
Werner
-
Werner Salomon schrieb:
template< typename I, typename F > void random_drawing( I from, I to, I last, F rnd ) { using std::iter_swap; const std::ptrdiff_t sz = last - from; for( I i = from; i != last; ++i ) iter_swap( i, from + rnd() % sz ); }towird gar nicht benutzt. So, wie es jetzt ist, wär ich mir gar nicht sicher, ob das einer Gleichverteilung von Permutationen entspricht. Und dabei meine ich jetzt gar nicht, dass ggfrnd()%szkeine Gleichverteilung hat. Ich würde das noch so modifizieren:template< typename I, typename F > void random_drawing( I from, I to, I last, F rnd ) { using std::iter_swap; std::ptrdiff_t sz = last - from; for( I i = from; (i != to) && sz>1; ++i, --sz ) // ^^^^^^^^^^^^^^^^^ ^^^^ iter_swap( i, i + rnd() % sz ); // ^ }
-
Werner Salomon schrieb:
volkard schrieb:
template<typename T> void swap(T &var1, T &var2) { ...} //Ok, aber std::swap würde uch gehen. Sagen wir mal, außer std::vector will man //die STL meiden.warum eigentlich? STL von Anfang an - std::swap ist wirklich nicht schwer zu verstehen.
Vielleicht weil die Aufgabe möglicherweise nicht mit STL-Algorithmen gelöst werden darf?
Klar, schwer zu verstehen ist das alles nicht. Ich gehe aber davon aus, dass Sachen wie sort und copy zu Übungszwecken selbst implementiert werden sollen. Schlimmstenfalls hat auch der Lehrer noch nie was von STL gehört und kann damit nichts anfangen. Sollte nicht sein, lässt sich aber nicht ausschließen.
-
Autsch - mit dem 'to' hast Du völlig Recht, so hätte man auch std::random_shuffle nehmen können - ich hab's korrigiert. Das war vorher auch so, aber ich hatte die Variablen umbenannt.
Die Sache mit der Gleichverteilung ist die Frage. Den Gedanken hatte ich auch, sah aber keinen Grund es nicht so zu machen. Ich denke hier http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle steht einiges zum Thema - bin gerade beim Durchlesen.
Gruß
WernerPS.: @volkard: Danke für den Link.
-
zuerst mal habe ich hier von keinem erwartet er solle meine hausaufgabe erledigen also könnt ihr eure dummen kommentare für euch behalten wen ihr nicht helfen wollt dan haltet einfach euren mund ja habe mir ein Buch geholt und es nun alleine fertig gestellt hat zwar etwas länger gedauert aber auch ohne hilfe.
Trotzdem nochmal danke an die die sich wirklich damit beschäftigt haben und auch versucht haben mir zu helfen.
damit ist das thema abgehakt.
-
Elraser1993 schrieb:
zuerst mal habe ich hier von keinem erwartet er solle meine hausaufgabe erledigen also könnt ihr eure dummen kommentare für euch behalten wen ihr nicht helfen wollt dan haltet einfach euren mund ja habe mir ein Buch geholt und es nun alleine fertig gestellt hat zwar etwas länger gedauert aber auch ohne hilfe.
Diese Kommentare wären die beste Hilfe gewesen, die du hättest bekommen können, wenn du sie ernst genommen und über dein Verhalten nachgedacht hättest. Du bekommst hier eben nicht nur Hilfe zu deinem Problem (welches du gar nicht genau formuliert hast - dies ist ein weiteres Problem von dir, bei dem dir diese Kommentatoren helfen wollten), sondern auch dazu, wie du dir selber helfen kannst oder wie du leichter fremde Hilfe bekommst. Leider hast du dies nicht erkannt und dein neuester Thread geht schon wieder genau so los wie dieser hier. Das heißt, du wirst höchstwahrscheinlich auch nur wieder hochtrabende Scherzantworten zu deinem Thema bekommen, anstatt Hilfe auf deinem eigentlichen Niveau.