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

question-closed zmiana systemu bin na dec w c++

Object Storage Arubacloud
0 głosów
193 wizyt
pytanie zadane 11 sierpnia 2023 w C i C++ przez Krloo Początkujący (480 p.)
zamknięte 16 sierpnia 2023 przez Krloo

to testowy fragment kodu, w którym zmieniam rodzaj systemu 
 

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <cmath>

using namespace std;

int main() {
    long int coppyI = 0,coppy = 0; 
    int dlugosc = 0;
    string x;

    x = "100010111";

      coppyI = stoi(x);
      do {dlugosc++;} while(coppyI - pow(10, dlugosc) > 0);
      while (dlugosc > 0)
      {
        if(coppyI - pow(10, dlugosc) >= 0){
          coppyI -= pow(10, dlugosc);
          coppy += pow(2, dlugosc);
        }
          dlugosc --;
         cout << coppy << " | " << dlugosc << endl;
      }
    return 0;
}

z jakiegoś powodu nie wykrywa [1] za pierwszym powtórzeniem pętli  
więc zamiast 279 wychodzi 278

komentarz zamknięcia: pytanie jest nie aktualne
1
komentarz 11 sierpnia 2023 przez Oscar Nałogowiec (29,320 p.)
Strasznie skomplikowane.

W jakim celu zamieniasz postać binarną na liczbę dziesiętną funkcją stoi - przecież liczby binarne są znacznie dłuższe, więc dość szybko, dla niezbyt dużych wartości wyjdzie przepełnienie?
komentarz 11 sierpnia 2023 przez Krloo Początkujący (480 p.)
edycja 11 sierpnia 2023 przez Krloo
Jest lepszy sposób zmiany string na int ?
Korzystam ze stringów, bo jest system hex korzystający z A B C D E F więc znana wykorzystanego rodzaju zmiennej jest średnim pomysłem.
sprawdziłem w debageże i zmiana rodzaju zmiennej nie jest na razie problem.
1
komentarz 11 sierpnia 2023 przez adrian17 Ekspert (344,860 p.)

Jest lepszy sposób zmiany string na int ?

std::stoi() opcjonalnie bierze jeszcze argument z systemem liczbowym :)

1
komentarz 11 sierpnia 2023 przez SzkolnyAdmin Szeryf (86,400 p.)

@Krloo, co konkretnie chcesz uzyskać? Bo jak tylko skonwertować bin na dec to użyj funkcji stoi (jak ci pisał adrian17) lub poszukaj rozwiązania w necie - zamiana systemów liczbowych to popularne ćwiczenie w C/C++ i innych językach.

komentarz 11 sierpnia 2023 przez reaktywny Nałogowiec (41,050 p.)
komentarz 14 sierpnia 2023 przez Krloo Początkujący (480 p.)

@SzkolnyAdmin, ten kod został już zmieniony kilkukrotnie a pytanie zadane przez mnie jest niedokładne i wyjątkowo głupie za co przepraszam
poza tym zapomniałem go usunąć.
 

Życzę miłej nocy / dnia

komentarz 16 sierpnia 2023 przez Oscar Nałogowiec (29,320 p.)

@Krloo,  zamianę string na liczbę to masz właśnie napisać. Liczba jako liczba nie jest w żadnym systemie (bin, oct, dec, hex itp). System dotyczy konwersji liczby na postać tekstową i odwrotnie.

Zamiast skomplikowanej zabawy z liczbami, weź ten wejściowy string i przeleć po jego znakach. Jeśli znak jest 'cyfrą' w danym systemie, to dotychczasowy wynik mnożysz przez podstawę systemu i dodajesz wartość aktualnej cyfry.

Coś w pseudo-kodzie:

int bin2int(string binary)
{
  int value = 0;
  for  (char x : binary)
  {
     switch (x)
    {
        case '0':
              value *= 2;
              value += 0;
              break;
        case '1':
              value *= 2;
              value += 1;
              break;
        default:
              /// bład albo koniec konwersji
    }
  }
  retun value;
}

 

1 odpowiedź

0 głosów
odpowiedź 11 sierpnia 2023 przez Krloo Początkujący (480 p.)
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <cmath>

using namespace std;

int main() {
    long int coppyI = 0,coppy = 0; 
    int dlugosc = 0;
    string x;

    x = "10010111";

      coppyI = stoi(x);
      while(coppyI - pow(10, dlugosc) > 0) {dlugosc++;}
      dlugosc --;
      while (dlugosc >= 0)
      {
        if(coppyI - pow(10, dlugosc) >= 0){
          coppyI -= pow(10, dlugosc);
          coppy += pow(2, dlugosc);
        }
          dlugosc --;
         cout << coppy << " | " << dlugosc << endl;
      }
    return 0;
}

czasami trzeba spać

Błędy w programie
- zły rodzaj pętli while

- brak dekrementacji dlugosc

-zły znak logiczny, który powodował to że ostatnia pętla się nie wykonała (10 do potęgi 0 )

Podobne pytania

0 głosów
1 odpowiedź 1,578 wizyt
pytanie zadane 28 października 2018 w C i C++ przez jjanickij Użytkownik (510 p.)
0 głosów
1 odpowiedź 2,090 wizyt
0 głosów
0 odpowiedzi 305 wizyt
pytanie zadane 12 stycznia 2017 w Inne języki przez kamil_25021990 Nowicjusz (120 p.)

92,583 zapytań

141,434 odpowiedzi

319,669 komentarzy

61,966 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!

...