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

Porates

Frischling

  • »Porates« ist der Autor dieses Themas

Beiträge: 32

Beruf: GameDesign Student bei Qantm Institut München, Gründer von DarkMirrorGames

  • Private Nachricht senden

1

31.12.2008, 14:42

Aufgabe 3.10

Also ich habd ie Aufgabe folgendermaßen gelöst:

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
// Aufgabe: Stelle einen Countdown her


#include <iostream>
using namespace std;

int main()
{
    //Varibalen

    int Timer;
    cout << "Geb bitte eine Countdown Zahl ein: " ;
    cin >> Timer;
    // Überprüfung ob gerade oder ungerade 

    if (Timer%2 == false) 
        cout << "Bitte nur ungerade Werte." << endl;
    else
    {
        for (int i = Timer; i >= 0 ; i --)
        {

            if (i == (Timer/2)) 
            {
                cout << "Die Hälfte ist geschafft." << endl;
            }
            cout << "Countdown: " << i << endl;

        }
    }
    return 0;
}



Laut Buch soll sie so:

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
// Aufgabe: Stelle einen Countdown her


#include <iostream>
using namespace std;

int main()
{
    //Varibalen

    int Timer;
    cout << "Geb bitte eine Countdown Zahl ein: " ;
    cin >> Timer;
    // Überprüfung ob gerade oder ungerade 

    if (Timer%2 == false) 
        cout << "Bitte nur ungerade Werte." << endl;
    else
    {
        for (int i = Timer; i >= 0 ; i --)
        {

            cout << "Countdown: " << i << endl;
            if (i == (Timer/2+1)) 
            {
                cout << "Die Hälfte ist geschafft." << endl;
            }

        }
    }
    return 0;
}


gelöst werden. Sollte ioch mir meine Lösungweise abgewöhnen ?
ODer ist es egal, auf welche art mansie löst?

Edit:

Mit geraden Zahlen ließe sich der countdown schöner wiedergeben.
-->

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
// Aufgabe: Stelle einen Countdown her


#include <iostream>
using namespace std;

int main()
{
    //Varibalen

    int Timer;
    cout << "Geb bitte eine Countdown Zahl ein: " ;
    cin >> Timer;
    // Überprüfung ob gerade oder ungerade 

    if (Timer%2 == true) 
        cout << "Bitte nur gerade Werte." << endl;
    else
    {
        for (int i = Timer; i >= 0 ; i --)
        {
            cout << "Countdown: " << i ;
            if (i == (Timer/2)) 
            {
                cout << "  Die Haelfte ist geschafft." << endl;
            }
            else
            {
                cout << endl;
            }


        }
    }
    return 0;
}
www.darkmirrorgames.de

2

31.12.2008, 14:58

Also ich seh da nichts zum abgewöhnen.
Außer "using namespace std".
Stattdessen std:: vor jedes Objekt von std schreiben, z.B. std::cout.

Edit: Ja ich weiß, man könnte's besser formulieren.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

3

31.12.2008, 15:00

Solange das Ergebnis wie gewünscht ist, spielt es keine Rolle, wie du eine Aufgabe löst. Gewisse Sachen kann man immer anderst lösen und möglicherweise auch kürzer, aber "falsch" in dem Sinne ist es dann nicht.

4

31.12.2008, 15:03

Du solltest sehr vorsichtig sein mit "Irgendwas==true". Zumindest bei dem gcc Compiler gilt:

C-/C++-Quelltext

1
2
3
4
5
6
7
if(7) //wahr

...
if(7==true)//falsch

..
if(7!=false)//wahr

..
if(1==true)//wahr

Alles außer 0 ist wahr, und "true" ist wahr, aber nicht alles ungleich 0 ist auch "true". Lass also das ==true am besten einfach weg.

Btw.: Wenn man sich der Gefahren (es können Mehrdeutigkeiten auftreten, wenn z.B. woanders cout außerhalb des std-Namespaces deklariert wurde, und wenn using in einem Header steht, gilt das auch für sämtliche Dateien, die diesen Header direkt oder indirekt inkludieren) bewusst ist, und sicher, dass sie hier nicht auftreten können, finde ich es äußerst angebracht, using zu verwenden.
Lieber dumm fragen, als dumm bleiben!

5

31.12.2008, 15:04

Re: Aufgabe 3.10

Zitat von »"Porates"«


Sollte ioch mir meine Lösungweise abgewöhnen ?
ODer ist es egal, auf welche art mansie löst?


Wenn ja, was würdest du dir denn abgewöhnen?

Also ich sehe jetzt keinen großen unterschied. Die Lösung im Buch ist immer nur eine mögliche Lösung, natürlich kann man es anders lösen, wenn einem der Codestil im Buch nicht gefällt oder einfach "freier" sein will.

In den Aufgaben geht es in erster Linie auch darum solche sachen wie Schleifen, Bedingungen etc. zu üben. Und das machst du hier ja richtig.

Und ob man das Gane jetzt mir geraden oder ungeraden übt ist auch egal. Die Hauptsache ist wie gesagt der Lerneffekt.

6

31.12.2008, 15:50

@Jonathan
Es ist nicht nur beim gcc so. Und wenn man den vergleich wirklich noch explizit herausstellen möchte (z.B. um die Übersicht zu wahren) kann man ein !=false verwenden. ;)

7

31.12.2008, 18:01

Ich hab das Buch jetzt nicht gelesen, aber warum vergleicht ihr Zahlen mit booleschen Werten? Wäre nicht Timer%2 == 0 (oder mit != und/oder mit 1) das einzig wirklich korrekte?
Howdy!

8

31.12.2008, 18:33

es gibt keine einzig korrekte lösung, solange man dasselbe erreicht

9

31.12.2008, 22:32

Ich hab das Buch jetzt nicht gelesen, aber warum vergleicht ihr Zahlen mit booleschen Werten? Wäre nicht Timer%2 == 0 (oder mit != und/oder mit 1) das einzig wirklich korrekte?


was ist 1 oder 0? Sind das etwa keine boolschen Werte?
0 = false
<1 = true

10

01.01.2009, 04:33

Zitat von »"raXor"«


0 = false
<1 = true

<1? "true" ist als eins definiert, true im sinne einer Bedingung ist dagegen jeder Wert ungleich 0 ;)

Werbeanzeige