Array sortierung Problem

Neue Frage »

Auf diesen Beitrag antworten »
Sky33 Array sortierung Problem

Hallo alle zusammen beschäftige mich mit der folgenden Übungsaufgabe wo ich bei der b)
im Array einfach die grösste und jeweils kleinsten Wert raussuchen muss .

Ich habe es ein wenig probiert und das raus ,was ich direkt auch poste .

In der AUfgabe war die Rumpf Implementierung so gegeben :


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:

#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]



public:
	CTempSensor();
	virtual ~CTempSensor();

	void retrieveLastMeasurements();  // erzeugt 24 Zufallswerte [vorgegeben]
	void print();                     // gibt die Messdaten aus [vorgegeben]
	float checkTempRange(float, float); // [vorgegeben]


};

#endif /* CTEMPSENSOR_H_ */





Die cpp war so gegeben:


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:
#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()
{
	// TODO Auto-generated constructor stub



}

// 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
}







Ich habe es jetzt so erweitert :

Habe auch noch im Konstruktor die min und max temp Variablen initialisiert ?
Das muss ich doch so machen oder ?

Ich glaube da ist irgendwo ein Fehler bei der b) bei mir ?
Mein Compiler (Eclipse ) zeigt Fehler an?


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:

#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 m_minTemp = 0 , float m_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_ */



Meine cpp


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:
#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 m_minTemp,float m_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 tmp = 0;
	 float tmph = 0;
	 float m_last24hrsTemp[24];
	 
	 for(int i = 0; i<24;i++){
		 if(m_last24hrsTemp[i]>m_last24hrsTemp[i+1]){
			 
			 tmp = m_last24hrsTemp[i+1];
			 m_last24hrsTemp[i+1] = m_last24hrsTemp[i];
			 m_last24hrsTemp[i]= tmp;
		 }
		 m_maxTemp = tmp;
		 
	 }
	 
	 for(int i = 0; i<24;i++){
	 		 if(m_last24hrsTemp[i]<m_last24hrsTemp[i+1]){
	 			 
	 			 tmph = m_last24hrsTemp[i+1];
	 			 m_last24hrsTemp[i+1] = m_last24hrsTemp[i];
	 			 m_last24hrsTemp[i]= tmph;
	 		 }
	 		 m_minTemp = tmph;
	 		 
	 	 }
 }






Fehler:
Description Resource Path Location Type
make: *** [CTempSensor.o] Error 1 CTemp C/C++ Problem
out-of-line definition of 'calculateMinMaxTemp' does not match any declaration in 'CTempSensor' CTempSensor.cpp /CTemp line 78 C/C++ Problem
Symbol 'maxTemp' could not be resolved CTempSensor.cpp /CTemp line 26 Semantic Error
Symbol 'minTemp' could not be resolved CTempSensor.cpp /CTemp line 24 Semantic Error
use of undeclared identifier 'maxTemp'; did you mean 'm_maxTemp'? CTempSensor.cpp /CTemp line 26 C/C++ Problem
use of undeclared identifier 'minTemp'; did you mean 'm_minTemp'? CTempSensor.cpp /CTemp line 24 C/C++ Problem
 
Auf diesen Beitrag antworten »
as_string

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!
Auf diesen Beitrag antworten »
as_string

Ich sehe, Du bist auch schon wieder in den anderen Foren zugange:
https://www.c-plusplus.net/forum/347070
Auf diesen Beitrag antworten »
as_string

Ü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...
 
Auf diesen Beitrag antworten »
Sky33

Ich habe es ja nicht sortiert ,sondern versucht mit dem bubblesort irgendwie den grössten Wert raus zu suchen großes Grinsen

Ich hatte sonst keine Idee wie ich auf den grössten WERT kommen soll? unglücklich
Auf diesen Beitrag antworten »
as_string

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?
Auf diesen Beitrag antworten »
Sky33

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; 
             } 
              
  
         } 
 }	







Auf diesen Beitrag antworten »
as_string

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
Auf diesen Beitrag antworten »
Sky33

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 ?
Auf diesen Beitrag antworten »
as_string

Zitat:
Original von Sky33

Das ist ja mein aktueller Ansatz gewesen .

Besser ?

Das ist doch genau derselbe Quelltext!??!?
Auf diesen Beitrag antworten »
Sky33

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 ?
Auf diesen Beitrag antworten »
Sky33

Sorry Gate dein Beitrag nicht gelesen
Auf diesen Beitrag antworten »
Sky33

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 ?
Auf diesen Beitrag antworten »
as_string

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.
Auf diesen Beitrag antworten »
as_string

Und wer ist "Gate"? Kommst Du möglicherweise mit den ganzen Foren irgendwie durcheinander?
Auf diesen Beitrag antworten »
Sky33

Gate = hatte

Hatte mich verschrieben . unglücklich
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »