Rysowanie trójkąta z gwiazdek - wychodzi kwadrat

0

Cześć potrzebuje wskazówki do zadania:

  1. Napisz program, który stworzy trójkąt z gwiazdek na podstawie liczby podanej
    przez użytkownika. Trójkąt dla liczby 5 ma postać:
    5gwiazdek
    4gwiazdki
    3gwiazdki
    2gwiazdki
    1gwiazdka

Tyle zrobiłem i nie wiem jaką pętlę dodać, żeby był to trójkąt, a nie kwadrat:

#include<stdio.h>

int wysokosc_trojkata;
void DrukujGwiazdki(int wysokosc_trojkata);

int main()
{
    int i;
    int j;

    printf("Podaj wysokosc trojkata: ");
    scanf("%d",&wysokosc_trojkata);

    {
        for(i=0;i<wysokosc_trojkata;i++)
        {
            printf("\n");
            for(j=wysokosc_trojkata-1;j>=0;j--)
                    printf("*");
        }
    }




    return 0;
}

Z góry wielkie dzięki za wszelkie KONKRETNE wskazówki.

0

Narysuj sobie kilka takich trójkątów w Notatniku za pomocą gwiazdek i szukaj prawidłowości.

0

Może jakaś inna wskazówka? Zły warunek pętli?

0

Przykład 1:

#include <iostream>
using namespace std;

int main() {
	size_t size = 0;
	cin >> size;
	for(size_t i = size; i > 0; --i) {
		for(size_t j = 0; j < i; ++j) {
			cout.put('*');
		}
		cout << '\n';
	}
	return 0;
}

Przykład 2:

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

int main() {
	size_t size = 0;
	cin >> size;
	for(size_t i = size; i > 0; --i) {
		cout << string(i, '*');
		cout << '\n';
	}
	return 0;
}

Przykład 3:

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

template<typename T>
T read(istream &in = cin) {
	auto result = T{};
	cin >> result;
	return result;
}

int main() {
	for(int i = read<int>(); i > 0; --i) {
		cout << string(i, '*') << '\n';
	}
	return 0;
}

Przykład 4:

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

template<typename T>
T read(istream &in = cin) {
	auto result = T{};
	cin >> result;
	return result;
}

namespace from_the_end {
	template<typename F>
	void perform(size_t times, F action) {
		while(times --> 0) {
			action(times+1);
		}
	}
}

int main() {
	from_the_end::perform(read<size_t>(), [](auto iteration) {
		cout << string(iteration, '*') << endl;
	});
	return 0;
}
0

Witam.
Czy taka implementacja może być?




#include <iostream>

using namespace std;

int main()
{
    unsigned int h,l_s,j,k,l_g=1,i;
    cout<<"Podaj wysokosc trojkata: "<<endl;
    cin>>h;
    l_s=h-1; 
    for(i=0;i<h;i++)        //petla odpowiedzialna za "poziom" trojkata
    {
        for(j=0;j<l_s;j++)  //petla odpowiedzialna za spacje
        {
            cout<<" ";
        }
        for(k=0;k<l_g;k++)  //petla odpowiedzialna za drukowanie gwiazdek
        {
            cout<<"*";
        }
        cout<<endl;
        l_s-=1;
        l_g+=2;
    }
    return 0;
}
0

Tak z ciekawości tylko zapytam: zadano ci to na studiach? Jaki kierunek? Która uczelnia?

0

Ja co prawda najchętniej wykorzystałbym tutaj prosty raytracing, lecz Twoje podejście też wygląda dobrze - tylko czy na pewno realizuje polecenie? Na moje oko to masz rysować trójkąt prostokątny.

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