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

String, system binarny


Rekomendowane odpowiedzi

Opublikowano

Siemka, mam problem z zadaniem dotyczącym konwersji ceny z kodu binarnego na kod dziesiętny, cena ograniczona jest do dwóch miejsc po przecinku. Liczy mi tak jakby z kropką między częścią całkowitą i ułamkową i wyświetla błędny wynik. Możecie wskazać mi błędy w kodzie?

Kod: http://wklej.org/id/1530965/

;)

Opublikowano

A jak się konwertuje z binarnego na dziesiętny? :)

 

Bo u Ciebie jest tak:

10110

 

out = 1

out = out*2 + 0

out = out*2 + 1

out = out*2 + 1

out = out*2 + 0

 

out == 12 :)

 

a powinno 22.

 

@edit, nvm nie rozpoznałem Homera :(

Nie pomagam na PW, od tego macie forum!!!

 

#PHP-things

 

 

08FMpDu.png

 

Opublikowano
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;

int main()
{
    string cenaBin;
    float cenaDec = 0.0f;
    cout<<"Podaj cene w systemie binarnym(oddzielac czesc calkowita i ulamkowa powinna kropka): ";
    cin >> cenaBin;
    bool poPrzecinku = false;
    float mnoznik = 1.0f;
    for(auto c : cenaBin)
    {
        if(c == '.')
        {
            poPrzecinku = true;
            continue;
        }
        cenaDec *= 2.0f;
        cenaDec += c-'0';
        if(poPrzecinku) mnoznik *= 0.5f; //tak jakby o ile trzeba bedzie przesunac przecinek potem
    }
    cout << setprecision(2) << fixed << cenaDec * mnoznik;
    return 0;
}

Jak czegoś nie rozumiesz to pytaj.

 

Odnośnie twojego kodu.

Ma UB (undefined behaviour) tu

Tab[i]=cena[i];

bo Tab.size() == 0

 

Ogólnie dostajesz zły wynik, bo źle wypełniasz Tab.

Dodajesz tylko jedną wartość po przecinku (wrzucasz wtedy, kiedy jest poprzedzona przez przecinek) i w dodatku ta wartość nie jest na początku Tab, przez co porównanie na końcu nie działa tak jak oczekujesz (Co i tak nie zadziała poprawnie, bo string sprawdza najpierw zgodność rozmiarów, a Tab.size() == 0)

 

I ogólnie na przyszłość polecam korzystać z typów całkowitych dla przechowywania kwot pieniędzy. Tutaj po prostu jest o niebo prościej robiąc to tak, a zadanie nie wymaga dużej precyzji.

 

jeśli ceny mogą być > 10000 to zmień na double

Opublikowano

Były złe wyniki przed przecinkiem, bo popełniłem głupi błąd, mianowicie było k zaczynało się od 0, a powinno od 1 :P.

Niby mam dobry wynik, ale chcę swój kod przerobić, aby wyświetlało także część ułamkową. Mam temat o string'ach na lekcji i dlatego muszę ich używać. Mógłbyś pokazać mi jak zrobić poprawnie z tymi tabelami?

;)

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...