Zum Inhalt springen

mathemanu

Mitglieder
  • Gesamte Inhalte

    21
  • Benutzer seit

  • Letzter Besuch

  1. Vielen Dank für die Hilfe. Jetzt funktioniert der gesamte Quellcode ohne Murren. Ja ich werde ein paar Konstanten einführen, danke für den Hinweis. Gruß Manu
  2. Also folgender Code ist zum auslesen und verarbeiten der Messdaten: #include <stdio.h> #include <stdlib.h> #include <fstream> #include <string> #include <sstream> #include <iostream> #include <iomanip> #include <algorithm> #include <iterator> #include <math.h> #include <locale.h> #include <string.h> #include <vector> #define PI 3.14159265 // using namespace std; struct ReplaceCommaWithPeriod { char operator() (char c) { if(c==',') return '.'; return c; } }; int main(){ ////////////////////////////////////////////////////////////////////////////////////////////////// // Einlesen der ersten Schwingung (Ch1 bzw Lissajou2) ////////////////////////////////////////////////////////////////////////////////////////////////// std::ifstream in("LissajouDaten2.lvm"); in.unsetf(std::ios_base::skipws); std::stringstream ss; transform( std::istream_iterator<char>(in), std::istream_iterator<char>(), std::ostream_iterator<char>(ss), ReplaceCommaWithPeriod() ); std::vector<float> newrows; copy( std::istream_iterator<float>(ss), std::istream_iterator<float>(), back_inserter(newrows)); // cout<< newrows[3]<<endl; // cin.get(); float beidemessungen[10000][2]; for(int i=0; i<10000;i++) // Typumwandlung von string in float { std::stringstream sstr; sstr<<newrows[i]; sstr>>beidemessungen[i][0]; } // std::cout << beidemessungen[1][0] <<std::endl; // std::cin.get(); ////////////////////////////////////////////////////////////////////////////////////////////////// // Einlesen der zweiten Schwingung (Ch2 bzw Lissajou1) ////////////////////////////////////////////////////////////////////////////////////////////////// std::ifstream in1("LissajouDaten1.lvm"); in1.unsetf(std::ios_base::skipws); std::stringstream ss1; transform( std::istream_iterator<char>(in1), std::istream_iterator<char>(), std::ostream_iterator<char>(ss1), ReplaceCommaWithPeriod() ); std::vector<float> newrows1; copy( std::istream_iterator<float>(ss1), std::istream_iterator<float>(), back_inserter(newrows1)); // cout<< newrows1[3]<<endl; // cin.get(); for(int i=0; i<10000;i++) // Typumwandlung von string in float { std::stringstream sstr; sstr<<newrows1[i]; sstr>>beidemessungen[i][1]; } // std::cout << beidemessungen[1][1] <<std::endl; // std::cin.get(); ///////////////////////////////////////////////////////////////////////////////////// // Schreiben in Datei "figur.dat" ///////////////////////////////////////////////////////////////////////////////////// std::ofstream schreiben1; schreiben1.open("C:\\figur.dat"); for(int k=0;k<10000;k++) { schreiben1 << beidemessungen[k][1]; schreiben1 << "\t"; schreiben1 << beidemessungen[k][0]; schreiben1 <<"\n"; } schreiben1.close(); ///////////////////////////////////////////////////////////////////////////////////// // Mittelwertbildung (Rauschen filtern) ///////////////////////////////////////////////////////////////////////////////////// float mittelwert[10000][2]; float mittel=0; for(int k=0;k<9970;k++) { for (int i=51;i>0;i--) { mittel+=beidemessungen[k+i][0]; } mittel=mittel/10; mittelwert[k][0]=mittel; mittel=0; } // std::cout << mittelwert[100][0] << std::endl; // std::cin.get(); /////////////////////////////////////////////////// for(int k=0;k<9970;k++) { for (int i=21;i>0;i--) { mittel+=beidemessungen[k+i][1]; } mittel=mittel/10; mittelwert[k][1]=mittel; mittel=0; } // std::cout << mittelwert[100][1] << std::endl; // std::cin.get(); ///////////////////////////////////////////////////////////////////////////////////// // Schreiben in Datei "mittelwert.dat" ///////////////////////////////////////////////////////////////////////////////////// std::ofstream schreiben2; schreiben2.open("C:\\Programme\\Lissajou\\mittelwert.dat"); for(int k=0;k<10000;k++) { schreiben2 << mittelwert[k][0]; schreiben2 << "\t"; schreiben2 << mittelwert[k][1]; schreiben2 << "\n"; } schreiben2.close(); ///////////////////////////////////////////////////////////////////////////////////// // Einzelne Ausgabe der Mittelwerte ///////////////////////////////////////////////////////////////////////////////////// std::ofstream schreiben3; schreiben3.open("C:\\Programme\\Lissajou\\mittelwert1.dat"); for(int k=0;k<10000;k++) { schreiben3 << mittelwert[k][0]; schreiben3 << "\n"; } schreiben3.close(); std::ofstream schreiben4; schreiben4.open("C:\\Programme\\Lissajou\\mittelwert2.dat"); for(int k=0;k<10000;k++) { schreiben4 << mittelwert[k][1]; schreiben4 << "\n"; } schreiben4.close(); // std::cout << mittelwert[10][1]; // std::cin.get(); Ich hoffe der Quelllcode ist nicht zu amateurhaft^^ ich bin noch blutiger Anfänger. Manu
  3. Ich habe jetzt mal alles auskommentiert und von oben nach unten getestet, wo es mit den Fehlern anfängt. Wenn ich folgenden Quellcode einfüge, bricht er mir die exe sofort ab, mit dem schönen Windows-Fehler-Bericht. int pulse; std::cout << "Bitte die Anzahl der Pulse eingeben (nicht mehr als 7):\t"; std::cin >> pulse; std::cout << "\n"; std::cin.get(); Daran ist doch nichts falsch, oder? Ich frage mich so langsam was ich da so programmiert habe ,wenn mein Programm scheinbar so inkonsisten ist^^ Manu Edit: Das einzige was ich vorher mache ist Daten aus einer Datei einlesen und diese dann in arrays speichern. Ich habe überall nochmal geschaut, ob ich nicht über irgendwelche array-Grenzen komme und mir alles nochmal ausgeben lassen um zu schauen, ob da was schief geht, aber die Daten sehen gut aus...
  4. Moin Leute, ich arbeite mich mal wieder durch einen Programmabschnitt und jedes Mal, wenn ich ein Stück Quellcode einkommentiere bekomme ich ganz komische Ausgaben. Ich habe 2 Sortieralgorythmen im Programm und jedes Mal, wenn ich was mit ner for-Schleife oder so einbinde zerschießt es mir die vorher richtig ausgeführte Sortiererei und er springt auch in vorhergehendem Quellcode auf einmal in Bereiche, die er mit meinen Verwendeten Messdaten nicht erreichen darf und auch ohne den eingefügten Quellcodeteil auch nicht erreicht. Was mich stutzig macht ist die Tatsache, dass der Ceash immer gleich aussieht. Ich habe einfach mal folgenden Quellcodeschnipsel vor return 0; eingefügt: int kl=0; for(i=0;i<2;i++) { kl++; } Da dürfte doch eigentlich überhaupt nichts passieren, oder? Total komisch. Ich verstehe vor allem nicht, wie er da ganz unten dann auf die Idee kommt, ganz oben auf einmal Quellcode abzuarbeiten. Ich bin schon eher ratlos muss ich sagen. Vllt kennt ja jemand sowas, oder hat einen nützlichen Tipp für mich. Schon mal vielen Dank für eure Zeit. Manu Edit: Vor allem behandelt der dann abgearbeitete Quellcode eine if-Abfrage, die Überhaupt nichts mit kl oder so zu tun hat, sondern mit einem array.
  5. Oh, ja ich hab k noch nicht wieder in die Schleife geschreiben, aber da steht eigentlich: for(int k=0;k<9970;k++) Ich falle vom Glauben ab. Ich habe int k=0; einfach über der Schleife geschrieben und dann hat er immer diesen Fehler ausgespuckt. Aber jetzt ist er weg. Ich dachte, wenn man die Laufvariable außerhalb der Schliefe initialisiert, dann geht das auch... Vielen Dank für die Antwort. Es klappt jetzt auf jeden Fall. Gruß Manu
  6. Moin Leute, ich sitze hier seit einer Stunde vor einem Programmabschnitt und der produziert mir den verwirrendsten Fehler, den ich in einem c++-Programm bis jetzt gesehen habe. Der betrachtete Code ist folgender: // int l=0; float max[10]={0}; int kmax[10]={0}; for(k;k<9970;k++) { if (mittelwert[k][0]>=max[0]) { max[0]=mittelwert[k][0]; kmax[0]=k; } } for(int i=kmax[0]-grenze;i>=0;i--) { // l++; if (mittelwert[i][0]>=max[1]) { max[1]=mittelwert[i][0]; kmax[1]=i; } } for(int i=kmax[0]+grenze;i<=9970;i++) { // if (mittelwert[i][0]>=max[2]) // { // max[2]=mittelwert[i][0]; // kmax[2]=i; // } } // std::cout << l; Folgender unbegreiflicher Fehler tritt auf: Wenn ich l auskommentiert lasse (ich brauche l an keiner anderen Stelle im Programm und wie ihr seht in dem Schnipsel hier auch nicht) , dann wird zwar ohne zu meckern von meinem boarland-compiler kompiliert, aber sobald ich die exe starte gibt mir windows aus, dass die exe ein Problem festgestellt hat und beendet werden muss. Jetzt kommt aber das lustigeste an der ganzen Sache. Wenn ich l wieder einkommentiere, dann werden meine Maxima gefunden und ausgegeben. Und zwar die richtigen Werte. Was zur Hölle könnte das denn sein? Ich verstehe das überhaupt nicht. Habe schon alles mögliche ausprobiert und teilweise kompiliert, aber ich komme nicht auf den Fehler. Es muss doch auch ohne gehen. Für Hilfe bin ich wie immer sehr dankbar. Grüße Manu PS: Der Wert grenze ist ein int-Wert von 200.
  7. Erstens: genau ist ein int-Wert, der eine Genauigkeit angibt (in meinem Beispiel ist er 24). Zweitens: beidemessungen [][] ist ein zweidimensionales Array, aus dem ich nachher noch mehr Daten auslesen will im Beispiel sind es jetzt nur 2 Messungen, also gibt es beidemessungen[][0] und beidemessungen[][1]. Drittens: Bei i werd ich mal schauen. Ich werd an das Einrücken denken. Vielen Dank. Wenn ich dann immer noch nicht weiter komme melde ich mich hier nochmal. Manu
  8. Also nochmal ne ordentliche Problembeschreibung: Ich habe den ganz oben angegebenen Quellcode benutzt. Damit wird mir immer diese 1.29349e-42 rausspuckt. Dann habe ich den Laufindex i weggelassen (damit wird natürlich nur der erste Eintrag des Arrays beschrieben, also max[0]) und er hat mir in den ersten Eintrag die richtigen Werte geschrieben. Mein eigentlcihes Problem ist folgendes: Ich suche ja mehr als ein Maxima (Ich suche 50) und die will ich alle nacheinander in das Array schreiben. Ich frage mich nur warum das mit der Einführung von i++; dann auf einmal so furchtbar schief läuft. Gruß Manu
  9. Hey Leute, ich habe es natürlich auch mit der Initialisierung des ganzen Arrays probiert. Ist aber auch Käse. Manu PS: Das die restlichen Array-Werte bei der Initialisierung eines einzigen Array-Eintrags auf Null gesetzt werden ist Fakt. Ich hab mir das Array mal komplett ausgeben lassen und es standen dann überall Nullen drin!
  10. Ok. Ich hab es jetzt natürlich mit float max[50]={0}; versucht, denn dann habe ich ja alle Werte in dem Array auf Null. Die gibt er mir auch raus (wenn ich i++ weglasse). Das Löst mein Problem aber nicht, dass er mir für alle außer den ersten Eintrag im Array max immer 1.29349e-42 rausspuckt. Manu
  11. Außerdem ist das auch nicht Kern meiner Frage. Spätestens wenn ich was in das Array reinschreibe habe ich es doch initialisiert und dann sollten doch auch meine Werte drinstehen, oder? Manu PS: Selber lesen macht schlau. Damit hat sich meine Frage nach der Teilinitialisierung auch erledigt.
  12. aber wenn ich ein array teilinitialisiere, dann klappt das? hab ich in nem c++ heft gelesen. also sowas hier: float array[20]={1,3} dann ist doch array[0]=1 arrray[1]=3 array=0 ; 1<i<20 oder? Manu
  13. Wenn ich mein Array deklariere, aber nciht initialisiere, steht dann nicht automatisch erstmal 0 in jedem Eintrag? Gruß Manu
  14. Habe eben nochmal ein wenig geschaut. Das Problem ist der Laufindex i. Ich schreibe einfach sehr oft in max[50]. Wesentlcih öfter als ich möchte. Da sollen ja nur die "echten" Maxima drinstehen, da stehen aber auch noch alle anderen Zahlen drin, die die if-Bedingung if (beidemessungen[k-1][0]<beidemessungen[k][0]) erfüllen. Kann mir da jemand helfen? Manu

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...