[Studium Praktikumsaufgabe] Trotz mehrmaligem scriptlesen null Ahnung wie ich es umsetzen soll :(



  • Hallo,

    ehm nein also das Klassen deklarieren ist nicht das Problem, schon allein weil wir MS Visual C++ nutzen.

    MEin Problem sind eher die Funktionen.

    Normalerweise würde ich mit dem Copy Konstruktor ja anfangen. Mir ist auch grundsätzlich klar wie ich einen schreibe, aber kann ichs absolut nicht auf die Aufgabe übertragen.

    Mir ist zb auch nicht klar, wie ich die Sendeleistung einzeln erhöhen soll von 100-2000 in 100er Schritten, ohne eine Tastatureingabe -.-



  • Wie du die Tastatur abfragen kannst, findest du genug Erklärungen in den FAQ's (C/C++/Konsole) - anschließend kannst du je nach Eingabe die Methoden mehrSendeleistung() bzw. wenigerSendeleistung() aufrufen.

    Noch ein Tip:

    void mehrSendeleistung()
    {
      sendeLeistung = (sendeLeistung==2000)?sendeLeistung:sendeLeistung+100;
    }
    

    (reduzieren geht analog)

    Außerdem sollte bei jedem Aufruf noch der Verbrauch angepasst werden (per time() kannst du die Zeit messen, die seit der letzten Änderung vergangen ist)

    PS: Du brauchst dich eigentlich NUR um die Klassen Handy und Ladestation kümmern - wo und wie die Klassen eingesetzt werden, ist Sache des drumherumliegenden Programms.



  • Hm..

    Du hast mcih glaube ich falsch verstanden. Ich weiss, wie ich die Tastatureingabe auslese... cin ist ja kein großes Geheimnis.

    Er will das ganze ja ohne Eingabe realisiert haben, wenn ich die Aufgabenstellung richtig verstanden habe. Und dann könnte ich ja höchstens kontinuierlich hochzählen lassen... das ist doch sinnlos?



  • Also wenn ich die Aufgabenstellung richtig verstanden habe, dann brauchst du auch keine Tastatureingabe.

    Bau dir die beiden Klassen nach dem Schema, dass er vorgibt.

    Im Hauptprogramm machst du dann in etwa folgendes (siehe Aufgabe 3):

    Pseudocode:

    Handy *nokia = new Handy("Connecting people!", 900, 1250)  // a)
    Ladestation *lade = new Ladestation("for nokia only", 125)  // b)
    
    lade->einschalten();     // c)
    lade->ladeAkku(nokia);  // c)
    
    nokia->wenigerSendeleistung();   // d)
    nokia->mehrSendeleistung();
    nokia->mehrSendeleistung();
    
    nokia->beginneGesraech();   // e)
    warten(4);    
    nokia->beendeGespraech();
    
    ...
    

    Verstehst du, was er haben will? Du sollst es nur so straight-forward hincoden. Nix besonderes. Für das zweite (identische) Handy machst du dann den Copy-Konstruktor.

    Schlaft alle gut. Out.



  • Aufgabe schrieb:

    Keine Methode liest irgendwelche Daten von Tastatur ein.

    Die Methoden selber brauchen keine Tastatureingaben, wenn sie irgendwelche Werte benötigen, bekommen sie die über Argumente eingeliefert. Und woher das Hauptprogramm seine Daten bekommt, braucht dich nicht zu interessieren (in der Aufgabe reicht es, die Anweisungen für Aufgabe a bis g hintereinander weg zu schreiben - in der Praxis könnte das Programm auf Benutzereingaben reagieren).



  • Hallo,

    so hab nun dank der Hilfe einiger Komolitonen etwas hinbekommen. LEider hab ich aber keine Ahnung, wie ich die PGLib.. die Warten Funktion also implementieren soll 😕

    Hier mal meine Dateien:

    cellphone.cpp

    #include "cellphone.h"
    
    cellphone::cellphone(string aName, int aRfPower, int anAccuCapacity): accuVoltage(8)
    {
    	//POST: 2000 >= rfPower >= 100, rfPower % 100 == 0
    	name = aName;
    	rfPower = aRfPower;
    	accuCapacity = anAccuCapacity;
    	accuCharge = .0;
    	cellphoneOperationStatus = bereit;
    	cout << "Handy " << name << " wurde erstellt." << endl;
    	assert ((rfPower >= 100) && (rfPower <= 2000) && (rfPower % 100 == 0));
    }
    
    cellphone::cellphone(cellphone& h): accuVoltage(8)
    {
    	name = h.name;
    	rfPower = h.rfPower;
    	accuCapacity = h.accuCapacity;
    	rfPower = h.rfPower;
    	accuCharge = h.accuCharge;
    	cellphoneOperationStatus = h.cellphoneOperationStatus;
    }
    
    cellphone::~cellphone(void)
    {
    	cout << "Folgendes Handy wird vernichtet: " << endl
    		<< "Name: " << name << endl
    		<< "Sendeleistung: " << rfPower << "mW" << endl
    		<< "Akku Ladung: " << accuCharge << "mAh" << endl
    		<< "Akkukapazitaet: " << accuCapacity << "mAh" << endl
    		<< "Akku Spannung: " << accuVoltage << "V" << endl
    		<< "Betriebszustand: " << (cellphoneOperationStatus == bereit ? "bereit" : "verbunden") << endl << endl;
    }
    
    void cellphone::showStatus() const
    {
    	cout << "Name: " << name << endl
    		<< "Sendeleistung: " << rfPower << "mW" << endl
    		<< "Akku Ladung: " << accuCharge << "mAh" << endl
    		<< "Akkukapazitaet: " << accuCapacity << "mAh" << endl
    		<< "Akku Spannung: " << accuVoltage << "V" << endl
    		<< "Betriebszustand: " << (cellphoneOperationStatus == bereit ? "bereit" : "verbunden") << endl << endl;
    }
    
    void cellphone::morePower(int soMuch)
    {
    	//POST: 0 < rfPower < 2000 , rfPower%100 = 0
    	bool correctInput;
    	correctInput = ((soMuch >= 100) && (rfPower + soMuch <= 2000) && (soMuch % 100 == 0)) ? true : false;
    	correctInput == true ? rfPower += soMuch : soMuch = 0;
    	cout << (correctInput == false ? "Falscher Paramter" : "");
    	cout << endl << "Sendeleistung wurde um " << soMuch << " mW erhoeht." << endl << endl;
    	assert ((rfPower >= 100) && (rfPower <= 2000) && (rfPower % 100 == 0));
    }
    
    void cellphone::lessPower(int soMuch)
    {
    	//POST: 0 < rfPower < 2000 , rfPower%100 = 0
    	bool correctInput;
    	correctInput = ((soMuch >= 100) && (rfPower - soMuch >= 0) && (soMuch % 100 == 0)) ? true : false;
    	correctInput == true ? rfPower -= soMuch : soMuch = 0;
    	cout << (correctInput == false ? "Falsches Paramter" : "");
    	cout << endl << "Sendeleistung wurde um " << soMuch << " mW erniedrigt." << endl << endl;
    	assert ((rfPower >= 100) && (rfPower <= 2000) && (rfPower % 100 == 0));
    }
    
    void cellphone::beginCall()
    {
    	cout << (cellphoneOperationStatus == bereit ? "Gespraech wird begonnen" : "Gespraech bereits aktiv") << endl;
    	cellphoneOperationStatus = cellphoneOperationStatus == bereit ? verbunden : bereit;
    }
    
    void cellphone::endCall()
    {
    	cout << (cellphoneOperationStatus == verbunden ? "Gespraech wird beendet" : "Kein Gespräch aktiv") << endl;
    	cellphoneOperationStatus = cellphoneOperationStatus == verbunden ? bereit : verbunden;
    }
    void cellphone::chargeAccu()
    {
    	accuCharge = float(accuCapacity);
    }
    

    charger.cpp

    #include "charger.h"
    
    charger::charger(string aName, int aChargingCurrent)
    {
    	name = aName;
    	chargingCurrent = aChargingCurrent;
    	accumuletedChargeTime = 0;
    	statusCharger = off;
    	cout << "Ladestation " << name << " wurde erstellt." << endl;
    }
    
    charger::charger(charger& l)
    {
    	name = l.name;
    	chargingCurrent = l.chargingCurrent;
    	accumuletedChargeTime = l.accumuletedChargeTime;
    	statusCharger = l.statusCharger;
    }
    
    charger::~charger(void)
    {
    	cout << "Folgende Ladestation wird vernichtet: "
    		<< "Name: " << name << endl
    		<< "Ladestrom: " << chargingCurrent << endl
    		<< "Akkumulierte Ladedauer: " << accumuletedChargeTime << endl
    		<< "Status Ladestation: " << (statusCharger == on ? "an" : "aus") << endl << endl;
    }
    
    void charger::powerOn()
    {
    	statusCharger = on;
    }
    
    void charger::powerOff()
    {
    	statusCharger = off;
    }
    
    void charger::showStatus() const
    {
    	cout << "Name: " << name << endl
    		<< "Akkumulierte Ladedauer: " << accumuletedChargeTime << endl
    		<< "Ladestrom :" << chargingCurrent << endl
    		<< "Status Ladestation: " << (statusCharger == on ? "an" : "aus") << endl << endl;}
    
    void charger::chargeAccu(cellphone& h)
    {
    	bool powerOn;
    	powerOn = statusCharger == on ? true : false;
    	powerOn == true ? h.chargeAccu() : powerOn = powerOn;
    	cout << (powerOn == true ? "Akku wurde geladen" : "Ladegeraet ist aus") << endl;
    }
    

    main.cpp

    cellphone.h

    #pragma once
    #include <string>
    #include <iostream>
    #include <cassert>
    using namespace std;
    
    class cellphone
    {
    private:
    	string name;
    	int rfPower;			// in mW
    	float accuCharge;			// in mAh
    	int accuCapacity;			// in mAh
    	const float accuVoltage;
    	enum status { bereit, verbunden };
    	status cellphoneOperationStatus;
    
    public:
    	cellphone(string name, int rfPower, int accuCapacity);
    	cellphone(cellphone&);
    	~cellphone(void);
    	void morePower(int soMuch);
    	void lessPower(int soMuch);
    	void beginCall();
    	void endCall();
    	void showStatus() const;
    	void chargeAccu();
    };
    

    charger.h

    #pragma once
    #include <string>
    #include "cellphone.h"
    using namespace std;
    
    class charger
    {
    private:
    	string name;
    	float accumuletedChargeTime;
    	int chargingCurrent;
    	enum power { on, off };
    	power statusCharger;
    public:
    	charger(string name, int chargingCurrent);
    	charger(charger&);
    	~charger();
    	void powerOn();
    	void powerOff();
    	void showStatus() const;
    	void chargeAccu(cellphone& h);
    };
    

    Wie ihr wohl seht, sind sämtliche Dinge, die nun Zeiten ausrechnen nicht implementiert, weil ich absolut nicht weiss wie 😕



  • Hallo,

    weiss jemand, wie ich den Verbrauch umsetzen kann 😞

    Handy: Zwischen Sendeleistung P, Entladestrom I und Akkuspannung U besteht der
    Zusammenhang P=UI. Die Akkuspannung beträgt 8 Volt. Wird während der Zeitdauer t mit
    der Sendeleistung P gesendet, so wird dem Akku die Akkuladung P/U
    t entnommen.
    • Objekte der Klasse Handy messen Gesprächszeit selbst, wobei 1 s Runtime 15 min

    Ich weiss absolut nicht, wie ich den Verbrauch errechne // die Ladezeit ausgebe etc 😞



  • Wird während der Zeitdauer t mit
    der Sendeleistung P gesendet, so wird dem Akku die Akkuladung P/U*t entnommen.

    Du hast die Sendeleistung (als Membervariable), die Spannung (8V) und die Zeitdauer (Zeit messen zwischen Gesprächsanfang und -ende) - damit hast du alles, was nötig ist, um die verbrauchte Leistung zu berechnen.



  • ⚠ Achte auf die angesprochenen Programmierrichtlinien im Dokument! ⚠

    Dein Prof ntutz bestimmt nicht ohne Grund deutsche Methodennamen, wenn du mit englischen aufkreuzt und deutsche waren vereinbart ➡ 🙄



  • ThaRealMatix schrieb:

    LEider hab ich aber keine Ahnung, wie ich die PGLib.. die Warten Funktion also implementieren soll 😕

    Wer lesen kann ist klar im Vorteil! Eine Library gibt dir bereits implementierte Methoden. Das ist der Grund, warum es Bibliotheken überhaupt gibt.

    Zitat Aufgebenstellung:

    Das Anwendungsprogramm gibt die Runtime durch den Aufruf
    der Funktion void warten(double sekunden) vor, die in der Library PG1Lib implementiert ist.


Anmelden zum Antworten