[C++] Trójkąt z liczb

olkaaa
Użytkownik
Użytkownik
Posty: 111
Rejestracja: 3 lip 2015, o 21:07
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 28 razy
Pomógł: 1 raz

[C++] Trójkąt z liczb

Post autor: olkaaa »

Mam do napisania program wyświetlający na ekranie trójkąt równoramienny złożony z cyfr. Wysokość trójkąta (ilość wierszy) jest daną wejściową. Podstawa trójkąta powinna stykać się z lewym brzegiem ekranu - próbowałam to stworzyć trochę analogicznie do choinek z gwiazdek, ale coś mi to nie do końca wygląda tak jak powinno...
Dodam, że powinnam użyć pętli while
Mruczek
Użytkownik
Użytkownik
Posty: 1114
Rejestracja: 26 paź 2008, o 19:43
Płeć: Mężczyzna
Podziękował: 23 razy
Pomógł: 157 razy

[C++] Trójkąt z liczb

Post autor: Mruczek »

Narysuj sobie to najpierw na papierze w kratkę - jedna cyfra / spacja to jedna kratka.
Wrzuć jakiś kod to poprawimy.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Trójkąt z liczb

Post autor: kalwi »


Kod: Zaznacz cały

#include <iostream>
using namespace std;

int main(void)
{
	int height;
	cout << "Podaj wysokosc trojkata: ";
	cin >> height;

	if(height < 1)
		cout << "Bledne dane wejsciowe!" << endl;
	else if(height == 1)
		cout << "*";
	else
	{
		int spaces_out = height - 2;
		int spaces_in = 1;

		for(int i = 0; i < spaces_out + 1; ++i)
			cout << " ";
		cout << "*" << endl;

		while(height > 2)
		{
			for(int i = 0; i < spaces_out; ++i)
				cout << " ";
			cout << "*";
			for(int i = 0; i < spaces_in; ++i)
				cout << " ";
			cout << "*" << endl;
			spaces_in += 2;
			spaces_out -= 1;
			height--;
		}
		for(int i = 0; i < spaces_in / 2 + 2; ++i)
			cout << "* ";
	}
	
	return 0;
}
olkaaa
Użytkownik
Użytkownik
Posty: 111
Rejestracja: 3 lip 2015, o 21:07
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 28 razy
Pomógł: 1 raz

[C++] Trójkąt z liczb

Post autor: olkaaa »

Znalazłam też taki kod na jakimś forum:

Kod: Zaznacz cały

#include <iostream>
#include <cstdio>

using namespace std;
int main()
{
        int a,i,k,l;
                cout << "Podaj dlugosc podstawy trojkata: ";
                cin >> a;
        char b;
                 cout << "Podaj znak: ";
                 cin >> b;
        for (k=1; k<a+1; k=k+2)
        {   
                for (l=1; l<a-k; l=l+2)                                 // nowa pętla
                {
                        cout << " ";                                    
                }
                for (i=1; i<k+1; i++)
                {
                         cout << b;
                }
                         cout << endl;
        }
cin.ignore();
getchar ();
return 0;
}
I tutaj szybkie pytanie - co oznaczają cin.ignore() i getchar()?
Ale o coś innego mi chodzi - chciałam przekształcić to z pętli for na while i spróbowałam, ale niestety nie wygląda to tak, jak powinno a nie potrafię znaleźć błędu :/

Kod: Zaznacz cały

#include <iostream>
#include <cstdio>

using namespace std;
int main()
{
        int a,i=1,k=1,l=1;
        cout << "Podaj dlugosc podstawy trojkata: ";
        cin >> a;
        char b;
        b='*';
        while (k<a+1)
        {   
            while (l<a-k)                                 // nowa pętla
            {
                cout << " ";  
				l=l+2;                                  
            }
            while (i<k+1)
            {
                cout << b;
                i++;
            }
                k=k+2;
cout << endl;
        }
cin.ignore();
getchar ();
return 0;
}
Gouranga
Użytkownik
Użytkownik
Posty: 1592
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 246 razy

[C++] Trójkąt z liczb

Post autor: Gouranga »

ale właściwie z jakich cyfr ma się składać ten trójkąt, bo tego nie mogę się nigdzie doszukać.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Trójkąt z liczb

Post autor: kalwi »

cin.ignore() czyści bufor
getchar() pobiera jeden znak ze standardowego wejścia

A błąd jest taki, że nie resetujesz wartości i oraz l co iterację głównej pętli
olkaaa
Użytkownik
Użytkownik
Posty: 111
Rejestracja: 3 lip 2015, o 21:07
Płeć: Kobieta
Lokalizacja: Polska
Podziękował: 28 razy
Pomógł: 1 raz

[C++] Trójkąt z liczb

Post autor: olkaaa »

Liczby powinno być coś takiego:
0
111
22222
3333333
tyle że jako równoramienny trójkąt - by zrozumieć samą zasadę postanowiłam zacząć od wyświetlania piramidy gwiazdek.

W jaki sposób resetować je co pętlę? Tzn. co w tym for z pierwszego kodu je resetuje a w moich while'ach tego brakuje?
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Trójkąt z liczb

Post autor: kalwi »

Kod: Zaznacz cały

 while (i<k+1)
            {
                cout << b;
                i++;
            }
zastanów się jaka będzie wartość i na wejściu co iterację głównej pętli, a jaka być powinna

Kod: Zaznacz cały

for (i=1; i<k+1; i++)
ODPOWIEDZ