• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja(potrzebna do kalkulatora binarnego)-prosze o pomoc :)

Object Storage Arubacloud
+1 głos
195 wizyt
pytanie zadane 8 marca 2016 w C i C++ przez DualOxygen Użytkownik (810 p.)

Witam

Mam problem z rozkminieniem kodu "trzonowej" funkcji do mojego kalkulatora binarnego chodzi mi o konwersję typu string do którego wpisuję z klawiatury zera i jedynki do int-a i później wymnożyć od końca cyfry binarnej przez 2 do potęgi n (wcześniej jak mnożyłem od lewej strony to program chociaż się nie wykrzaczał teraz za to już się wykrzacza(kompiluje się ale po wpisaniu cin-em z klawiatury wywalala mi błąd). Generalnie prosze o pomoc przy tym kodzie i wyjaśnienie co w tym jest źle. Jakby co to pominołem przy tym funkcję ze sprawdzaniem czy aby do stringa zostało wpisane 0 albo 1 bo ona działa dobrze(na obiektach już bo kod poniżej to tylko prototyp i main).

#include <iostream>
#include<cmath>
using namespace std;
int wykonywanie_dzialania_nr_1(string strTekstcior)
{
int wynik=0;
int a=0;
double licznik=0;
for (unsigned i = strTekstcior.length() - 1; i >=0 ; --i) // krok nr 2
 {
 a+=static_cast<int>(strTekstcior[i]);
 wynik+=a*pow(2,licznik);
 a=0;
 licznik++;
 }
return wynik;
}
int main()
{
    int zmienna;
    string Tekst;
    cin>>Tekst;
    zmienna=wykonywanie_dzialania_nr_1(Tekst);
    cout<<zmienna<<endl;
    return 0;
}

 

3 odpowiedzi

+2 głosów
odpowiedź 8 marca 2016 przez mbabane Szeryf (79,280 p.)
wybrane 9 marca 2016 przez DualOxygen
 
Najlepsza
pierwsze podejzenie, wedlug mnie, to wyjscie po za zakres tablicy (tak bez glebszej analizy kodu)
komentarz 8 marca 2016 przez DualOxygen Użytkownik (810 p.)
Niezbyt wiele mi to mówi ;/
komentarz 8 marca 2016 przez mbabane Szeryf (79,280 p.)
edycja 8 marca 2016 przez mbabane

a zmien unsigned i na int i

 

To prawdopodobnie to, bo unsigned oznacza ze nie moze byc w zmiennej wartosci ujemnej, po ostatniej iteracji (czyli dla i = 0) do teoretycnzie zostaje przypisane -1, ale w praktyce dla tego typu nie moze wystapic -1 i zostaje tam przypisana prawdopodobnie najwieksza mozliwa wartosc dla tego typu, i w momencie kiedy i ma taka wartosc w stringu nie istnieje pole o takim indeksie, i to sie nazwya wyjscie po za zakres, a inna rzecz to ta petla, przez to co wyzej opisalem, przemienila sie w petle nieskonczona ;)

komentarz 8 marca 2016 przez DualOxygen Użytkownik (810 p.)
Ok teraz już konsola nie crashuje ale za to na wyjściu przy liczbie 1010(2) wyskakuje 730(10) ;/(czyli totalna bzdura)
komentarz 8 marca 2016 przez mbabane Szeryf (79,280 p.)
edycja 8 marca 2016 przez mbabane

ta funkcja konwertujca zmienia na kody ascii

zmien tak:
a += static_cast<int>(strTekstcior[i]) - 48;

+3 głosów
odpowiedź 8 marca 2016 przez criss Mędrzec (172,590 p.)
Źle konwertujesz cyfre ze stringa na inta. Ten static_cast da ci po prostu wartość znaku w kodzie ascii (czyli np. dla '1' jest to 49, dla '0' 48), co w zasadzie i tak już miałeś, bo char to też typ liczb całkowitych, tylko o mniejszym zakresie (char ma 1 Bajt, a int 4). Spójrz w tablice ascii. Skoro '0' ma nr wartość ascii 48, to wystarczy, że od char-a odejmiejsz 48 i otrzymasz właściwą wartość. Także ten static_cast zamień na strTekscior[i] - 48.
0 głosów
odpowiedź 9 marca 2016 przez DualOxygen Użytkownik (810 p.)

Dzięki za odpowiedź teraz wszystko działa sam bym na to nie wpadł. Wiecie może czy ta przypadłość dotyczy tylko tego static_cast-a i czy inne rzutowania są już "wygodniejsze".

komentarz 9 marca 2016 przez criss Mędrzec (172,590 p.)
Przedewszystkim: odpowiadaj na odpowiedzi (jakkolwiek by to nie brzmiało), zamiast pisać nową, bo nikt nie dostaje powiadomienia, że cokolwiek napisałeś. Ja się tu znalazłem, bo dostałem upvote-a odpowiedzi.

Co do pytania: nic nie zrozumiałeś. Wygoogluj "ascii table" i jeszcze raz przeczytaj to, co napisałem. Rzutowanie nie ma tu nic do rzeczy.

Podobne pytania

0 głosów
1 odpowiedź 614 wizyt
0 głosów
1 odpowiedź 466 wizyt
pytanie zadane 2 grudnia 2018 w C i C++ przez MAXIM7 Obywatel (1,990 p.)
0 głosów
0 odpowiedzi 200 wizyt
pytanie zadane 1 maja 2016 w C i C++ przez zkkf56 Dyskutant (8,710 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...