• 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++

Cloud VPS
0 głosów
584 wizyt
pytanie zadane 11 sierpnia 2023 w C i C++ przez Krloo Użytkownik (530 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,360 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 Użytkownik (530 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 Mentor (354,120 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 (90,110 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 (46,230 p.)
komentarz 14 sierpnia 2023 przez Krloo Użytkownik (530 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,360 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 Użytkownik (530 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ź 2,093 wizyt
pytanie zadane 28 października 2018 w C i C++ przez jjanickij Użytkownik (510 p.)
0 głosów
1 odpowiedź 2,565 wizyt
0 głosów
0 odpowiedzi 365 wizyt
pytanie zadane 12 stycznia 2017 w Inne języki przez kamil_25021990 Nowicjusz (120 p.)

93,467 zapytań

142,459 odpowiedzi

322,735 komentarzy

62,848 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

Kursy INF.02 i INF.03
...