Program sprawdzający, czy zadane x jest kwadratem liczby całkowitej

2015-05-25 09:57

Rejestracja: 5 lat temu

Ostatnio: 5 lat temu

0

Witam jestem totalnym laikiem jeśli chodzi o programowanie. Szukałem na internecie i nie mogę znaleźć a muszę taki program oddać na zajęcia.

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int x;
    cout<<"Podaj x: ";
    cin>>x;
    for(int i=1;x>i;i++)
    {
        if(sqrt(x)==((int(x))*(int(x))))
        {
            cout<<"Ta liczba jest kwadratem liczby całkowitej";
        }
        else
        {
            cout<<"Ta liczba nie jest kwadratem liczby całkowitej";
        }
    }
    system("pause");
    return 0;
}

Program pisałem w devie w c++. Program ma mi pokazywać czy zadana liczba jest kwadratem liczby całkowitej a po odpaleniu programu program się chyba zapętla bo wyskakuje zawsze że ta liczba nie jest kwadratem liczby całkowitej i do tego napis wyskakuje po kilka razy. Czy mógłby mi ktoś w tym pomóc ?

edytowany 1x, ostatnio: furious programming, 2015-05-25 17:06
Wstawiaj kod w znaczniki kolorujące składnię; - furious programming 2015-05-25 17:06

Pozostało 580 znaków

2015-05-25 10:04

Rejestracja: 8 lat temu

Ostatnio: 3 dni temu

0

Na moje oko sprawdzasz czy kwadrat pewnej liczby jest jej pierwiastkiem i się dziwisz że nie jest :P. Próbowałeś z jedynką?

Pozostało 580 znaków

2015-05-25 10:06

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

0

Ciekawy jestem kiedy system edukacji przestanie wciskać IDE Dev C++.

@topic:
Lista problemów:

  • wypisujesz rezultat wewnątrz pętli, a powinieneś poza pętlą
  • warunek pętli jest zbyt szeroki
  • pomyśl nad lepszym algorytmem.

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
system edukacji "wciska" to co jest proste, działa każdemu i daje się łatwo zainstalować w 5 minut. wielkie IDE to overkill dla hello worldów. - Azarien 2015-05-25 10:18
ale Dev C++ nie działa od X lat (brak debugowania), a lepsze działające alternatywy istnieją. - MarekR22 2015-05-25 10:26
U siebie w szkole jakis czas temu usłyszałem że dev nie wymaga dobrych kompów... tylko że kupili rok temu i7 i dalej jest dev :D Dlatego też zacząłem nosić swój laptop na zajęcia. - Narkan 2015-05-25 20:21

Pozostało 580 znaków

2015-05-25 10:07

Rejestracja: 5 lat temu

Ostatnio: 5 lat temu

0

wystarczy sprawdzić czy pierwiastek tej liczby jest liczbą całkowitą

Pozostało 580 znaków

2015-05-25 10:23

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

0
Świetny Mleczarz napisał(a):

wystarczy sprawdzić czy pierwiastek tej liczby jest liczbą całkowitą

Nieprawda: http://ideone.com/UYtrWR


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
źle to sprawdzasz - musisz wziąć pod uwagę dokładność liczb zmiennoprzecinkowych, poza tym wychodzisz poza zakres long long inta - Świetny Mleczarz 2015-05-25 10:35
celem tego kodu było udowodnienie właśnie, że twoje rozwiązanie działa, ale tylko łutem szczęścia, bo pojawia się problem z dokładnością. Poprawiłem typy i nie wykraczam poza zakres zmiennej, a problem nadal istnieje. - MarekR22 2015-05-25 10:54
okazuje się że round() załatwia sprawę: http://ideone.com/FMATkX - vpiotr 2015-05-25 11:22

Pozostało 580 znaków

2015-05-25 10:44

Rejestracja: 5 lat temu

Ostatnio: 5 lat temu

0

Dalej nie wiem jak to zrobić... Próbowałem samym if bez pętli for i dalej program nie działa tak jak powinien. Mógłby mi to ktoś jaśniej wytłumaczyć ? Wiem że program jest niby banalny ale dopiero co zacząłem programować dlatego proszę u wyrozumiałośc.

pokaż poprawkę. Kod otocz znacznikami <cpp></cpp> - MarekR22 2015-05-25 10:54

Pozostało 580 znaków

2015-05-25 10:54

Rejestracja: 5 lat temu

Ostatnio: 5 lat temu

0
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int x;
    cout<<"Podaj x: ";
    cin>>x;
        if((sqrt(x)*(sqrt(x))==(int(x))))
        {
            cout<<"Ta liczba jest kwadratem liczby całkowitej";
        }
        else
        {
            cout<<"Ta liczba nie jest kwadratem liczby całkowitej";
        }

    system("pause");
    return 0;
}

Zrobiłem to samym if oczywiście mój błąd był bo mnozyłem liczbę razy liczbę i sprawdzałem czy jest to pierwiastek a trzeba pomnozyć pierwiastek razy pierwiastek i sprawdzać czy to liczba. Mam jeszcze jedno pytanie czy wie ktoś może jak zrobić to za pomocą pętli for ?

dodanie znacznika <code class="cpp"> - @furious programming

edytowany 1x, ostatnio: furious programming, 2015-05-25 17:07
źle mnożysz 2 liczby zmiennoprzecinkowe i czego się spodziewasz? Do odrobienia praca domowa - przeczytać ze zrozumieniem: http://kaczus.ppa.pl/art/liczbyzmiennoprzecinkowe,19.html - kaczus 2015-05-25 10:59
if (x==x)? co? - Niikelion 2015-05-25 19:13

Pozostało 580 znaków

2015-05-25 10:58

Rejestracja: 5 lat temu

Ostatnio: 1 dzień temu

Lokalizacja: Łódź

0

1) to zły argument:

if(sqrt(x)==((int(x))*(int(x)))) 

winno chyba być porównanie typu

 i*i == x

dodatkowo poszukaj algorytmów przyśpieszających (chyba Krashan w Izviestii#12 napisał o tym bardzo prosty artykuł, jak znajdę i dostanę pozwolenie, to albo upublicznię, albo on upubliczni) Bo w sumie sprawa prosta, ale kolega ładnie to opisał i wolałbym udostępnić jego opis.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie

Pozostało 580 znaków

2015-05-25 11:03

Rejestracja: 16 lat temu

Ostatnio: 45 minut temu

1
MarekR22 napisał(a):

ale Dev C++ nie działa od X lat (brak debugowania)

Jak to nie działa.

dev.png

  • dev.png (0.07 MB) - ściągnięć: 269
Debugowanie działa ale wszyscy zostawili go jakieś 10 lat temu? - pylaochos 2015-05-25 21:11
@pylaochos: bo pierwotni twórcy (firma Bloodshed) go zostawiła. od kilku lat jest rozwijany przez innych ludzi. - Azarien 2015-05-25 21:21

Pozostało 580 znaków

2015-05-25 19:46

Rejestracja: 10 lat temu

Ostatnio: 4 godziny temu

Lokalizacja: Krasnystaw

0

A nie tak?

http://stackoverflow.com/ques[...]if-n-is-a-perfect-square-in-c
http://stackoverflow.com/ques[...]ers-square-root-is-an-integer


#include <iostream>
#include <math.h>

using namespace std;

bool isSquareOfInteger(int n)
{
    return (sqrt(n) == floor(sqrt(n)));
}

int main()
{
    int n = 1;
    while (n)
    {
        cout << "Podaj liczbe calkowita (0 = wyjscie): ";
        cin >> n;
        if (isSquareOfInteger(n))
        {
            cout << "Liczba " << n << " jest kwadratem liczby calkowitej\n";
        }
        else
        {
            cout << "Liczba " << n << " nie jest kwadratem liczby calkowitej\n";
        }
    }
    return 0;
}

Pozostało 580 znaków

2015-05-25 21:44
Moderator

Rejestracja: 12 lat temu

Ostatnio: 3 miesiące temu

0

Dla "dużych" liczb jest jednak problem. Np. pierwiastek z 68000000*68000000+1 jest liczbą całkowitą http://ideone.com/59DuN0


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2015-05-25 21:45
dałem wyżej link do strony w której opisuje, że liczby zmiennoprzecinkowe im większe, tym mniej dokładne, a dodawanie małej liczby do dużej wpowadza duży bład i zaokrąglenia tego nie poprawią! - kaczus 2015-05-25 23:15

Pozostało 580 znaków

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