Czesc,
mam problem z operacjami na ułamku właściwym. Mam takie zadanie do wykonania:
Lecz moje próby spełzły na niczym… Miałem taki pomysł:
#include using namespace std;
Czesc,
mam problem z operacjami na ułamku właściwym. Mam takie zadanie do wykonania:
Lecz moje próby spełzły na niczym… Miałem taki pomysł:
#include using namespace std;
cout<<"0.";fabs(p)1E-10) { p*=q; int x=p; p-=x; cout(char)(x+'0'); // jeżeli q jest większe niż 10 to tu trza warunek dawać }[/code]
Ale zaraz zaraz, jak mam zdefiniować q ? Mam mu nadawać jakąś wartość ?
Jeżeli masz ułamek 0.25 to q może mieć wartość 2 lub 4 lub 6 lub 8 lub 10 itd.
dla q=2 wynik: 0.01
dla q=4 wynik: 0.1
Chyba jasne że tego q nie wyliczysz i nie zgadniesz.
No tak, ale tam dałeś linijkę:
p*=q;
I to q musi mieć jakąś wartość na początku…
Więc może spytam inaczej - co robi Twój kod ?
Pomyśl przeanalizuj, a nie czekaj na gotowca :P, gdybym zrozumiał treść zadania to bym ci dość doradził a tak ;/
wg mnie wychodzi
x
p=-----
q^z
gdzie q jest mniejsze od 10
To jest proste o ile user poda dwie osobne liczby - licznik i mianownik. Wtedy to mogę sam napisać. Ale nie wiem jak to zrobić kiedy user poda ułamek właściwy w postaci jednej liczby…
EDIT:
Tutaj pewnie chodzi o układ w sensie system liczbowy… Na pewno tak, bo w poprzednich moich zadaniach też występuje takie określenie na system liczbowy, a tam właśnie o niego chodzi.
No ale to dalej nie zmienia kwestii jak wyciągnąć mianownik, jeśli user poda 1 liczbę, zamiast osobno licznika i mianownika…
Czyli np user poda 6/7 a ty chcesz cyferki z tego ? Przeleć for cały ciąg i zmień zmienną na inną jak natrafi na slasha.
for(int i=0;i<nazwa.size();i++)
Nie, treść zadania brzmi:
I teraz nie wiem czy user ma podać dwie liczby - licznik i mianownik czy tylko jedną. W pierwszym przypadku mianownik będę miał podany na tacy, a w drugim… to nie wiem jak go wyciągnę - to rozwiązanie zaprezentował pewnie [alex] tylko, nie wiem na jaką wartość mam zainicjalizować zmienną q.
W każdym razie, w pierwszym przypadku user poda np. 5 i 25, a w drugim 0.2 (5 podzielone na 25 = 0.2).
EDIT:
Odnośnie mojego poprzedniego postu - da się łatwo zamienić ułamek (liczbę p) na inny system liczbowy ?
Pierwsze pytanie 1, pomyśl nie możesz dać 0 bo cały czas wynikiem będzie 0 …
Drugie jak 0.2 to normalny ułamek, najprościej będzie go zapisać w postaci x=2 y=10 a potem pętlą skracać do oporu.
Mój kod dosłownie realizuje podane zadanie.
Jak już pokazałem w poprzednim poście na przykładzie ułamku 0.25 nie da się z niego określić tego q.
ponieważ dla tego ułamku q może być: 2, 4, 6 lub 8
Więc rzecz jasna że to q musi być podane lub zadeklarowane jako stała.
OK, dzięki za pomoc.
Odnośnie zamiany ułamka w systemie dziesiętnym na inny (< 10), to tutaj jest mój kod, może komuś się przyda:
void foo(float fraction, const int& system)
j00zek , a sprawdzisz co wyda twoja wersja przy wywołaniu:
foo(0.1,10);
Czyli nie działa poprawnie, dla tego jednak polecam mój kod.
… const int& system) - tylko wydłuża operacji z udziałem tej zmiennej, wystarczy … int system)
int digit; - chyba piszesz w C++ więc deklaruj zmienne tam gdzie są potrzebne, anie na początku jak w C.
fraction -= static_cast(fraction); - nie jest potrzebne bo w zadaniu napisano że ułamek jest właściwy, obrona w stylu że na wszelki wypadek sprawdzić jest bez sensu bo nie sprawdzasz czy system jest w granicach 2…10
while(fraction != 0) - właśnie to powoduje że nie działa poprawnie
digit = static_cast(fraction); // poco tak komplikować wystarczy digit=fraction;
Po usunięciu wszystkich błędów i niedogodności otrzymasz dokładnie ten kod co ja podałem.
Twój kod z q = 2 i p = 0.75 nie wyświetla nic, zamiast poprawnej odpowiedzi 0.0101 (no wyświetla tylko 0.)
Zakładając, że q to nr systemu liczbowego, a zakładam że o to właśnie chodziło.
A tak z ciekawości - dlaczego ? Przecież to referencja…
Co do mojego kodu, rzeczywiście odwrotny warunek w while był (poprawiłem).
Referencja to jest to samo co wskaźnik w bebechach kodu, tylko dla programisty inaczej obsługiwany.