Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pomoc przy zadaniu


Rekomendowane odpowiedzi

Opublikowano

­Pomoze ktos z zadaniem?
 

6e52aca97d75cb8ee8946830ee430774.png

#include <iostream>

using namespace std;

int potegaPierwiastka(int m)
{
    int wynikP = 1;
    for(int i=0; i<=m ; i++)
        wynikP = wynikP*m;
    return wynikP;
}

double pierwiastek(int m, int n)
{
    int wynik = 1;
    for(int i=0; potegaPierwiastka(m)<=n ; i++)
        wynik = i;
    return wynik;
}

int main()
{
    int m, n;

    cin >> m >> n;
    cout << pierwiastek(m, n);
    return 0;
}


anNO14B_460sa.gif

Opublikowano

https://en.wikipedia.org/wiki/Nth_root_algorithm

#include <iostream>
#define EPS 10e-6

double pow(double a, int 
{
    double t = 1;
    for(int i = 0; i<b; ++i)
        t *= a;
    return t;
}

double nRoot(double m, int n)
{
    double x = m * 0.5;
    double dx = (m/pow(x,n-1)-x)/n;
    while(dx >= EPS || dx <= -EPS)
    {
        x = x + dx;
        dx = (m/pow(x,n-1)-x)/n;
    }
    return x;
}

int main()
{
    double m;
    int n;
    std::cin >> m >> n;
    std::cout << nRoot(m,n);
    return 0;
}

Jeśli chciałbyś użyć liczb z przecinkiem jako stopien to najlepiej byłoby to przeciążeniem funkcji zrobić.

TuByłaSygnatura.png

Opublikowano

Jeszcze jedno pytanie, jak zrobić aby wyświetlało zmienną double tylko z 2 miejscami po przecinku?(Ma wyświetlać a nie zaokrąglać) 

anNO14B_460sa.gif

Opublikowano

@1373230489-U611928.pngVereX.

Z tego co widzę to przy okazji zaokrągla:

double f =3.14159;
  std::cout << std::setprecision(5) << f << '\n'

Output:

3.1416

Raczej trochę ciężko o gotową funkcje która by owo zadanie wykonała bez zaokrąglania, musisz sam napisać funkcje która obetnie te dodatkowe liczby.

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

@1373230489-U611928.pngVereX.

Z tego co widzę to przy okazji zaokrągla:

double f =3.14159;
  std::cout << std::setprecision(5) << f << '\n'
Output:

3.1416
Raczej trochę ciężko o gotową funkcje która by owo zadanie wykonała bez zaokrąglania, musisz sam napisać funkcje która obetnie te dodatkowe liczby.

Raczej nie ciężko, wystarczy ustawić zaokrąglanie w dół.

http://www.cplusplus.com/reference/cfenv/fesetround/

TuByłaSygnatura.png

Opublikowano

@1373230489-U611928.pngVereX.

Przecież zaokrąglanie w dół to nadal zaokrąglanie, to co innego niż wypisanie dwóch liczb po przecinku.

EDIT: Ok, wiem do czego, źle zrozumiałem zadanie autora, myślałem że na tym polega trudność żeby nie używać w ogóle jakiegokolwiek zaokrąglania.

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

@1373230489-U611928.pngVereX.

Przecież zaokrąglanie w dół to nadal zaokrąglanie, to co innego niż wypisanie dwóch liczb po przecinku.

Takim tokiem myślenia to może lepiej pomnożyć double, a następnie przekonwertować go do int i wyświetlić?

Albo w stringu zapisać liczbę z double i po znaku . odliczyć ilość liczb i "odciąć" resztę.

TuByłaSygnatura.png

Opublikowano
o może lepiej pomnożyć double, a następnie przekonwertować go do int i wyświetlić?

 

Konwertując na int stracisz tą końcówkę, więc raczej słaby pomysł. I tak, jeśli warunki zadania by tego zabraniały to druga opcja byłaby lepszym wyjściem, ogólnie to po to są warunki aby ich przestrzegać, przynajmniej tak mi się wydaję.

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

Konwertując na int stracisz tą końcówkę, więc raczej słaby pomysł. I tak, jeśli warunki zadania by tego zabraniały to druga opcja byłaby lepszym wyjściem, ogólnie to po to są warunki aby ich przestrzegać, przynajmniej tak mi się wydaję.

O to chodzi, że tracisz końcówkę, więc z*******y pomysł.

Jeśli chcesz, aby z liczby 3.14159 wyświetliło 3.141 to:

1. Mnożysz 3.14159 przez 1000 wychodzi 3141.59

2. Konwertujesz na int, ucina końcówkę, czyli 59.

3. Zostaje ci 3141, które dzielisz przez 1000 i wyświetla się 3.141, wow.

W tym wypadku kolejność działań ma znaczenie, więc mnożymy przez 1/1000 * 3141.

TuByłaSygnatura.png

Opublikowano

@1373230489-U611928.pngVereX.

To rozwiązanie trochę odbiega od tego co napisałeś, myślałem, że chciałeś zrobić to w dwóch krokach, tzn:

pomnożyć double, a następnie przekonwertować go do int i wyświetlić

dobrze byłoby gdybyś napisał że później znów chcesz przekonwertować to na double to wtedy nie byłoby tematu :c

PS. Chyba powinieneś dzielić i mnożyć przez 100 jeśli chcesz otrzymać dwie liczby po przecinku (zgodnie z założeniem autora) aktualnie otrzymujesz trzy, chyba że to było zaplanowane, to sorry. :)

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

@1373230489-U611928.pngVereX.

To rozwiązanie trochę odbiega od tego co napisałeś, myślałem, że chciałeś zrobić to w dwóch krokach, tzn:

pomnożyć double, a następnie przekonwertować go do int i wyświetlić

dobrze byłoby gdybyś napisał że później znów chcesz przekonwertować to na double to wtedy nie byłoby tematu :c

PS. Chyba powinieneś dzielić i mnożyć przez 100 jeśli chcesz otrzymać dwie liczby po przecinku (zgodnie z założeniem autora) aktualnie otrzymujesz trzy, chyba że to było zaplanowane, to sorry. :)

Po co znowu konwertować na double?

int wynik = (int)double;
cout << 1/1000 * wynik
//cout << wynik/1000;

To był tylko przykład...

TuByłaSygnatura.png

Opublikowano

@1373230489-U611928.pngVereX.

"Trochę" odeszliśmy od tematu ale chciałbym dodać że tak:

 

Po co znowu konwertować na double?

int wynik = (int)double;
cout << wynik/1000;

To był tylko przykład...

 

to nie zadziała, cout i tak wyświetli inta (czyli bez końcówki) musiałbyś 1000 castować na double

http://ideone.com/X0WaV3

Bot do gry NosTale:


[bOT] NosBota 1.3v

Opublikowano

Albo po prostu użyć std::fixed i std::fesetround.

std::fesetround(FE_TOWARDZERO);
std::cout << std::setprecision(3) << std::fixed << 3.14159 << std::endl;
Opublikowano

 

@1373230489-U611928.pngVereX.

"Trochę" odeszliśmy od tematu ale chciałbym dodać że tak:

 

to nie zadziała, cout i tak wyświetli inta (czyli bez końcówki) musiałbyś 1000 castować na double

http://ideone.com/X0WaV3

Zapędziłem się, powinno się mnożyć.

1/a * wynik

gdzie a = przez ile mnożyliśmy wynikD.

 

Przepraszam, za wprowadzenie w błąd, wynikający z mojej irytacji po idiotycznych postach.

TuByłaSygnatura.png

Opublikowano

Jeszcze jedno zadanko, pamiętałem że kuzyn polecił mi użyć do tego zadania warunku z %(modulo) ale nie wiem jak to wykorzystać.

8948e9afc85969db9a7fc084b6d40169.png­

anNO14B_460sa.gif

Opublikowano

powinno działać

    int n;
    std::cout << "Podaj n: ";
    std::cin >> n;
    int wynik = 1;
    if (n % 2 != 0) n -= 1;
    for (int i = 2; i <= n; i += 2)
    {
        wynik *= i;
    }
    std::cout << "Wynik: " << wynik << '\n';
Opublikowano

@NopeDotAvi2 na jakiej zasadzie dziala ten program, chodzi mi bardziej o ifa i petle.­

 

    int n;
    std::cout << "Podaj n: ";
    std::cin >> n;
    int wynik = 1;
    if (n % 2 != 0) n -= 1; //Jeśli reszta z dzielenia przez 2 liczby n jest różna od 0 (lub po prostu == 1), czyli jest nieparzysta, to --n, czyli zmniejszasz rozmiar n(tak jak na przykladzie do mniejszej najbliższej liczby parzystej)
    for (int i = 2; i <= n; i += 2) //Od najmniejszej liczby parzystej, mnożysz po kolei liczby parzyste, aż do n, przeskakujesz o 2 bo liczby parzyste są co 2
    {
        wynik *= i;      //  No i tutaj się mnoży 1*2=2....2*4...=8 itd.
    }
    std::cout << "Wynik: " << wynik << '\n';

TuByłaSygnatura.png

Opublikowano
    int n;
    std::cout << "Podaj n: ";
    std::cin >> n;
    int wynik = 1;
    if (n % 2 != 0) n -= 1; //Jeśli reszta z dzielenia przez 2 liczby n jest różna od 0 (lub po prostu == 1), czyli jest nieparzysta, to --n, czyli zmniejszasz rozmiar n(tak jak na przykladzie do mniejszej najbliższej liczby parzystej)
    for (int i = 2; i <= n; i += 2) //Od najmniejszej liczby parzystej, mnożysz po kolei liczby parzyste, aż do n, przeskakujesz o 2 bo liczby parzyste są co 2
    {
        wynik *= i;      //  No i tutaj się mnoży 1*2=2....2*4...=8 itd.
    }
    std::cout << "Wynik: " << wynik << '\n';

 

A po co w if-ie n=n-1?

­

anNO14B_460sa.gif

Opublikowano

A po co w if-ie n=n-1?

­

A jak masz w zadaniu przykład dla n, które jest nieparzyste.

Jeśli jest nieparzyste to iloczyny liczb parzystych, aż do n-1.

TuByłaSygnatura.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...