Dziesietne na binarne

macieja92

Dziesietne na binarne

Post autor: macieja92 »

Witam próbuje napisać program na zamiane liczb dziesiętnych na binarne i na odwrót ciągle mi nie wychodzi ... jak ktoś może niech pomoże
Przepraszam że nie dodałem, język C++
Ostatnio zmieniony 28 maja 2009, o 21:42 przez macieja92, łącznie zmieniany 1 raz.
Awatar użytkownika
lukki_173
Użytkownik
Użytkownik
Posty: 913
Rejestracja: 24 paź 2008, o 17:48
Płeć: Mężczyzna
Lokalizacja: Kościeliska (woj. opolskie)
Podziękował: 56 razy
Pomógł: 218 razy

Dziesietne na binarne

Post autor: lukki_173 »

VISUAL BASIC
Dziesiętny na binarny:
Public Class Form1
Public Function DecimalToBinary(ByVal DecimalNum As Long) As String
Dim tmp As String
Dim n As Long
n = DecimalNum
tmp = Trim(Str(n Mod 2))
n = n 2
Do While n <> 0
tmp = Trim(Str(n Mod 2)) & tmp
n = n 2
Loop
DecimalToBinary = tmp
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, wynik As Integer
a = TextBox1.Text
wynik = DecimalToBinary(a)
Label1.Text = wynik
End Sub
End Class

Binarny na dziesiętny:
Public Class Form1
Public Function BinaryNaDecimal(ByVal X As String) As Long
Dim n As Long
Dim s As Integer
For s = 1 To Len(X)
If Not IsNumeric(Mid(X, Len(X) - s + 1, 1)) Or Mid(X, Len(X) - s + 1, 1) > 1 Then
BinaryNaDecimal = -1
Exit Function
End If
n = n + (Mid(X, Len(X) - s + 1, 1) * (2 ^ (s - 1)))
Next s
BinaryNaDecimal = n
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a As Integer
Dim wynik As Integer
If Not IsNumeric(TextBox1.Text) Then
Label1.Text = "Nie można wykonać działania!"
Exit Sub
End If
a = TextBox1.Text
wynik = BinaryNaDecimal(a)
If wynik = -1 Then
Label1.Text = " Nie można wykonać działania!"
Exit Sub
End If
Label1.Text = wynik
End Sub
End Class
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

Dziesietne na binarne

Post autor: matshadow »

Kod: Zaznacz cały

#include <iostream>
using namespace std;

string decToBin(int n)
{
	string w="";
	while(n>0)
	{
		char cyfra=n%2+'0';
		w=cyfra+w;
		n/=2;	
	}	
	return w;
}

int binToDec(string s)
{
	int wynik=0;
	for(int i=0; i<s.size(); i++)
		wynik=2*wynik+(s[i]-'0');
	return wynik;	
}

main()
{
		int n;
		string l;
		cin>>n;
		cout<<decToBin(n)<<endl;
		cin>>l;
		cout<<binToDec(l)<<endl;
		system("pause");
}
macieja92

Dziesietne na binarne

Post autor: macieja92 »

No tak tylko wystarczy wstawic w case obramowac i oblookam czy dziala-- 28 maja 2009, 22:02 --tak pan napisał że nie idzie tego pociac na case xD
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

Dziesietne na binarne

Post autor: matshadow »

ale co chcesz zrobić? Chcesz sobie wybrać czy na binarne czy na dziesiętne?
macieja92

Dziesietne na binarne

Post autor: macieja92 »

chce w case umiesic ze w
case 1 :
Zamiana bin do dec

case 2 :
Zamiana dec do bin
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

Dziesietne na binarne

Post autor: matshadow »

Kod: Zaznacz cały

#include <iostream>
using namespace std;

string decToBin(int n)
{
    string w="";
    while(n>0)
    {
        char cyfra=n%2+'0';
        w=cyfra+w;
        n/=2;   
    }   
    return w;
}

int binToDec(string s)
{
    int wynik=0;
    for(int i=0; i<s.size(); i++)
      wynik=2*wynik+(s[i]-'0');
    return wynik;   
}

main()
{
    int n,k;
    string l;
    cin>>n;
    switch(n)
    {
        case 1:
        {
            cin>>l;
            cout<<binToDec(l)<<endl;
        } break;
        case 2:
        {
            cin>>k;
            cout<<decToBin(k)<<endl;
        } break;   
    }
    system("pause");
}
najpierw wczytujesz opcje, czy na bin, czy na dec, a potem liczbę do zamiany
macieja92

Dziesietne na binarne

Post autor: macieja92 »

i czy moglby pan napisac do czego sluzy n k w-- 28 maja 2009, 22:41 --btw ... i nic nawet nie ma o tym ze porsze poda czy to liczbe binarna czy to dziesietna ..
lordQubalus
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 22 mar 2009, o 14:42
Płeć: Mężczyzna
Podziękował: 2 razy

Dziesietne na binarne

Post autor: lordQubalus »

Ja mam prostszy (choć rekurencyjny) sposób:

Kod: Zaznacz cały

#include<iostream>
using std::cin;
using std::cout;

void dec2bin(unsigned int liczba)
{
	if (!liczba) return;
	dec2bin(liczba/2);
	cout<<liczba%2;
}

int main()
{
	unsigned int liczba;

	cout<<"podaj liczbe: ";
	cin>>liczba;
	cout<<"
"<<liczba<<" w systemie binarnym wyglada tak: ";
	dec2bin(liczba);
	cout<<"

";
	system("pause");
}
macieja92

Dziesietne na binarne

Post autor: macieja92 »

dobra, moze sobie daruje prosbe o pomoc tutaj, bo nie jest zrozumialy kod dla mnie, co innego jak sie samemu pisze to sie wie co jest do czego...-- 28 maja 2009, 23:10 --albo jak juz ktos pisze niech uzywa zmiennych podpisanych np
int zamiana
int dziesietna

a nie ze int k int s i ktos kto chce zrozumiec dzialanie kodu w ogole nie wie o chodzi...
Awatar użytkownika
Arst
Użytkownik
Użytkownik
Posty: 767
Rejestracja: 10 mar 2008, o 20:11
Płeć: Mężczyzna
Lokalizacja: University of Warwick
Podziękował: 82 razy
Pomógł: 50 razy

Dziesietne na binarne

Post autor: Arst »

Przepraszam, że odświeżam ten wątek jednak mam pytanie odnośnie fragmentu kodu wyżej a nie warto zakładać osobnego tematu. Mianowicie chodzi o ten fragment funkcji:

Kod: Zaznacz cały

void dec2bin(unsigned int liczba)
{
   if (!liczba) return;
   dec2bin(liczba/2);
   cout<<liczba%2;
}
Czy ktoś byłby w stanie wytłumaczyć co sprawdza warunek w tej funkcji i co zwraca return? Nie ogarniam tego fragmentu.
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Dziesietne na binarne

Post autor: smiechowiec »

Arst pisze:chodzi o ten fragment funkcji:
Czy ktoś byłby w stanie wytłumaczyć co sprawdza warunek w tej funkcji i co zwraca return?
if (!liczba) return;
Jest to sprawdzenie czy liczba == 0, jeżeli tak kończymy działanie.
if (liczba) oznacza czy liczba jest różna od zera, natomiast wykrzyknik oznacza negację warunku.

Niestety dla liczby zero podanej do konwersji nie zostanie wypisany wynik w postaci zera.

Kod: Zaznacz cały

void dec2bin(unsigned int liczba) {
   if (!liczba) return; // Jeśli liczba == 0 zakończ działanie funkcji
   dec2bin(liczba/2);  // wywołaj rekurencyjnie funkcję z liczbą dwa razy mniejszą czyli przesuniętą o jeden bit w prawo
   cout<<liczba%2; // wypisz ostatnią cyfrę binarną liczby czyli (liczba & 1)
}
Ogólnie w języku C/C++ można wprost wpisać/wypisać kolejne bity liczby i po konwersji.
ODPOWIEDZ