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

Uniwersalna funkcja do przeliczania liczby na system od dwójkowego do szesnastkowego

Object Storage Arubacloud
0 głosów
148 wizyt
pytanie zadane 25 maja 2021 w C i C++ przez ktoś123 Nowicjusz (180 p.)
edycja 25 maja 2021 przez ktoś123

Witam, mam do zrobienia uniwersalną funkcję do przeliczania liczby na system od dwójkowego do szesnastkowego. Liczba jest już wiadoma w programie. Użytkownik podaje w jakim systemie(czyli zarazem przez jaką liczbę chce dzielić liczbę) będzie chciał przeliczyć liczbę. Na lekcji miałam system dwójkowy. Przerobiłam program, ale nie wiem jak zmienić funkcję, żeby była uniwersalna. Też nie wiem jak napisać, że dzielnik = system.

 

Z góry dziękuję za pomoc!smiley

 

#include <bits/stdc++.h>
 
 
using namespace std;
int dzielnik;
string czCalkowita(int c, int system) // calkowita
{
	
	string s;
	while(c > 0)
	{
	if(c % dzielnik == 1)s = '1' + s;
	else s = '0' + s;
	c/= dzielnik;	
	}
	return s;
}

string czUlamkowa(double d, int system)
{
	string s;
	int f = 0;
	for(int i = 0; i < 20; i++)
	{
		d*=dzielnik;
		f = floor(d);
		if(f == 0) s+= '0';
		else s+= '1';
		d= d-f;
		if(d < 0.0000000001) break;
	}
	return s;
}


string liczba_binarnie(double d,int system)
{
	int c = (int ) d;
	d = d - c;
	string s;
	s = czCalkowita(c, system);
	s+= ", ";
	s+= czUlamkowa(d, system);
	return s;
	
	
}
int main()
{
	double d = 2345.3465;
	cin >> dzielnik;
	if(dzielnik < 16)
	{ 
	
	cout << liczba_binarnie(d, 13) << endl;
	}
	else return 0;



	
	
	return 0;
}

 

komentarz 25 maja 2021 przez Oscar Nałogowiec (29,290 p.)
Taka podpowiedź na początek:

Najpierw zdefiniuj stałą tablicę znaków, które będą reprezentować poszczególne wartości dla cyfr. Coś takiego "0123456789ABCDEF". Jak obliczysz modulo, to indeksujesz tablicę i masz kolejny znak.
komentarz 26 maja 2021 przez ktoś123 Nowicjusz (180 p.)
A możesz napisać mi to w programie, bo trochę nie rozumiem.
1
komentarz 26 maja 2021 przez j23 Mędrzec (194,920 p.)
#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    unsigned int v = 666, system = 2;
    std::string s;
    
    while (v) {
        s += "0123456789ABCDEF"[v % system];
        v /= system;
    }

    std::reverse(s.begin(), s.end());
    std::cout << s << '\n';
}

 

komentarz 26 maja 2021 przez ktoś123 Nowicjusz (180 p.)
dziękuję

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 1,746 wizyt
0 głosów
2 odpowiedzi 2,169 wizyt
0 głosów
1 odpowiedź 496 wizyt

92,555 zapytań

141,402 odpowiedzi

319,553 komentarzy

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

...