• 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

0 głosów
112 wizyt
pytanie zadane 7 maja w C i C++ przez Radosław Foltyński Początkujący (260 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 przez 10kw10 Pasjonat (19,950 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 przez Radosław Foltyński Początkujący (260 p.)
Wszystko działa, dziękuję :D.
0 głosów
odpowiedź 10 maja przez Radosław Foltyński Początkujący (260 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 przez 10kw10 Pasjonat (19,950 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 przez Radosław Foltyński Początkujący (260 p.)
A if czy bool nie mógłby tego jakoś sprawdzić?
0 głosów
odpowiedź 10 maja 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 przez Radosław Foltyński Początkujący (260 p.)
Dziękuję za dokumentacje.
0 głosów
odpowiedź 10 maja przez Knayder Nałogowiec (28,670 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 przez Radosław Foltyński Początkujący (260 p.)
edycja 11 maja 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 przez Knayder Nałogowiec (28,670 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 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 przez 10kw10 Pasjonat (19,950 p.)
ale getcharem nie pobiera nic do zmiennej.

Podobne pytania

+1 głos
2 odpowiedzi 169 wizyt
pytanie zadane 22 czerwca 2016 w Nasze projekty przez obl Nałogowiec (38,750 p.)
–1 głos
2 odpowiedzi 79 wizyt
pytanie zadane 30 października w Egzaminy E12, E13, E14 przez Zawisza czarny Użytkownik (600 p.)
0 głosów
1 odpowiedź 62 wizyt

42,402 zapytań

81,696 odpowiedzi

162,147 komentarzy

20,342 pasjonatów

Przeglądających: 110
Pasjonatów: 4 Gości: 106

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...