Testat Programmieren in C: Ein "X" aus vielen x-en Zeichnen lassen

ced229705

Grünschnabel
Guten Tag,
Ich werkel derzeit an einem Testat rum und komme dort gerade nicht weiter.. und zwar muss ein "X" ausgegeben werden, das für ein eingegebenes n, m = 2*n +1 Zeilen und Spalten besitzt. Also so:

n=1 , m=3

x x
x <- Das müsste um eine Leerstelle nach rechts verrückt sein
x x

und das habe ich bis jetzt geschrieben:

#include <stdio.h>
#include <stdlib.h>

int main ()
{
int n,m,zeile,spalte ;

printf("Bitte geben sie eine Positive ganze Zahl ein:\nn = ");
scanf("%d",&n);

if (n > 0)
{ m = 2*n + 1;

for (zeile=1 ; zeile<=m ; zeile++){

printf("\n");

for (spalte=1 ; spalte<=m ; spalte++){

printf("x");

}

}

} else
{ printf("Falsche Zahl eingegeben!");
return EXIT_FAILURE;
}

}

sodass einfach nur ein Block aus x-en ausgegeben wird. Ich müsste es also noch schaffen die Leerzeichen dazwischen bekommen.
Wüsste dort jemand um Rat ? :)
 

cwriter

Erfahrenes Mitglied
Hi

Ich werkel derzeit an einem Testat rum und komme dort gerade nicht weiter.. und zwar muss ein "X" ausgegeben werden, das für ein eingegebenes n, m = 2*n +1 Zeilen und Spalten besitzt.
Also eine m*n-Matrix mit m Zeilen und n Spalten? Oder eine quadratische m*m-Matrix?

x x
x <- Das müsste um eine Leerstelle nach rechts verrückt sein
x x
Aber das um eine Leerstelle versetzt wäre ja
Code:
x x
 x
x x
?
Das wäre aber eine quadratische Matrix (3x3) mit Schachbrettmuster. Willst du ein Schachbrettmuster?

sodass einfach nur ein Block aus x-en ausgegeben wird. Ich müsste es also noch schaffen die Leerzeichen dazwischen bekommen.
Ich verstehe nicht so ganz, was du meinst. Willst du abwechselnd Leerzeichen und X schreiben?
Dann bietet sich ein Zähler an, den du nach jedem Zeichen inkrementierst, und jeweils beim Setzen eines Zeichens modulo 2 überprüfst.

Also etwa
C:
if(counter % 2 == 0) printf("X");
else printf(" ");

Da dein Code ja immer ungerade Zahlen als m hat (2n + 1 ist immer ungerade, da 2n immer gerade ist), bekommst du damit ein Schachbrettmuster.

Oder meintest du was anderes?

Kleine Randnotiz: Hier im Forum kannst du mit [code] ... [/code] monospace-Blöcke und mit [code=c] ... [/code] C-Code einbetten, dann sieht es ein bisschen schöner aus :)

Gruss
cwriter

/EDIT: Gerade nochmals den Titel gelesen und gemerkt, dass X nicht eine Matrix namens "X" ist, sondern eine Matrix, die ein X darstellt :eek:

In diesem Falle ist das Problem ein bisschen komplexer.
Du kannst dir überlegen, wo die Striche eines X verlaufen.
In der ersten und in der letzten Zeile müssen die erste und letzte Spalte gesetzt sein, in der 2. Zeile die 2. und 2.-letzte Spalte.
Schlussendlich kannst du also in deinem Zeilen-loop überprüfen, ob die x-Position gleich der Zeilennummer oder der Zeilenlänge - Zeilennummer ist. Dort schreibst du dann ein X, ansonsten ein ' '.

Falls dir das ein Begriff ist, willst du ja nur ein Kronecker Delta mit Erweiterung haben (Einheitsmatrix und ein paar Features :) )
Genauer: Du willst
Ai,j = {
'X', falls i=j oder j=m-i
' ' sonst
}
 
Zuletzt bearbeitet:

Prestige__

Mitglied
hm okay verstehe das sollte also ein kleines x rauskommen ^^.... Ich hab ein etwas großes gemacht °-°... Hier der Code falls du es brauchst... Das würde ein großes X aus lauter kleinen X-chen erstellen die sozusagen "einfliegen". (Ich weiß ich hab viel inkludiert weil ich es aus einem Projekt schnell rauskopiert habe da ich... ein kleines bisschen 'bequem' war ^^.)

C++:
#include <iostream>
#include <tchar.h>
#include <Windows.h>
#include <unistd.h>
#include <stdlib.h>
#include <fstream>
#include <winbase.h>
#include <process.h>


using namespace std;

int main()
{


    Beep(300, 400);
    Beep(300, 400);
    Beep(500, 200);
    Beep(400, 200);
    Beep(600, 300);
    cout << endl;
    cout << endl;
    cout << " X";
    Sleep(25);
    cout << "                        X" << endl;
    Sleep(25);
    cout << "  X";
    Sleep(25);
    cout << "                      X" << endl;
    Sleep(25);
    cout << "   X";
    Sleep(25);
    cout << "                    X" << endl;
    Sleep(25);
    cout << "    X";
    Sleep(25);
    cout << "                  X" << endl;
    Sleep(25);
    cout << "     X";
    Sleep(25);
    cout << "                X" << endl;
    Sleep(25);
    cout << "      X";
    Sleep(25);
    cout << "              X" << endl;
    Sleep(25);
    cout << "       X";
    Sleep(25);
    cout << "            X" << endl;
    Sleep(25);
    cout << "        X";
    Sleep(25);
    cout << "          X" << endl;
    Sleep(25);
    cout << "         X";
    Sleep(25);
    cout << "        X" << endl;
    Sleep(25);
    cout << "          X";
    Sleep(25);
    cout << "      X" << endl;
    Sleep(25);
    cout << "           X";
    Sleep(25);
    cout << "    X" << endl;
    Sleep(25);
    cout << "            X";
    Sleep(25);
    cout << "  X" << endl;
    Sleep(25);
    cout << "             XX" << endl;
    Sleep(25);
    cout << "            X";
    Sleep(25);
    cout << "  X" << endl;
    Sleep(25);
    cout << "           X";
    Sleep(25);
    cout << "    X" << endl;
    Sleep(25);
    cout << "          X";
    Sleep(25);
    cout << "      X" << endl;
    Sleep(25);
    cout << "         X";
    Sleep(25);
    cout << "        X" << endl;
    Sleep(25);
    cout << "        X";
    Sleep(25);
    cout << "          X" << endl;
    Sleep(25);
    cout << "       X";
    Sleep(25);
    cout << "            X" << endl;
    Sleep(25);
    cout << "      X";
    Sleep(25);
    cout << "              X" << endl;
    Sleep(25);
    cout << "     X";
    Sleep(25);
    cout << "                X" << endl;
    Sleep(25);
    cout << "    X";
    Sleep(25);
    cout << "                  X" << endl;
    Sleep(25);
    cout << "   X";
    Sleep(25);
    cout << "                    X" << endl;
    Sleep(25);
    cout << "  X";
    Sleep(25);
    cout << "                      X" << endl;
    Sleep(25);
    cout << " X";
    Sleep(25);
    cout << "                        X" << endl;
    cout << endl;
    Sleep(3000);
    cout << endl;
    cout << endl;
    system("Pause");
    return 0;

}