| krissuu Temat założony przez niniejszego użytkownika | [C++] Rysowanie choinki ze znaków ASCII » 2012-11-19 22:02:03 Witam. Mam jako zadanie domowe napisanie choinki w c++. Niestety męczę się już nad tym 3 godziny, a jak na razie udało mi się stworzyć tylko zwykłą choinkę... moja ma wygladać tak x
 xxx
 x
 xxx
 xxxxx
 x
 xxx
 xxxxx
 xxxxxxx
 #
 #
 #
 
 Czyli składa się ona z oddzielnych choinek. Powyższa jest dla n=3, a dla więcej czyli np n=4 dojdzie jeszcze jeden poziom i jeden #. Wie ktoś jak coś takiego stworzyć bo już nie mam pomysłów. Mój kod na razie wygląda tak, ale buduje on jedną choinkę: #include <iostream>using namespace std;
 int main()
 {
 int n;
 cout << "Podaj ilosc drzewek, z ktorych ma sie skladac twoja choinka" << endl;
 cin >> n;
 
 
 for( int i = 1; i <= n; i++ )
 {
 for( int j = 1; j <= n - i; j++ )
 {
 cout << " ";
 }
 for( int j = 1; j <= i * 2 - 1; j++ )
 {
 cout << "*";
 }
 cout << endl;
 }
 
 
 
 for( int pien = 1; pien <= n; pien++ )
 {
 for( int pien = 1; pien <= n - 1; pien++ )
 {
 cout << " ";
 }
 cout << "#\n";
 }
 
 return 0;
 }
 
 | 
|  | 
| jsc | » 2012-11-19 23:32:15 Swoją pętlę rysującą choinkę musisz otoczyć pętlą, która do przechowywania numeru tworzonej choinki.  | 
|  | 
| krissuu Temat założony przez niniejszego użytkownika | » 2012-11-20 00:01:08 A można jakoś jaśniej bo nie rozumiem :( Próbowałem już zagnieździć to co mam w jeszcze jednej pętli, ale coś mi nie wychodziło... | 
|  | 
| jsc | » 2012-11-20 00:04:08 A jak próbowałeś? | 
|  | 
| krissuu Temat założony przez niniejszego użytkownika | » 2012-11-20 00:09:03 Zagnieżdżałem moje pętle rysujące choinkę w jeszcze jednej, ale stwierdziłem, że tym sposobem tego nie zrobię gdyż te choinki mają być różnej wielkości... przynajmniej tak mi się wydaje.. już mi się pomieszało wszystko, a na jutro muszę to zrobić... | 
|  | 
| jsc | » 2012-11-20 01:16:34 Chodziło mi o coś takiego: #include <iostream>using namespace std;
 
 int iloscDrzewek;
 
 void rysujRzad( int wielkosc )
 {
 int komorka;
 
 for( komorka = 1; komorka <= wielkosc - iloscDrzewek; komorka++ )
 {
 cout << " ";
 }
 
 for( komorka = 1; komorka <= wielkosc * 2 - iloscDrzewek; komorka++ )
 {
 cout << "*";
 }
 cout << endl;
 }
 
 void rysujChoinke( int ktora )
 {
 for( int biezacyRzad = 1; biezacyRzad <= ktora; biezacyRzad++ )
 {
 rysujRzad( biezacyRzad );
 }
 }
 int main()
 {
 cout << "Podaj ilosc drzewek, z ktorych ma sie skladac twoja choinka" << endl;
 cin >> iloscDrzewek;
 
 int biezacyElement;
 
 for( biezacyElement = 1; biezacyElement <= iloscDrzewek; biezacyElement++ )
 {
 rysujChoinke( biezacyElement );
 }
 
 for( biezacyElement = 1; biezacyElement <= iloscDrzewek; biezacyElement++ )
 {
 cout << "#" << endl;
 }
 
 cin >> iloscDrzewek;
 
 return 0;
 }
 
 | 
|  | 
| krissuu Temat założony przez niniejszego użytkownika | » 2012-11-20 01:26:01 Hmm dość skomplikowane to co wkleiłeś, a ja dopiero zaczynam przygodę z c++. Ale wkleiłem to w kompilator i niestety nie rysuje   mi poprawnie tego drzewka. Ja teraz wymyśliłem coś takiego tylko nie mogę zrobić żeby kolejne drzewka były o jedno większe... #include <iostream>using namespace std;
 int main()
 {
 int n;
 cout << "Podaj ilosc drzewek, z ktorych ma sie skladac twoja choinka" << endl;
 cin >> n;
 
 for( int k = 1; k <= n; k++ )
 {
 for( int i = 1; i <= n; i++ )
 {
 for( int j = 1; j <= n - i; j++ )
 {
 cout << " ";
 }
 for( int j = 1; j <= i * 2 - 1; j++ )
 {
 cout << "*";
 }
 cout << endl;
 }
 }
 
 
 for( int pien = 1; pien <= n; pien++ )
 {
 for( int pien = 1; pien <= n - 1; pien++ )
 {
 cout << " ";
 }
 cout << "#\n";
 }
 
 return 0;
 }
 
Ktoś może jeszcze naprowadzi? | 
|  | 
| crash | » 2012-11-22 18:11:29 Należy pamiętać, że gwiazdka na samym czubku jest na środku trzech gwiazdek o jeden niżej, te trzy gwiazdki są na środku pięciu gwiazdek znów o jeden niżej, itd.  
 Niech chojak składa się z trzech części, czyli 3x wywołujemy funkcję rysującą "piramidkę". Użyszkodnik wprowadza wysokość największej piramidki (tej na samym dole), na podstawie wysokości program oblicza długość podstawy ze wzoru: podstawa = (2*wysokość) -1. Dzięki temu podstawa zawsze będzie nieparzysta.
 
 Teraz wykorzystując to, że masz funkcję na piramidę, należy dodać funkcji parametr, który określa przesunięcie jej od lewej strony monitora w taki sposób, by środki wszystkich piramid pokrywały się. Najpierwiej stestuj na jednej piramidzie, czy przesunięcie działa jak człowiek :)
 | 
|  | 
| « 1 »  2 |