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

Problem z programem zmiany systemu liczbowego

VPS Starter Arubacloud
0 głosów
250 wizyt
pytanie zadane 7 maja 2017 w C i C++ przez Radosław Foltyński Obywatel (1,180 p.)
Witam serdecznie wszystkich forumowiczów. Na praktykach dostałem zadanie domowe, mam zrobić program zamieniający liczby dziesiętne na dwójkowe, ósemkowe i szesnastkowe. Na pierwsze dwa działa bez zarzutu, problem zaczyna się gdy zaczynam zmieniać z dziesiętnego na szesnastkowy. Gdy wpisuje liczbę to mi ją zmienia na szesnastkowy, ale gdy chce zmienić i wybiorę np. dwójkowy to wpisana liczba wyświetla mi ją w systemie szesnastkowym i przerobioną na dwójkową. Proszę o pomoc i z góry dziękuję. Załączam kod źródłowy programu:
 

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

using namespace std;

int liczba;
void dec_to_bin(int liczba)
{
  int i=0,tab[31];
  
  while(liczba)
  {
    tab[i++]=liczba%2;
    liczba/=2;
  }
  
  for(int j=i-1;j>=0;j--)
    cout<<tab[j];
};
void dec_to_oct(int liczba)
{
    int i=0,tab[31];
 
    while(liczba)
    {
        tab[i++]=liczba%8;
        liczba/=8;
    }
 
    for(int j=i-1; j>=0; j--)
        cout<<tab[j];
};
void szesn(int liczba)
{
    cout << hex << liczba;

};

int main()
{
    for(;;)
    {
        
    cout<<"Podaj liczbe dziesietna: "<<endl;
    cin>>liczba;
    cout<<"twoja liczba to: "<<liczba<<endl;
    cout<<"1.Binarny"<<endl;
    cout<<"2.Osemkowy"<<endl;
    cout<<"3.Szesnastkowy"<<endl;
    cout<<"4.Powrot do wyboru"<<endl;
    cout<<"5.Zakanczam program"<<endl;
    cout<<"Podaj w jakim systemie chcesz ja przeliczyc: ";
    int wybor;
    cin>>wybor;
    
        switch(wybor)
        {
        case 1:
            cout<<"Wybrales sytem binarny"<<endl;
            cout<<"liczba: "<<liczba<<" binarnie wynosi: ";
              dec_to_bin(liczba);
              cout<<endl;
        break;
        case 2:
            cout<<"Wybrales sytem osemkowy"<<endl;
            cout<<"liczba: "<<liczba<<" oktalnie wynosi: ";
            dec_to_oct(liczba);
              cout<<endl;
        break;
        case 3:
            cout<<"wybrales system szesnastkowy"<<endl;
            cout<<"liczba: "<<liczba<<" szesnastkowo wynosi: ";
            szesn(liczba);
              cout<<endl;
        break;
        case 4:
            cout<<"anulujesz swoj wybor";
        break;
        case 5:
            cout<<"koniec programu";
            exit(0);
        break;
        default:
            cout<<"Nie ma takiej opcji w menu!";
        break;
        }
        getchar();getchar();
        system("cls");
    }
    return 0;
}

5 odpowiedzi

0 głosów
odpowiedź 7 maja 2017 przez 10kw10 Pasjonat (22,880 p.)

Dodaj takie cos

cout.setf(std::ios::dec);

po

cout << hex << liczba;

 

Wydaje mi sie, ze jak wywolujesz tamta funkcje to cout wypisuje wszystkie liczby w postaci szesnastkowej dlatego trzeba zmienic na dziesietny.

komentarz 8 maja 2017 przez Radosław Foltyński Obywatel (1,180 p.)
Wszystko działa, dziękuję :D.
0 głosów
odpowiedź 10 maja 2017 przez Radosław Foltyński Obywatel (1,180 p.)
Mam kolejne zadanie do tego programu i nie mogę sobie dać rady :( . Mam na samym początku wybrać liczbę a program ma wywnioskować z jakiego to jest systemu liczbowego. Raz jeszcze proszę o pomoc bo jak do tej pory nic nie znalazłem w sieci :( . Z góry dziękuję za pomoc.
komentarz 10 maja 2017 przez 10kw10 Pasjonat (22,880 p.)
Zadaj oddzielne pytanie bo malo osob to zobaczy.

Wedlug mnie tak sie nie da, bo np. 100 moze byc jako 4 w dwojkowym i 100 w dziesietnym.
komentarz 11 maja 2017 przez Radosław Foltyński Obywatel (1,180 p.)
A if czy bool nie mógłby tego jakoś sprawdzić?
0 głosów
odpowiedź 10 maja 2017 przez dastianz Początkujący (340 p.)
cout << dec; - wyswietla liczby w systemie dziesietnym
cout << hex; - w systemie szesnastkowym
cout << oct; - w systemie ósemkowym

http://www.cplusplus.com/reference/ios/hex/

Możliwe, że znajdziesz dla tego jakieś zastosowanie.
komentarz 11 maja 2017 przez Radosław Foltyński Obywatel (1,180 p.)
Dziękuję za dokumentacje.
0 głosów
odpowiedź 10 maja 2017 przez Knayder Nałogowiec (37,640 p.)

Dwie sprawy.
Po 1. Kod wstawiamy w specjalny bloczek na forum:
 

std::cout << "Przykladowy kod" << std::endl;

Po 2. Twój kod jest bez sensu. Konwersja między systemami jest tak schematyczna, że dzielenie jej na różne funkcje jest bez sensu. Tutaj masz kod który napisałem i który będzie działać nawet dla konwersji między dziesiętnym a np. dwudziesto-siódemkowym (27). http://ideone.com/BqU6fz


 

#include <iostream>
 
char TRANSFORM_NUMBER(int number) {
	if (number > 9)
		return char((65+number)-10);
	else
		return char(48+number);
}
 
std::string transformTo(int number, const int &value) {
	if (number < 0 || value < 1 || value > 36)
		return "ERROR";
 
	std::string num;
	while (number) {
		num.insert(num.begin(), TRANSFORM_NUMBER(number % value));
		number /= value;
	}
	return num;
}
/*
Maksymalna wartosc drugiego argumentu
to 36 ze względu na to, że nie ma sensu
używać znaków po 'Z'.
Jeżeli chcesz tworzyć np. system stó-dwódziestkowy(?)
to odblokuj to w funkcji, aczkolwiek znaki będą dziwne xd
*/
 
int main() {
	std::cout << transformTo(70, 2) << std::endl; //konwertuj 70 na dwójkowy
	std::cout << transformTo(70, 4) << std::endl; //konwertuj 70 na czwórkowy
	std::cout << transformTo(70, 8) << std::endl; //konwertuj 70 na ósemkowy
	std::cout << transformTo(70, 10) << std::endl;//konwertuj 70 na dziesiętny
	std::cout << transformTo(70, 16) << std::endl;//konwertuj 70 na szesnastkowy
 
	std::cin.get();
	return 0;
}

 

komentarz 11 maja 2017 przez Radosław Foltyński Obywatel (1,180 p.)
edycja 11 maja 2017 przez Radosław Foltyński
Po pierwsze to jest mój pierwszy temat więc o tym nie wiedziałem.
Po drugie, kod jest dobry bo właśnie o to chodziło pani zlecającej mi to zadanie. Może nie wyraziłem się dość wyraźnie za co przepraszam i ponawiam o co chodzi.
Chodzi o to aby program po wpisaniu liczby rozpoznawał z jakiego jest on systemu liczbowego. Następnie ma wyświetlić się Menu gdzie jest możliwość konwersji danej liczby na inny system liczbowy. Dla każdego systemu liczbowego ma być inne menu. Mamy wybrać w jakim systemie chcemy obliczeń, nie wyświetlić wszystkie. Pierwsza część stanowi problem, z drugą jestem w stanie zrobić.
komentarz 11 maja 2017 przez Knayder Nałogowiec (37,640 p.)
Jak on ma niby wykryć co to za system O_o?
Wpiszesz 111 i co teraz. Jaki to system?
–1 głos
odpowiedź 7 maja 2017 przez Adrian Michałek Początkujący (260 p.)
Nie mam jak skompilować kodu (telefon), ale jestem prawie pewien że problem tkwi w getchar(), tak jakby wczytywał 2 razy.
komentarz 7 maja 2017 przez 10kw10 Pasjonat (22,880 p.)
ale getcharem nie pobiera nic do zmiennej.

Podobne pytania

0 głosów
1 odpowiedź 261 wizyt
pytanie zadane 27 grudnia 2018 w C i C++ przez 0097 Nowicjusz (120 p.)
+1 głos
2 odpowiedzi 610 wizyt
0 głosów
2 odpowiedzi 988 wizyt
pytanie zadane 18 listopada 2018 w C i C++ przez adamus Użytkownik (860 p.)

92,453 zapytań

141,262 odpowiedzi

319,085 komentarzy

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

...