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

herzogRed

Frischling

  • »herzogRed« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Leipzig

  • Private Nachricht senden

1

10.06.2015, 00:05

Mehrdimensionale Arrays

kann mir jemand sagen woran es liegt das ich bei dem Listing nur max. breite und höhe 3 eingeben kann. alles andere bringt mir keine geordnete Karte als Ausdruck. kann man das ändern?
ausdruck jetzt:
012
345
678
ich hätte es gerne erweiter:
012345
678910
111213
141516
171819
oder wenn das nicht geht:
012456
789012
345678
901234
wenn ich breite=5 und höhe=5 eingebe kommt
0123456789
101112131415161718
192021222324252627
u.s.w
ist also nicht wirklich ein Viereck wie ein Schachbrett.

hier der code aus Listing 5.5:

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
#include<iostream>
using namespace std;

int main()
{
    const int Breite = 3;
    const int Hoehe = 3;

    int Karte[Breite][Hoehe];

    int x, y;
    int Zaehler = 0;

    for (y = 0; y < Hoehe; y++)
    {
        for (x = 0; x < Breite; x++)
        {
            Karte[x][y] = Zaehler;
            Zaehler++;
        }
    }

    for (y = 0; y < Hoehe; y++)
    {
        for (x = 0; x < Breite; x++)
        {
            cout << Karte[x][y];
        }
        cout << endl;
    }
 

    system("pause");
    return 0;
}

später kann ich die Karte ja mit xxx erstellen, aber geht es auch mit zahlen?
denn es wird ja im Kapitel erklärt, das man ein Schachbrett damit erstellen könne.
das bekomme ich aber nicht so hin.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »herzogRed« (10.06.2015, 00:14)


DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

10.06.2015, 00:24

Könnte wohl daran liegen das zweistellige Zahlen breiter sind als einstellige :)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

10.06.2015, 11:06

Verstehst du was der Code genau tut?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

herzogRed

Frischling

  • »herzogRed« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Leipzig

  • Private Nachricht senden

4

10.06.2015, 11:40

Der Code ist nicht das Problem, ist ja im Buch gut beschrieben.

Ich probiere heute Abend mal aus den Zähler auf 10 zu setzen, damit er nicht bei 0 anfängt.
Obwoh es ja eigentlich egal ist, da das mit dem zahlenschreiben ja nur eine vorübung ist, um später Grafik damit auszugeben. Aber ich wollte sehen, ob ich wirklich ein Viereck hinbekomme. Daher ist die Erklärung, das die ersten Zahlen, weniger Platz brauchen logisch.
Nur wenn ich höhere Zahlenwerte nehme geht es auch nicht mehr, wahrscheinlich, wegen der Bildschirmauflösung.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

10.06.2015, 12:06

Dein Verständnis von dem was der Code machen soll ist das Problem. Die beiden Möglichkeiten die du gern umsetzen würdest sind gar nicht so schwer wie es grad vielleicht wirkt. Wichtig ist nur erst mal dass du verstehst was der aktuelle Code macht und warum das Ergebnis dabei ist wie es ist.

Für Möglichkeit 2 wäre der Modulo Operator '%' gut zu gebrauchen.
Bei Möglichkeit 1 möchtest du etwas ganz anderes machen. Du willst hier nicht 5 Zahlen nacheinander ausgeben und dann jeweils einen Zeilenumbruch machen, sondern 5 Zeichen ausgeben und dann den Umbruch machen. Durch die Unterschiedliche länge der Zahlen muss das nicht immer unbedingt gerade aufgehen.
Als Beispiel, Höhe und Breite 5:
01234
56789
10111
21314
151617
Das muss also nicht mit allen Werten aufgehen
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

herzogRed

Frischling

  • »herzogRed« ist der Autor dieses Themas

Beiträge: 15

Wohnort: Leipzig

  • Private Nachricht senden

6

10.06.2015, 22:49

ok thx, das mit der Ausgabe der zahlen hat sich erledigt.
aber dazu noch was:
ich wollte mir die grösse des Arrays mals ausgeben lassen. aber wieso bekomme ich da mit Array[10][10] 400 raus? und mit [1][1] sind es 4. im Verhältnis passt es ja, aber wie kommt diese grösse zu stande und was sagt mir das? bzw kann ich diese info für irgendwas nutzen?

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
#include<iostream>
using namespace std;

int main()
{
    int test[10][10];

    cout << "array groesse: " << sizeof test << endl;

    system("pause");
    return 0;
}#include<iostream>
using namespace std;

int main()
{
    int test[10][10];

    cout << "array groesse: " << sizeof test << endl;

    system("pause");
    return 0;
}

7

10.06.2015, 23:30

sizeof liefert die Größe in Byte.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Nimelrian

Alter Hase

Beiträge: 1 216

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

  • Private Nachricht senden

8

10.06.2015, 23:32

sizeof gibt in diesem Fall die Menge des durch das Array belegten Speichers in Byte an. Ein int braucht auf deiner Plattform 4 Byte, also hast du 10*10*4 (bzw. 1*1*4) Byte an Speicher, die dein Array belegt. (Wichtig: Das funktioniert nur bei Arrays, die im selben Scope definiert wurden. In einer Function, in die du das Array als Parameter übergibst, wird sizeof nur die Größe eines Pointers auf deiner Plattform zurückgeben!)

Wenn du nun aus diesem Wert die Länge deines Arrays berechnen willst, musst du den Wert noch durch die Größe des gespeicherten Typs teilen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Werbeanzeige