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

24.07.2005, 18:14

Fehler in Listing 3.12

HiHo,

zunächst mal muss ich sagen, dass sich dieses Buch echt schön liest und bestens für den Einstieg in C++ geeignet ist.

Beim Durcharbeiten hab ich in Kapitel 3 einen kleinen Fehler entdeckt (glaub ich zumindest ;o)

In Beispiel-Listing 3.12 wir eine Art "Matrix" über zwei verschachtelte for-Schleifen ausgegeben. Die Abbruchbedingung ist hier jeweils, wenn der zu überprüfende Wert kleiner (<) als der Schleifenzähler ist. Richtig sollte es aber <= lauten, da sonst einze Zeile/Spalte fehlt.

C-/C++-Quelltext

1
2
3
    for (int i=0; i<=Hoehe; i++)
    {
        for (int j=0; j<=Breite; j++)



cu
Rufnex

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

2

24.07.2005, 18:16

solange die Bedingung wahr ist, wird i++ ausgeführt, also wenn i = 3 ist und hoehe = 4 dann wird noch einmal i++ ausgeführt und die schleife, also es passt so :)

3

24.07.2005, 18:27

Wenn ich das Beispiel ausführe, dann erhalte ich bei einer Eingabe von Höhe = 4, Breite = 4 die folgende Ausgabe:

Quellcode

1
2
3
4
XX-X
XX-X
----
XX-X


Wenn ich aber als Bedingung <= setze, dann erfolgt folgende (korrekte) Ausgabe:

Quellcode

1
2
3
4
5
XX-XX
XX-XX
----
XX-XX
XX-XX


Durch die if/else Bedingung innerhalb der zweiten for-Schleife wird demnach ein Durchlauf nicht berücksichtigt. Oder habe ich da jetzt komplett ein Denkproblem ;o)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

24.07.2005, 18:40

Also du solltest es vermeiden <= zu nutzten denn führ mal dieses Beispiel aus:

C-/C++-Quelltext

1
2
3
int test[4];
for(int u=0; u<=4; u++)
      test[u]=0;


Du wirst einen Fehler erhalten. Wenn man die for Schleife durch eine while ersetzt wird klar wieso:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
int test[4];

int u=0;
while( u<=4)
{
      test[u]=0;
      u++;
}
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

5

24.07.2005, 18:53

Ja, das ist schon richtig. Bei einem Array ist mir das auch klar .. aber im genannten Beispiel funktioniert die Ausgabe gem. Listing nicht so wie gewoll mit dem Original-Code:

C-/C++-Quelltext

1
2
3
for (int i=0; i<Hoehe; i++)
{
        for (int j=0; j<Breite; j++)


Daher mußte ich auf <= korrigieren. Oder reden wir gerade aneinander vorbei ;o)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

24.07.2005, 19:01

Naja wenn es eine

C-/C++-Quelltext

1
int test[4][4]

Matrix ist, dann müssen die vars Hoehe u. Breite dementsprechend auch 4 sein. Daran hackt es wohl ;)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

7

24.07.2005, 19:03

Nun im Beispiel wird ja keine Matrix verwendet (hab mich da falsch ausgedrück). Es werden einfach nur die Tastatureingaben für die Werte abgefragt .. also Integer :)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

24.07.2005, 19:06

...es hier nochmehr stuss ensteht; Poste einfach mal den Abschnitt.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

9

24.07.2005, 19:39

Ich kann keinen Stuß sehen .. ;)

Listing 3.12:

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
#include <iostream>

using namespace std;

int main()
{
    int Hoehe,Breite;

    do
    {
        cout << "Höhe: \n";
        cin  >> Hoehe;
        cout << "Breite: \n";
        cin  >> Breite;
    } 
    while ( (Hoehe%2==0) || (Breite%2==0) );

    for (int i=0; i<Hoehe; i++)
    {
        for (int j=0; j<Breite; j++)
        {   
            if ( (Hoehe/2 == i) || (Breite/2 == j) ) 
                cout << "-";
            else
                cout << "X";
        }
        cout << endl;
    }

    return 0;
}


Listing, wie es aus meiner Sicht korrekt wäre:

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
#include <iostream>

using namespace std;

int main()
{
    int Hoehe,Breite;

    do
    {
        cout << "Höhe: \n";
        cin  >> Hoehe;
        cout << "Breite: \n";
        cin  >> Breite;
    } 
    while ( (Hoehe%2!=0) || (Breite%2!=0) );     // 1.) != statt ==


    for (int i=0; i<=Hoehe; i++)                         // 2.) <= statt <

    {
        for (int j=0; j<=Breite; j++)                 // 3.) <= statt <

        {   
            if ( (Hoehe/2 == i) || (Breite/2 == j) ) 
                cout << "-";
            else
                cout << "X";
        }
        cout << endl;
    }

    return 0;
}

Werbeanzeige