Nie umiem obrócić trójkąta o 90 stopni c++

0

Witam, mam problem z obróceniem trójkąta, bo ma powstać z tego choinka.

#include<iostream>
using namespace std;
void Gw (int a) {
	int i;
	cout <<"\n  ";
 	for (i=1;i<=a;i++) cout << "* ";
	}

main() {
 	int i, ileG;
	cout <<" ile gwiazdek?  ";
	cin >>ileG;
	for (i=1; i<=ileG; i++) Gw(i);
	for (i=ileG-1; i>0; i--) Gw(i);
cout<<"\n\n\n\n";
system ("pause");
return 0;
}

Zrzut ekranu (42).png

0

Zasadniczo algorytm Ci się zmieni, bo zamiast drukować o jedną gwiazdkę więcej, a potem o jedną gwiazdkę mniej w kolejnej pętli musisz ogarnąć ile łącznie jest gwiazdeczek i wypełnić spacjami te pozostaje miejsca i znaleźć środek gdzie drukować gwiazdki.

3
Pipes napisał(a):

Zasadniczo algorytm Ci się zmieni, bo

Algorytm byłby niezmienny, gdyby przygotowywał do bufora X*Y - co oczywiście jest strzalaniem z armaty do muchy

0

Radziłbym zacząć od uproszczenia tego co skądś ściągnąłeś do:

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

int main()
{
    int count;
    cout<<"Ile gwiazdek? ";
    cin>>count;
    for(int y=-count;y<=count;++y,cout<<endl) for(int x=count-abs(y);x;--x) cout<<" *";
    return 0;
}
0

czyli kolejny zamaskowany temat "jak narysować choinkę"

tak naprawdę masz tu rysowanie dwóch trójkątów

    for (i=1; i<=ileG; i++) Gw(i);
    for (i=ileG-1; i>0; i--) Gw(i);

wyrzuć drugą linijkę i masz już prawie to co chcesz, jeszcze tylko zmień liczbę gwiazdek wyświetlanych w każdym rzędzie (zobacz na przykład co się stanie gdy zmienisz Gw(i) na Gw(i + ileG) i dopełnij spacjami z lewej strony. Jeśli chcesz nadal użyć funkcji Gw to obecnie przyjmuje ona jako parametr ilość gwiazdek do narysowania. Możesz to zmienić żeby podać ilość gwiazdek i spacji z lewej Gw (int a, int b)

albo po prostu zamiast przerabiać łódź podwodną na statek, pozbądź się kodu i poszukaj od razu tego co chcesz.
Prawidłowy sposób to prześledzenie kodu linijka po linijce i zrozumienie go - wtedy nie będziesz miał problemu napisać samemu

2

Może rozwiążę to zadanie raz na zawsze, program rysujący cokolwiek (wystarczy podać poprawny warunek):

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

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

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

struct { const char *name; dot *check; } tb[]=
{
	{"diamond",[](int y,int x,int size) { return abs(y)+abs(x)<=size; } },
	{"triangle A",[](int y,int x,int size) { return y+x<=0; } },
	{"triangle B",[](int y,int x,int size) { return y+x>=0; } },
	{"triangle C",[](int y,int x,int size) { return y-x<=0; } },
	{"triangle D",[](int y,int x,int size) { return y-x>=0; } },
	{"rectangle",[](int y,int x,int size) { return (abs(y)==size)||(abs(x)==size); } },
	{"cross A",[](int y,int x,int size) { return abs(y)==abs(x); } },
	{"cross B",[](int y,int x,int size) { return (!y)||(!x); } },
	{"hourglass A",[](int y,int x,int size) { return (y<=0)&&(x<=y)||(y>=0)&&(x>=y); } },
	{"hourglass B",[](int y,int x,int size) { return (x<=0)&&(x>=y)||(x>=0)&&(x<=y); } },
	{"ellipse A",[](int y,int x,int size) { return round(sqrt(x*x+y*y))==size; } },
	{"ellipse B",[](int y,int x,int size) { return round(sqrt(x*x+y*y))<=size; } },
	{"ellipse C",[](int y,int x,int size) { return round(sqrt(x*x+y*y))>size; } },
};

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

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