C++ Algorithmen
-
Ich mache es mal für den maximal Wert :
void CTempSensor::calculateMinMaxTemp(){ float tmp = 0; float tmph = 0; float m_Zahl[24]; for(int i = 0; i<24;i++){ if(m_Zahl[i]>m_Zahl[i+1]){ tmp = m_Zahl[i+1]; m_Zahl[i+1] = m_Zahl[i]; m_Zahl[i]= tmp; } if(m_Zahl[i]<m_Zahl[i+1]){ tmp = m_Zahl[i]; m_Zahl[i] = m_Zahl[i+1]; m_Zahl[i+1]= tmp; } m_maxTemp =....... worin soll ich das dann speichern? } }
Ich hoffe das ihr wenig helfen könnt?
Auch wenn ihr nicht gerne anscheinend bei Aufgaben hilft
-
Doch wir helfen gerne. Hilfe zur Selbsthilfe steht ganz oben. Du greifst immernoch auf ein 25tes Element zu (i+1), das ist fatal.
-
void CTempSensor::calculateMinMaxTemp(){ float tmp = 0; float tmph = 0; float m_Zahl[24]; int length = 24-1; for(int i = 0; i<length;i++){ if(m_Zahl[i]>m_Zahl[i+1]){ tmp = m_Zahl[i+1]; m_Zahl[i+1] = m_Zahl[i]; m_Zahl[i]= tmp; } if(m_Zahl[i]<m_Zahl[i+1]){ tmp = m_Zahl[i]; m_Zahl[i] = m_Zahl[i+1]; m_Zahl[i+1]= tmp; } m_maxTemp =....... worin soll ich das dann speichern? } }
Das mit der Länge hatte ich irgendwie vergessen
Die 2 Bedingungen müssten jetzt richtig sein?
Aber die frage ist wo ich jetzt den maximalen Wert speichern soll
-
Ok, das geht zwar schöner, aber belassen wir es mal dabei. In der for-Schleife tauschst du Arrayelemente. Das verstehe ich nicht. Du willst doch das größte und kleinste Element im Array finden. Klar kann ich das Array nach der Größe sortieren und dann das erste und letzte Element ausgeben. Aber das ist ja extrem umständlich. Wenn ich zur Arbeit fahre, fahr ich ja auch nicht über Honolulu.
Was du brauchst, ist ein Merkmechanismus. Irgendjemand muss sich merken, was aktuell die kleinste und größte Zahl ist.
-
Ich poste jetzt mal die Aufgabe :
Die Methode retrieveLastMeasurements() erzeugt 24 Zufallswerte und weist Sie dem Array (1) m_last24hrsTemp[24] zu. Rufen Sie diese Methode im Konstruktor von CTempSensor auf, um
das Array zu initialisieren.
b) Die private Methode void calculateMinMaxTemp() soll aus den 24 Messwerten im Array m_last24hrsTemp[24] die Minimal- und die Maximaltemperatur heraussuchen und in die
Attribute m_minTemp bzw. m_maxTemp speichern. Implementieren Sie diese Methode. Rufen Sie die
Methode dann im Konstruktor auf, um m_minTemp und m_maxTemp zu initialisieren.Der Konstruktor zeigt zwar noch Fehler auf die ich nicht verstehe aber ok.
Die Header war so vorgegeben . Nur den Konstruktor habe ich mit den member Variablen ergänzt.Hier meine Idee :
Header:
#ifndef CTEMPSENSOR_H_ #define CTEMPSENSOR_H_ #include <iostream> using namespace std; class CTempSensor { private: float m_last24hrsTemp[24]; // array of last 24 measurements [vorgegeben] float m_minTemp; // minimum Temp of last 24hrs [vorgegeben] float m_maxTemp; // maximum Temp of last 24hrs [vorgegeben] void calculateMinMaxTemp(); public: CTempSensor(float minTemp = 0 , float maxTemp = 0); virtual ~CTempSensor(); void retrieveLastMeasurements(); // erzeugt 24 Zufallswerte [vorgegeben] void print(); // gibt die Messdaten aus [vorgegeben] float checkTempRange(float, float); // [vorgegeben] }; #endif /* CTEMPSENSOR_H_ */
cpp jetzt so:
da waren auch paar implementierte Methoden dabei:
#include "CTempSensor.h" #include <iostream> // Header fuer die Standard-IO-Objekte (z.B. cout, cin) #include <cstdlib> // fuer random values #include <iomanip> // fuer setw() #include <string> using namespace std; // Erspart den scope vor Objekte der // C++-Standard-Bibliothek zu schreiben // z.B. statt "std::cout" kann man "cout" schreiben CTempSensor::CTempSensor(float minTemp,float maxTemp) { CTempSensor::retrieveLastMeasurements(); m_minTemp = minTemp; m_maxTemp = maxTemp; } // generiert 24 Zufallswerte zw. 5 und 95 Grad [vorgegeben] void CTempSensor::retrieveLastMeasurements() { for (int i=0; i<24;i++) { m_last24hrsTemp[i] = (rand() % 900 + 50) / (float)10; } } // gibt min/max und die 24 Messwerte aus [vorgegeben] void CTempSensor::print() { cout << "min: " << m_minTemp << " | max: " << m_maxTemp << " | Letzte 24 Messwerte: "; for (int i=0; i<24;i++) { cout << setw(4) << m_last24hrsTemp[i] << " | " ; } cout << endl; } // gibt den Prozentsatz der Werte in der Range zurueck [gegeben fuer Aufgane 3c] float CTempSensor::checkTempRange(float low, float high) { int inRange = 0; int outOfRange = 0; for (int i=0; i<24;i++) { if (m_last24hrsTemp[i] < low || m_last24hrsTemp[i] > high) { outOfRange++; } else { inRange++; } } return 100*inRange/24.; } CTempSensor::~CTempSensor() { // TODO Auto-generated destructor stub } void CTempSensor::calculateMinMaxTemp(){ float m_last24hrsTemp[24]; int length =24-1; for(int i = 0; i<lenght;i++){ if(m_last24hrsTemp[i]>m_last24hrsTemp[m_maxTemp]){ m_maxTemp = i; } } for(int i = 0; i<length;i++){ if(m_last24hrsTemp[i]<m_last24hrsTemp[m_minTemp]){ m_minTemp = i; } } }
-
Ich wollte nur darauf hinweisen, dass er wieder dieselbe Frage in verschiedenen Foren postet und dann einfach versucht, Teilergebnisse aus Diskussionen auf andere Foren zu verteilen, so dass man meint, er hätte selbst etwas raus gefunden, so dass er wieder wo anders weiter geholfen bekommt, usw.
Hier ist er aktuell auch bei "uns":
http://www.informatikerboard.de/board/thread.php?threadid=3882Außerdem War er auch hier schon mit anderen Fragen, parallel auch in verschiedenen Mikrocontroller-Foren und so, Hauptsache es gibt eine C/C++ Sparte.
Hier war er zb in diesem Forum:
https://m.c-plusplus.net/344399Immer wenn eher antik wirkende C++-Aufgaben auftauchen, bei denen alle Membervariablen ein m_... vorne dran haben und alle Klassen ein großes "C", dann ist es wohl derselbe...
-
Nur so nebenbei. Mehrere Schleifen sind gar nicht notwendig für die Ermittlung des maximalen und minimalen Wertes. Das lässt sich schön in einer Schleife abbilden.
float min = m_last24hrsTemp[0]; float max = m_last24hrsTemp[0]; int len = sizeof(m_last24hrsTemp); for(int i = 1; i < len ; i++) { if(m_last24hrsTemp[i] > max) max = m_last24hrsTemp[i]; if(m_last24hrsTemp[i] < min) min = m_last24hrsTemp[i]; }
-
Deine Lösung ist fehlerhaft (Zeile 4)...
Aber so eine einfache Lösung sollte wohl jeder Programmieranfänger selber hinbekommen.
-
@inflame woran merkt es denn der Compiler in deinem Code das nur Max der maximale Wert ist ?
Du erstellst zu Beginn ja nur das Max an der Nullten , also ersten Stelle des Arrays .
Soll ich also in meinem Code auch einfach >m_maxTemp schreiben ?
Ich verstehe gar nicht warum String sich wegen mir so viel Mühe macht .
Wenn er nicht helfen will kann er doch einfach weg gehen .
Wenn ich Probleme bei einer Aufgabe habe und merke , dass im Informatiker Forum überhaupt gar nichts los ist , kann ich die Frage doch in einem anderen Forum Posten .Und bisher habe ich keinen einzigen Tipp von irgendjemanden bekommen .
Die Ansätze waren von mir selbst .
Auch in diesem Forum haben sich paar Leute nur lustig gemacht um eine Ansätze .
Oder sage ich was falsch ?
-
lolly33332 schrieb:
Ich verstehe gar nicht warum String sich wegen mir so viel Mühe macht .
Weil du ein Fass ohne Boden bist, in dem Hilfsbereitschaft sinnlos versenkt wird. In Foren wie diesem sind Leute unterwegs, die anderen helfen wollen. Wenn lernresistente Leute wie du dafür sorgen, dass Hilfsbereitschaft sinnlos vergeudet wird, dann wird anderen, die die Hilfe eher verdienen würden, schlechter geholfen. Das wurmt hilfbereite Leute wie as_string und mich. Ich bin etwas überrascht, dass du hier noch Antworten bekommst, wo doch schon nach dem ersten Beitrag klar war, dass das völlig sinnlos ist. Ich zwinge ungern andere Leute, jemandem nicht zu helfen, aber das hier geht echt zu weit: [/closed]