Einsendung:

Lösungsvorschlag B

#include <iostream.h>
int zugMensch(int anzahlDerMuenzen)
{
   int ergebnis;
   cout<<"Jetzt liegen "<<anzahlDerMuenzen<<" Muenzen auf dem Tisch."<<endl;

   // endlosschleife; wird erst bei korrekter Eingabe beendet
   for(;;)
   {
      cout<<"Wieviele moechten Sie nehmen?";
      cin>>ergebnis;

      if(anzahlDerMuenzen-ergebnis>=0 && ergebnis>=1 && ergebnis<=3)
         return ergebnis;
      cout<<"Ungültiger Zug! Bitte neu eingeben"<<endl;
   }
};

Zuerst eine kleine Anmerkung:
Scheiben Sie nie das umständliche

   anzahlDerMuenzen-ergebnis>=0

wenn nur das einfache

   ergebnis<=anzahlDerMuenzen

gemeint war.

Zur Bewertung möchte ich Ihre Losung der vorhergehenden Lösung gegenüberstellen:

int zugMensch(int anzahlDerMuenzen)
{
   int ergebnis=0;
   while(ergebnis<1 ¦¦ ergebnis>3)
   {
      cout<<"Spieler ("<<anzahlDerMuenzen<<"): ";
      cin>>ergebnis;
      if(ergebnis<1 ¦¦ ergebnis>3)
         cout<<"Sie duerfen nur zwischen 1 und 3 Muenzen nehmen!"<<endl;
      if(ergebnis>anzahlDerMuenzen)
      {
         cout<<"So viele Muenzen liegen nicht mehr auf dem Tisch!"<<endl; ergebnis=0;
      }
   };
   return ergebnis;
}

Die andere Lösung ist dahingehend einfacher, daß man beim Lesen der Schleife gleich weiß, wann sie abbricht. Das ist an Ihrer Endlosschleife nicht ersichtlich. Ein Minuspunkt.
Die andere Lösung braucht die Bedingung

   ergebnis<1 ¦¦ ergebnis>3

zwei mal. Sie brauchen sie nur einmal, wodurch Nachbesserungen am Programm vereinfacht werden. Ein Pluspunkt.
Sie beide haben die beiden Möglichkeiten gefunden, die bei solchen Aufgaben sinnvoll sind. Welche der beiden Möglichkeiten besser ist, muß man von Fall zu Fall entscheiden.
Im vorliegenden Fall, wo die Funktion so klein und übersichtlich ist, würde ich Ihre Lösung bevorzugen. Sobald aber die Sachen, die innerhalb der Schleife geschehen sollen, komplizierter werden, wird die andere Lösung besser werden.

int zugRechner(int anzahlDerMuenzen)
{
   int wunschZug=anzahlDerMuenzen%4;
   if(wunschZug==0)
      wunschZug=1;
   cout<<"Der Computer nimmt "<<wunschZug<<" Muenze(n)"<<endl;
   return wunschZug;
};

Offensichtlich gut!



Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00