Inkrementieren Problem



  • @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?



  • Ok Leute ?



  • Ich zitiere mal deinen Eingangsbeitrag:
    @Master33 sagte in Inkrementieren Problem:

    Nutzen Sie hierfür eine lokale static-Variable innerhalb dieser Methode, die Sie nach jeder Zuweisung inkrementieren.

    Der Code dafür in deinem Eingangsbeitrag war also schon mal richtig. Per Default wird eine static-Variable immer mit 0 initialisiert (aber lesbarer ist es, diese Zuweisung explizit hinzuschreiben: static int id = 0;)

    Es fehlt nur noch das Inkrementieren dieser Variablen, damit bei jedem Aufruf eine neue Id zugewiesen wird!



  • Einfach als nächstes m_id = id;
    Oder wie ?
    Und das wars ?



  • @Master33 Du musst das einfach mal ausprobieren! Ich habe dir doch vor einigen Tagen ein Testprogramm geschrieben, wo dann 100, 101, ... rauskommen sollen. Jetzt musst du nur noch überlegen, wie du (wie in der Aufgabe gefordert) bei 100 statt bei 0 anfängst. Sollte nicht allzu schwierig sein. Danach überlegst du dir, wie du den Fehlerfall (id >= 1000) behandelst.


Anmelden zum Antworten