Klasse



  • Hallo

    Wie geht es denn für meinen Code ?

    Wie muss ich es schreiben damit es bei mir richtig läuft.

    dynamische arrays sind ein wenig trocken du könntest wenigsten ein Beispiel geben wenn du es weisst.

    Gruß

    Hans



  • Danamische Menschen nehmen einen »std::vector<float> array« (wenn man sich nach reiflichem Überlegen tatsächlich auf float und nicht, wie zu erwarten wäre, auf double geeinigt hat). Elemente werden mit »array.push_back(3.1415)« hinzugefügt.

    Mir hat sich aber noch nicht erschloßen, wozu Du überhaupt Dynamik, geschweige denn Arrays brauchst. Und Dinge wie Mittelwert- und Medianberechnung ist normalerweise nichts, was man zum Selbstcfecke in Klassen steckt. Die globalen Variablen komplettieren das Bild, wie erwartet. 😉



  • #include <vector>
    
    class CKennwerte 
    { 
    private: 
        std::vector<double> array0; // double ist besser als float
    public: 
        void mittelwert(const std::vector<double>& mw);
    };
    

    Um einen vector auf die richtige Größe zu bringen vec.resize(n), Größe herausfinden über vec.size().



  • Daniel E. schrieb:

    Danamische Menschen nehmen einen »std::vector<float> array« (wenn man sich nach reiflichem Überlegen tatsächlich auf float und nicht, wie zu erwarten wäre, auf double geeinigt hat). Elemente werden mit »array.push_back(3.1415)« hinzugefügt.

    Mir hat sich aber noch nicht erschloßen, wozu Du überhaupt Dynamik, geschweige denn Arrays brauchst. Und Dinge wie Mittelwert- und Medianberechnung ist normalerweise nichts, was man zum Selbstcfecke in Klassen steckt. Die globalen Variablen komplettieren das Bild, wie erwartet. 😉

    du hast schon recht er ist fast so schlimm wie die Leute die ihren vector array nennen ..



  • hi,
    wenn du doch Arrays benutzen willst, musst du schon in der Klassendefinition das dynamische Array definieren.

    z.B.

    ...
    private:
        // Definiton von array0;
        float* array0; 
    ...
    
    // in eine Funktion deiner Klasse CKennwert
    // x kann ein beliebiger pos. Wert sein.
    int x = 10;
    // Array initialisieren
    array0 = new array0[x];
    
    ...
    
    // wenn du das Array nicht mehr benötigst muss du
    // den Speicher wieder freigeben (am besten im
    // Destruktor der Klasse)
    delete[] array0;
    

    Hoffe das bringt dich weiter. 🙂

    Tschau Gartenzwerg



  • 1ntrud0r schrieb:

    du hast schon recht er ist fast so schlimm wie die Leute die ihren vector array nennen ..

    Oder ihre Katze »Hasso«, ihre Frau »Mäuschen« oder ihr Kind »1ntrud0r«. Sachen gibts.



  • Hi

    Ich werde es mal so versuchen.
    Wie geht das den aber mit float *array;

    Kannst du es bitte mal so schreiben wie ich es wollte.

    Weil ich leider mit diesen arrays im moment wenig anfangen kann.

    Danke

    Gruß

    Hans



  • <imho>Rohe dynamische Arrays sollte man nie direkt verwenden. Nimm vector, und wenn der Overhead irgendwann mal ein Problem sein *sollte*, nimm einen unflexibleren Wrapper für new[].</imho>



  • operator void schrieb:

    <imho>Rohe dynamische Arrays sollte man nie direkt verwenden. Nimm vector, und wenn der Overhead irgendwann mal ein Problem sein *sollte*, nimm einen unflexibleren Wrapper für new[].</imho>

    stimmt, dass ist ja das c++ forum :p



  • Hallo

    //qm-regelkarte
    //MITTELWERT STANDARTABWEICHUNGSKARTE SHEWHART-REGELKARTE
    //Obere- und UEG
    //MITTELWERT DER MITTELWERTE und STANDARDABWEICHUNG
    //MEDIAN undSPANNWEITE

    //FORMEL

    //+----------------------------------------------------+
    //Stichprobenumfang
    float a3[] = {1.427, 1.287, 1.182, 1.099, 1.032, 0.975};
    float a4[] = {0.691, 0.548, 0.508, 0.433, 0.412, 0.362};
    float b3[] = {0 , 0.030, 0.118, 0.185, 0.239, 0.284};
    float b4[] = {2.089, 1.970, 1.882, 1.815, 1.761, 1.716};
    float d3[] = {0 , 0 , 0.076, 0.136, 0.184, 0.233};
    float d4[] = {2.114, 2.004, 1.924, 1.864, 1.816, 1.777};

    class CKennwerte
    {
    private:
    float array0[];
    public:
    //CKennwerte(float array[]);
    void mittelwert(float mw[]);
    void Median();
    void OEG();
    void UEG();
    };

    void CKennwerte::mittelwert(float mw[])
    {
    float am=0; int x; int len;

    for(x=0; x<len; x++) { am=am+a3[x]; }
    mw[0] = (am/len);

    for(x=0; x<len; x++) { am=am+a4[x]; }
    mw[1] = (am/len);

    for(x=0; x<len; x++) { am=am+b3[x]; }
    mw[2] = (am/len);

    for(x=0; x<len; x++) { am=am+b4[x]; }
    mw[3] = (am/len);

    for(x=0; x<len; x++) { am=am+d3[x]; }
    mw[4] = (am/len);

    for(x=0; x<len; x++) { am=am+d4[x]; }
    mw[5] = (am/len);
    }

    int main()
    {
    float x[6];
    CKennwerte A;

    return 0;
    }

    Wer kann den nun hier diese klasse so ergänzen das sie den Mittelwert berechnen kann und diese in einem Array abspeichert.

    Ich hoffe jetzt kann mir jemand helfen.

    Das was ihr vorher geschrieben habt ist ja schön und gut und hilft euch bestimmt, aber leider nutzt mir das nix.

    Alles Klarr !!

    Gruß

    Hans



  • @Heino-Hans
    Du solltest Dir erst mal Klarwerden, was du hier programmieren willst ! C oder C++ ???

    Deine Arrays sind typisches C !
    Dein Problem: die Groesse des Arrays
    Dein Vorteil: die Variable des Arrays ist nen zeiger aufs erste element und somit von der Groesse unabhaengig.
    Die Loesung: deine Funktion braucht zusaetzlich zum Zeiger auf die 1. Variable auch die Groesse !
    die Bemerkung: Aehnlichkeiten die dann zu gewissen API Aufrufen entstehen, sind nicht unbegruendet ! Schau Dir mal WinAPI funktionen an, die Listen/Arrays von Werten brauchen.

    Nutze das, wenn du ne C schnittstelle programmierst, also z.B. wenn deine Funktion spaeter in ne DLL wandern soll und von der Exportiert werden soll.

    Im Zeitalter von C++ solltest das aber meiden wie die Pest !
    Du willst ne Klasse die dir Arbeit abnimmt, dann benutzte auch Klassen, die Dir Arbeit abnehmen. Gute Wahl sind STL-COntainer, wie vorgeschlagen. std::vector<float> ist wesentlich eleganter, fehlerunanfaelliger !

    Ciao ...



  • Hi

    Ich wollte den Mittelwert berechnen und nicht einen Arbeitstag dafür opfern.

    Das muss so in ungefähr 10 Minuten zu Lösen sein.

    Seit den ich mich mit dir Unterhalte dauert die Aufgabe 24 Stunden.

    Ist doch komisch oder



  • Dann berechne doch den Mittelwert und opfere keine 24 Stunden.
    Natürlich ist das in ein paar Minuten möglich, aber daß Du Dich bei uns drüber beschwerst, daß *Du* immer noch keine Lösung hast läßt für mich nur eine Schlußfolgerung zu:

    Du willst, daß wir Deine Arbeit erledigen.

    Und jetzt mal was zum Thema:

    Warum willst Du denn eine Klasse programmieren? Ich meine den Mittelwert berechnen, das sieht für mich wie ne astreine Funktion aus. Das in eine Klasse zu verpacken ist völliger Schwachsinn... und das versuchen wir Dir hier die ganze Zeit zu erzählen. Wenn Du eine Funktion schreibst, dann fallen viele Probleme auch gleich weg.

    float MittelWert(float * Array, int Size)
    {
       float Sum = 0.0f;
       for(int i=0; i<Size; ++i)
       {
          Sum += Array[i];
       }
       return Sum/Size;
    }
    

    Fertig, Zeit < 5 Minuten, ist doch komisch oder?
    MfG Jester



  • hi

    Entlich habt ihr die nervenden mekereien abgestellt und kommt zum kern des themas.

    Na ja wie auch immer...

    Ich möchte meine variablen und methoden schützen.
    Sie sollen geschützt sein, vor manipulationen.

    Deswegen muss ich sie in Klassen schreiben, weil später diese Funktionen in Borland C++ Builder implementiert werden und später erst erfahren werden das es doch sinnvoll war es in klassen zu schreiben.

    Gruß

    Hans



  • Aber die Variablen in Deinem Code-Beispiel sind doch alle außerhalb der Klasse, wie willst Du sie denn da vor irgendwas schützen?
    Die Daten sind offensichtlich frei zugänglich, und ab jetzt kann jeder der will mit Hilfe dieser Funktion und seinen Daten einen Mittelwert berechnen.
    Und wie kann man denn bitte eine Funktion manipulieren?

    Und selbst wenn die Daten irgendwie zu schützen sind, dann ist das nicht Aufgabe einer Klasse, die einen Mittelwert berechnet (sowas macht eigentlich keinen Sinn), sondern Aufgabe irgendeiner Daten-Klasse. Diese wiederum könnte dann eine Methode Mittelwert besitzen.

    Ich glaube, Du solltest Deine Nase nochmal in irgendein Buch oder Tutorial stecken wo's um Klassen geht. Schau Dir am besten das Tut vköon Volkard oder das von Shade an. Ich habe das Gefühl, Du hast nicht wirklich verstanden wozu Klassen gut sind und wie man sie einsetzt. Da werden dann auch ein paar nette Beispiele gemacht, dann ist alles gleich viel leichter...
    aber das willst Du wahrscheinlich garnicht hören, nicht wahr? Du bist ja Experte auf dem Gebiet.



  • also wenn du mir das Beispiel auf meinem Code ergänzen würdest wäre ihc eine ecke schlauer.

    kannst du mir bitte ohne virtual so wie ich es benutze, mit double arrays eine mittelwertberechnung durchführen, wo die Members geschützt sind.

    Ich weiss das es mit dem Konstruktot und dekonstruktor geht, aber ich muss mir das mal anschauen.

    Bitte !!!

    Danke

    Gruß

    Hans



  • Heino-Hans schrieb:

    also wenn du mir das Beispiel auf meinem Code ergänzen würdest wäre ihc eine ecke schlauer.

    Nein, das würde Dich nicht schlauer machen. Das Beispiel ist Murks und läßt sich durch ergänzen (außer auskommentieren) auch nicht retten.

    Heino-Hans schrieb:

    kannst du mir bitte ohne virtual so wie ich es benutze, mit double arrays eine mittelwertberechnung durchführen, wo die Members geschützt sind

    Wer redet denn von virtual?
    Jetzt auf einmal doubles?
    Und wovor willst Du denn irgendwas schützen? Du kriegst die Daten doch von außen? Also gehören sie Dir nicht und Du muß Sie auch nicht schützen.

    Du solltest Dir erstmal drüber klar werden was Du denn erreichen willst.
    Warum willst Du denn unbedingt ne Klasse schreiben, wenn doch eine Funktion vollkommen genügt?

    MfG Jester



  • Hi

    Schafst du heute nocheine Klasse zu schreiben mit die geschützt ist und den Mittelwert berechnet?

    Was machst du den gerade bist du Schüler oder machst du eine Ausbildung Arbeitst du ?

    Wenn dein Chef sagt machmal machst du erst eine 10 Std. Diskusion oder schreibst du sofort los.

    Also wenn du so nett sein wilst dann schreib mal erst.

    Ich verstehe nur Hauptbahnhof, weil ich tausen anderer Dinge hier habe.

    Ich muss immer wieder überlege private oder public, virtuel nei war es doch double.

    Ach leck mich mal



  • Heino-Hans schrieb:

    Ach leck mich mal

    Danke das war's. Schönen Tag noch.



  • 😃


Anmelden zum Antworten