Kwadrat z gwiazdek c++

Kwadrat z gwiazdek c++
52 kille mg2
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
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:

Kopiuj
#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;

     }
}
edytowany 1x, ostatnio: kq
enedil
A co nie wyszło?
52 kille mg2
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
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ę!

DR
Z taką prośbą to do ogłoszeń drobnych
SI
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 3 godziny
0

Mi się kompilator udarł że tutaj

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

edytowany 1x, ostatnio: sig
52 kille mg2
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
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

DR
  • Rejestracja:około 12 lat
  • Ostatnio:około godziny
  • Postów:1131
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

edytowany 1x, ostatnio: Dregorio
52 kille mg2
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:4
0

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

DR
  • Rejestracja:około 12 lat
  • Ostatnio:około godziny
  • Postów:1131
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ść

TomaszLiMoon
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 4 godziny
  • Postów:530
2

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

Kopiuj
#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;
}
edytowany 1x, ostatnio: TomaszLiMoon
Spine
Plus za użycie template ;) Bez template to tylko jakiś noob z przedszkola by robił to zadanie.
DR
BTW. Ja nie C++ tyle co na studiach, ale czy tutaj jest sens tego używać? template nie są po to by mieć generyczny kod?
TomaszLiMoon
Sensu nie ma, tak samo jak podawanie prostego gotowego rozwiązania dla osoby, która wolałaby aby ktoś ją tutaj wyręczył w napisaniu kodu.
DR
A to dobrze, bo zacząłem się bać, że o czymś nie wiem :P
_13th_Dragon
Dla nieparzystych krzywo wychodzi.
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:15 dni
2
Kopiuj
#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;
}

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

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.