Konvertierungskonstruktor - wie?



  • Hallo zusammen! Ich habe ein kleines Problem. Ich bin gerade an der Programmierung eines MastermindSpiels, welches durch eine Klasse Mastermind repräsentiert werden soll, das über ein Attribut "int * digits" verfügt. Dieses digits ist in erster Linie ein vierstelliges int-Array --> int array[4]; In dieses Array werden über die Funktion 1 + rand()%6 Zahlen zwischen 1 und 6 reingeschrieben. Diese Zahlen repräsentieren die sechs Farben in einem MastermindSpiel.
    Nun lautet meine Aufgabenstellung wie folgt: "Der Konvertierungskonstruktor erzeugt ein dynamisches int-Array digits, dessen Elemente die einzelnen Ziffern der vierstelligen int-Zahl enthalten. Er übernimmt diese int-Zahl als Parameter und speichert die einzelnen Ziffern der Zahl in die Elemente von digits.

    Mastermind::Mastermind(int zahl)
    //Dies ist mein Konstruktor, aber was mache ich mit dem Parameter zahl?  
    
    {
       digits = new int[4]; 
       for(int i=0; i<4; i++)
          digits[i]=0;
    }
    


  • also wenn ich das richtig verstehe soll zahl in das array digits geschrieben werde. du initialisierst aber das array mit 0.

    Du mußt also die einzelnen Stellen (Einer/Zehner...) aus zahl extrahieren, das kannst du z.B. mit modulo-rechnung machen. Diese Werte kommen dann in das aaray digits.



  • Danke erstmal. Ich habe mir das auch schon gedacht. Meine Lösung sieht wie folgt aus:

    Mastermind::Mastermind(int zahl)
    {
       digits = new int[4]; 
       digits[3]=zahl%10; 
       digits[2]=(zahl/10) %10; 
       digits[1]=(zahl/100) %10; 
       digits[0]=zahl/1000; 
    }
    

    Leider bin ich bezüglich Programmieren in C++ noch ein relativer Anfänger. Ich würde das ganze Konstrukt lieber etwas globaler verwenden, also auch, wenn z.B. die Größe des Arrays 10 ist. Wie sähe so etwas aus?



  • Da müßtest du in einer Schleife den Modulo Operator ausführen und anschließend den Wert dann durch 10 teilen, also

    {
       const int nCount = 4; // oder 10 oder 4711(na ja soviele Stellen hat wohl kein int -)
       digits = new int[nCount]; 
       for(int i=0; i<nCount; i++)
       {
          digits[i]=zahl%10;
          zahl / = 10;
       } 
    }
    

Anmelden zum Antworten