Cześć. Mam zadanie z informatyki, żeby napisać program, który będzie rysował romb z gwiazdek, ale z kwadratem w środku. Siedzę trochę nad tym, ale zupełnie nie mam pojęcia z której strony zacząć, a co dopiero jak to zrobić. Liczę na rychłą odpowiedź, bo zadanie na jutro.
Romb z kwadratem w środku, tak bez żadnych ograniczeń :P? Kwadrat jest rombem; rysuj kwadrat z kwadratem w środku i z głowy
@DonStefano: Ojjj gdyby to było takie proste:D. niestety pan nie powiedział mi że mam tak zrobić, pan pokazał zdjęcie jak to ma wyglądać... jeden kwadrat(ten większy) ma być przekrzywiony tak, żeby dookoła kwadratu powstały cztery trójkąty... kwadrat w kwadracie dałbym radę sam zrobić, ale to zadanie to dla mnie już wyższa matematyka.
@P4weł: Czyli większy jest obrócony o 45 stopni? Wrzuć zdjęcie, łatwiej będzie...
Dokładnie tak, ale niestety zdjęcia nie mam, tak to bym od razu wysłał...
Narysuj na kartce szkic, zrób zdjęcie (lub zeskanuj) i pokaż.
Cześć. Mam zadanie z informatyki, żeby napisać program, który będzie rysował romb z gwiazdek, ale z kwadratem w środku.
Ja tam z matematyki byłem kiepski, ale to są dwa kwadraty nie?
Siedzę trochę nad tym, ale zupełnie nie mam pojęcia z której strony zacząć, a co dopiero jak to zrobić. Liczę na rychłą odpowiedź, bo zadanie na jutro.
No ja bym zaczął od rysowania tego większego romba kwadrata.
@.andy: no właśnie, tylko że nie wiem jak to zrobić...
#include <iostream>
#include <ctime>
#include <iomanip>
#include <cmath>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{
int a;
cout<<"Podaj nieparzysta szerokosc/wysokosc: ";
cin>>a;
//--------------------------------------
for(int i=0;i<a;i++)
cout<<"X";
cout<<endl;
//--------------------------------------
int b=0;
int c=a-4;
for(int i=0;i<(a-3)/2;i++)
{
cout<<"X";
for(int j=0;j<b;j++)
cout<<" ";
cout<<"X";
for(int j=0;j<c;j++)
cout<<" ";
cout<<"X";
for(int j=0;j<b;j++)
cout<<" ";
cout<<"X"<<endl;
b++;
c=c-2;
}
//--------------
cout<<"X";
for(int i=0;i<(a-3)/2;i++)
cout<<" ";
cout<<"X";
for(int i=0;i<(a-3)/2;i++)
cout<<" ";
cout<<"X"<<endl;
//-------------
b=(a-5)/2;
c=1;
for(int i=0;i<(a-3)/2;i++)
{
cout<<"X";
for(int j=0;j<b;j++)
cout<<" ";
cout<<"X";
for(int j=0;j<c;j++)
cout<<" ";
cout<<"X";
for(int j=0;j<b;j++)
cout<<" ";
cout<<"X"<<endl;
b--;
c=c+2;
}
for(int i=0;i<a;i++)
cout<<"X";
//--------------
system("PAUSE");
return 0;
}
na razie osiągnąłem coś takiego, i to jest ten kwadrat w środku.
Z prostokątem byłoby łatwiej, niż z kwadratem...
Konsola ma inną szerokość i wysokość znaków + odstępy między linijkami :(
Masz tu filmik dla rombu:
Musisz tylko odfiltrować wypełnienie i połączyć środkowe gwiazdki wszystkich boków.
Masz za darmo ;)
#include <iostream>
#include <cmath>
class romb_w_kwadracie
{
private:
struct punkt
{
int x,y;
};
int rzad;
static int metryka1(const punkt p1, const punkt p2) { return abs(p1.x-p2.x)+abs(p1.y-p2.y); }
static int metryka2(const punkt p1, const punkt p2) { return std::max(abs(p1.x-p2.x),abs(p1.y-p2.y)); }
public:
romb_w_kwadracie(int nowy_rzad);
void narysuj() const;
};
romb_w_kwadracie::romb_w_kwadracie(int nowy_rzad): rzad{nowy_rzad}
{
}
void romb_w_kwadracie::narysuj() const
{
for (int i=0; i<2*rzad+1; i++)
{
for (int j=0; j<2*rzad+1; j++)
{
std::cout << ((metryka1(punkt{i,j},punkt{rzad,rzad}) == rzad || metryka2(punkt{i,j},punkt{rzad,rzad}) == rzad/2) ? '*' : ' ');
}
std::cout << "\n";
}
}
int main()
{
romb_w_kwadracie r{10};
r.narysuj();
return 0;
}
@Paweł Biernacki: Zbawco mój!
@Paweł Biernacki: romb_w_kwadracie r{10};
r.narysuj();
return 0;
gdy kompiluję program, to dokładnie w tym miejscu r{10}; program się zatrzymuję. Znasz może źródło problemu?
Jeszcze (tak dla zabawy) napisałem wersję w Perlu:
sub max { return $_[0]>$_[1]?$_[0]:$_[1]; }
print join("", map { my $y = $_; join("", map { my $x = $_; abs($x-11)+abs($y-11) == 10 || max(abs($x-11),abs($y-11))==5 ? "*" : " "} 1..21)."\n" } 1..21);
..i w Pytonie (3):
print("".join(("".join("*" if abs(x-10)+abs(y-10)==10 or max(abs(x-10),abs(y-10))==5 else " " for x in range(21))) + "\n" for y in range(21)))
Bezklasowa wersja ;)
#include <iostream>
using namespace std;
void display( int size )
{
auto rhombus = [=]( int a , int b ){ return abs(a) == abs(b+size) || abs(a) == abs(size-b); };
auto square = [=]( int a , int b ){ return ( abs(a) == size/2 && abs(b)<=size/2 ) || ( abs(b) == size/2 && abs(a)<=size/2 ); };
for( int i {-size} ; i<=size ; ++i )
{
for( int j {-size} ; j<=size ; ++j ) cout << ( rhombus(i,j) || square(i,j) ? '*' : ' ' );
cout << '\n';
}
}
int main()
{
display(12);
}