Kwadrat ASCII z gwiazdek w aplikacji konsolowej

0

Taki kwadrat próbuję narysować, że kiedy podam nieparzyste liczby, to kwadrat z gwiadek będzie idealnie w środku, symetryczny, a kiedy podam parzyste liczby, to kwadrat poszerzy się o jedną linie gwiazdek, aby było symetrycznie(jak na zdjeciu). I zrobiłem kod, tylko problem przy podaniu parzystej liczby, nie chce mi drugiej linii rysowac i wychodzi coś takiego, niesymetryczne (pierwsze zdjęcie). Próbowałem ifami ((x%2==0)||(y%2==0)), ale nie potrafiłem dokończyć warunku. Proszę o pomoc. mój kod:

{
    {
        {
            int x, y;
            printf("podaj szerokosc i wysokosc");
            scanf("%d %d", &x, &y);
            for(int i=1;i<=y;i++)
            {   
               for(int j=1;j<=x;j++)
               {
                   if((i!=1)&&(j!=1)&&(i!=y)&&(j!=x)&&(i!=((y/2)+1))&&((j!=(x/2)+1)))
                   {
                       printf(" ");

                   }

                   else
                   {
                       printf("*");
                   }
                 }

               printf("\n");
            }

        }
    }
}

c2.png

c.png

1

To C++ ale warunek w C identyczny

#include <iostream>
#include <cmath>
using namespace std;

typedef bool dot(int y,int x,int size);

void draw(int size,dot *check)
{
	for(int y=0;y<size;++y,cout<<endl) for(int x=0;x<size;++x) cout<<check(y,x,size)[" *"];
}

struct { const char *name; dot *check; } tb[]=
{
	{"Diamond",[](int y,int x,int size) { return abs(size-1-2*x)+abs(size-1-2*y)<=size; } },
	{"Square",[](int y,int x,int size) { return (abs(size-1-2*x)==size-1)||(abs(size-1-2*y)==size-1); } },
	{"Cros",[](int y,int x,int size) { return (abs(size-1-2*x)<=1)||(abs(size-1-2*y)<=1); } },
	{"Window",[](int y,int x,int size) { return (abs(size-1-2*x)==size-1)||(abs(size-1-2*y)==size-1)||(abs(size-1-2*x)<=1)||(abs(size-1-2*y)<=1); } },
};

int main()
{
    for(int count;(cout<<"Podaj rozmiar: ")&&(cin>>count);)
    {
	    for(auto shape:tb)
	    {
	    	cout<<shape.name<<':'<<endl;
	        draw(count,shape.check);
	        cout<<endl<<endl;
	    }
    }
	return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.