Strona 1 z 1

[C++] potęga..

: 13 cze 2009, o 11:14
autor: polcia_89
Witam. Proszę o pomoc w zrobieniu takiego zadanka: Napisz program proszący o podanie kolejnej najmniejszej liczby w potędze 3, (tzn jeśli wpisujesz 27 to ma wyjść 81).

Kompletnie nie wiem, jak sie za to zabrac:/ A pewnie, dla wielu z was to jest kilka minut roboty, dlatego zwracam się o pomoc

[C++] potęga..

: 13 cze 2009, o 12:29
autor: kolanko
Nie wiem czy dobrze rozumie,
najpierw sprawdz czy ta liczba jest potęgą 3, jesli jest to pomnóż tą liczbe przez 3 i masz wynik. w czym tu problem ?

[C++] potęga..

: 13 cze 2009, o 17:43
autor: polcia_89
Tak to chodzi o to co myślisz. Ale niestety jest problem, jeśli ktoś w ogole nie łapie jezyka c++..
Da rade zrobic to zadanie?

[C++] potęga..

: 13 cze 2009, o 18:14
autor: spajder
Jasne, że się da.
1. Wczytujesz liczbę
2. Liczysz logarytm trójkowy tej liczby (masz funkcję log, która liczy logarytm naturalny, wystarczy zrobić log(x)/log(3) ze wzoru na zmianę podstaw logarytmu)
3a. jeśli x jest liczbą całkowitą to wypisujesz na ekran 3^(x+1) (funkcja pow daje potęgę)
3b. jeśli x nie jest liczbą całkowitą to liczysz sufit z tej liczby (funkcja ceil) i wypisujesz 3^(ceil(x))

[C++] potęga..

: 13 cze 2009, o 21:29
autor: polcia_89
A czy punkt 2 da się jeszcze bardziej rozpisać?

[C++] potęga..

: 13 cze 2009, o 21:39
autor: spajder
Masz do dyspozycji (w bibliotece cmath) funkcję log, która zwraca logarytm naturalny. Jeśli chcesz policzyć logarytm trójkowy z \(\displaystyle{ x}\) wystarczy zastosować wzór na zamianę podstaw logarytmu:
\(\displaystyle{ \log_3{x}=\frac{\ln{x}}{\ln{3}}}\)

co na kod c++ przełoży się tak:

Kod: Zaznacz cały

double logarytm = log(x)/log(3);

[C++] potęga..

: 13 cze 2009, o 22:24
autor: Dumel
matematycznie jest ok ale mogą być kłopoty z dokładnością obliczen bo ln3 jest niewymierne

[C++] potęga..

: 13 cze 2009, o 22:40
autor: spajder
Problemów nie będzie, jeśli tylko uwzględni się, że obliczenia nie są wykonywane dokładnie. Żeby sprawdzić, czy liczba x jest całkowita nie można napisać:

Kod: Zaznacz cały

if(x == static_cast<double>(static_cast<int>(x)));
czyli zwykłego rzutowania. Nie można tak napisać w ŻADNYM wypadku, przy liczeniu na zmiennoprzecinkowych (nawet jeśli dodajemy 1.0+2.0).

Trzeba sprawdzić, czy aby różnica między tą liczbą a podłogą (lub sufitem) nie jest dostatecznie mała:

Kod: Zaznacz cały

if(abs(x-floor(x)) < 0.00001 || abs(x-ceil(x) < 0.00001))
    // wtedy liczba jest całkowita
wartość \(\displaystyle{ 0,00001}\) została obrana arbitralnie.

[C++] potęga..

: 14 cze 2009, o 11:47
autor: polcia_89
A ja nadal nie wiem co mam z tym zrobić?! Proszę o pomoc w napisaniu całego kodu.. Bo moje umiejętności skończyły się już tu:

Kod: Zaznacz cały

#include<iostream>
#include<math.h>
#include<cmath>
using namespace std;
double logarytm = log(x)/log(3);


int main()
{
    int n,i;
    cout<<
    

[C++] potęga..

: 14 cze 2009, o 12:27
autor: Tadrion
Może program napisany niezgodnie z regułami C++ (bardziej jest to C niż C++ jednak ) i z algorytmem trochę brutalnym Jednak dla danych mieszczących się w podstawowym zakresie wykonuje to co ma wykonywać błyskawicznie.

Kod: Zaznacz cały

#include <cstdio>
#include <cmath>

unsigned int a,i;

int main()
{
  scanf("%d",&a);
  i=0;
  while( (int)pow(3,i) < a && (int)pow(3,i+1) <= a )
    i++;
    
  printf("%d
",(int)pow(3,i+1));

  return 0;
}


[C++] potęga..

: 14 cze 2009, o 13:15
autor: polcia_89
Wieelkie dziękii, za pomoc. Jestem bardzo bardzo wdzięczna!
A jeszcze mam pytanko, jak mam do tego kodu dopisac

Kod: Zaznacz cały

cout<<"Podaj liczbe(wielokrotnosc 3)"<<endl;
cin>>a;
Bo jak to wstawiam na początku algorytmu to nie działa:/

[C++] potęga..

: 14 cze 2009, o 13:53
autor: Tadrion
polcia_89 pisze:

Kod: Zaznacz cały

cout<<"Podaj liczbe(wielokrotnosc 3)"<<endl;
cin>>a;
Bo jak to wstawiam na początku algorytmu to nie działa:/
W moim kodzie nie ma dołączonej biblioteki iostream potrzebnej do obsługi funkcji cin/cout.

Dopisz w pierwszej linijce to co poniżej i powinno śmigać

Kod: Zaznacz cały

#include <iostream>

[C++] potęga..

: 14 cze 2009, o 14:13
autor: polcia_89
Dziękuje bardzo:) Pozdrawiam