C++ Programm Kartenreihen |
21.02.2016, 21:08 | leoclid | Auf diesen Beitrag antworten » | ||||||||||
C++ Programm Kartenreihen Dieses Programm macht folgendes: Man gibt einen Wert 1 ein. Man gibt einen Wert 2 ein. Das Programm generiert nun Wert2 Zufallsreihen der Länge Wert1 mit den Zahlen von 1 bis Wert1. Dabei kommt jeder dieser Werte jeder der Zufallsreihen nur einmal vor. Jeder Zufallsreihe wird nun eine Zahl zugeordnet, in dem man die Beträge der Differenzen aufeinanderfolgender Zahlen addiert. Das Programm gibt anschließend aus, bei wieviel der Wert2 Zufallsreihen welche Zahl zugeordnet wurde. Hier ist der Code:
Das Problem. Als Beispiel: Als erste Zahl wird 10, als zweite Zahl 100.000 eingegeben. Das Programm generiert also 100.000 10er Zahlenreihen.. Am Ende gibt es aus, wie oft die 1, 2, 3, 4,5,6 ....., 45 ausgegeben wurde. Addiert man aber alle diese Werte, kommt man nicht auf 100.000, sondern auf einen kleineren Wert. Ich vermute, dass mein Fehler im mathematischen Teil liegt. |
||||||||||||
21.02.2016, 21:42 | HAL 9000 | Auf diesen Beitrag antworten » | ||||||||||
Spät kommt sie, doch sie kommt - die Antwort auf meine diesbezügliche Nachfrage in diesem deinem Thread zum selben Thema: Beste Programmiersprache für Einsteiger und Mathematik Ich finde es schon sehr merkwürdig, deine Vergesslichkeit, um nicht zu sagen Ignoranz deiner früher gestarteten Threads. Ich sage das, weil mir das schon häufiger bei dir aufgefallen ist. |
||||||||||||
21.02.2016, 21:44 | leoclid | Auf diesen Beitrag antworten » | ||||||||||
Es tut mir leid Kann bitte ein Administrator den älteren Thread wieder schließen. Ich habe dass noch mal durchrechnen lassen, allerdings modifiziert. Diesmal wird mir ausgegeben, wenn einer Zahlenreihe ein Wert größer als 46 zugeordnet wird. Das passiert einige male. Also steckt im Teil, in dem die Beträge berechnet werden irgendwo ein Fehler, da bei einer Zahlenreihe mit den Zahlen 1 2 3 4 5 6 7 8 9 10 dort das Maximum der Ausgabe bei 45 liegt. Zahlenreihe: 1 10 2 9 3 8 4 7 5 6 |
||||||||||||
21.02.2016, 21:56 | HAL 9000 | Auf diesen Beitrag antworten » | ||||||||||
Wer sagt denn, dass das Maximum bei 45 liegt? Bei 6 1 10 2 9 3 8 4 7 5 kommt klar 49 heraus. P.S.: Dein Verfahren zur Erzeugung der Permutation ist äußerst ineffizient: Beim letzten Element würfelst du u.U. sehr sehr lange, bis du das eine passende, noch nicht vorkommende Element erwürfelt hast. Ersetze also besser die Sequenz
|
||||||||||||
21.02.2016, 22:02 | leoclid | Auf diesen Beitrag antworten » | ||||||||||
Ich danke dir für deine Geduld. Wie gesagt, wir hatten das Problem bei einer Modellierungswoche und wir sind echt alle davon ausgegangen, dass das Maximum bei 45 liegt. Aber hast vollkommen recht. Dumm, dass ich das nicht selbst gemerkt habe. |
||||||||||||
21.02.2016, 22:38 | HAL 9000 | Auf diesen Beitrag antworten » | ||||||||||
Die Betragsdifferenzsumme bei solchen Permutationen bewegt sich zwischen und , wobei beide Grenzen scharf (d.h. auch tatsächlich erreichbar) sind.
An der Stelle hätte das Programm übrigens crashen können: Da du im Fall length=10 nur Platz für 45 Feldelemente für count reserviert hast, wird in dem ja möglichen Fall abssum=49 auf Element count[48] zugegriffen - schreibend zugegriffen... Der berühmte "buffer overflow", verantwortlich für einen Gutteil der Einfallstore/Sicherheitslecks. |
||||||||||||
Anzeige | ||||||||||||
|
||||||||||||
22.02.2016, 22:18 | HAL 9000 | Auf diesen Beitrag antworten » | ||||||||||
Hab mal ein wenig zur Theorie dieser Summe der Betragsdifferenzen gerechnet: Die entsprechende Zufallsgröße hat Erwartungswert und Varianz . Für ergibt das . Und für ist es . Für große kann man gemäß ZGWS die Normalverteilung zur Approximation der Verteilung dieser Zufallsgröße anwenden. |
|