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

C++, podstawianie wyniku z pierwiastka do zaokrąglenia

Ostatnio zmodyfikowano 2016-06-24 17:17
Autor Wiadomość
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:

C/C++
#include <iostream>
#include <cstdlib>
#include <math.h>
// Info = ogólnie program ma pokazywać pierwiastek z jakiejś liczby a potem go zaokrąglić w górę lub w dół
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; // funkcja pozwalająca na pierwiastkowanie
    pow( liczba, 1 / stopien ) == c; // czy można tak to zapisać? chodzi mi o to aby wynik tego pierwiastka równał się jakiejś zmiennej a następnie tą zmienną podstawić pod round
    cout << "round(" << c << ")=" << round( c ) << endl; // tu ta funkcja round, ale moja zmienna c nie podstawia się, wychodzi bubel, jak zrobić to podstawienie? I w jaki sposób określić ile np miejsc po przecinku dana funkcja ma zaokrąglić? (przypuścmy że dwa miejsca po przecinku)
    cout << "oto ta liczba: " << c;
    return 0;
}
 
Pozdrawiam i proszę o pomoc (ważne pytania są w kodzie źródłowym)
P-149387
carlosmay
» 2016-06-22 20:13:42
round( pow( liczba, 1 / stopien ) );


C/C++
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.
P-149388
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
P-149393
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.

C/C++
#include <iomanip>
#include <iostream>
#include <cmath>

auto main()->int
{
    double dNumber { 5.1234 };
   
    // zaokrąglania do trzech miejsc po przecinku
    double result = round( dNumber * 1000 ) / 1000;
    std::cout << std::fixed << result << '\n';
    std::cout << std::setprecision( 3 ) << result << '\n';
   
    double dNumber2 { 5.1236 };
   
    // zaokrąglania do trzech miejsc po przecinku
    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
P-149395
pekfos
» 2016-06-23 01:22:52
C/C++
auto main()->int
Używasz dłuższej składni bez powodu.
P-149396
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:
C/C++
auto main()->decltype( 0 )
{
    Generator < 1000 >::print( std::cout );
    return 0;
}
:P
P-149401
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ć.
P-149403
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?
P-149404
« 1 » 2
  Strona 1 z 2 Następna strona