Inkrementieren Problem



  • Guten Morgen ,wollte hier mal nachfragen ob ich diesen Aufgabenteil richtig verstanden und so es lauten soll?
    Implementieren Sie die private Methode void generateId(), die dem Attribut m_id der (3) CParkingLot-Objekte einen eindeutigen Wert im angegebenen Wertebereich zuweist. Nutzen Sie
    hierfür eine lokale static-Variable innerhalb dieser Methode, die Sie nach jeder Zuweisung inkrementieren.

    #ifndef CPARKINGLOT_H_
    #define CPARKINGLOT_H_
    #include<string>
    #include<iostream>
    using namespace std;
    
    class CParkingLot{
    private:
    	int m_id;
    	int m_capacity;
    	int m_curOccupancy = 0;
    	void generateId();
    
    public:
    	CParkingLot(int capacity = 80);
    
    	int getId();
    	int getCapacity();
    	void setCapacity(int capacity);
    	int getCurOccupancy();
    	void setCurOccupancy(int curOccupancy);
    	bool parkVehicle();
    	int parkVehicles(int numVehicles);
    	int getFreeSpots();
    	void print();
    	friend ostream& operator<< (ostream& lop, const CParkingLot& rop);
    
    
    
    
    };
    ostream& operator<< (ostream& lop, const CParkingLot& rop);
    
    
    
    
    #endif /* CPARKINGLOT_H_ */
    
    
    
    
    #include"CParkingLot.h"
    
    
    int CParkingLot::getId(){
    	return m_id;
    }
    	int CParkingLot::getCapacity(){
    		return m_capacity;
    
    
    	}
    	void CParkingLot::setCapacity(int capacity){
    
    		m_capacity = capacity;
    
    
    	}
    	int CParkingLot::getCurOccupancy(){
    
    		return m_curOccupancy;
    	}
    	void CParkingLot::setCurOccupancy(int curOccupancy){
    
    		m_curOccupancy = curOccupancy;
    	}
    
    	void CParkingLot::generateId(){
    		int static id;
    
    
    		if ( m_id >= 100 && m_id <1000){
    
    			m_id = id;
    
    		}
    
    	}```
    
    War die Aufgabe so gemeint?


  • Hast du deinen Code denn mal ausprobiert?

    Deine statische Variable wird nicht initialisiert und du inkrementierst nirgends.



  • Was wollen die denn genau bei der Aufgabe von mir ?
    Ich verstehe es gar nicht



  • Weißt du denn, was mit "inkrementieren" gemeint ist?



  • @Master33 sagte in Inkrementieren Problem:

    Was wollen die denn genau bei der Aufgabe von mir ?

    Jedes ParkingLot, das du erzeugst, soll eindeutig über eine id identifizierbar sein. In der Aufgabe steht ja auch "angegebener Bereich", den wir hier nicht kennen. Das erste ParkingLot-Objekt soll als id die erste Zahl aus dem Bereich bekommen, das zweite erzeugte ParkingLot die nächste Zahl aus dem Bereich usw.



  • Im Klassendiagramm steht das

    100<=m_id < 1000

    So besser ?

    
    void CParkingLot::generateId(){
    		int static id;
    
    
    		if ( m_id >= 100 && m_id <1000){
              for(int m_id = 100; m_id < 1000; m_id++){
    
            	  m_id = id;
              }
    
    
    		}
    
    	}
    
    


  • @Master33 sagte in Inkrementieren Problem:

    So besser ?

    Daran hat sich nichts geändert:
    @Schlangenmensch sagte in Inkrementieren Problem:

    Deine statische Variable wird nicht initialisiert und du inkrementierst nirgends.

    Was soll die for-Schleife jetzt berwirken?



  • @wob sagte in Inkrementieren Problem:

    Das erste ParkingLot-Objekt soll als id die erste Zahl aus dem Bereich bekommen, das zweite erzeugte ParkingLot die nächste Zahl aus dem Bereich usw.

    Habe das hier mit der for schleife versucht ?



  • @Master33 sagte in Inkrementieren Problem:

    Habe das hier mit der for schleife versucht ?

    Nein. Und als Tipp: man benötigt dafür keine Schleife.

    Wenn in deinem Main steht:

    int main() {
      CParkingLot lotA;
      CParkingLot lotB;
      CParkingLot lotC;
      std::cout << lotA.getId() << ", " << lotB.getID() << ", " << lotC.getID() << "\n";
    }
    

    Dann soll da 100, 101, 102 rauskommen.
    Ungeklärt ist, was passiert, wenn man 900 oder mehr Objekte erzeugen möchte.



  • 
    #ifndef CPARKINGLOT_H_
    #define CPARKINGLOT_H_
    #include<string>
    #include<iostream>
    using namespace std;
    
    class CParkingLot{
    private:
    	int m_id;
    	int m_capacity;
    	int m_curOccupancy = 0;
    	void generateId();
    
    public:
    	CParkingLot(int capacity = 80);
            int static id;
    
    	int getId();
    	int getCapacity();
    	void setCapacity(int capacity);
    	int getCurOccupancy();
    	void setCurOccupancy(int curOccupancy);
    	bool parkVehicle();
    	int parkVehicles(int numVehicles);
    	int getFreeSpots();
    	void print();
    	friend ostream& operator<< (ostream& lop, const CParkingLot& rop);
    
    
    
    
    };
    ostream& operator<< (ostream& lop, const CParkingLot& rop);
    
    
    
    
    #endif /* CPARKINGLOT_H_ */
    ``
    
    ```cpp
    void CParkingLot::generateId(){
    		
    
    
    		if ( m_id >= 100 && m_id <1000){
                          CParkingLot::generateId(int id++);
              }
    
    
    		}
    
    	}
    

    Die anzahl erhöhen kann man ja mit id++ .
    ?



  • @Master33 sagte in Inkrementieren Problem:

    Die anzahl erhöhen kann man ja mit id++ .

    schon. Aber hast du deinen Code mal versucht zu kompilieren oder rätst du irgendeine Syntax und fragst dann hier nach?



  • Das kann man ja nichtmal mehr ansehen. 😞
    Da kommt ja bei den Affen schneller ein sinnvoller C++ Code raus.

    @Master33: Nach welchem Buch lernst du?



  • Könnt ihr paar tipps geben was ich dann da genau machen soll?



  • Bezogen auf deine ersten beiden Codes: du sollst id inkrementieren, nicht m_id!



  • Sorry war paar tage weg.
    So besser ?
    Ich studiere nicht Informatik oder so ,daher bin ich nicht so fit in den Sachen .

    So müsste es passen oder?

    
    void CParkingLot::generateId(){
    
                   if ( m_id >= 100 && m_id <1000){
    	                      id++;
    	          }
    
    
    			}```


  • Hast du das mal kompiliert und ausprobiert?

    Jetzt deklarierst du id nicht mal mehr. Soll das immer noch ein static int sein?
    Und, was ist dieses m_id und warum soll das zwischen 100 und 1000 sein. Wie hängt das mit id zusammen?

    Überleg dir doch einmal, was du genau erreichen willst, anstatt zu raten. Das hat nix mit einem Informatik Studium zu tun, sondern einfach mit logischem Denken.

    Tipp: Dein erster Ansatz war nicht so weit weg. Was gefehlt hat, war das Initialisieren von id (id einen "Startwert" zuweisen) und das Inkrementieren (Hochzählen) von id.



  • Das müsste es aber sein ,wenn ich dich richtig verstanden habe:

    
    void CParkingLot::generateId(){
    
                   if ( m_id >= 100 && m_id <1000){
                	   int id = 0;
    	                      m_id = id;
    	                      id++;
    	          }
    
    
    			}```
    
    
    Im header habe ich ja die static Variable erstellt :)


  • @Master33 sagte in Inkrementieren Problem:

    Das müsste es aber sein

    Nein.



  • Und wieder vorbeit.
    Was ist im Header static?

    Hast du probiert was raus kommt?
    bei jedem aufruf setzt du m_id auf 0...



  • 
    #ifndef CPARKINGLOT_H_
    #define CPARKINGLOT_H_
    #include<string>
    #include<iostream>
    using namespace std;
    
    class CParkingLot{
    private:
    	int m_id;
    	int m_capacity;
    	int m_curOccupancy = 0;
    	void generateId();
    
    public:
    	CParkingLot(int capacity = 80);
    	int static id;
    
    	int getId();
    	int getCapacity();
    	void setCapacity(int capacity);
    	int getCurOccupancy();
    	void setCurOccupancy(int curOccupancy);
        bool parkVehicle();
    	int parkVehicles(int numVehicles);
    	int getFreeSpots();
    	void print();
    	friend ostream& operator<< (ostream& lop, const CParkingLot& rop);
    
    
    
    
    };
    ostream& operator<< (ostream& lop, const CParkingLot& rop);
    
    
    
    
    #endif /* CPARKINGLOT_H_ */
    
    

    ich wollte zuerst den Default Wert auf 0 setzen und hiernach erhöhen ,damit er bei 0 beginnt ?
    Einfach int id; schreiben ?

    Statt = 0?


Anmelden zum Antworten