Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Anfänger

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.12.2011, 17:22 Uhr
~Niko.S
Gast


Hallo,
ich bin c++ anfänger und komme bei einer Aufgabe nicht weiter, die lautet:

Lass die Münze vom Programm so oft werfen, bis eine Münzseite 50x gekommen ist und gib dann das Ergebnis folgendermaßen aus
(Schalter (zum "Ausschalten des Werfens") einbauen!):

Bsp1:

Kopf Kopf Zahl Kopf Zahl Zahl Zahl Zahl Kopf Zahl
Kopf Zahl Zahl Zahl Zahl Kopf Zahl Zahl Zahl Zahl
Kopf Zahl Zahl Zahl Zahl Kopf Zahl Zahl Zahl Zahl
Zahl Zahl Zahl Zahl Zahl Kopf Zahl Zahl Zahl Zahl
Zahl Zahl Zahl Zahl Zahl Zahl Zahl Kopf Kopf Zahl
Kopf Zahl Zahl Zahl Zahl Zahl Zahl Zahl Zahl Zahl
Kopf Zahl Zahl

Münzwurf wurde abgebrochen, weil "Zahl" 50x gekommen ist.
Die Kopf-Seite ist 12x gefallen.


jetzt komme ich beim Schalter nicht weiter! Mein Ansatz:



C++:
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>

using namespace std;
int main()
{
    int zahl=0,kopf=0;
    bool schalter=true;
    srand(time(NULL));

    while (schalter)
    {
        if(kopf <50 || zahl<50)
        {
            for ( int i=1; i<=100; i++ )
            {
                if ( rand() % 2 == 0 )
                {
                    cout<<"Kopf ";
                    ++kopf;
                }
            else
                {
                    cout<<"Zahl ";
                    ++zahl;
                }
            if ( i % 10 == 0 )
                cout<<"\n";

            if (kopf || zahl >50)
                schalter=false;
    }}}

    cout << kopf <<endl;
    cout << zahl;
}


kann mir jemand helfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.12.2011, 19:38 Uhr
TOSHMAX



Du brichst ab, falls kopf ungleich 0 ist oder zahl größer als 50 ist. Richtig wäre:

C++:
            if (kopf > 50 || zahl > 50)
                schalter=false;

Allerdings wird verlangt bei 50 abzubrechen also besser '== 50' bei beiden.
Und diese Abfrage am Anfang

C++:
if(kopf <50 || zahl<50)

kannst du dir sparen, da du es nicht zweimal prüfen musst und es im schlimmsten Fall zu einer Endlosschleife führen kann.

Dieser Post wurde am 01.12.2011 um 19:39 Uhr von TOSHMAX editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.12.2011, 19:58 Uhr
Hans
Library Walker
(Operator)


Hi,

also diese Zeile hier:

C++:
           if (kopf || zahl >50)

ist schon mal falsch. Die sollte wie oben im Quelltext auch

C++:
           if (kopf>50 || zahl >50)


So wie ich die Aufgabe verstehe, soll allerdings erst die Münze so oft geworfen werden, bis eine Seite 50 mal gekommen ist, und erst dann soll ausgegeben werden, was gekommen ist. Oder ist die Aufgabestellung da nur schlecht formuliert?
Dann ist die innere Schleife, bzw. for-Schleife falsch. Du weisst ja schliesslich nicht, ob Du mit 100 durchläufen auskommst oder nicht. Es kann sein, dass das gewünschte Ergebniss schneller da ist, d.h. die Münze musste weniger als 100 mal geworfen werden. Es kann aber auch mehr sein. Deshalb ist da eine Konstruktion mit while besser. Bzw. weil das Ergebniss ja erst nach dem durchlauf der Schleife abgefragt wird, eine do-while-Schleife.

Und schliesslich noch zur Unterscheidung von C und C++:
Diese Header

C++:
#include <stdlib.h>
#include <time.h>
#include <stdio.h>

sind kein C++ sondern C. Wenn man die durch diese Header definierten Funktionen nutzen will, sollte man auch die C++ Varianten davon nehmen. Das sieht dann so aus:

C++:
#include <cstdlib>
#include <ctime>


Und <stdio.h> brauchst Du hier überhaupt nicht, weil die dadurch bereit gestellten Funktionen nicht benutzt werden. Ausserdem ist alles was zur Ausgabe nötig ist, auch in iostream vorhanden ist.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.12.2011, 17:39 Uhr
~TIRI
Gast


int MAX_ANZAHL = 50;
int zahlCounter = 0, kopfCounter = 0, versuchCounter = 0;
srand(time(NULL));
while((zahlCounter < MAX_ANZAHL) && (kopfCounter < MAX_ANZAHL))
{
versuchCounter++;
(rand() % 2 == 0)? kopfCounter++ : zahlCounter++;
}
cout <<"bei " << versuchCounter << " Versuchen => Zahl:" << zahlCounter << " Kopf:" << kopfCounter << endl;
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: