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

GMoney597

Frischling

  • »GMoney597« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Roth

Beruf: Verwaltungsfachangesteller (Stadtverwaltung), Fitness-Trainer und Muay-Thai-Trainer

  • Private Nachricht senden

1

28.08.2014, 09:22

Belegung mehrerer Felder eines 2D-Arrays

Hey Leute,

folgenden Code habe ich in VC++ 13 probiert und dieser stößt an seine Grenzen bei der Belegung von Zeile = 6 und Spalte = 6
um möglichen Programmierfehlern aus dem Weg zu gehen, habe ich gleiche Struktur nochmals in Pocket CPP probiert ----> wieder funktioniert es nicht

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>

using namespace std;

int main()
{
    char Field[6][6];
    int Zeile, Spalte;
    
    //Basisfeld wird angelegt
    for (int i = 0; i < 6; i++)
    {
        for (int j = 0; j < 6; j++)
        {
            Field[i][j] = '_';
        }
    }
    
    //Basisfeld wird ausgegeben
    cout << "|X|1|2|3|4|5|6|" << endl;
    for (int i = 0; i < 6; i++)
    {
        cout << "|" << i+1 << "|";
        for (int j = 0; j < 6; j++)
        {
            cout << Field[i][j] << "|";
        }
        cout << endl;
    }

    //Prüfen, ob die eingegebene Zahl größer 6 ist
    do
    {
        cout << "Bitte Zeile eingeben: ";
        cin >> Zeile;
        if (Zeile > 6)
            cout << "Bitte nur Werte von 1 - 6 eingeben" << endl;
    }while (Zeile > 6);
    
    //Prüfen, ob die eingegebene Zahl größer 6 ist
    do
    {
        cout << "Bitte Spalte eingeben: ";
        cin >> Spalte;
        if (Spalte > 6)
            cout << "Bitte nur Werte von 1 - 6 eingeben" << endl;
    }while (Spalte > 6);
    
    int i = Zeile - 1;
    int j = Spalte - 1;
    
    //Felder belegen
        if (Zeile == 6)
        {
            Field[i][j] = 'R';
            Field[i - 1][j] = 'R';
            Field[i][j + 1] = 'R';
            Field[i - 1][j + 1] = 'R';
        }
        else if (Spalte == 6)
        {
            Field[i][j] = 'R';
            Field[i + 1][j] = 'R';
            Field[i][j - 1] = 'R';
            Field[i + 1][j - 1] = 'R';
        }
        else if (Zeile == 6 && Spalte == 6)
        {
            Field[i - 1][j - 1] = 'R';
            Field[i - 1][j] = 'R';
            Field[i][j - 1] = 'R';
            Field[i][j] = 'R';
        }
        else
        {
            Field[i][j] = 'R';
            Field[i][j + 1] = 'R';
            Field[i + 1][j] = 'R';
            Field[i + 1][j + 1] = 'R';
        }
            
    //ganzes Feld wird jetzt mit Veränderungen ausgeben    
    cout << "|X|1|2|3|4|5|6|" << endl;
    for (int i = 0; i < 6; i++)
    {
        cout << "|" << i+1 << "|";
        for (int j = 0; j < 6; j++)
        {
            cout << Field[i][j] << "|";
        }
        cout << endl;
    }
    
    cin.get();
    return 0;
}


das Resultat:
»GMoney597« hat folgendes Bild angehängt:
  • Feld2D.png

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

28.08.2014, 09:28

Kannst du kurz beschreiben, wie es aussehen sollte? Wenn der Fehler im Code steckt kann man sonst keine Rückschlüsse ziehen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

ERROR

Alter Hase

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

3

28.08.2014, 09:35

Ab Zeile 41 werden die Werte für Spalte und Zeile auf 6 festgelegt. Dein Array ist genau [6][6] groß. Vielleicht findest du jetzt den Fehler?

GMoney597

Frischling

  • »GMoney597« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Roth

Beruf: Verwaltungsfachangesteller (Stadtverwaltung), Fitness-Trainer und Muay-Thai-Trainer

  • Private Nachricht senden

4

28.08.2014, 09:36

Oh na klar, es sollte dann so aussehen, dass je nach Eingabe der Zeile und Spalte unter Berücksichtigung der Feld-Enden ein (optisch zusammengehörendes) Viereck des Buchstaben 'R' aufgebaut wird.

Wenn ich nur ein Feldende angreife, also nur rechts oder nur unten, dann setzt er die vier zusammengehörenden 'R' so, dass eben die freien Felder daneben belegt werden, weil ja über den Rand nichts
zugewiesen werden sollte.

Wenn ich aber, wie im vorliegenden Fall beide Enden angreife, dann gibt es kein zusammengehörendes Viereck mehr, sondern 2 'R' unten rechts und eins unten links, das 4. 'R' verschluckt er komplett.

Dieser Code allein arbeitend ist Teil eines Projektes, welches ich angefangen habe und schon relativ gut zurecht komme.

GMoney597

Frischling

  • »GMoney597« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Roth

Beruf: Verwaltungsfachangesteller (Stadtverwaltung), Fitness-Trainer und Muay-Thai-Trainer

  • Private Nachricht senden

5

28.08.2014, 09:38

Ab Zeile 41 werden die Werte für Spalte und Zeile auf 6 festgelegt. Dein Array ist genau [6][6] groß. Vielleicht findest du jetzt den Fehler?


das ist es leider nicht, denn egal wo ich meinen Initiativ-Punkt setze funktioniert es; nur eben bei 6/6 nicht.

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

6

28.08.2014, 09:38

Ab Zeile 41 werden die Werte für Spalte und Zeile auf 6 festgelegt. Dein Array ist genau [6][6] groß. Vielleicht findest du jetzt den Fehler?

Er greift mit i/j auf das Array zu, welche den Eingabewerten - 1 entsprechen.

Edit wegen Ninja:
Oh na klar, es sollte dann so aussehen, dass je nach Eingabe der Zeile und Spalte unter Berücksichtigung der Feld-Enden ein (optisch zusammengehörendes) Viereck des Buchstaben 'R' aufgebaut wird.

Wenn ich nur ein Feldende angreife, also nur rechts oder nur unten, dann setzt er die vier zusammengehörenden 'R' so, dass eben die freien Felder daneben belegt werden, weil ja über den Rand nichts
zugewiesen werden sollte.

Wenn ich aber, wie im vorliegenden Fall beide Enden angreife, dann gibt es kein zusammengehörendes Viereck mehr, sondern 2 'R' unten rechts und eins unten links, das 4. 'R' verschluckt er komplett.

Dieser Code allein arbeitend ist Teil eines Projektes, welches ich angefangen habe und schon relativ gut zurecht komme.

Bei sowas hilft der Debugger. Schritt für Schritt durchgehen, sehen, was am Array verändert wird und am besten nach jeder Zuweisung das Array einmal ausgeben. Das dürfte dich einen guten Schritt weiterbringen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

ERROR

Alter Hase

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

7

28.08.2014, 09:40

Also mich wundert, dass da nicht sogar ein Fehler kommt. Ich habe den Code bei mir mal rein kopiert zum besseren lesen und das Programm crashte sogar.

Aber es wird mit i/j gerechnet...

8

28.08.2014, 09:46

Kann die dritte Bedingung jemals eintreffen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
if (Zeile == 6)
{
    // ...
}
else if (Spalte == 6)
{
    // ...
}
else if (Zeile == 6 && Spalte == 6)
{
    // ...
}

An dieser Stelle jedenfalls nicht. ;)

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

9

28.08.2014, 09:48

Indeed, deine Abfragenreihenfolge ist falsch. Immer den spezifischsten Fall zuerst nehmen, dann die einfacheren.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

GMoney597

Frischling

  • »GMoney597« ist der Autor dieses Themas

Beiträge: 48

Wohnort: Roth

Beruf: Verwaltungsfachangesteller (Stadtverwaltung), Fitness-Trainer und Muay-Thai-Trainer

  • Private Nachricht senden

10

28.08.2014, 09:51

Oh, das ist ja super

Danke Endgegner & Nimelrian

Diese Regel kannte ich noch nicht aber stimmt, wenn ich darüber nachdenke, macht es Sinn

Danke vielmals

Werbeanzeige