Kwadrat z gwiazdek c++

0

Cześć,
Chciałbym zrobić "kwadratowy domek" z gwiazdek w c++, coś tam mi wyszło lecz to nie jest efekt, który oczekuję a oczekuję coś takiego https://i.stack.imgur.com/ffGvb.png
A tutaj jest mój kod:

#include <iostream>
using namespace std;
int main()

{

     int w;

    cout<<"Podaj NIEPARZYSTA dlugosc boku kwadratu (od 2 do 40): ";

     cin>>w;

     cout << endl;

     for (int i=1; i<=w; i++)

     {

          for (int j=1; j<=w; j++)

if(i==1 || i==w || j==1 || j==w || i==j && i>w/30 || j==w-i+1 && i>w/30 || )

                {

                     cout << " *";

                }

                else

                {

                  cout << "  ";

             }

     cout << endl;

     }
}
0

Nie mam pomysłu jak to zrobić po prostu...
Fajnie byłoby jakby ktoś dał cały kod, który zrobi kwadracik taki jaki chcę i sobie przeanalizuję kod.

Z góry dziękuję!

0

Mi się kompilator udarł że tutaj

if(i==1 || i==w || j==1 || j==w || i==j && i>w/30 || j==w-i+1 && i>w/30 || )

masz zbędne || na końcu, a po obu stronach && wypadało by dać nawiasy. Po usunięciu || wydaje się działać poprawnie.

0

A tak to pomyłka przy kopiowaniu w kodzie u mnie tego nie ma nie wiem jak to się stało... Przepraszam.
U mnie obecnie kod generuje coś takiego: https://snipboard.io/EIbODH.jpg

0

Ten kształt, który chcesz zrobić podziel sobie na kwadrat i trójkąt. A potem połącz w jeden kod. Ja bym sobie zaczął od narysowania na kartce i uświadomienia sobie jak "rysuje" to komputer (od lewej do prawej linia po linii).

EDIT.
Jeśli to jest za trudne, zacznij do prostszych kształtów. Samego kwadratu i samego trójkąta

0

Nie mam pojęcia jak to zrobić, wolałbym jakby ktoś kod zrobił i wysłał, a ten kod przeanalizować sobie na spokojnie.

1

Jeśli chcesz gotowca to daj ogłoszenie w odpowiedniej kategorii forum.

Nikt na początku nie miał pojęcia, a jakoś ludzie do tego doszli. Weź kartkę papieru i rozpisz sobie algorytm. Nie chce ci się nawet poświęcić tych 30 min na zrozumienie tego? Zacznij od prostszych przykładów i stopniowo zwiększaj trudność

2

Tutaj masz prawie gotowy kod. Wystarczy tylko dodać przekątne. Jak przeanalizujesz kod, to znajdziesz miejsce aby je dodać w odpowiednim miejscu.

#include <iostream>
#include <vector>

using namespace std;

template< int size >
using IsEven = enable_if_t< size%2 == 0 , bool >;

template< char sign >
string printSigns( int quantity )
{
    return string(quantity,sign);
}

template< char sign , int size , IsEven<size> = true >
ostream& printRoof()
{
    ostream& out {cout} ;
    for( int i {0} ; i<size/2 ; ++i )
    {
        out << printSigns<' '>(size/2-i) << sign << printSigns<' '>(2*i) << sign << endl;
    }
    return out;
}

template< char sign , int size , IsEven<size> = true >
string printRectangle()
{
    string rect;
    for( int i {0} ; i<size/2 ; ++i )
    {
        rect += sign + ((i==0||i==(size/2)-1)?printSigns<'*'>(size):printSigns<' '>(size)) + sign;
        rect += "\n";
    }
    return rect;
}

int main()
{
  printRoof<'*',12>() << printRectangle<'*',12>();

  return 0;
}
2
#include <iostream>
using namespace std;

typedef bool func(size_t y,size_t x,size_t Y,size_t X);
void showCell(size_t y,size_t x,size_t Y,size_t X,func *f) { cout<<" *"[f(y,x,Y,X)]; }
void showRow(size_t y,size_t Y,size_t X,func *f) { for(size_t x=0;x<X;++x) showCell(y,x,Y,X,f); }
void showWhole(size_t Y,size_t X,func *f) { for(size_t y=0;y<Y;++y,cout<<endl) showRow(y,Y,X,f); }
bool roof_cond(size_t y,size_t x,size_t Y,size_t X) { return x+y+1==Y || y+X-x==Y; }
void roof(size_t size) { showWhole((size+1)>>1,size,roof_cond); }
bool block_cond(size_t y,size_t x,size_t Y,size_t X) { return (x+x)%(X-1)==0 || (y+y)%(Y-1)==0 || y+x+1==Y || y-x==0; }
void block(size_t size) { showWhole(size,size,block_cond); }
void house(size_t size) { roof(size); block(size); }

int main()
{
  for(size_t s=15;s>=3;s-=2) { house(s);  cout<<endl; }
  return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1