c++ czy liczba x jest kwadratem innej liczby naturalnej
Ostatnio zmodyfikowano 2016-04-26 22:07
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; } |
|
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; } |
|
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 #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?? |
|
Pawlo3 |
» 2016-04-26 21:19:44 #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. |
|
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. |
|
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 #include<iostream>
using namespace std; int main() { double xn = 1, xn_1; bool stop = false; int intLiczba; cin >> intLiczba; double liczba = intLiczba; while( !stop ) { xn_1 = xn; xn = 0.5 *( xn + liczba / xn ); stop =(( xn - xn_1 ) >- 0.01 ) &&(( xn - xn_1 ) < 0.01 ); } int intXn = xn; if( intXn * intXn == intLiczba ) cout << "pierwiastek naturalny istnieje = " << intXn << endl; else cout << "pierwiastek rzeczywisty = " << xn << endl; }
2 rozwiązanie #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; }
|
|
meshay Temat założony przez niniejszego użytkownika |
» 2016-04-26 21:49:59 Dzięki, 2 opcja perfekcyjna jak dla mnie. |
|
mateczek |
» 2016-04-26 22:02:55 to masz ciut zoptymalizowaną bo ta wersja wyżej strasznie nieefektywna #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; }
|
|
« 1 » 2 |