You are not logged in.

  • Login

1

Tuesday, May 18th 2010, 8:28pm

2D Array füllen und ausgeben

Hallo @ all

Ich habe in meinem Programm ein 2D Char Array(17,9). Nun möchte jede ungerade Zeile mit "----" füllen und jede gerade Spalte mit "B" bzw. "|". Zum Schluss möchte ich das ganze dann noch als Feld ausgeben lassen.

Dachte mir das so:

C/C++ Quellcode

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
void setzen(char acFeld[][9])
{
     int iX, iY;
 
     for (iX=0; iX<9; iX++)
     {
         if (iX==1 or iX==3 or iX==5 or iX==7 or iX==9)
         {
            for (iY=0; iY<17; iY++)
            {
                 acFeld[iX][iY]='-';
            }
         }
         else
         {
            for (iY=0; iY<17; iY++)
            {
                 if (iY%4!=0)
                 {
                    acFeld[iX][iY]='B';
                 }
                 else
                 {
                     acFeld[iX][iY]='|';
                 }
            }
         }
     }
 
 
     for (iX=0; iX<9; iX++)
     {
         for (iY=0; iY<17; iY++)
         {
             printf("%c", acFeld[iX][iY]);
         }
         printf("\n");
     }
}


Er gibt immer aus:

|BBB|BBB|--------
---------|BBB|BBB||BBB|BBB
|BBB|BBB|--------
---------|BBB|BBB||BBB|BBB

usw. aus. Ich möchte es aber sozusaegn als Feld ausgeben. Also das 4x4 kleine Quadrate entstehen. Ca. so:

-------
|BBB|
-------

Was ist falsch an dem Code? Hoffe auf eure Hilfe. Viele Grüße
Crosaider

2

Wednesday, May 19th 2010, 12:34am

Hi

ich habe mich jetzt nicht näher damit beschäftigt, aber liegt es vllt daran, dass du Dimensionen vertauschst hast?

du beommst arra[][9] übergeben, zählst iX bis 9, setzst es aber bei dem array als 1. simension ein array[iX][iY]

und aus if (iX==1 or iX==3 or iX==5 or iX==7 or iX==9)
würde ich if(iX%2==1) machen

Gruß

3

Wednesday, May 19th 2010, 7:53am

Problemlösung in Java

Guten Morgen!
Ich stimme da Koljan777 zu, dass du die Dimensionen vertauscht hast. Erst Zeilen, dann Spalten...
Ich kann dir das leider nur in Java liefern(lange Geschichte :whistling: ), aber es sollte dir ja nur die Logik zeigen (bzw. dass es mit dem Tausch Zeilen und Spalten klappt ;) )
Ich hoffe ich hab richtig verstanden wie deine Ausgabe aussehen soll.(Sonst nochmal bitte beschreiben).


Die Ausgabe mit unten stehenden Code wäre nun:

|BBB|BBB|BBB|BBB|
------------------------ (erhöht für Ansicht)
|BBB|BBB|BBB|BBB|
------------------------
|BBB|BBB|BBB|BBB|
------------------------
|BBB|BBB|BBB|BBB|


Java Quellcode

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
public class Array2D {
 
static int zeilen = 7;
static int spalten = 17;
static char[][] array = new char[zeilen][spalten];
 
public static void main(String[] args) {
 
for(int i=0; i<zeilen; i++){
 
for(int j=0; j<spalten; j++){
if(j%4 != 0){
array[i][j] = 'B';
}
else{
array[i][j] = '|';
}
}
 
if(i%2 == 1){
for(int k=0;k<spalten;k++){
array[i][k] = '-';
}
}
}
 
 
for(int i=0;i<zeilen;i++){
for(int j=0;j<spalten;j++){
System.out.print(array[i][j]);
}
System.out.println();
}
 
 
}
 
}


mfg
kauyon

This post has been edited 2 times, last edit by "kauyon" (May 19th 2010, 8:00am)


4

Wednesday, May 19th 2010, 5:52pm

habs mal in C umgeschrieben und ausprobiert. Er gibt mir das genauso aus wie am Anfang. Nichts hat sich verändert :(

C/C++ Quellcode

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
#include <stdio.h>
 
int main(void)
{
    char acFeld[17][9];
    int i,j,k;
    int zeilen=9;
    int spalten=17;
 
    for (i=0; i<zeilen; i++)
     {
         for (j=0; j<spalten; j++)
         {
             if (j%4!=0)
             {
                acFeld[i][j]='B';
             }
             else
             {
                 acFeld[i][j]='|';
             }
         }
 
         if (i%2==1)
         {
             for (k=0; k<spalten; k++)
             {
                 acFeld[i][k]='-';
             }
         }
     }
 
     for (i=0; i<zeilen; i++)
     {
         for (j=0; j<spalten; j++)
         {
             printf("%c", acFeld[i][j]);
         }
         printf("\n");
     }
 
    getchar();
}

5

Wednesday, May 19th 2010, 6:29pm

Ja weil du den gleichen Fehler nochmal tust....

char acFeld[17][9];

Zeilen ist das 1. Element...

Also

char acFeld[9][17];

Dann kommt das richtige raus, getestet:

C/C++ Quellcode

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
#include <stdio.h>
 
#define zeilen 9
#define spalten 17
 
int main(void){
	char acFeld[zeilen][spalten];
    int i,j,k;
 
 
    for (i=0; i<zeilen; i++)
     {
         for (j=0; j<spalten; j++)
         {
             if (j%4!=0)
             {
                acFeld[i][j]='B';
             }
             else
             {
                 acFeld[i][j]='|';
             }
         }
 
         if (i%2==1)
         {
             for (k=0; k<spalten; k++)
             {
                 acFeld[i][k]='-';
             }
         }
     }
 
     for (i=0; i<zeilen; i++)
     {
         for (j=0; j<spalten; j++)
         {
             printf("%c", acFeld[i][j]);
         }
         printf("\n");
     }
 
    getchar();
}

6

Wednesday, May 19th 2010, 6:54pm

och das is doch zum Kotzen ;)
danke euch :) funktioniert jetzt wunderbar

7

Thursday, May 20th 2010, 11:46am

Naja dafür wirste den Fehler wohl jetzt nicht noch ein drittes mal machen ;)

8

Saturday, May 22nd 2010, 3:02pm

:D habe aber gerade noch ein anderes kleines Problem:

C/C++ Quellcode

1
2
3
4
int iZahl=3;
 
acFeld[iX][iY]=iZahl;
printf("%c", acFeld[iX][iY]);


Wenn ich es ausgebe kommt immer ein Herz - oder ein anderes Zeichen jenachdem wie groß der Wert gerade ist. Liegt glaube ich daran das ich in das Char Array eine Int Variable einfügen will. Wie kann ich das beheben?

9

Saturday, May 22nd 2010, 5:40pm

acFeld[iX][iY]=(char)iZahl;

geht dat?

10

Sunday, May 23rd 2010, 2:28am

ne kommt aufs gleiche raus...

11

Sunday, May 23rd 2010, 10:54pm

printf("%d", acFeld[iX][iY]);

? :D spielen wir Ratemaus... :D

Aalon

Unregistered

12

Sunday, May 23rd 2010, 11:17pm

Ist ja klar das nen Herz kommt da du ja nen Char Array hast.
Das 3te Ascii Zeichen ist ein Herz.
Wenn du die Zahl 3 Ausgeben willst als char musst du 51 nehmen
hier ne kleine liste
Ascii Nr. 48 = '0'
Ascii Nr. 49 = '1'
Ascii Nr. 50 = '2'
Ascii Nr. 51 = '3'
Ascii Nr. 52 = '4'
Ascii Nr. 53 = '5'
Ascii Nr. 54 = '6'
Ascii Nr. 55 = '7'
Ascii Nr. 56 = '8'
Ascii Nr. 57 = '9'

Hoffe das hilft irgendwie wenn ich das problem jetzt richtig verstanden hab

13

Sunday, May 23rd 2010, 11:21pm

super vielen dank... das mit der Askitabelle hat wunderbar geklappt :)

Similar threads

Social bookmarks