• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Napisz program drukujący na ekranie trójkąt. Wysokość trójkąta wczytujemy z klawiatury.

0 głosów
3,381 wizyt
pytanie zadane 6 października 2020 w C i C++ przez eternal Użytkownik (620 p.)

stworzylem trojkat ktory w srodku ma znaki biale. "X" tylko na podstawach. Nie potrafie natomiast zrobic podstawy trojkata wypelnionej "X" jaka logika sie za tym kryje aby podstawa w zaleznosci od wielkosci podanej przez uzytkownika nie byla narysowana jak powyzsze, ze tylko krawedzie sa wyszczegolnione? Ale zeby ostatni rzad byl caly w X inaczej mowiac obwod trojkata ma byc zaznaczony, reszta to znaki puste. Wykonane tylko za pomoca petli bez tablic itd.

ogolnie jezeli ktos znalazl rozwiazania do zadan Gajdy to bylbym wdzieczny za podanie strony.

 

2 odpowiedzi

+1 głos
odpowiedź 6 października 2020 przez Whiskey_Taster Pasjonat (15,610 p.)
wybrane 8 października 2020 przez eternal
 
Najlepsza

Zapewne rozważamy tylko trójkąty prostokątne. 
 

#include <iostream>


main()
{
    int height = 18;

    for (int i = 0; i < height - 1; i++)
    {
        std::cout << "X";

        // Tworzenie przestrzeni pomiędzy wysokością, a dłuższym bokiem
        for (int j = 0; j < i; j++)
            std::cout << " ";
        // Tworzenie dłuższego boku
        if (i)
            std::cout << "X";
        std::cout << std::endl;

    }
    // Tworzenie podstawy trójkąta
    for (int i = 0; i < height + 1; i++)
        std::cout << "X";

    return 0;
}

Ogółem pomysł wygląda następująco: 
pierwsza pętla odpowiada za poruszanie się po liniach - czyli wysokości trójkąta, ale bez ostatniego rzędu, czyli miejsca na podstawę. Dlatego w warunku mamy height - 1. Następnie już w pętli na samym początku wypisujemy X - w ten sposób tworzymy wysokość trójkąta. Potem jest pętla odpowiadająca za spacje, czyli naszą pustą przestrzeń. Potem sprytnie wykorzystujemy zliczanie iteracji pętli - if(i). Dla i = 0 nie musimy tworzyć dłuższego ramienia trójkąta, zaś dla i > 0 instrukcja wykona się zawsze, tak więc zawsze po spacjach dostaniemy X. 
Na koniec, jak już wyjdziemy z pętli głównej, wchodzimy w pętlę odpowiadającą za podstawę. Tam mamy warunek height + 1. Dlaczego tak? Ponieważ wcześniejsza linia ma dokładnie height znaków - pierwszy X, height - 2 spacji oraz ostatni X. Razem daje nam to height znaków, więc ostatecznie musimy wykonać ostatnią pętlę height + 1 razy. 

0 głosów
odpowiedź 6 października 2020 przez TOM_CPP Pasjonat (22,640 p.)
edycja 6 października 2020 przez TOM_CPP

Trójkąt równoboczny:

#include <iostream>

using namespace std;

void printTriangle( const int height , char mark = 'X' )
{
    for( int i {0} ; i<height ; ++i ) cout << string( height-i , ' ' ) << mark << string( ( i==0 ? 0 : 2*i-1 ) , ( i == height-1 ? mark : ' ' ) )+( i==0 ? "" : string{mark} ) << endl;
}

int main()
{
    printTriangle(18);
    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 2,534 wizyt
+1 głos
3 odpowiedzi 1,515 wizyt
0 głosów
1 odpowiedź 799 wizyt

93,731 zapytań

142,669 odpowiedzi

323,286 komentarzy

63,291 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...