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

c++, zamiana pozycyjnych systemow liczbowych

VPS Starter Arubacloud
0 głosów
614 wizyt
pytanie zadane 28 sierpnia 2019 w C i C++ przez martin1724 Użytkownik (690 p.)
#include <iostream>
#include <windows.h>
#include <string.h>

using namespace std;
// HEX to szesnastkowy
// DEC to dziesietny
int potega(int podstawa, int potega)
{
    int wynik = 1;
    for(int i=0;i<potega;i++)
    {
        wynik*=podstawa;
    }
    return wynik;
}
int Hex2Dec(string a)
{
    getline(cin,a);
    int dlugosc = a.size();
    for(int i=0;i<dlugosc;i++)
    {
        if(a[i]=='1')
            a[i]-=48;
        if(a[i]=='2')
            a[i]-=48;
        if(a[i]=='3')
            a[i]-=48;
        if(a[i]=='4')
            a[i]-=48;
        if(a[i]=='5')
            a[i]-=48;
        if(a[i]=='6')
            a[i]-=48;
        if(a[i]=='7')
            a[i]-=48;
        if(a[i]=='8')
            a[i]-=48;
        if(a[i]=='9')
            a[i]-=48;
        if(a[i]=='A')
            a[i]-=48;
        if(a[i]=='B')
            a[i]-=48;
        if(a[i]=='C')
            a[i]-=48;
        if(a[i]=='D')
            a[i]-=48;
        if(a[i]=='E')
            a[i]-=48;
        if(a[i]=='F')
            a[i]-=48;
        if(a[i]=='0')
            a[i]-=48;
    }
    int b = dlugosc -1;
    int liczba=0;
    for(int j=0;j<a.size();j++)
    {
        liczba+=(a[j]*potega(16,b));
        b--;
    }
    cout << liczba << endl;;
    return 0;
}
#define N 100
int dec_zbior[N];
int d=0;
int Dec2Hex(int a)
{
    dec_zbior[d]=a%16;
    d++;
    d/=16;
    if(a==0) return 0;
    else return Dec2Hex(a);
}
int main()
{
    int wybor;
    int liczba;
    string liczba_string;
    bool exit = false;
    cout << "teraz nastapi proces przemieniania liczb. Jesli chcesz zakonczyc nacisnij ESC ";
    while(exit==false)
    {

        int liczba=0;
        cout << "wybierz ktora przemiane chcesz wykorzystac: " << endl;
        cout << "1: DEC to HEX" << endl;
        cout << "2: HEX to DEC" << endl;
        cin >> wybor;
        switch(wybor)
        {
        case 1:
            cout << "podaj liczbe do sprawdzenia: ";
            cin>> liczba;
            Dec2Hex(liczba);
            for(int j=d-1;j>=0;j--)
            {
                cout << Dec2Hex[j];
            }
        case 2:
            cout << "podaj liczbe do sprawdzenia: ";
            cin>>liczba_string;
            Hex2Dec(liczba_string);
        }
        cout << endl << "jesli chcesz wyjsc wcisnij ESC";
        if(GetAsyncKeyState(VK_ESCAPE))
        {
            exit = true;
        }
    }
    return 0;
}

Cześć, wiem że prawdopodobnie można zrobić to o wiele prościej. Ale czy ktoś wskazałbym mi przyczyne dlaczego kod nie działa poprawnie?

komentarz 28 sierpnia 2019 przez MetGang Nałogowiec (34,360 p.)
Nie działa poprawnie, gdyż zawiera w sobie błąd.
komentarz 29 sierpnia 2019 przez jankustosz1 Nałogowiec (36,200 p.)

@martin1724, Mógłbyś wytłumaczyć sens tego?

        if(a[i]=='1')
            a[i]-=48;
        if(a[i]=='2')
            a[i]-=48;
        if(a[i]=='3')
            a[i]-=48;
        if(a[i]=='4')
            a[i]-=48;
        if(a[i]=='5')
            a[i]-=48;
        if(a[i]=='6')
            a[i]-=48;
        if(a[i]=='7')
            a[i]-=48;
        if(a[i]=='8')
            a[i]-=48;
        if(a[i]=='9')
            a[i]-=48;
        if(a[i]=='A')
            a[i]-=48;
        if(a[i]=='B')
            a[i]-=48;
        if(a[i]=='C')
            a[i]-=48;
        if(a[i]=='D')
            a[i]-=48;
        if(a[i]=='E')
            a[i]-=48;
        if(a[i]=='F')
            a[i]-=48;
        if(a[i]=='0')
            a[i]-=48;

 

komentarz 29 sierpnia 2019 przez jankustosz1 Nałogowiec (36,200 p.)
W sensie nie ważne co tam jest i tak odejmujesz 48. W przypadku litery od A do F powinieneś odjąć 'A' i dodać 10

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 1,108 wizyt
0 głosów
2 odpowiedzi 43,561 wizyt
pytanie zadane 29 października 2016 w C i C++ przez Steefler Nowicjusz (180 p.)
0 głosów
0 odpowiedzi 488 wizyt
pytanie zadane 12 sierpnia 2022 w C i C++ przez Noizz00 Użytkownik (910 p.)

93,020 zapytań

141,983 odpowiedzi

321,283 komentarzy

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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...