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

c++, zamiana pozycyjnych systemow liczbowych

Object Storage Arubacloud
0 głosów
560 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 (35,880 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 (35,880 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 823 wizyt
0 głosów
2 odpowiedzi 42,163 wizyt
pytanie zadane 29 października 2016 w C i C++ przez Steefler Nowicjusz (180 p.)
0 głosów
0 odpowiedzi 376 wizyt
pytanie zadane 12 sierpnia 2022 w C i C++ przez Noizz00 Użytkownik (910 p.)

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

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

...