Liczba całkowita w c++

Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

Liczba całkowita w c++

Post autor: Sokół » 18 sie 2007, o 12:16

Jak sprawdzić czy wartość zmiennej x typu np. double jest liczbą całkowitą? Tzn. wiem, ze double i float to przechowuja liczby zmiennoprzecinkowe, ale zmienna x to bedzie pierwiastek jakies liczby calkowitej i nie moge z gory przewidziec czy to bedzie liczba calkowita czy niewymierna.
Rekrutacja Instytut Matematyczny, Uniwersytet Wrocławski (gif)

Xfly
Użytkownik
Użytkownik
Posty: 174
Rejestracja: 13 mar 2006, o 20:44
Płeć: Mężczyzna
Lokalizacja: Nowogard
Podziękował: 33 razy
Pomógł: 10 razy

Liczba całkowita w c++

Post autor: Xfly » 18 sie 2007, o 12:44

1. tworzysz pomocniczą zmienną typu float lub double np. a

2. tworzysz pomocniczą zmienna typu int np. b

3. przypisujesz do zmiennej pomocniczej typu int (b) wartość ze zmiennej float lub double, która zawiera wartość obliczonego pierwiastka arytmetycznego

4. do zmiennej pomocniczej float lub double (a) przypisujesz wartość ze zmiennej pomocniczej int (b)

5. porównujesz wartość zmiennej z wartością pierwiastka i zmiennej pomocniczej float lub double (a)

6. Jeśli wartość jest taka sama to znaczy że pierwiastek jest liczbą całkowitą, jeśli wartości są różne to pierwiastek ma rozwinięcie dziesiętne różne od 0;

Awatar użytkownika
setch
Użytkownik
Użytkownik
Posty: 1307
Rejestracja: 14 sie 2006, o 22:37
Płeć: Mężczyzna
Lokalizacja: Bełchatów
Podziękował: 155 razy
Pomógł: 207 razy

Liczba całkowita w c++

Post autor: setch » 18 sie 2007, o 12:56

W wyniku działań a jest jakąś liczbą. Aby sprawdzić czy a jest całkowitę to trzeba odjąć od niej jej część całkowitą. Jedyna możliwość jaka mi przychydzoi to:
float a;
int b=a;
if (a-b==0) cout

Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

Liczba całkowita w c++

Post autor: Sokół » 18 sie 2007, o 13:03

wpadlem na taki sposob, o ktorym mowicie:

Kod: Zaznacz cały

               l2=i*i+i;
               pierwl2=sqrt(l2);
               pierw121=pierwl2;
               roznica=pierw121 - pierwl2;
               if(roznica = 0)
               { 
                     cout << "i wynoosi " << i << endl;
               } 
ale kompilator wypisuje warning przy kompilacji (ale kompiluje!). Myslalem, ze moze jest w w podstawowej bibliotece cos co sprawdza calkowitosc liczby etc.

oczywiscie zmienne sa odpowiedniego typu. A jak sprawdzic czy dana liczba jest wymierna? Bo chcialem zrobic http://pl.wikipedia.org/wiki/Fibonacci szóste. A okazalo sie, ze w zbiorze 1-10000 nie ma takiej liczby calkowitej.

bagin
Użytkownik
Użytkownik
Posty: 14
Rejestracja: 18 paź 2006, o 19:49
Płeć: Mężczyzna
Lokalizacja: Częstochowa
Pomógł: 3 razy

Liczba całkowita w c++

Post autor: bagin » 18 sie 2007, o 13:42

kompilator wywala warning'a, bo dokonujesz niejawnej konwersji z typu szerszego double na węższy int. Najlepiej pozbyć się go jawnie określając konwersje dopisując przed pierwl2 typ docelowy w nawiasach okrągłych przy przypisywaniu go do pierw121.

co do algorytmu sprawdzania to myślę, że można go trochę skrócić:

l2=i*i+i;
pierwl2=sqrt(l2);
if (pierw121 == (int)pierwl2) {cout << "i wynoosi " << i << endl; }

Awatar użytkownika
setch
Użytkownik
Użytkownik
Posty: 1307
Rejestracja: 14 sie 2006, o 22:37
Płeć: Mężczyzna
Lokalizacja: Bełchatów
Podziękował: 155 razy
Pomógł: 207 razy

Liczba całkowita w c++

Post autor: setch » 18 sie 2007, o 18:04

W c++ chyba sie nie da sprawdzić wymierności liczby, ponieważ jak użyjemy sqrt(2) to program nie zrozumie tego jako \(\displaystyle{ \sqrt{2}}\) tylko jako 1,4142135623730950488016887242097 (w zależności od typu zmiennej).

Xfly
Użytkownik
Użytkownik
Posty: 174
Rejestracja: 13 mar 2006, o 20:44
Płeć: Mężczyzna
Lokalizacja: Nowogard
Podziękował: 33 razy
Pomógł: 10 razy

Liczba całkowita w c++

Post autor: Xfly » 18 sie 2007, o 22:14

A ktoś analizował moją koncepcje ?

P.S. W standardowej bibliotece nie ma odpowiedniej funkcji, niestety.

smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Liczba całkowita w c++

Post autor: smiechowiec » 19 sie 2007, o 00:06

w math.h

double modf (double x, double *ptr);
float modff(float x, float *ptr);
long double modfl(long double x, long double *ptr);

x argumenty funkcji
ptr wskaźnik do części ułamkowej

modf - argument zaokrąglony w stronę zera (jak trunc) i dodatkowo w zmiennej wskazywanej przez ptr zapisuje część ułamkową argumentu.
zobacz opis

Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

Liczba całkowita w c++

Post autor: Rafal88K » 18 wrz 2007, o 01:55

Sorry, że odświeżam ten temat, ale dopiero na forum wszedłem od paru miesięcy, moja wersja programu wygląda tak:

Kod: Zaznacz cały

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

int main()
{
	float stopien, liczba, pierwiastek;

	cout << "Stopien pierwiastka: ";
	cin >> stopien;

	cout << "Liczba: ";
	cin >> liczba;

	cout << endl;

	pierwiastek = pow(liczba, 1/stopien);

	if(static_cast<int>(pierwiastek) == pierwiastek)
		cout << "Pierwiastek " << stopien << " stopnia z liczby " << liczba << " jest liczba calkowita i wynosi: " << pierwiastek << endl;
	else
		cout << "Pierwiastek " << stopien << " stopnia z liczby " << liczba << " nie jest liczba calkowita." << endl;

	cout << endl;

	system("pause");
	return 0;
}

ODPOWIEDZ