C Testat: Matrix die eine X-Struktur hat durch for-Schleifen
-
Hallo,
ich soll für mein Testat ein Programm schreiben, das von der Tastatur eine Zahl n einliest und dann ein aus dem Buchstaben X zusammengesetztes großes X ausgibt, dass sich über m = 2*n+1 Zeilen erstreckt. Also zB n =1 , m=3, 3x3 Matrix die jeweils an den Ecken und in der Mitte ein X stehen hat, was somit ein großes X ergibt.Ich verstehe nun nicht, warum ich eine falsche Ausgabe bekomme. Wahrscheinlich liegt es an dem Inhalt der Klammer bei der If Bedingung?
so sieht mein Code aus:#include <stdio.h> int main(void){ int n,m; int s = 0; printf("\n Geben Sie eine positive ganze Zahl ein: "); scanf("%d",&n); m = 2*n+1 ; printf(" m = %d \n\n",m); char A[z][s]; // A ist m x m Matrix for(z=0;z<m;z++) { for(s=0;s<m;s++) { if ( s == z || (s == m && z == n) || (s == n && z == m) ) { // Wie positionen darstellen ?? A[z][s] = 88 ; // 88 = ASCII für X } else { A[z][s] = 32; // 32 = ASCII für Space } } } // Schleife fuer Zeilen, Y-Achse for(z=0; z<m; z++) { // Schleife fuer Spalten, X-Achse for(s=0; s<m; s++) { printf("%c ", A[z][s]); } printf("\n"); } return 0; }
Meine Ausgabe sind momentan drei X untereinander in der Mitte der Matrix.
Würde mich über einen Tipp, was ich falsch mache und einen Hinweis, wie es richtig geht freuen
LG Lisa
-
Ja, deine Bedingung ist falsch. Die "Gleichung" für ein X ist ja einerseits f(x) = x für den einen Teil (das ist der leichte Teil, den du auch hast), und andererseits f(x) = m - x, oder genauer f(x) = m-1-x, weil deine Arrays bei 0 losgehen. Den Teil hast du nicht richtig.
// 88 = ASCII für X
Wie wäre es mit
'X'
für'X'
?
-
Bzw. wenn man explizit den ASCII Code möchte (statt des Codes im execution character set), dann
u'X'
.
-
Danke, ich habe die Bedingung jetzt geändert. Allerdings bekomme ich als Ausgabe jetzt eine Matrix, wo nur die erste und dritte Spalte mit X gefüllt ist.
Müsste durch s == z nicht eigentlich auch das mittlere X abgedeckt sein?
for(z=0;z<m;z++) { for(s=0;s<m;s++) { if ( s == z || s == m-1-z ){ A[z][s] = 'X'; } else { A[z][s] = ' '; }
-
Die Bedingung passt. Aber:
@lfahs sagte in C Testat: Matrix die eine X-Struktur hat durch for-Schleifen:
char A[z][s]; // A ist m x m Matrix
Zweifel.
-
@SeppJ Müsste ich statt s und z in die Klammern m einsetzen? Aber wie soll das dann mit den for-Schleifen klappen?
-
@lfahs sagte in C Testat: Matrix die eine X-Struktur hat durch for-Schleifen:
Aber wie soll das dann mit den for-Schleifen klappen?
Wo ist denn das Problem in Deinen Augen?
-
@Swordfish in den for schleifen brauche ich doch s und z für die x und y Koordinaten
-
A[2][3]
... da ist garkeins
,z
oderm
... huch?
-
@Swordfish danke, hab es jetzt geblickt
-
@lfahs Na dann
@others Golf? Ohne Array, nur output?
-
#include <stdio.h> int main(){ int n,i=0;scanf("%d",&n);n*=2;++n;while(i<n*n) printf("%c%s"," X"[i%n==i/n||i%n==n-i/n-1],!(++i%n)?"\n":""); }