[C++] potęga..
-
- Użytkownik
- Posty: 86
- Rejestracja: 23 lut 2009, o 13:37
- Płeć: Kobieta
- Lokalizacja: Katowice
[C++] potęga..
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
Kompletnie nie wiem, jak sie za to zabrac:/ A pewnie, dla wielu z was to jest kilka minut roboty, dlatego zwracam się o pomoc
- kolanko
- Użytkownik
- Posty: 1905
- Rejestracja: 9 gru 2006, o 14:23
- Płeć: Mężczyzna
- Lokalizacja: Łańcut
- Podziękował: 32 razy
- Pomógł: 172 razy
[C++] potęga..
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 ?
najpierw sprawdz czy ta liczba jest potęgą 3, jesli jest to pomnóż tą liczbe przez 3 i masz wynik. w czym tu problem ?
-
- Użytkownik
- Posty: 86
- Rejestracja: 23 lut 2009, o 13:37
- Płeć: Kobieta
- Lokalizacja: Katowice
[C++] potęga..
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?
Da rade zrobic to zadanie?
-
- Użytkownik
- Posty: 735
- Rejestracja: 7 lis 2005, o 23:56
- Płeć: Mężczyzna
- Lokalizacja: Łódź
- Podziękował: 2 razy
- Pomógł: 133 razy
[C++] potęga..
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))
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))
-
- Użytkownik
- Posty: 735
- Rejestracja: 7 lis 2005, o 23:56
- Płeć: Mężczyzna
- Lokalizacja: Łódź
- Podziękował: 2 razy
- Pomógł: 133 razy
[C++] potęga..
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:
\(\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);
-
- Użytkownik
- Posty: 735
- Rejestracja: 7 lis 2005, o 23:56
- Płeć: Mężczyzna
- Lokalizacja: Łódź
- Podziękował: 2 razy
- Pomógł: 133 razy
[C++] potęga..
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ć:
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:
wartość \(\displaystyle{ 0,00001}\) została obrana arbitralnie.
Kod: Zaznacz cały
if(x == static_cast<double>(static_cast<int>(x)));
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
-
- Użytkownik
- Posty: 86
- Rejestracja: 23 lut 2009, o 13:37
- Płeć: Kobieta
- Lokalizacja: Katowice
[C++] potęga..
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<<
-
- Użytkownik
- Posty: 24
- Rejestracja: 9 kwie 2008, o 20:55
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 1 raz
[C++] potęga..
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;
}
-
- Użytkownik
- Posty: 86
- Rejestracja: 23 lut 2009, o 13:37
- Płeć: Kobieta
- Lokalizacja: Katowice
[C++] potęga..
Wieelkie dziękii, za pomoc. Jestem bardzo bardzo wdzięczna!
A jeszcze mam pytanko, jak mam do tego kodu dopisac
Bo jak to wstawiam na początku algorytmu to nie działa:/
A jeszcze mam pytanko, jak mam do tego kodu dopisac
Kod: Zaznacz cały
cout<<"Podaj liczbe(wielokrotnosc 3)"<<endl;
cin>>a;
-
- Użytkownik
- Posty: 24
- Rejestracja: 9 kwie 2008, o 20:55
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 1 raz
[C++] potęga..
W moim kodzie nie ma dołączonej biblioteki iostream potrzebnej do obsługi funkcji cin/cout.polcia_89 pisze:Bo jak to wstawiam na początku algorytmu to nie działa:/Kod: Zaznacz cały
cout<<"Podaj liczbe(wielokrotnosc 3)"<<endl; cin>>a;
Dopisz w pierwszej linijce to co poniżej i powinno śmigać
Kod: Zaznacz cały
#include <iostream>