[C++] Program sprawdza czy liczba jest trójkątna

Angel1408
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 21 sty 2012, o 13:08
Płeć: Kobieta
Lokalizacja: R********
Podziękował: 1 raz

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: Angel1408 »

Napisać program, który sprawdza, czy liczba wprowadzona przez użytkownika jest trójkątna. Program powinien zawierać funkcję bool trojk (int) oraz funkcję komunikatu informującego o istocie działania programu void komunikat (void).Program z zabezpieczeniami przed wpisaniem błędnym danych.

Napisałam program, ale niestety nie chodzi tak jak powinien. Proszę o pomoc.

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
using namespace std;
void komunikat (void);
bool trojk (int);
int main()
{
komunikat ();
cout<<endl;

int n;
do
    {
    system("cls");
    cout<<"Podaj liczbe dodatnia: ";cin>>n;
    }
while (n<0);

if (trojk (n) == true)
cout<<"Liczba trojkatna"<<endl;
else
cout<<"Liczba nie jest trojkatna."<<endl;
     
cout << endl;       
system("pause");	
return 0;
}

bool trojk (int n)
{
    int i;
    i>=1;
     if((8*n)+1==i*i)
     return true;
     else
     return false;
}


void komunikat (void)
{
     cout<<"Program sprawdza czy liczba jest trojkatna."<<endl;
}
Ostatnio zmieniony 21 sty 2012, o 22:46 przez Afish, łącznie zmieniany 1 raz.
Powód: Pamiętaj o tagach code.
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: norwimaj »

W funkcji trojk:

1) nie inicjujesz zmiennej i,
2) piszesz wyrażenie i>=1, którego do niczego nie wykorzystujesz,
3) nie widzę związku pomiędzy badanym przez Ciebie warunkiem a trójkątnością liczby.
Angel1408
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 21 sty 2012, o 13:08
Płeć: Kobieta
Lokalizacja: R********
Podziękował: 1 raz

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: Angel1408 »

Co powinnam zmienić? Dalej nie wiem.
Czy mogę prosić o szerszą wypowiedź albo o poprawienie programu
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: norwimaj »

Z powyższego kodu domyślam się, że chcesz sprawdzić, czy \(\displaystyle{ 8n+1}\) jest kwadratem pewnej liczby nieparzystej.

Natomiast to, co robisz, to sprawdzasz, czy \(\displaystyle{ 8n+1}\) jest równe pewnej liczbie, która nie wiadomo ile jest równa, a na dodatek jej wartość może być inna za każdym uruchomieniem programu.
Angel1408
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 21 sty 2012, o 13:08
Płeć: Kobieta
Lokalizacja: R********
Podziękował: 1 raz

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: Angel1408 »

no właśnie to jest źle, ale jest takie twierdzenie które mówi o tym co zapisałam powyżej.
Nie wiem jak mam inaczej tą liczbe trójkątną sprawdzić.
Za pomocą while bedzie mi wypisywał liczby trójkątne. A jak zapisać żeby sprawdził?
norwimaj
Użytkownik
Użytkownik
Posty: 5101
Rejestracja: 11 mar 2011, o 16:31
Płeć: Mężczyzna
Lokalizacja: 52°16'37''N 20°52'45''E
Podziękował: 4 razy
Pomógł: 1001 razy

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: norwimaj »

Skoro potrafisz wypisać kolejne liczby trójkątne w kolejności rosnącej, to możesz po kolei sprawdzać, czy \(\displaystyle{ n}\) nie jest którąś z tych liczb. Jeśli dojdziesz do liczb większych niż \(\displaystyle{ n}\), to znaczy że \(\displaystyle{ n}\) nie jest liczbą trójkątną. To zdecydowanie nie jest najszybsze rozwiązanie, ale przynajmniej jest poprawne.
Angel1408
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 21 sty 2012, o 13:08
Płeć: Kobieta
Lokalizacja: R********
Podziękował: 1 raz

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: Angel1408 »

Nom umiem wypisać tak mi się wydaje. Ale jak przedstawić to za pomocą funkcji bool?
I szczerze mówiąc wolałabym, żeby był program krócej napisany (bez niepotrzebnych rzeczy).
Zaczynam się dopiero uczyć programować i miałam tylko jeden przykładowy program z funkcją bool która była bardzo łatwa.
Jak mogę poprawić to co napisałam, żeby był krótszy sposób?
Dudenzz
Użytkownik
Użytkownik
Posty: 93
Rejestracja: 8 mar 2009, o 18:21
Płeć: Mężczyzna
Pomógł: 19 razy

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: Dudenzz »

mniej się zmienić chyba nie da

Kod: Zaznacz cały

bool trojk (int n)
{
    for(int i=1;i*i<n*8+2;i=i+2)
     if((8*n)+1==i*i)
     return true;
     
     return false;
}
jak ktoś na Ciebie nakrzyczy za for'a, to nie kieruj pretensji do mnie :P

edit:
krótkie wyjaśnienie

W. Sprawdzamy czy liczba pomnożona przez 8 i podniesiona o 1 jest równa dowolnej liczbie nieparzystej podniesionej do kwadratu.

0. Bierzemy pierwszą liczbę nieparzystą - 1, i sprawdzamy, jeżeli zachodzi W wychodzimy z funkcji zwracając 'prawdę'.

1. Bierzemy kolejną liczbę nieparzystą (tj. poprzednią liczbę nieparzystą powiększoną o 2) i sprawdzamy czy zachodzi W, jeżeli tak to wychodzimy z funkcji i zwracamy 'prawdę'

2. Wykonujemy punkt 1. tak długo jak liczba nieparzysta podniesiona do kwadratu jest mniejsza niż 8*dana liczba + 2

3. Wychodzimy z funkcji zwracając 'fałsz'
Grzesio_
Użytkownik
Użytkownik
Posty: 44
Rejestracja: 23 gru 2011, o 22:59
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 3 razy

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: Grzesio_ »

Kod: Zaznacz cały

// z pętelką
int CzyT(int n){
        int a=0, i=0;
        while( a<n )
                a += ++i;
        return a == n;}
 
//i bez
int CzyTr(int n){
        int i = sqrt( n = 8*n+1 );
        return i*i == n;}
Dudenzz
Użytkownik
Użytkownik
Posty: 93
Rejestracja: 8 mar 2009, o 18:21
Płeć: Mężczyzna
Pomógł: 19 razy

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: Dudenzz »

Zdaje się, że powinieneś maskować sqrt, bo zwraca float double albo long double. Poza tym autor chciał skorzystać z istniejącego kodu (toku myślenia, którym podążał).
Angel1408
Użytkownik
Użytkownik
Posty: 6
Rejestracja: 21 sty 2012, o 13:08
Płeć: Kobieta
Lokalizacja: R********
Podziękował: 1 raz

[C++] Program sprawdza czy liczba jest trójkątna

Post autor: Angel1408 »

Dziękuje chłopaki za pomoc i odzew.

Z programem już sobie poradziłam w ten sposób:

Kod: Zaznacz cały

bool trojk (int n)
    {
    int  i = 1;
    while(n >= 0)
            
            {
            n = n - i;
            if(n == 0) return true;
            if(n < 0) return false;
            i++;
            }
            
    }
Ostatnio zmieniony 24 sty 2012, o 09:59 przez Afish, łącznie zmieniany 1 raz.
Powód: Używaj tagów code.
ODPOWIEDZ