Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Inatrox

Frischling

  • »Inatrox« ist der Autor dieses Themas

Beiträge: 61

Wohnort: Dresden

  • Private Nachricht senden

1

26.06.2014, 12:50

c++ bool wert nur einmal in einem Schleifendurchgang verändern

Hallo Leute,

ich habe folgendes Problem, und zwar hab ich eine map erstellt, bei dieser map habe ich zwei int Werte deklariert und definiert ( map<int,int> tower;). Danach habe ich eine while Schleife die so lange läuft bis meine bool Variable auf false schaltet. Dazu habe ich eine for-Schleife in der while Schleife die die Werte prüft und dann auf true oder false umschaltet.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
void tower_move_2 (int number_of_disks,int moves)                                
{
    map<int,int> tower;
    map<int,int>::iterator it;
    map<int,int>::iterator control;
    int giver = 1;
    bool loop;
    


    system("cls");


    for(int a = 0; a < number_of_disks; a++)
    {
        tower.insert(pair<int, int>(giver, 1)); 
        giver ++;
    }

    control = tower.begin();
    it      = tower.begin();

    while (loop = true)
    {
        for (control; control->first <= number_of_disks; control++)
        {


            if (control->second == 1)
            {
                loop = true;
            }

            else if (control->second == 2)
            {
                loop = true;
            }

            else
            {
                loop = false;
            }
        }

    }

}



Stellt euch das Spiel Türme von Hanoi vor der erste int wert ist die größe der Platten von 1 (kleinste) bis zur 8 (größte) -Scheibe, wobei der zweite int Wert also second die Position von 1-3 ist.
Nun möchte ich das die for Schleife durchläuft und sobald sie erkennt das eine Scheibe auf 1 oder 2 liegt auf true bleibt und nicht mehr auf false umschalten kann (zumindest in diesem Schleifen durchgang).
Weil wenn jetzt z.B. die 3. Scheibe auf 2 liegt Schaltet sich der bool Wert auf true und die Schleife läuft weiter, wenn dann aber die 4. Scheibe auf 3 liegt Schaltet sich der bool Wert wieder auf false doch das möchte ich nicht.


Frage: Wie kann man das umgehen?
cout << "Programmieren muss sein" << endl;

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

26.06.2014, 12:59

Quellcode

1
while (loop = true)

Was ist hier falsch?

Inatrox

Frischling

  • »Inatrox« ist der Autor dieses Themas

Beiträge: 61

Wohnort: Dresden

  • Private Nachricht senden

3

26.06.2014, 13:11

Das ist ja alles richtig nur nehmen wir mal an (das programmier ich noch). Das Programm geht alle Varianten durch wie man die Platten bei Türme von Hanoi verschieben kann und prüft dann mit der for Schleife ob noch Platten auf 1 oder 2 liegen. Wenn das der fall ist z.b. Platte 3 liegt noch auf 2, soll die for Schleife rausspringen oder so was in die Richtung. Denn wenn die Schleife weiterläuft und z.B. die 8 dann auf 3 liegt Schaltet es sich ja wieder auf false um und das möchte ich nicht.

Wie kann man das umgehen?
cout << "Programmieren muss sein" << endl;

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

26.06.2014, 13:21

Das ist ja alles richtig

Nein, ist es nicht.
Kennst du den Unterschied zwischen den Operatoren = und == ?

Inatrox

Frischling

  • »Inatrox« ist der Autor dieses Themas

Beiträge: 61

Wohnort: Dresden

  • Private Nachricht senden

5

26.06.2014, 13:23

Ja :D und jetzt verstehe ich auch erst was du mit was ist da falsch meinst. :D
Aber ist es denn nun möglich ? ?(
cout << "Programmieren muss sein" << endl;

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Inatrox« (26.06.2014, 13:32)


FSA

Community-Fossil

  • Private Nachricht senden

6

26.06.2014, 13:39

Aus einer Schleife kommst du mit break;.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Inatrox

Frischling

  • »Inatrox« ist der Autor dieses Themas

Beiträge: 61

Wohnort: Dresden

  • Private Nachricht senden

7

26.06.2014, 13:46

Danke für die Antwort.
cout << "Programmieren muss sein" << endl;

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

26.06.2014, 14:03

Besser wäre natürlich die Bedingung der Schleife korrekt zu setzen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Inatrox

Frischling

  • »Inatrox« ist der Autor dieses Themas

Beiträge: 61

Wohnort: Dresden

  • Private Nachricht senden

9

27.06.2014, 10:29

Wie stellst du dir das vor? ?(
cout << "Programmieren muss sein" << endl;

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

10

27.06.2014, 10:48

for(Initialisierung; Bedingung; Fortsetzung)

Bedenke, dass die Bedingung einen bool erwartet. Du kannst da so komplizierte Bedingungen reinschreiben, wie du willst, hauptsache am Ende kommt true/false raus. Aber nicht nur auf den Kopf der For-Schleife gucken. Du musst auch die Logik ein wenig ändern, damit das funktioniert.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Werbeanzeige