• 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

Object Storage Arubacloud
0 głosów
253 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ź 262 wizyt
pytanie zadane 27 grudnia 2018 w C i C++ przez 0097 Nowicjusz (120 p.)
+1 głos
2 odpowiedzi 619 wizyt
0 głosów
2 odpowiedzi 1,004 wizyt
pytanie zadane 18 listopada 2018 w C i C++ przez adamus Użytkownik (860 p.)

92,539 zapytań

141,382 odpowiedzi

319,480 komentarzy

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

...