Zum Inhalt springen

mathemanu

Mitglieder
  • Gesamte Inhalte

    21
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von mathemanu

  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
  15. Hey Leute, ich habe für ein Praktikum einen Algorithmus anzufertigen und der ist auch schon fast fertig. Jetzt habe ich nur noch ein Problem. Ich habe eine Datendatei und einen Suchalgorythmus, der mir die ganzen lokalen Maxima ausspucken soll. Da viele Messwerte (besonders bei den Minima und den Maxima) mehrfach vorkommen, habe ich eine Genauigkeit eingebaut. Der mit meinen bescheidenen Informatikkentnissen programmierte Algorythmus findet mir aber keine Maxima und gibt ganz komisches Zeug aus. kmax[] ist das Array, in dem ich die Stelle des Maximas in beidemessungen[][0] speichern will. Könnt ihr mir sagen, was da schiefläuft? float max[50]; int kmax[50]; int i=0; for(int k=1;k<10000;k++) { if (beidemessungen[k-1][0]<beidemessungen[k][0]) { for(int g=genau;g>0;g--) { if (beidemessungen[k][0]>=beidemessungen[k+g][0]){;} else goto raus; } max[i]=beidemessungen[k][0]; kmax[i]=k; i++; } raus: ; } MfG Manu
  16. Vielen Dank, stand kurz auf dem Schlauch. Manu
  17. Habe deinen Vorschlag versucht zu kompilieren, aber bekomme die Fehlermeldung "Expression syntax in line 29". Also bei [](char c)->char { scheint was faul zu sein. Danke für die Antwort. Manu
  18. Ich habe jetzt folgendes programmiert: int main(){ float newrows[10000]; string s; string row; vector<string> rows; ifstream file("LissajouDaten1.txt"); while(getline(file,row)) rows.push_back(row); cout << "File content: " << endl; for(int i = 0; i < rows.size(); i++) { cout << rows[i] << endl; } for(int i = 0; i < rows.size(); i++) { s=rows[i]; s=atof(s.Replace(",",".")); newrows[i]=s; } // cout<< rows[2]<<endl; // cin.get(); } In der letzten Schleife will ich das Komma durch den Punkt ersetzen und gleichzeitig von string zu float konvertieren. Leider bekomme ich aber zwei Fehlermeldungen raus: 1. Replace ist not a member of string 2. Cannot convert string to float Die zweite Meldung ist mir klar, da ich ja keine Ersetzung des Kommas erreicht habe, kann er auch nicht konvertieren. Nun aber meine Frage, wie kann ich denn das Komma ersetzen, wenn ich nicht Replace benutzen kann? Manu
  19. Danke für die schnelle Hilfe. Jetzt habe ich aber noch eine Frage. Es handelt sich um die Weiterverarbeitung meiner Daten. Ich brauche Zugriff auf jede einzelne Zahl. Dafür ist der Code doch nicht geeignet, oder? Sollte ich dafür die Datei nicht zeilenweise auslesen und vllt in ein Array schreiben? Ich bin ein wenig verwirrt durch die ganze Flut an Möglichkeiten aus dem Netz. Manu
  20. Guten Morgen. Ich habe letzte Woche ein Praktikum begonnen und eine Programmieraufgabe aufs Auge gedrückt bekommen. Jetzt suche ich seit drei Stunden im Internet nach einer Lösung für folgendes Problem: Ich muss eine txt-Datei mit Zahlenwerten auslesen und Kommazahlen in Punktzahlen verwandeln um damit dann in C++ weiterarbeiten zu können. Das ist kein Problem und ich habe auch schon viele Codes dafür gesehen. Unter anderem auch diesen hier: int main(void) { ifstream in("LissajouDaten1.txt"); copy(istreambuf_iterator<char>(in), istreambuf_iterator<char>(), ostreambuf_iterator<char>(cout) ); cin.get(); return EXIT_SUCCESS; } Der ließt mir zwar meine Datei aus, ich kann ihn jedoch nicht dazu bewegen mir meine ausgelesenen Kommazahlen in Punktzahlen zu verwandeln. Ich weiß auch nicht so recht, ob das überhaupt ein geeigneter Code für die Manipulation meiner Daten ist. Wäre sehr erfreut über Hilfe. Gruß 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...