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

Werwofl

Treue Seele

  • »Werwofl« ist der Autor dieses Themas

Beiträge: 100

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

1

06.12.2010, 08:43

2-Dimensoniales Array prüfen

Moin moin,

ich versuche mir grad ein Schiffe versenken zusammen zu basteln und bin momentan noch mit der Generierung des Feldes beschäftigt.
Hier bin ich auch schon auf mein erstes Problem gestoßen:

C-/C++-Quelltext

1
2
3
4
5
6
7
void Field::generateField(){
    for(int y=0;y<(int)(sizeof(field)/sizeof(int));y++){
        for(int x=0;x<(int)(sizeof(field)/sizeof(int));x++){
            field[y][x] = 0;
        }
    }
}


(int)(sizeof(field)/sizeof(int)) multipliziert mein Zweidimensionales-Array. Sag ich also field[7][7] ist die Zahl die mit (int)(sizeof(field)/sizeof(int)) = 49

Wie kann ich dem vorbeugen wenn ich für die Schleife jeweils nur 1. Dimension und dann die 2. Dimension haben will?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

06.12.2010, 08:55

Dynamische Berechnung ist ja schön und gut, aber wo genau ist das Problem nicht einfach Konstanten oder Attribute zu verwenden? Das wäre ohnehin besser lesbar.

"(int)(sizeof(field)/sizeof(int))" multipliziert außerdem gar nichts und schon gar keinen zweidimensionalen Array.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

3

06.12.2010, 09:02

du musst dir wenigstens irgendwie merken, wie groß die eine dimension ist, wenn du das nicht weißt, kannst du weder wissen, wie groß die eine, noch die andere ist.

@BlueCobold: dochdoch, da wird schon multipliziert ^^ und zwar mit sizeof(int)^-1 ;)

Werwofl

Treue Seele

  • »Werwofl« ist der Autor dieses Themas

Beiträge: 100

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

4

06.12.2010, 09:03

Dynamische Berechnung ist ja schön und gut, aber wo genau ist das Problem nicht einfach Konstanten oder Attribute zu verwenden? Das wäre ohnehin besser lesbar.

"(int)(sizeof(field)/sizeof(int))" multipliziert außerdem gar nichts und schon gar keinen zweidimensionalen Array.

Na gut dann muss ich das über Attribute lösen. Danke trotzdem.

Naja wenn ich mir (int)(sizeof(field)/sizeof(int)) per cout ausgeben lasse und vorher field[7][7] oder field[6][7] deifiniert habe, gibt er mir 49 bzw. 42 aus dementsprechend hab ich einfach darauf spekuliert das er beide Dimensionsgrößen multipliziert.

Ich bin ja noch ein Anfänger und lerne noch :P

Werwofl

Treue Seele

  • »Werwofl« ist der Autor dieses Themas

Beiträge: 100

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

5

06.12.2010, 09:05

Ok danke euch.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

06.12.2010, 09:06

Ja, aber trotzdem wird da nichts multipliziert. Wenn du 7*7 Felder im Array angibst, dann sind das eben 49. Aber weder "sizeof", noch "/" multiplizieren irgendwas.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werwofl

Treue Seele

  • »Werwofl« ist der Autor dieses Themas

Beiträge: 100

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

06.12.2010, 09:09

Aber was ist das denn dann für eine Zahl?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

06.12.2010, 09:23

Die Größe des Arrays in Byte dividiert durch die Größe eines int in Byte. Auf deutsch: Die Anzahl Felder deines Arrays. Der Code ist kopiert, nehme ich an?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werwofl

Treue Seele

  • »Werwofl« ist der Autor dieses Themas

Beiträge: 100

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

9

06.12.2010, 09:35

Danke dir BlueCobold habs jetzt verstanden er zählt die Bytes des gesamten Arrays und multiplizeiert sie nicht.

Jetzt bin ich aber auf mein nächstes Problem gestoßen. Wie lege ich ein mehrdimensionales Array dynamisch an?

Pauschal zu sagen

C-/C++-Quelltext

1
2
int *field;
field= new int[x][y];


Geht offensichtlich nicht. Hat jemand einen Link zu einem Tutorial wo ich mir das mal anschauen kann oder würdet ihr sagen ich soll direkt versuchen mit Vektoren zu arbeiten?

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Werwofl« (06.12.2010, 10:21)


idontknow

unregistriert

10

06.12.2010, 11:22

C-/C++-Quelltext

1
2
int **field = new int[x][y];
int * field = new int[x * y];

Werbeanzeige