[C++] Operacje na ułamku właściwym

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 ? :slight_smile:

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.