[Gelöst] Erfassung von drei gleichen Folgegliedern bei Zufallszahlen
-
@Swordfish sagte in [Gelöst] Erfassung von drei gleichen Folgegliedern bei Zufallszahlen:
Ich würde eher file.ignore(std::numeric_limitsstd::streamsize::max(), ',') nehmen weil file.ignore() nur ein Zeichen wegwirft.
Davon würde ich abraten. Du bekommst dann nämlich nicht mit, wenn die Inputdatei fehlerhaft ist. Also zum Beispiel "12 x Hallo ,3" enthält. Das liest bei dir erfolgreich 12 und 3. Normalerweise ist
skipws
an, d.h. man kann eine Zahl oder ein Zeichen lesen und überspringt dabei automatisch whitespace. Bei Erfolg vom Einlesen der Zahl liest man noch ein char ein und vergleicht es mit ',' bzw überprüft auf eof.
-
@wob Das ist mir schon klar, daß
ignore()
nicht geeignet ist um ein Dateiformat zu verifizieren. War auch nicht der Anspruch.
-
Ich finde, dass gerade beim Lesen von externen Dateien unbedingt ein Check auf Gültigkeit dazugehört - immer!
Vielleicht bin ich zu sehr durch sich ständig ändernde Formate gebrandmarkt. Egal, ob man mit einem Kunden schriftlich irgendein Format vereinbart, es kommt doch was anderes raus. Sogar wenn man eine Woche lang täglich korrekte Datenupdates erhält - plötzlich ändert sich das Format und niemand weiß, warum. Daher: FORMATE IMMER ÜBERPRÜFEN. Man sollte gar nicht erst damit anfangen, beliebig viele Zeichen bis zu einem Komma zu ignorieren, wenn man eigentlich nur Whitespace überspringen will.
-
@wob Da stimme ich Dir voll und ganz zu, nur
@Marco_der_Noob sagte in [Gelöst] Erfassung von drei gleichen Folgegliedern bei Zufallszahlen:
im Rahmen eines Praktikums mit dem Thema True-Random-Number-Generator habe ich eine Datei "U12KASRO.dat" mit einer Milllion Zufallszufallszahlen im Bereich zwischen 0 und 1 getrennt durch ein Komma.
... ich weiß nicht.
-
Danke nochmal für die zahlreichen Vorschläge und Anmerkungen.
Die Zufallzahlen habe ich im Rahmen des Praktikums selbst erzeugt. Zum einen habe ich durch lineare Kongruenzgeneratoren (C-intern / Modulo-Funktion) Pseudozufallszahlen erzeugt und für die echten Zufallszahlen einen externen Quantis-Zufallszahlengenerator benutzt. Das Format habe ich somit selbst vorgegeben.
Ich werde mein C++-Wissen noch etwas erweitern um euren Code auch 100% zu kapieren.
Bis zum nächsten Problem,
Marco
-
@Marco_der_Noob sagte in [Gelöst] Erfassung von drei gleichen Folgegliedern bei Zufallszahlen:
Das Format habe ich somit selbst vorgegeben.
Dann hätt' ich an Deiner Stelle die Kommas weggelassen:
#include <vector> #include <fstream> #include <iostream> #include <iterator> using namespace std; int main() { char const *filename = "test.txt"; std::ifstream is{ filename }; if (!is.is_open()) { std::cerr << "Couldn't open \"" << filename << "\" for reading :(\n\n"; return EXIT_FAILURE; } std::vector<float> numbers{ std::istream_iterator<float>{ is }, std::istream_iterator<float>{} }; // und schon sind die zahlen in numbers. }
-
@Swordfish Bei den anderen Programmen habe ich die Tests gleich eingebunden.. Aber die Quantis-Daten habe ich in jugendlichen Leichtsinn mit Komma getrennt. Wollte nicht mein Excel,Mathematica,IGOR,Origin,... mit einer Milllion Zahlen quälen
Die Kommas sind mir egal, das Ergebnis passt. So fertig nun. Hab noch genug andere Baustellen am Laufen. Physik-Studium ist kein Ponyhof.
C++ ist in der Prioritätsliste jedenfalls gestiegen.
-
@Marco_der_Noob Die Kommas würdest Du mit einem Texteditor und Find&Replace in Null-Komma-Nix (no pun ) los.
-
@Swordfish Mit Zufallszahlen kann man noch lustige 3D-Plots usw. machen.. Jede Menge Mist um Studenten zu ärgern. Da müssen noch einige Programme an ihre Grenzen gebracht werden, bevor das Ruhe hat. Aber der C++ Teil ist jetzt notdürftig zusammengeflickt.
-
@Marco_der_Noob sagte in [Gelöst] Erfassung von drei gleichen Folgegliedern bei Zufallszahlen:
Aber der C++ Teil ist jetzt notdürftig zusammengeflickt.
...
-
Mir ist außerdem aufgefallen, dass in der Linux-Umgebung (irgend ein Scientific Linux, kp welches genau / Codeblocks / gnuCompiler) das Programm mit dem großen Array durchlief.
Bei meinem Heimrechner (Windows 10 Pro / DevC++ / MinGW) hängt sich alles auf...
Bekomm ich auf dem Linux-Rechner mehr Stack-Speicher reserviert?!
-
Sieht so aus. Und?
-
Dann wirds Zeit auf meinem Heimsystem das Betriebsystem zu wechseln. Hab ich nicht gewusst. Danke
-
@Marco_der_Noob sagte in [Gelöst] Erfassung von drei gleichen Folgegliedern bei Zufallszahlen:
Bekomm ich auf dem Linux-Rechner mehr Stack-Speicher reserviert?!
Du meinst wohl eher auf deinem Windows mit MinGW:
g++ -Wl,--stack -Wl,<size>
<size>
ist die Stackgröße in Bytes.
Plan-B (klickibunti in Code::Blocks):
Menü
Project
~>Build Options...
~> tabOther compiler options
~>-Wl,--stack -Wl,<size>
eintragen.
-
Aber das macht man einfach nicht, große statische Arrays zu reservieren! Das ist ein Anti-Pattern. Bloß weil du dein Betriebssystem zwingen kannst, es trotzdem zuzulassen, ist das dadurch nicht gut. Du vertuscht damit bloß deine Unfähigkeit, nicht-grauenhafte Programme zu schreiben.
-
@SeppJ sagte in [Gelöst] Erfassung von drei gleichen Folgegliedern bei Zufallszahlen:
Du vertuscht damit bloß deine Unfähigkeit, nicht-grauenhafte Programme zu schreiben.
Kein Grund, hier gleich zu solchen Worten zu greifen. @Marco_der_Noob lernt offenbar gerade. Eine gute Lösung wurde von @yahendrik gegeben, ist aber ggf. untergegangen: also, wenn du, Marco, wirklich alle Zahlen speichern musst, schau dir
std::vector
an. Vermeide es, die Stack-Größe zu ändern. Du willst doch nicht von der Stackgröße abhängig sein, sondern vom gesamten verfügbaren Speicher des Computers.
-
Rechtfertigung: Ich wollte bloß dem Anschein entgegenwirken, es würde nicht gehen.
-
Der gefürchtete Autovergleich:
- TE: "Der Motor würgt immer ab, wenn ich losfahren will!"
- Forum: "Zeig mal Foto!"
- TE: "Hier."
- Forum: "Du hast die Handbremse noch angezogen und den 5. Gang drin"
- TE: Ich hab jetzt den ersten Gang drin, aber es geht immer noch nicht."
- Forum: "Du hast die Handbremse immer noch angezogen"'
- TE: "Bei dem Auto von der Fahrschule geht das. Ich sollte wohl ein neues Auto kaufen."
- Swordfish: "Du kannst auch ganz viel Gas geben und die Kupplung ganz langsam kommen lässt, geht das auch mit Handbremse"
- SeppJ: "Mach endlich die verdammte Handbremse los!"
- wob: "Er ist doch offensichtlich noch Fahranfänger…"
-
@SeppJ Nur dass dein vorletzter Kommentar so nicht passt. Eher:
- ...
- Swordfish: "Du kannst auch ganz viel Gas geben und die Kupplung ganz langsam kommen lässt, geht das auch mit Handbremse"
- SeppJ: "Mach das nicht!" (ok bis hier), "Du bist unfähig/zu dumm, Auto zu fahren!" (geht anders besser, z.B. "besuche eine Fahrschule")
- wob: "lös die Handbremse (=nimm vector)"
So wollte ich meinen Kommentar verstanden sehen.
Vor dem "Du vertuscht...", wo es persönlich wurde, war der Kommentar von @SeppJ ja durchaus sehr gut und richtig.
-
@SeppJ sagte in [Gelöst] Erfassung von drei gleichen Folgegliedern bei Zufallszahlen:
Swordfish: "Du kannst auch ganz viel Gas geben und die Kupplung ganz langsam kommen lässt, geht das auch mit Handbremse"
Ha-ha.
Btw.
@Marco_der_Noob sagte in [Gelöst] Erfassung von drei gleichen Folgegliedern bei Zufallszahlen:Folgeglieder
Er hat "Glied" gesagt! Ha-Ha!