Jumpeq Temat założony przez niniejszego użytkownika |
C++, podstawianie wyniku z pierwiastka do zaokrąglenia » 2016-06-22 19:54:03 Witajcie! Zaczynam swoją przygodę z programowaniem, bawię się w tym od paru tygodni jednak coraz częściej napotykam na różne problemy. Trochę z pomocą internetu, trochę sam udało mi się napisać program który pokazuje pierwiastek z jakiejś liczby, następnie chciałem to zmodyfikować aby pokazywał tą liczbę zaokrągloną, jednak z tym już jest problem, spójrzcie sami: #include <iostream> #include <cstdlib> #include <math.h>
using namespace std;
int main() { float liczba, stopien, c; cout << "Wprowadz liczbe: "; cin >> liczba; cout << "Wprowadz stopien pierwiastka: "; cin >> stopien; cout << pow( liczba, 1 / stopien ) << endl; pow( liczba, 1 / stopien ) == c; cout << "round(" << c << ")=" << round( c ) << endl; cout << "oto ta liczba: " << c; return 0; }
Pozdrawiam i proszę o pomoc (ważne pytania są w kodzie źródłowym) |
|
carlosmay |
» 2016-06-22 20:13:42 round( pow( liczba, 1 / stopien ) ); pow( liczba, 1 / stopien ) == c;
|
Tak się nie przypisuje. == nie jest operatorem przypisania. Poza tym przypisujemy prawą stronę do lewej. Można zrobić to też ze zmienną 'c', jeżeli później wartość ta jeszcze będzie używana. |
|
Jumpeq Temat założony przez niniejszego użytkownika |
» 2016-06-22 23:07:33 Faktycznie... trochę się zagapiłem. Bardzo dziękuję ze pomoc! A co do zaokrąglania wyniku? Wiem że służy do tego polecenie: cout.precision(2), jednak nie ważne w które miejsce bym je wkleił to to ostatecznego wyniku nie zaokrągla, jedynie wynik z pierwiastka. Czy w takim razie muszę operować w jakiś sposób funkcją z "round" aby wynik został zaokrąglony do tylu miejsc po przecinku ilu chcę? Czy jest może jeszcze jakiś inny sposób?
Pozdrawiam |
|
carlosmay |
» 2016-06-22 23:40:30 A co do zaokrąglania wyniku? Wiem że służy do tego polecenie: cout.precision(2) |
Zaokrągla round(), a std::cout.precision() zmienia precyzję wyświetlanej liczby. #include <iomanip> #include <iostream> #include <cmath>
auto main()->int { double dNumber { 5.1234 }; double result = round( dNumber * 1000 ) / 1000; std::cout << std::fixed << result << '\n'; std::cout << std::setprecision( 3 ) << result << '\n'; double dNumber2 { 5.1236 }; result = round( dNumber2 * 1000 ) / 1000; std::cout << std::setprecision( 6 ) << result << '\n'; std::cout << std::setprecision( 3 ) << result << '\n'; }
outpu: 5.123000 5.123 5.124000 5.124 |
|
pekfos |
» 2016-06-23 01:22:52 Używasz dłuższej składni bez powodu. |
|
Gibas11 |
» 2016-06-23 10:57:03 @up Sposób deklaracji jest bardzo zbliżony do lambd, niektórzy lubią taki porządek. ;) Chociaż ja tam ograniczam to do sytuacji gdy potrzebuję decltype. EDIT: auto main()->decltype( 0 ) { Generator < 1000 >::print( std::cout ); return 0; }
:P |
|
Jumpeq Temat założony przez niniejszego użytkownika |
» 2016-06-23 11:35:26 Tak, faktycznie, przejęzyczyłem się co do cout.precision(). Czy kody które napisaliście można napisać jakoś prościej? Chciałbym tylko jak wcześniej wspominałem aby wynik po spierwiastkowaniu wyświetlał mi się przybliżony do tylu miejsc po przecinku do ilu chcę. Wcześniej wspomniany cout.precision() nie przybliżał ale miał wyświetlać ilość liczb po przecinku, jednak w tym przypadku się nie sprawdził i nie wiem co dalej zrobić. |
|
carlosmay |
» 2016-06-23 12:15:21 Czy kody które napisaliście można napisać jakoś prościej? |
Tutaj nie ma czego upraszczać. double result = round( dNumber * 1000 ) / 1000; Mnożenie liczby zapobiega zaokrągleniu według cyfry zaraz po przecinku. Czyli zaokrągli 5123.4 w dół, a 5123.6 w górę. Następnie przed przypisaniem dzielimy wracają przecinkiem do pierwotnej pozycji, czyli 5.123 i 5.124. Oprócz dodatkowych myków z mnożeniem w kodzie jest tylko round. std::fixed jest potrzebne do prawidłowego wyświetlania cyfr po przecinku, w przeciwnym wypadku liczba może być w notacji naukowej oraz wyświetlona na ilości pól użytej wartości std::precision(). Używasz dłuższej składni bez powodu. |
@pekfos - taki miałem pod ręką ćwiczebny kod i tyle. Co złego jest w dłuższej składni? |
|
« 1 » 2 |