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


  • Mod

    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'.



  • @SeppJ

    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] = ' ';
               }
    

  • Mod

    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 garkein s, z oder m ... 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":"");
    }
    

Log in to reply