[Studium Praktikumsaufgabe] Trotz mehrmaligem scriptlesen null Ahnung wie ich es umsetzen soll :(
-
Hallo,
ich versuche mich jetzt schon eine Woche daran, aber ich kann mit dem Script meines Profs so rein gar nichts anfangen :-/.
Ich weiss, das man am meisten lernt, wenn man etwas selber tut, aber wie gesagt ich habs nun eine Woche probiert und verstehe es einfach nicht.
Deswegen wollte ich mal hier fragen, in der Hoffnung, das ich es vielleicht an einem funktionierenden Beispiel verstehe.
Folgende Aufgabe wurde uns gestellt:
http://www.matix.de/PG1_Uebung3_v3_cpp.pdf
und die agesprochene Lib:
http://www.matix.de/PG1_Uebung3_PG1Lib.lib
Ich verstehe halt die Aufgabe mit dem Handy und der Ladestation überhaupt nicht

Weiss jemand wo ich evtl etwas finden kann, das solche Dinge besser erklärt als mein Prof? Irgendwie komme ich mit seinen Scripts gar nicht klar, auch nicht das wir erst nur einfache Methoden gelernt haben, dann Klasse und Objekte und nun Kontrollstrukturen/Schleifen...
Das verwirrt total, weil jedes Buch das ich mal durchgeblättert hab anders anfängt, mein Prof aber erwartet das wir nur Dinge nutzen die aus seiner Vorlesung bereits bekannt sind (also Funktionen)
Grüße
Gunnar
-
Fang mit Aufgabe 1 an:
Deklariere die Klassen.
Du willst uns doch nicht erzählen, dass du nicht gelernt hast, wie man eine Klasse schreibt, oder!?
PS: Was hast du denn schon an Code dazu geschrieben?
-
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/Ut entnommen.
• Objekte der Klasse Handy messen Gesprächszeit selbst, wobei 1 s Runtime 15 minIch 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.