![](https://www.fachinformatiker.de/uploads/set_resources_14/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
eryx
-
Gesamte Inhalte
20 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Beiträge von eryx
-
-
Hallo erstmal
So ich erklär ma kurz die aufgabenstellung dann schilder ich mein Problemchen
Alsoooo ^^
Habe 2 Klassen: Handy und Charger
mit grundlegenden metoden.
der dekonstruktor soll am ende den zustand des handy objektes ausgeben, da liegt auch mein problem.
Denn dieser wird 2 mal hintereinander aufgerufen oO
Also 1 mal wenn ich die methode
nokia_charger.chargeAccu(nokia);
und wenn dass eigentliche handy objekt zerstört wird. Kann ich den 1. aufruf irgendwie unterbinden bzw in den dekonstruktor ne if condition reinhaun damit der den status nur ausgibt wenn er dass 2. ma aufgerufen wird? naja okay ich post ma mein codehandy.h
#include <time.h> using namespace std; void wait(double seconds); class handy{ private: string name; int txPower; // in mW float accuCharge; // in mAh int accuCapacity; // in mAh int accuVoltage; //{read only} time_t ConnectionStart,ConnectionEnd; int ConnectionDuration, timeTalked; bool NetStatus; public: handy(string,int,int); handy(const handy&); ~handy(); void moreTxPower(); void lessTxPower(); void connect(); void disconnect(); float accuState(); // Zugriffsmethoden int getAccuCapacity(); float getAccuCharge(); int getAccuVoltage(); int getTxPower(); };
charger.h#include <string> #include "handy.h" void wait(double seconds); using namespace std; class charger{ private: string name; float accumulatedChargingTime; int chargingCurrent; // Ladestrom public: charger(string,int); charger(const charger&); ~charger(); void chargeAccu(handy); void powerOn(); void powerOff(); //Zufriffsmethode };
handy.cpp#include "handy.h" #include "charger.h" handy::handy(string aName, int aTxPower, int aAccuCapacity){ timeTalked=0; accuVoltage =8; name = aName; txPower= aTxPower; accuCapacity = aAccuCapacity; accuCharge = aAccuCapacity; cout << "ON\n"; } handy::handy(const handy &handyToCopy){ // Copy constructor cout << "Copy\n"; accuCapacity = handyToCopy.accuCapacity; accuVoltage = handyToCopy.accuVoltage; accuCharge = handyToCopy.accuCharge; txPower = handyToCopy.txPower; } handy::~handy(){ cout << "OFF\n"; cout << "\n\n\n\n"; cout << "Daten für Handy: " << name << endl; cout << "Dauer aller Gespräche: " << timeTalked*15 << " Minuten" << endl; cout << "Ladestatus: " << accuState() << " %" << " (" << accuCharge << " mA)" << endl; } void handy::moreTxPower(){ if (txPower >=100 && txPower <2000) { txPower += 100; cout << txPower << endl; } else { cout << "Unzulässige Operation\n"; } } void handy::lessTxPower(){ if (txPower >=100 && txPower <2000) { txPower -= 100; cout << txPower << endl; } else { cout << "Unzulässige Operation\n"; } } void handy::connect(){ NetStatus = true; cout << "CONNECTED\n"; ConnectionStart = time(NULL); cout << "Gesprächszähler gestartet...\n"; } void handy::disconnect(){ NetStatus = false; cout << "DISCONNECTED\n"; ConnectionEnd = time(NULL); ConnectionDuration = ConnectionEnd - ConnectionStart; cout << "Gesprächsdauer: " << ConnectionDuration*15 << " Minuten" << endl; accuCharge = accuCharge - ((txPower/accuVoltage)*ConnectionDuration); timeTalked +=ConnectionDuration; } float handy::accuState(){ float state; int x = accuCapacity/100; state = (accuCharge/x) + 0,05; return state; } int handy::getAccuCapacity(){ return accuCapacity; } float handy::getAccuCharge(){ return accuCharge; } int handy::getAccuVoltage(){ return accuVoltage; } int handy::getTxPower(){ return txPower; }
charger.cpp#include "charger.h" #include "handy.h" void wait(double seconds); charger::charger(string aName, int newChargingCurrent){ name = aName; chargingCurrent=newChargingCurrent; } charger::charger(const charger &chargerToCopy){ } charger::~charger(){ } void charger::chargeAccu(handy aNew){ int c; c = aNew.getAccuCapacity() - aNew.getAccuCharge(); accumulatedChargingTime=(aNew.getAccuVoltage()*c)/aNew.getTxPower(); cout << "Ladedauer: " << accumulatedChargingTime*15 << " Minuten\n"; wait(accumulatedChargingTime); } void charger::powerOn(){ cout << "Beginne mit Ladevorgang...\n"; } void charger::powerOff(){ cout << "Ladevorgang abgeschlossen!\n"; }
main.cpp#include "handy.h" #include "charger.h" #include <string> using namespace std; void wait(double seconds); int main(){ setlocale(LC_ALL,"German_Germany.1252"); // Objekte erzeugen handy nokia("nokia3210",900, 1250); charger nokia_charger("nokia3210",125); // Test Programmablauf nokia.lessTxPower(); nokia.moreTxPower(); nokia.moreTxPower(); nokia.connect(); wait(4); nokia.disconnect(); // Ladevorgang nokia_charger.powerOn(); nokia_charger.chargeAccu(nokia); nokia_charger.powerOff(); }
Anmerkung:void wait(double seconds);
is ne .lib
die einfach ne sleep funktion beinhaltet also wait(4) sind dann 4 sec.
so falls jemand soviel zeit hat das ma zu lesen, und eventuell verbesserungsvorschläge, lösungsansätze für mein prob hat wäre dass sehr nett
greetz eryx
-
ah okay ! dass macht das ja um einiges leichter... werd ich auchma ausprobieren am wochenende
also nochma dickes danke an alle die geantwortet haben.
Echt ein gutes forum, geht alles sehr fix,:uli weiter so !
lg eryx
-
was macht den diese for-schleife genau?
for (int i = (sizeof(value)<<3); i > 0; i = i>>1)
soweit ich das verstehe is die shift variabale oder?
also die sagt wieoft geshiftet wird.
-
mh mir is das zu hoch ^^ noch nie was von
(sizeof(value)<<(1<<3))
sizeof usw gehört
was macht der befehl?
<< 3 heißt 3 shifts nach links?
-
aaaaaaaaaaaaah!!!!!!!!!!!!!! ich haaaaaabs !!!!
:bimei
hab die forschleife geändert (den tipp mit dem höchsten eben erst geraftt ^^ habs vorher auf die terminierung bezogen
)
for (i=32;i>=0;i--)
jetzt gibts keine komische zeichen mehr und alles läuft
danke an alle für eure mühe !
hätte nur noch ne frage ob ich mit der array methode die unbenutzen nullen wegbekomme oda ob ich das so hinnehmen muss - da ich keine bitoperatoren und shifts benutze.
lg eryx
-
ja ich hab hald ma alles durchprobiert...
wenn ich binarray[32] = '\0' hab steht das selbe da
und ich habs jetzt direkt vor cout gesetzt
binarray[32] = '0'; cout << binarray;
:(
-
sooo
also ich hab jetzt die reihenfolge umgekehrt in dem ich einfach i auf 33 gesetz hab und mit i-- runterzähle
nun hab ich aber wieder ein problem mit der "terminierung"
denn wenn ich als dezi = 6 eingebe schreibt er "000..110|||| "
also nach der letzten 0 nur müll.
wie muss das richtig laufen mit der terminierung, wenn ich das feld rumgedreht ausgebe bzw einlese?
#include <iostream> #include <conio.h> using namespace std; int main() { int i,n,dezi; char binarray[33]; binarray[33] = '\0'; cout << " Dezimal in Binaer \n\n"; cout << " Bitte geben sie die umzurechnende Dezimalzahl ein \n\n\n"; cin >> dezi; cout << "\n"; for (i=33;i>=0;i--) { n= dezi%2; dezi=dezi/2; if (n==0) binarray[i]='0'; if (n==1) binarray[i]='1'; } cout << binarray; getch(); return 0; }
-
@ tdm
wie sähe denn ein ansatz für bitoperatoren aus?
ich weiß ja dass wenn ich
cin >> dezi;
eingebe die zahl dual gespeichert wird...
nur wie nutz ich das im zusammenhang mit bitoperatoren?
-
sauber nu machts was ich will (vorerst ^^)
so dann mach ich mich ma an die umgekehrte ausgabe, da muss ich mit shifts arbeiten oda?
schonma vielen dank, hast mich schonma weitergebracht
-
ja wenn ich 3 z.b eingebe kommen die 2 smileys ^^
mh okay wie merz ich diesen fehler aus? muss ja irgendwie den wert da rauslöschen... nur wie?
hab mit arrays noch fast keine erfahrung
zur terminierung, das hab ich verstanden aber wie setz ich das um?
-
okay dann änder ich dass ma in char um,
was meinst du mit terminierung?
sorry bin im 1. semester, und noch net so viel ahnung
danke aber schonma für die fixe antwort !!!
ps habs in
char binarray[i];
geändert und jetzt kommt bei der ausgabe zwei ":) :)" lol ^^
-
Hallo leute!
bin grade dabei ein simples programm zu schreiben, dass dezimal einliest und dual ausliest.
ich möchte dabei nach folgendem prinzip vorgehen:
for-schleife mit ner laufvariablen i
n=dezimalzahl%2
dezimazahl/2
if abfrage
die werte werden in ein feld geschrieben und dann umgekehrt ausgegeben, da ich sie ja "falschrum" reinschreibe.
das es einfacher geht zb mit bitset oda so weiß ich, darf ich aber nicht benutzen
ich hab ma angefangen aber es kommt ein fehler bei der ausgabe vom feld:
#include <iostream> #include <conio.h> using namespace std; int main() { int i,n,dezi; int binarray[33]; cout << " Dezimal in Binaer \n\n"; cout << " Bitte geben sie die umzurechnende Dezimalzahl ein \n\n\n"; cin >> dezi; cout << "\n"; for (i=0;i<33;i++) { n= dezi%2; dezi=dezi/2; if (n==0) binarray[i]=0; if (n==1) binarray[i]=1; } cout << binarray; getch(); return 0; }
über nette antworten / hilfe würd ich mich freun
danke schonmal
-
aufen ersten blick hab ich aber noch ne frage
min = werte[i] < min ? werte[i] : min;
was bedeutet das "?" ?
ja meine grundgedanke war ja dass werte der aktuelle wert is den ich beim ersten cin eingebe und der dann wieder überschrieben wird und ich dannach wieder vergleiche... aber dem is wohl nicht so... ^^
mh okay werd ich mir heud abend ma in ruhe anschauen, hab jetzt en termin... schonma vielen dank für die mühe.... !
-
ja möglichkeit b hab ich auch schon dran gedacht... aber da scheiterts an den Grundlagen ^^
weiß net wie ich das korrekt schreibe....
min = werte[1]; if (min > werte[i]) { werte[i] = max; }
Funktioniert schonma irgendwie net... ^^
-
Huhu Leute
so ich hab ma wieder ein Problemchen...
mein Prof möchte ein Programm
haben, dass:
a) eine Zahlenfolge liest (Anzahl soll vorher abgefragt werden)
von der Zahlenfolge den Mittelwert bildet
c) das minimum der eingegebenen zahlen ausgibt
so bei c) hänge ich fest... irgendwie liest der den Wert den ich ins array tippe nicht bzw ich hab noch nicht viel Erfahrung mit array's vielleicht hab ich ja sonst noch en groben Fehler gemacht oda so, keine ahnung... komme jedenfalls nicht weiter, wäre nett wenn ma einer drüber schaut.
Bitte aber triviale Lösungsansätze/Vorschläge...
hab bissel gegooglet und was von "pointer" und "vector" gelesen aber sowas haben wir noch nicht gemacht
lg eryx (1 Semester Informatik)
#include <iostream> #include <conio.h> using namespace std; double mittelwert(double x[],int anzahl) // Array x erstellen { int i; //feldgröße double m = 0.0; for(i=0;i<anzahl;i++) //Feldgröße erhöhen bis an Eingabe angepasst { m=m+x[i]; } // Summe bilden m=m/anzahl; // Mittelwert berechnen return m; } int main(void) { double werte[1000]; double min =0; int anzahl,i; double max = 0; cout<<endl<<"Anzahl der einzulesenden Werte: "; // Anzahl der werte cin>>anzahl; for(i=0;i<anzahl;i++) { cout<<endl<<"Wert Nr."<<(i+1)<<": "; cin>>werte[i]; if (min > werte[i]) { werte[i] = max; } } cout<<"Der Mittelwert der eingegeben Zahlen ist: "<<mittelwert(werte,anzahl); cout<<"\n\n"<<"Das Minimum lautet: "<< max; getch(); return 0;
-
aaaaaaah sauber jetzt gehts :upps
juhu ^^
vielen danke an alle :bimei
bis zur nächsten hausaufagabe ^^
-
so hab das ganze programm nochmal neu geschrieben...
sind aber noch einige fehler drinne...
er gibt jetzt primzahlen aus, jedoch gibt er jede zahl die er findet die vorherigen auch mit an oO
man man man ganz schön schwierig...
#include <iostream> #include <conio.h> using namespace std; int main() { int MinPrimzahl; int MaxPrimzahl; int Primzahl, Divisor; bool istEinePrimzahl; cout << " Primzahlenausgabe\n" << " \n"; //Eingabeaufforderung cout << " Bitte geben sie den minimalen und maximalen Bereich der Ausgabe an\n" << " \n"; cout << " Minimum: "; cin >> MinPrimzahl; cout << " \n"; cout << " Maximum: "; cin >> MaxPrimzahl; cout << " \n"; cout << " Primzahlen von " << MinPrimzahl << " bis " << MaxPrimzahl << ":\n\n\n"; while (MinPrimzahl <= MaxPrimzahl) { for (Primzahl=2; Primzahl<=MinPrimzahl; Primzahl++) { istEinePrimzahl = true; // Pruefe, ob Primzahl wirklich eine Primzahl ist for (Divisor=2; istEinePrimzahl && Divisor<Primzahl; Divisor++) { // Ist das restlos teilbar? if (0==Primzahl % Divisor) { // Zahl ist teilbar, ist also keine Primzahl! istEinePrimzahl = false; } } // Pruefung ist beendet. // Wenn es eine Primzahl ist, ausgeben! if (istEinePrimzahl) { cout << " ," << Primzahl; } } MinPrimzahl++; } cout << endl ; getch(); }
-
hehe okay
werd ich mich jetzt ma dranmachen...
es lebe die zeitumstellung, ei^ne stunde mehr ^^
ich studiere seit oktober das erste semester info und hab vorher noch nie programmiert ^^
habt erbarmen
-
Hallo zusammen,
also ich hab als hausaufgabe bekommen
ein programm zuschreiben das einen min und max wert abfragt und für diesen bereich alle primzahlen angibt.
Es soll ein einfaches übungsprogramm sein deshalb soll auf die Sieb-methode verzichtet werden.
so mein programm funktioniert, bis auf die kleinigkeit, dass es nach der schleife wieder alle zuvor bekannten primzahlen mit ausgibt....
kann mir einer sagen wo mein fehler liegt? hocke seit 3 stunden hier dran und bin am verzweifeln...
danke schonmal!
#include <iostream> #include <conio.h> using namespace std; int main() { int i =2; // Deklaration int eingabe_min; int eingabe_max; int prim; bool teiler = false; cout << " Primzahlenausgabe\n" << " \n"; //Eingabeaufforderung cout << " Bitte geben sie den minimalen und maximalen Bereich der Ausgabe an\n" << " \n"; cout << " Minimum: "; cin >> eingabe_min; cout << " \n"; cout << " Maximum: "; cin >> eingabe_max; cout << " \n"; cout << " Primzahlen von " << eingabe_min << " bis " << eingabe_max << ":\n\n\n"; while (eingabe_min <= eingabe_max) // Äußere Schleife { while (eingabe_min%2 > 0) // Überprüfung ob rest > 0 { for(int i=x; i<=eingabe_min; i++) { if (eingabe_min%i == 0) // Auf Prim überprüfen { teiler = true; } if (teiler == true) { cout << i << endl << "\n"; // Ausgabe } teiler= false; } eingabe_min++; } eingabe_min++; } getch(); return 0; }
Problem mit Dekonstruktor
in C und C++
Geschrieben
Hallo klotzkopp![:)](https://www.fachinformatiker.de/uploads/emoticons/default_smile.png)
danke für deine antwort![:)](https://www.fachinformatiker.de/uploads/emoticons/default_smile.png)
welchen parameter meinst du ?
hier statt dem objekt also ne referenz ?
mh dann brauch ich den copy konstruktor auch nicht mehr oda bin ich da auf dem holzweg?