zamiana systemów liczbowych

0

Witam. Jestem na samym początku edukacji odnośnie programowania, więc jestem kompletnie zielona. Zamianę z systemu dziesiątkowego rozumiem, ale na "kartce". Problem jest takie, że nie wiem jak przeliczyć je w c++. Moim zadaniem jest napisać program, który przelicza z systemu dziesiątkowego na systemy od dwójkowego do dziewiątkowego. Chcę to zrobić w takiej formie:

#include <iostream>
#include <cstdlib>
using namespace std;

float liczba;
float binarny(float licz)
{	
	float binar=licz%2
	licz/=2;
}

float trojkowy(){
}

i tak dalej a potem za pomocą funkcji if, po wpisaniu wybranego systemu, dokonać konwersacji.

Podejrzewam, że nie jest to nic nadzwyczajnego jednak, gubię się. Próbowałam coś ogarnąć z systemem binarnym, ale nie do końca działa. Szukałam podobnych tematów, ale albo nie było to nic tego typu, albo po prostu nie rozumiałam zapisu - nie mój poziom. nie chodzi mi o to by ktoś rozwiązał to zadanie za mnie, ale naprowadził mnie, pokazał na przykładzie jak to zrobić.

1

Czy jesteś pewien że chodzi o liczby zmiennoprzecinkowe?
Czy wpisałeś to w google zanim nasmarowałeś pytanie na forum?
Tu masz konwersje z dowolnego sytemu na dowolny od 2 do 36: http://4programmers.net/Forum/1005274

3
  1. float binarny(float licz) dlaczego przyjmujesz liczbę zmiennoprzecinkową? Nie twierdzę, że nie jest to możliwe do zamiany - tylko z całą pewnością nie na Twój poziom. Zacznij od intów.
  2. a potem za pomocą funkcji if if nie jest funkcją - nie używaj słów, których znaczenia nie znasz.
  3. dokonać konwersacji. konwersację to możesz dokonać z nauczycielem na temat tego zadania :P Liczby między systemami możesz konwertować.
  4. szukałam podobnych tematów (...) jakie hasła wpisywałaś w Google? Pytam serio - ponieważ naprawdę ciężko jest nie trafić na setki przykładowych kodów choćby wpisując int to binary c++.

Tak czy siak.

Zacznijmy od sensownej nazwy funkcji - będzie ona zamieniać liczbę naturalną na system binarny - integer to binary -> int to bin -> int2bin (lub bardziej w javowym stylu: integerToBinary, jak tam kto woli). Powstaje nam zatem:

std::string int2bin(unsigned int num) {
}

Zwróć uwagę, że przyjmujemy liczbę naturalną (unsigned int), a zwracamy ciąg znaków. Wynika to bezpośrednio z tego, że wszystkie liczby zapisywane w komputerze są tak czy siak za pomocą systemu binarnego (tylko że cout czy printf '%d' zamieniają je na dziesiętny), zatem potrzebujemy funkcji, która przyjmie nam liczbę, a zwróci jej reprezentację w odpowiednim systemie, tak abyśmy mogli to wyświetlić.

Luźno napisane będzie to wyglądać tak:

std::string int2bin(unsigned int num) {
	std::string result;
 
	do {
		result += (num % 2 == 0) ? '0' : '1';
		num /= 2;
	} while (num > 0);
 
	return std::string(result.rbegin(), result.rend());
}

I teraz tak - ponieważ coś czuję, że przyda się kilka wyjaśnień:

  1. (num % 2 == 0) ? '0' : '1' to tzw. ternary operator - zamiennik instrukcji warunkowej if; w internecie bez problemu znajdziesz przykłady i wywody na jego temat, zatem nie będę się duplikował.
  2. Podobnie jak na kartce po przeliczeniu liczby należy ją czytać od końca, tak samo nasza funkcja musi odwrócić przygotowaną liczbę, czym zajmuje się return std::string(result.rbegin(), result.rend());
    Pozostało więc tylko przetestować:
    http://ideone.com/QksyQB
    https://www.wolframalpha.com/input/?i=123456+in+binary

... czyli działa ;-)

@_13th_Dragon kiedyś wrzucał funkcyjkę konwertującą dowolną liczbę na systemy od 2-32, z tego co pamiętam, może zauważy to i podrzuci linka ;-) too late, za długo pisałem posta :P

2

Rozwinięcie powyższego:

    #include <iostream>
    #include <cstdint>
    #include <string>
    #include <algorithm>
     
    using namespace std;
     
    std::string int2sys(unsigned int num, unsigned int sys) {
    	std::string result;
     
    	do {
    		result += '0' + (num % sys);
    		num /= sys;
    	} while(num > 0);
     
    	return std::string(result.rbegin(), result.rend());
    }
     
    int main() {
    	unsigned int a = 123456;  
    	for(unsigned int i=2; i < 10; ++i)
    	  cout << i << ": " << int2sys(a, i) << "\n";
    	cout << "10: " << a << "\n";
    	return 0;
    }

http://ideone.com/vgEQVv

1 użytkowników online, w tym zalogowanych: 0, gości: 1