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

1

31.05.2006, 20:31

Aufgabe Kapitel 3 Alternative

hi leute,
bei lösen dieser Aufgabe bin ich zu folgendem Ergebnis gekommen:

C-/C++-Quelltext

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
//Countdown


#include <iostream>

using namespace std;

int count = 0;
int prob = 0;

int main()
{
    cout << "Countdown bitte eingeben: ";
    cin >> count;
    prob = count;
    if (count%2 == false)
    {
        cout << "Error. Wrong Number!" << endl;
    }
    else
    {
        for (int p=0; p<=count; p++)
        {
            if (prob == count/2)
            {
                cout << "Half of it!" << endl;
            }
            cout << prob<< endl;
            prob-=1;
        }   
    }

    cout <<"Countdown fertig!" << endl;
    return 0;
}


im Buch befindet sich allerdings folgende Lösung:

C-/C++-Quelltext

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
//Lösung aus dem Buch


#include <iostream>

using namespace std;

int main()
{
    int CountdownStart;

    cout << "Startwert des Countdowns: ";
    cin >> CountdownStart;

    if (CountdownStart%2 == false)
    {
        cout << "Es wurde ein gerader Wert eingeben: " << endl;
    }
    else
    {
        for (int i=CountdownStart; i>=0; i--)
        {
            cout <<"Countdown: " << i <<endl;
            
            if (i== CountdownStart/2 + 1)
            {
                cout << "Die Hälfte ist vorbei!" << endl;
            }
        }
    }

    return 0;
}


==> nun möchte ich gerne von euch wissen ob meine Methode genau so gut, besser oder schlechter ist.

Vielen Dank.

MFG Zahlenwächter

Phili

unregistriert

2

31.05.2006, 20:37

Wenns klappt passts doch :D

Anonymous

unregistriert

3

31.05.2006, 20:56

Ähm, ist es denn beabsichtigt, dass der Countdown nicht ausgegeben wird?
Sondern nur ein Hinweis, wann die Hälfte erreicht wurde??

4

31.05.2006, 21:27

C-/C++-Quelltext

1
         cout << prob<< endl;

Anonymous

unregistriert

5

31.05.2006, 21:45

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>

int main (void)
{
    const unsigned long size = 10;

    for (unsigned long i=0; i<size && (!(size&1)); ++i)
    {
        if (i == size >> 1) 
            std::cout << "Halftime!" << std::endl;

        std::cout << "Countdown: " << size-i << std::endl;
    }

    return 0;
}
1. using namespace suckt
2. main sieht für mich grad wie ein Funktionsaufruf auf, schreib ein void für Klarheit rein!
3. benutze niemals variabeln die nicht initialisiert ist, und wenn ein Wert darein geschrieben wird, es geht ums Prinzip!
4. Du fragst nicht ab, ob es eine gültige Eingabe war. z. B. geb ich einen String ein wird es lustig!
5. Ein binärer Inverter (!) bringt oft wahre Wunder als ein == false, dazu gefällt mir das mit dem mod2 nicht.
6. Ich habe es aufgrund von Portabilitätsungenauigkeiten nicht so sehr mit int, use long!
7. Ohje, eine dekrementierende for-Schleife! Goldene Regel für for-Schleifen: Immer inkrementieren, niemals dekrementieren und der Datentyp sollte unsigned sein! Denn hast Du schon mal negative Arraypositionen gesehen? Ergo hast Du mit unsigned und raufzählen eine der größten Fehlerquellen beseitigt.

Ansonsten passabel, die Musterlösung gefällt mir jedoch auch nicht.

p.s.: Meine rechnet mit geraden Werten von 0 an aufwärts. Wenn Du es für ungerade Werte haben willst, guck mal nach was Du ändern musst. Tipp: 1 Zeichen löschen.

6

31.05.2006, 22:02

okay vielen dank. nix da. ich versteh zwar die hälfte nicht so ganz aber auch gut.

==> wenn du mal Zeit hast kannst ja die "Müsterlösung" erstellen.^^

MFG Zahlenwächter

p.s: was ich nicht versteh ist warum du eine konstante machst obwohl der user doch den countdown eingeben soll und warum du vor "cout" ein "std::" schreibst.

warum kein using namespace?

Sheddex

unregistriert

7

31.05.2006, 22:06

@nix da: Wenn jeder Autor in seinen Bücher den Leser sofort mit allem möglichen "erschlagen" würde, würde niemand das Buch lesen. Dieser "schlechte" Stil dient nun mal zur Vereinfachung, das ist wie, wenn du jetzt von jemandem der gerade std::cout gelernt hat verlangst den Quake 3 Code zu verstehen ;)

Anonymous

unregistriert

8

31.05.2006, 22:06

Such mal im Forum nach using namespace std; ich hab darüber schon oft eine Prädigt gehalten. Und die Musterlösung siehst Du oben, nur halt ohne Benutzereingabe, da ich für so kleine Testdinger nicht noch mit std::cin rumhantiere.

john

Alter Hase

Beiträge: 786

Beruf: Schüler

  • Private Nachricht senden

9

31.05.2006, 22:08

Zitat von »"Zahlenwächter"«

warum du vor "cout" ein "std::" schreibst.

warum kein using namespace?

Wenn er

Quellcode

1
using namespace std;
weglässt, ist das "std::" vor "cout" notwendig. ;)

edit: zu spät ^^
mfg
john

Sheddex

unregistriert

10

31.05.2006, 22:09

@Zahlenwächter: Wenn man noch einen anderen Namespace verwenden will, weiß der Compiler doch nicht welchen er verwenden soll. Das ist das Gleiche wie wenn dich jemand auffordert: "Hole mir eine Flasche aus dem Keller". Wenn dort jetzt nur eine Bierflasche steht ist das OK, wenn jetzt allerding Bierflaschen und Colaflaschen dastehen wüsstest du nicht was du jetzt nehmen sollst ;)
Wenn man aber nur einen Namespace verwendet geht das schonm und selbst wenn nix da was dagegen hat benutze ich auch using namespace std, weil ich keinen Bock hab' ständig std:: davor zu schreiben ;)

Werbeanzeige