[C/C++] Klassen: Hilfe gesucht

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Ba$$ SuLtAn HenGzT, 19. April 2009 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 19. April 2009
    Klassen: Hilfe gesucht

    Wir haben letztes mal in GInf Klassen kennengelernt..
    Haben dann eine Übungsaufgabe gerechnet und dummerweise hat unsere Übungsleiterin nicht den korrekt programmierten Text in den Aushang gestellt zum Lernen/Üben/whatever..

    Hab probiert die Aufgabe zu rechnen, allerdings funktioniert das Programm nur bis zur Auflistung der ersten Zeile der ausgegebenen Tabelle, komm leider nicht weiter!
    Hier erstmal der Code:

    Code:
    /*
    Aufgabe:
    1.) Personen
    Deklarieren Sie eine Klasse person_typ mit den Daten Name, Alter und Gewicht.
    Versehen Sie die Klasse mit Standardkonstruktor und Destruktor sowie Methoden zum
    * Einlesen des Namens (lies),
    * Setzen von Alter und Gewicht mit Kontrolle (nimm),
    * Einlesen aller Daten (lies_all) mit Kontrolle und zum
    * Anzeigen ihrer Daten (zeig)!
    * Testen Sie das Einlesen und Anzeigen der Daten für einen Einzelnen, wenn
    a) zunächst nur der Name 'private' ist und dann
    b) alle Daten 'private' sind!
    Ergänzen und Testen Sie weitere Methoden:
    * Einlesen aller Daten (lies_all) mit Kontrolle ,
    * Testen Sie das Einlesen der Daten für eine Gruppe,
    * Liefern der Daten (gib),
    * Verwenden Sie für das Anzeigen der Daten einer Gruppe eine globale Funktion,
    * Berechnen Sie das Durchschnittsalter der Gruppe!
    */
    
    #include <stdlib.h>
    #include <iostream>
    #include <string>
    #include <stdio.h>
    using namespace std;
    #define maxalter 130
    #define maxgewicht 300
    
    
    class person_typ // Klassendefinition:
    {
     private: string name; // oder char name[20];, Standard: alles private
     int alter; float gewicht; // öffentl. Daten
     public: person_typ(); // Konstruktor initial. die Daten beim autom. Aufruf
     ~person_typ(); // Destruktor, löscht die Daten biem Verlassen des Blocks
     void lies(); // keine Parameter nötig, weil Zugriff auf alle Daten der Klasse
     void zeig(); // von der Klasse auf den Bildschirm
     void nimm( int, float); // Daten von main an die Klasse
     int gib_a() {return alter; } // Daten von der Klasse an main
     float gib_g(){return gewicht;}
     string gib_n(){return name;}
     void lies_all(); // alle Daten einlesen
    
    };
    
    
    void zeig_global(person_typ p[], int anz) // globale Fkt, kann nur mit Methoden auf Daten zugreifen
    {
     cout<< "\nName Alter Gewicht";
     int a; float g; string n;
     for( int i=0; i<anz; i++)
     { n= p[i].gib_n();
     a= p[i].gib_a();
     g= p[i].gib_g();
     cout<< endl<< n<< " "<< a<< " "<< g<< " ";
     printf("\n%15s %4i %6.1lf\n"); cout<< "\n";
     }
    }
    
    
    int main() // main:
    { person_typ otto; // Objekt Otto der Klasse person_typ, Konstruktor wird aufgerufen
    
    cout<< "\n Test des Konstruktors: ";
    otto.zeig();
    otto.lies(); // otto.alter=25; otto.gewicht=66; geht nicht bei privaten Daten
    otto.nimm( 25, 66.6);
    cout<< "\n Gelesen bzw. zugewiesen: "; otto.zeig();
    
    class person_typ gruppe[2000];
    int n=3;
    
    cout<< "\nAlles für eine Gruppe einlesen:\n";
    for (int i=0; i<n; i++) gruppe[i].lies_all();
    zeig_global(gruppe, n);
    
    
    cout<< endl<< endl; // Zeilenumbruch
     system("pause>nul"); return 0;
    } 
     
     // Definition:
    void person_typ::nimm( int a, float g)
    { if (a<0) a= -a; if (a>maxalter) a= maxalter; alter=a;
     if (g<0) g= -g; if (g>maxgewicht) g=maxgewicht; gewicht=g;
    }
    
    
    void person_typ::lies_all()
    { 
     int k; string s;
     cout<< "\n Name: ";
     cin>> name; 
     do {
     cout<< "\n Alter: ";
     if (!(cin>> alter)) {k=1; cin.clear(); cin>>s;}
     else k=0; }
     while (k==1 || alter<=0 || alter>maxalter) ;
     do {
     cout<< "\n Gewicht: ";
     if (!(cin>> gewicht)) {k=1; cin.clear(); cin>> s;}
     else k=0;
    } while (k==1 || gewicht<0 || gewicht>maxgewicht);
    
    }
    
    
    person_typ::person_typ() // Konstruktor initial. die Daten beim autom. Aufruf
    { alter=1; gewicht=1; name="...........";
    }
    person_typ::~person_typ() // Destruktor, löscht die Daten biem Verlassen des Blocks
    { alter=0; gewicht=0; name="-----------";
    } 
    void person_typ::lies() // keine Parameter nötig, weil Zugriff auf alle Daten der Klasse
    { cout<< "\n Name: "; cin>> name;
    }
    void person_typ::zeig() // von der Klasse auf den Bildschirm
    { cout<< "\n Mein Name ist "<<name<< ". Ich bin "<<alter<< " Jahre alt und wiege ";
     cout<< gewicht<< " kg. ";
    }
    
    Das eigentliche Problem scheint in der Zeile 56 zu liegen..
    Würd mich freuen, wenn vielleicht einer mal drüber gucken könnte und schaut woran es liegt.!
    Schreib nämlich kommenden Donnerstag n Testat dadrüber und bis dahin muss das sitzen^^

    Liebe Grüße!
     
  2. 20. April 2009
    AW: Klassen: Hilfe gesucht

    änder mal die zeile
    Code:
    printf("\n%15s %4i %6.1lf\n"); cout<< "\n";
    
    auf
    Code:
    cout << n << a << g << endl; 
    
    und sieh obs dann funktioniert!
     
  3. 20. April 2009
    AW: Klassen: Hilfe gesucht

    hey naca, fettes danke dir, funktioniert - allerdings gibt er nun folgendes aus:
    "Name" "Alter" "Gewicht" "NameAlterGewicht" :-S

    kannst du mir vielleicht noch sagen, wo vorher bei "printf("..."); der fehler war?
     
  4. 20. April 2009
    AW: Klassen: Hilfe gesucht

    du kannst die zeile wo printf vorkam komplett weggeben, diese dient nur der formatierung! wo genau hier der fehler liegt kann ich dir leider nicht sagen, hab hier keinen editor zur verfügung ...
     
  5. 20. April 2009
    AW: Klassen: Hilfe gesucht

    alles klar danke dir trotzdem; ich hatte ja extra printf genommen, damit es formatiert ist, aber naja jeht auch ohne, danke nochma!
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.