• 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
557 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 785 wizyt
0 głosów
2 odpowiedzi 41,850 wizyt
pytanie zadane 29 października 2016 w C i C++ przez Steefler Nowicjusz (180 p.)
0 głosów
0 odpowiedzi 362 wizyt
pytanie zadane 12 sierpnia 2022 w C i C++ przez Noizz00 Użytkownik (910 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...