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

Anonymous

unregistriert

11

06.10.2006, 22:34

Wieso fast? Und heb dir den Link zumindest auf, denn es geht da eh
hauptsächlich um Array's und nicht um Pointer.

Anonymous

unregistriert

12

06.10.2006, 22:36

Arrays sind nichts weiter als ne andere Form von Pointern und Pointer sind nichts weiter als eine andere Form von Arrays ;)

Anonymous

unregistriert

13

06.10.2006, 22:52

Jetzt interessiert es mich aber mal... Wie übergibt man einer Funktion
am Besten ein 2D Array? Hab 4 Möglichkeiten ausprobiert:

C-/C++-Quelltext

1
void Feld_füllen (int Breite, int Höhe, unsigned char Feld [][])

error C2087: 'Feld': Feldindex fehlt
'Feld_füllen': Konvertierung des Parameters 3 von 'unsigned char [10][10]' in 'unsigned char [][1]' nicht möglich

C-/C++-Quelltext

1
void Feld_füllen (int Breite, int Höhe, unsigned char* Feld [])

'Feld_füllen': Konvertierung des Parameters 3 von 'unsigned char [10][10]' in 'unsigned char *' nicht möglich

C-/C++-Quelltext

1
void Feld_füllen (int Breite, int Höhe, unsigned char* Feld)

error C2109: Index erfordert ein Array oder einen Zeigertyp
error C2664: 'Feld_füllen': Konvertierung des Parameters 3 von 'unsigned char [10][10]' in 'unsigned char *' nicht möglich

C-/C++-Quelltext

1
void Feld_füllen (int Breite, int Höhe, unsigned char** Feld)

error C2664: 'Feld_füllen': Konvertierung des Parameters 3 von 'unsigned char [10][10]' in 'unsigned char **' nicht möglich

Gibt noch mehr Möglichkeiten, die ich ausprobiert habe, aber das waren
die entscheidensten. ;)

EDIT: Deutsches VS suckt

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

14

06.10.2006, 23:14

so, jetzt funktioniert es
hier nochmal der funktionierende Quellcode:

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

using namespace std;

//Prototyp

void Feld_füllen( int Höhe,int Breite,char Feld[10][10]); 

void main()
{   
    //Konstanten

    int const Höhe=10;
    int const Breite=10;
    char Feld[Breite][Höhe];

    //Feld füllen aufrufen

    Feld_füllen (Höhe, Breite,Feld );

    //Feld anzeigen

    for(int i=0;i<Höhe;i++) 
    {
        for(int y=0;y<Breite;y++)
            cout<<Feld[y][i];

        cout<<endl;
    }
}
//Feld füllen

void Feld_füllen(int  Höhe, int  Breite,char Feld[10][10]) 
{
for(int i=0;i<Höhe;i++)
        for(int y=0;y<Breite;y++)
            Feld[y][i]='X';
}


so, von mir aus könnt ihr jetzt mir ein bischen "Qualitätsunterricht" geben
das heisst, auf dem stil und dem sinn des codes rumtrampeln...;-)

lg drakon

Anonymous

unregistriert

15

06.10.2006, 23:19

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

void Feld_füllen (int Breite, int Höhe, unsigned char Feld[10][10]) 
{ 
    for (int y = 0; y < Höhe; y++) 
    for (int x = 0; x < Breite; x++) 
        Feld [y][x] = 'X'; 
} 

int main (void) 
{ 
    int const Breite = 10; 
    int const Höhe   = 10; 
    unsigned char Feld [Breite][Höhe]; 

    Feld_füllen (Breite, Höhe, Feld); 

    for (int y = 0; y < Höhe; y++) 
    { 
        for (int x = 0; x < Breite; x++) 
            std::cout << Feld [y][x]; 

        std::cout << std::endl; 
    } 

    std::cin.get (); 

    return 0; 
}


Das ist meiner Meinung in Ordnung und es wurde auf Stil geachtet.
Fangen wir doch ganz oben an. Using Namespace wird verabscheut,
deshalb einfach ein std:: vor die Funktionen aus dem Namespace
schreiben und gut ist. Gerade bei solch kleinen Programme sollte das
kein Hindernis darstellen. So dann der Prototyp. Wozu Prototypen, wenn
mans auch ganz einfach gleich ordnen kann? Halte ich für sinnlos.
Zwischen include und <iostream> kann gerne noch eine Leertaste,
genauso wie beim Prototypen oder zwischen Initialisationen, usw. Solltest
du alles ein wenig mehr ordnen.

C-/C++-Quelltext

1
2
3
4
5
6
void Feld_füllen(int  Höhe, int  Breite,char Feld[10][10]) 
{ 
for(int i=0;i<Höhe;i++) 
        for(int y=0;y<Breite;y++) 
            Feld[y][i]='X'; 
}  


Ich glaube das sieht besser aus und ist übersichtlicher:

C-/C++-Quelltext

1
2
3
4
5
6
void Feld_füllen (int Höhe, int Breite, char Feld [10][10]) 
{ 
    for(int x = 0; x < Höhe; x++) 
    for(int y = 0; y < Breite; y++) 
        Feld[y][i] = 'X'; 
}


Und von unsigned solltest du auch Gebrauch machen, schaden tut's mit
Sicherheit nicht. Und noch eine Kleinigkeit:

C-/C++-Quelltext

1
void main() 


Schreib doch einfach ein void rein und vergiss die Leertaste nicht.

C-/C++-Quelltext

1
void main (void)


Sieht gleich besser und klarer aus.

Das wars soweit, hoffe du nimmst dir da ein wenig zu Herzen ;)

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

16

06.10.2006, 23:43

so, jetzt die entgültige version, welche eigentlich "perfekt" sein sollte, bis auf using namespace, welches ich weiterhin benutze, bis ich diese andere möglichkeit richtig beherrsche.


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

using namespace std;

//Prototyp

void Feld_füllen   ( int Höhe, int Breite, char Feld[10][10]); 
void Feld_zeichnen ( int Höhe, int Breite, char Feld[10][10]);

void main (void)
{   
    //Konstanten

    int const Höhe   = 10;
    int const Breite = 10;
    char Feld [Breite][Höhe];

    //Feld füllen aufrufen

    Feld_füllen (Höhe, Breite,Feld );

    //Feld anzeigen aufrufen

    Feld_zeichnen(Höhe, Breite, Feld);
}
//Feld füllen

void Feld_füllen (int  Höhe, int  Breite, char Feld[10][10]) 
{
    for(int x = 0 ; x < Höhe  ; x++)
    for(int y = 0 ; y < Breite; y++)
        Feld [y][x] = 'X';
}

//Feld zeichnen

void Feld_zeichnen (int Höhe, int Breite, char Feld[10][10])
{
    for(int x=0;x<Höhe;x++)
    {
        for(int y=0;y<Breite;y++)
            cout << Feld[y][x];

        cout << endl;
    }
}

Anonymous

unregistriert

17

06.10.2006, 23:46

Deutsche Umlaute in C++?! Ich wusste zwar, das es Ports für UTF gibt, aber gesehen habe ich es bisher noch nicht :shock:

Dazu void main.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

18

06.10.2006, 23:49

Abend,

also wir schreiben dir nicht vor, was du zu nutzen hast. Du kannst nutzen was immer du für richtig hällst und die Sprache hergibt (vllt. bis auf goto ;) ). Wir geben dir nur Vorschläge wie wir was machen würden, und wieso.

@Riddick
Ein Array ist immer nur eine Folge von Zahlen, egal ob 1, 2, 3, oder 16 Dimensional. Demzufolge kannst du auch das Array immer als 1D Array darstellen. Und 1D Arrays, wirst du ja wohl übergeben können ;) oder.

drakon

Supermoderator

  • »drakon« ist der Autor dieses Themas

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

19

06.10.2006, 23:49

umlaute: ist das nicht gut???
da es funktioniert habe ich gedacht, dass ich es lasse...

void main: was ist daran falsach?

ich möchte nicht frecht wirken, es nimmt mich einfach wunder...

Anonymous

unregistriert

20

06.10.2006, 23:52

Hier nochmal extra nach deinem Geschmack verbessert. ;)

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

using namespace std;

//Prototyp

void Feld_füllen   (int Hoehe, int Breite, unsigned char Feld [10][10]); 
void Feld_zeichnen (int Hoehe, int Breite, unsigned char Feld [10][10]);

int main (void)
{   
    //Konstanten

    int const Hoehe  = 10;
    int const Breite = 10;
    unsigned char Feld [Breite][Hoehe];

    //Feld füllen aufrufen

    Feld_füllen (Hoehe, Breite,Feld);

    //Feld anzeigen aufrufen

    Feld_zeichnen (Hoehe, Breite, Feld);

    cin.get ();

    return 0;
}

//Feld füllen

void Feld_füllen (int Hoehe, int Breite, unsigned char Feld [10][10]) 
{
    for (int x = 0 ; x < Hoehe; x++)
    for (int y = 0 ; y < Breite; y++)
        Feld [y][x] = 'X';
}

//Feld zeichnen

void Feld_zeichnen (int Hoehe, int Breite, unsigned char Feld[10][10])
{
    for (int x = 0; x < Hoehe; x++)
    {
        for (int y = 0; y < Breite; y++)
            cout << Feld [y][x];

        cout << endl;
    }
}

Werbeanzeige