Zum Inhalt springen

eryx

Mitglieder
  • Gesamte Inhalte

    20
  • Benutzer seit

  • Letzter Besuch

Beiträge von eryx

  1. Hallo klotzkopp :)

    danke für deine antwort :)

    welchen parameter meinst du ?

    nokia_charger.chargeAccu(nokia);

    hier statt dem objekt also ne referenz ?

    mh dann brauch ich den copy konstruktor auch nicht mehr oda bin ich da auf dem holzweg?

  2. 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 code :)handy.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

  3. 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

  4. aaaaaaaaaaaaah!!!!!!!!!!!!!! ich haaaaaabs !!!!

    :bimei

    hab die forschleife geändert (den tipp mit dem höchsten eben erst geraftt ^^ habs vorher auf die terminierung bezogen :D )

    
    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

  5. 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;
    
    
    }

  6. 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 :o

    zur terminierung, das hab ich verstanden aber wie setz ich das um? :)

  7. 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 ^^

  8. 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 :P

    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

  9. 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.... !

  10. 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)

    B) 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;
    
    

  11. 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();
    
    }
    
    
    

  12. 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;
    
    	} 

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...