Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

c++ czy liczba x jest kwadratem innej liczby naturalnej

Ostatnio zmodyfikowano 2016-04-26 22:07
Autor Wiadomość
meshay
Temat założony przez niniejszego użytkownika
c++ czy liczba x jest kwadratem innej liczby naturalnej
» 2016-04-26 20:22:24
Witam, jestem dość początkujący jeżeli chodzi o c++. Mam za zadanie wykonać program, który po podaniu liczby x będzie sprawdzał, czy liczba ta jest kwadratem innej liczby naturalnej przy pomocy pętli while. Czy mógłby mi ktoś pomóc przerobić ten program na pętlę while zamiast if? Z góry dziękuję za pomoc.

#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;
}
P-147697
meshay
Temat założony przez niniejszego użytkownika
Postęp
» 2016-04-26 21:05:33
Doszedłem do takiej postaci, czy jest ona poprawna?
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int x;
    cout<<"Podaj x: ";
    cin>>x;
       while((sqrt(x)*(sqrt(x))==(x)))
        {
            cout<<"Ta liczba jest kwadratem liczby naturalnej "<<endl;
            x++;
            system("pause");
        }
     
        {
            cout<<"Ta liczba nie jest kwadratem liczby naturalnej"<<endl;
        }
 
    system("pause");
    return 0;
}
P-147699
mateczek
» 2016-04-26 21:16:46
czy jest poprawna to zależy co chcesz osiągnąć??
jeśli już pominąć fakt że to głupie jest to chyba tak :P
C/C++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int x;
    cout << "Podaj x: ";
    cin >> x;
    while(( sqrt( x ) * sqrt( x ) ) == x )
    {
        cout << "Ta liczba jest kwadratem liczby naturalnej " << endl;
        return 0;
    }
    cout << "Ta liczba nie jest kwadratem liczby naturalnej" << endl;
    return 0;
}
sama teść zadania nie wiele mówi co ma robić przy pomocy pętli while ??  może w programie masz po prostu użyć tej pętli do liczenia pierwiastka?? Algorytm newtona-raphsona
A może po prostu zaczynając od 1  wzwyż sprawdzać poszczególne warunki??

 


 
P-147701
Pawlo3
» 2016-04-26 21:19:44
C/C++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int x;
    cout << "Podaj x: ";
    cin >> x;
    while(( sqrt( x ) *( sqrt( x ) ) ==( x ) ) )
    {
        cout << "Ta liczba jest kwadratem liczby naturalnej " << endl;
        x++;
        system( "pause" );
    }
   
    {
        cout << "Ta liczba nie jest kwadratem liczby naturalnej" << endl;
    }
   
    system( "pause" );
    return 0;
}
Dodawaj znaczniki [ cpp ] [ /cpp ]. Tylko bez tych spacji.
P-147702
meshay
Temat założony przez niniejszego użytkownika
» 2016-04-26 21:31:32
Czy program na pewno poprawnie działa? Dla większych liczb pokazuje błędny wariant. Przykładowo określa liczbę 145 jako kwadrat liczby naturalnej, która w rzeczywistości jest kwadratem ułamka.

@mateczek - program ma sprawdzać jedynie wybraną liczbę, czy jest kwadratem innej liczby naturalnej przy pomocy pętli while.
P-147703
mateczek
moim zdaniem zadanie raczej wyglądało tak : "napisz, przy pomocy pętli while, program sprawdzający czy liczba posiada pierwiastek naturalny"
» 2016-04-26 21:41:57
Dlatego daję Ci 2 rozwiązania gdyby jednak nie chodziło o sprawdzanie pętlą while warunku :)
1 rozwiązanie metoda newtona-rapsona
C/C++
#include<iostream>

using namespace std;
int main() {
    double xn = 1, xn_1;
    bool stop = false;
   
    int intLiczba;
    cin >> intLiczba;
    double liczba = intLiczba;
    while( !stop ) { // tylko to mi przyszło do głowy jak policzyć pierwiastek przy pomocy pętli while :P
        xn_1 = xn; //xn  aktualna warość iteracji.  xn_1 to poprzednia wartość iteracji
        xn = 0.5 *( xn + liczba / xn );
        stop =(( xn - xn_1 ) >- 0.01 ) &&(( xn - xn_1 ) < 0.01 ); // kiedy skończyć liczenie pierwiastka;
    }
    int intXn = xn;
    if( intXn * intXn == intLiczba )
         cout << "pierwiastek naturalny istnieje = " << intXn << endl;
    else
         cout << "pierwiastek rzeczywisty = " << xn << endl;
   
}

2 rozwiązanie
C/C++
#include<iostream>

using namespace std;
int main() {
    bool find = false;
   
    int liczba;
    cin >> liczba;
    int pierwiastek = 1;
    while( pierwiastek < liczba ) {
        if( pierwiastek * pierwiastek == liczba ) {
            find = true;
            break;
        }
        pierwiastek++;
    }
   
    if( find )
         cout << "pierwiastek naturalny istnieje = " << pierwiastek << endl;
    else
         cout << "pierwiastek naturalny nie istnieje " << endl;
   
}
P-147704
meshay
Temat założony przez niniejszego użytkownika
» 2016-04-26 21:49:59
Dzięki, 2 opcja perfekcyjna jak dla mnie.
P-147705
mateczek
» 2016-04-26 22:02:55
to masz ciut zoptymalizowaną bo ta wersja wyżej strasznie nieefektywna
C/C++
#include<iostream>

using namespace std;
int main() {
    bool find = false;
   
    int liczba;
    cin >> liczba;
    int pierwiastek = 1;
    int kwadrat = 1;
    while( kwadrat <= liczba ) {
        if( kwadrat == liczba ) {
            find = true;
            break;
        }
        pierwiastek++;
        kwadrat = pierwiastek * pierwiastek;
    }
   
    if( find )
         cout << "pierwiastek naturalny istnieje = " << pierwiastek << endl;
    else
         cout << "pierwiastek naturalny nie istniej " << endl;
   
}
P-147707
« 1 » 2
  Strona 1 z 2 Następna strona