Array sortierung Problem |
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Geht das jetzt schon wieder los, Victor? Kommst Du jetzt alle paar Monate oder Jahre wieder?
Da ist schon wieder alles falsch. Du hast nach wie vor überhaupt gar nichts begriffen. Es bleibt dabei: Nimm Dir endlich ein Buch und arbeite es von vorne durch. Oder einen der unzähligen Online-Kurse zu dem Thema!
|
|
09.04.2018 17:49 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
|
09.04.2018 18:32 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Übrigens: Was Grundsätzliches, was Du auch nicht verstanden hast: Die Funktion calculateMinMaxTemp soll Das Minimum und das Maximum bestimmen, aber doch nicht das Array verändern oder gar sortieren. Deshalb ist Dein Ansatz, ein Bubble-Sort Beispiel als Vorlage zu nehmen, schon falsch.
Aber es gibt, wie immer bei Dir, auch noch unzählige andere Fehler auf allen möglichen Ebenen...
|
|
09.04.2018 18:39 |
|
|
Sky33 unregistriert
|
|
Ich habe es ja nicht sortiert ,sondern versucht mit dem bubblesort irgendwie den grössten Wert raus zu suchen
Ich hatte sonst keine Idee wie ich auf den grössten WERT kommen soll?
|
|
09.04.2018 18:58 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Mal angenommen, Du würdest vor einem Bildschirm sitzen und ein Computer würde Dir nach und nach Zufallszahlen präsentieren. Du hättest die Aufgabe, Dir die größte zu merken.
Was würdest Du tun?
|
|
10.04.2018 00:16 |
|
|
Sky33 unregistriert
|
|
Habe das Programm so umgeändert mittlerweile
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
|
#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;
}
}
}
|
|
|
|
10.04.2018 05:15 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Und warum redefinierst Du die Membervariable m_last24hrsTemp als lokale Varianle in der Methode? Das überschreibt ja die Membervariable und geht dann auch wieder schief...
Das Problem ist halt nach wie vor (und das sind ja jetzt schon viele Monate...), dass Du einfach die Prinzipien nicht verstehst, weder von der Objektorientierten Programmierung in C++, aber auch schon C++/C-Grundlagen, etc, und darüber hinaus auch schon die Algorithmik und deren Logik nicht verstehst. Also auf allen Ebenen durchgängig verstehst Du nichts.
Und das Problem ist, dass Du Dich auch gar nicht darauf einlässt sondern nach wie vor Deine "Problemlösungstaktik" fährst: Poste in alle möglichen Foren, irgendjemand wird schon einen Fetzen liefern, den füttere wieder in die anderen Foren, als ob Du selbst was raus gefunden hättest, um dort die Leute dazu zu bringen, wieder einen weiteren Fetzen zu liefern. Aber ja nicht selbst drüber nachdenken und verstehen versuchen, warum die Leute dies und jenes tun oder sagen, dass irgendwas falsch ist.
Das bringt Dir nichts und uns so wie so nicht. Ich verstehe nicht, warum Du das überhaupt machst...
Gruß
Marco
|
|
10.04.2018 11:40 |
|
|
Sky33 unregistriert
|
|
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
|
#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;
}
}
}
|
|
Das ist ja mein aktueller Ansatz gewesen .
Besser ?
|
|
10.04.2018 12:39 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Zitat: |
Original von Sky33
Das ist ja mein aktueller Ansatz gewesen .
Besser ? |
Das ist doch genau derselbe Quelltext!??!?
|
|
10.04.2018 16:17 |
|
|
Sky33 unregistriert
|
|
Nein das ist doch mein neuer Ansatz String :
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
|
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;
}
}
}
|
|
Das min temp hat doch den niedrigsten Wert oder ?
|
|
10.04.2018 17:54 |
|
|
Sky33 unregistriert
|
|
Sorry Gate dein Beitrag nicht gelesen
|
|
10.04.2018 17:57 |
|
|
Sky33 unregistriert
|
|
Mir wurde ja bereits schon erklärt ,dass man es so machen soll:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
|
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];
}
|
|
was ich nicht verstehe ist warum man das hier so definieren muss?
float min = m_last24hrsTemp[0];
float max = m_last24hrsTemp[0];
Im Header ist ja bereits m_maxTemp und m_minTemp gegeben?
Ich dachte ,dass wenn man das so macht:
m_last24hrsTemp[i]>m_last24hrsTemp[m_maxTemp]
der maximale Temp gefunden wird ?
Wieso soll man da einfach nur max schreiben ?
|
|
10.04.2018 18:11 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Was willst Du eigentlich? Du versuchst ja noch nichtmal zu verstehen, wie der Algorithmus überhaupt funktioniert.
Außerdem hast Du auch nicht den Post im anderen Forum gelesen, der sagt, dass die Bestimmung von len falsch ist.
|
|
11.04.2018 01:14 |
|
|
as_string
Haudegen
Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg
|
|
Und wer ist "Gate"? Kommst Du möglicherweise mit den ganzen Foren irgendwie durcheinander?
|
|
11.04.2018 01:16 |
|
|
|
|
|
|
|