Forum

dec2bcd c++

[+] Twoje konto

Subskrybuj kanał najnowszych wypowiedzi w tym temacie

Wątek zamknięty Forum > Porady > Programowanie > dec2bcd c++

Jak zamienić liczbę dziesietną na liczbę zapisaną w kodzie BCD
Idź do strony:12Następna »
Ocena: (Ocen: 1)
Wypowiedzi 1 - 25 z 34
 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 8 maja 2008, 22:42:47
« Opcje

Przeszukałem wszystkie możliwe stronki w necie, sam próbowałem napisać program, który po wpisaniu liczby dziesiętnej "przerabia" ją na liczbę w kodzie BCD, ale nie daję rady. Prosze o pomoc.

 Gość REKLAMA Kopiuj nick (*->*)
Wypowiedź dodana: 8 maja 2008, 22:42:48

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 8 maja 2008, 22:55:59
« Opcje

mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 8 maja 2008, 23:03:44
« Opcje

Tak, to widziałem, ale to jest Asembler, z ktorego ja niestety na razie nic nie pojmuje. Mnie chodziło o c++

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 8 maja 2008, 23:07:18 | Wypowiedź edytowana Ostatnio edytowana: 8 maja 2008, 23:12:51 po raz 1-wszy przez: Dżyszla
« Opcje

liczba modulo 10 na 4 młodsze bity
liczba div 10
liczba modulo 10 na 4 starsze bity
liczba div 10

i tak w kółko przesuwając się o jeden bajt w lewo w tablicy wynikowej za każdym takim cyklem aż do skończenia świata... znaczy się liczby, czyli kiedy wartość jej będzie 0.
div - dzielenie stałoprzecinkowe - w C jest to dzielenie (int)/(int)
mod - reszta z dzielenia - w C jest to operator %

*** Dodano o 23:09:28: *** (Autoscalanie)

Aha - cały czas mam na myśli spakowany BCD-8421


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 8 maja 2008, 23:09:48 | Wypowiedź edytowana Ostatnio edytowana: 8 maja 2008, 23:13:30 po raz 1-wszy przez: Dżyszla
« Opcje

Ja zrobiłem coś takiego:

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

int main()
{

int Num,N;

int R=0,I=0,J,K,L=1;
int B[100];

printf("Liczba DEC : ");

scanf("%d",&Num);

N=Num;

while(Num>0)

{

R=Num%2;

B[I]=R;

Num=Num/2;

I++;

}

if(I<4)

{

J=I;

for(K=1;K<=4-J;K++)

{

B[I]=0;

I++;
}
}

if(I>4)

{

for(K=0;K<I;K++)

{ if(L==4)

L=1;
else

L++;
}
L--;
if(L<4)
{ for(K=1;K<=4-L;K++)

{
B[I]=0;

I++;

}
}

}

for(L=1,K=I-1;K>=0;K--,L++)

{ printf("%d",B[K]);

if(L==4)

{ printf(" ");

L=0;
}

}

system("PAUSE");//

}

Moderowane przez Dżyszla :

Stosuj znacznik [ code ] do zapisu kodu

Ale po podaniu liczby dziesiętnej, wychodzi jakaś dziwna liczba BCD.


DLA przedziału ne<0,9>, gdy neN, działa poprawnie, ale przy wpisaniu np 122 wychodzą głupoty.

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 8 maja 2008, 23:16:17
« Opcje

ale czemu binarnie rozbierasz liczbę? to jest na prawdę prosta pętla, która przy kodzie niespakowanym jest jeszcze prostsza w zapisie. Ponadto generalnie wystarczy tablica char czyli jednobajtowych elementów.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 8 maja 2008, 23:19:16 | Wypowiedź edytowana Ostatnio edytowana: 8 maja 2008, 23:23:40 po raz 1-wszy przez: Dżyszla
« Opcje

Znalazłem cos takiego, ale to nie działa ;/

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

int main()
{

unsigned char Dec2bcd(unsigned char dec)
{
unsigned char bcd;
bcd=(dec/10)<<4;
bcd+=dec%10;
return bcd;
}

unsigned char Bcd2dec(unsigned char bcd)
{
unsigned char dec;
dec=10*(bcd>>4);
dec+=bcd&0x0F;
return dec;
}
system("PAUSE");

}

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 8 maja 2008, 23:22:33 | Wypowiedź edytowana Ostatnio edytowana: 8 maja 2008, 23:24:30 po raz 1-wszy przez: Dżyszla
« Opcje

Dziwny ten zapis funkcji w funkcji, choć generalnie funkcje są poprawne, ale operują wyłącznie na liczbach z zakresu 0-99 i w formacie spakowanym BCD. Twój kod dąży raczej do niespakowanego BCD.
PS.
[code] i [/code]


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 8 maja 2008, 23:24:06 | Wypowiedź edytowana Ostatnio edytowana: 8 maja 2008, 23:25:26 po raz 1-wszy przez: fenomenolog
« Opcje

Bedę się jutro jeszcze nad tym głowił :-) do czwartku jest jeszcze sporo czasu ;D

*** Dodano o 23:25:26: *** (Autoscalanie)

Lub tak:

unsigned char Dec2bcd(unsigned char dec)
{
return (dec/10)<<4+dec%10;
}

unsigned char Bcd2dec(unsigned char bcd)
{
return 10*(bcd>>4)+bcd&0x0F;
}

Ale to też nie działa ;/

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 8 maja 2008, 23:26:19 | Wypowiedź edytowana Ostatnio edytowana: 8 maja 2008, 23:27:15 po raz 1-wszy przez: Dżyszla
« Opcje

Po prostu w pętli zamiast rozbierać liczbę binarnie - rozbieraj ją podstawą 10. Cała reszta kombinacji będzie zbędna.
Określ dokładnie jaki kod wynikowy chcesz uzyskać - BCD to nie tylko 8421 w wersji spakowanej bądź niespakowanej ale jeszcze m.in. BCD 2421 bądź Excess-3.

*** Dodano o 23:27:15: *** (Autoscalanie)

Ten kod działa, ale tylko na liczbach 0-99 ;-)


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 10 maja 2008, 23:00:53
« Opcje

A u mnie ten kod nie działa. Wywala błąd WinMain@16.

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 10 maja 2008, 23:28:31
« Opcje

w ktorym miejscu i jaki kompilator?


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 10 maja 2008, 23:33:18
« Opcje

Dev-C++ 4.9.9.2

Wychodzi komunikat: [Linker error] undefined reference to 'WinMain@16'
Id returned 1 exit status

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 10 maja 2008, 23:50:28
« Opcje

no a funkcję main masz?


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 00:01:57
« Opcje

tak, jest i wygląda tak:

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

int main();
unsigned char Dec2bcd(unsigned char dec)
{
return (dec/10)<<4+dec%10;
}
unsigned char Bcd2dec(unsigned char bcd)
{
return 10*(bcd>>4)+bcd&0x0F;
system("PAUSE");
}

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 08:10:53
« Opcje

Zapisałeś jedynie definicję a nie deklarację funkcji main.

Poza tym chyba nie pojmujesz, czym są funkcje, bo Twój kod absolutnie nic nie zrobi. Polecam poczytać trochę o funkcjach.

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

unsigned char Dec2bcd(unsigned char dec)
{
return ((dec/10)<<4)+dec%10;
}
unsigned char Bcd2dec(unsigned char bcd)
{
return (10*(bcd>>4))+(bcd&0x0F);
}

int main()
{
unsigned int liczba;
unsigned char bcd;

cout << "Podaj liczbę (0-99): ";
cin >> liczba;
bcd=Dec2bcd(liczba);
printf("Liczba w postaci BCD (w kodzie szestanstkowym): %x\n",bcd);
printf("Oraz znów na DEC: %d\n",Bcd2dec(bcd));
system("PAUSE");
}


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 10:45:05 | Wypowiedź edytowana Ostatnio edytowana: 11 maja 2008, 11:05:03 po raz 1-wszy przez: fenomenolog
« Opcje

Tylko, że Twój program podaje 3 takie same liczby.

*** Dodano o 11:05:03: *** (Autoscalanie)

Przerobiłem to tak:

#include <iostream>
#include <cstdlib>

using namespace std;
unsigned char Dec2bcd(unsigned char dec)
{
unsigned char bcd;
bcd=(dec/10)<<4;
bcd+=dec%10;
return bcd;
}
unsigned char Bcd2dec(unsigned char bcd)
{
unsigned char dec;
dec=10*(bcd>>4);
dec+=bcd&0x0F;
return dec;
}
int main()
{
unsigned int dec;
unsigned char bcd;

cout << "Podaj liczbę (0-99): ";
cin >> dec;
bcd=Dec2bcd(dec);
printf("Liczba w postaci BCD (w kodzie szestanstkowym): %x\n",dec);
printf("Oraz znów na DEC: %d\n",Bcd2dec(bcd));
system("PAUSE");
}

Tylko to zamienia dziesiątkowy na szesnastkowy, a miało na BCD ;/

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 11:29:08 | Wypowiedź edytowana Ostatnio edytowana: 11 maja 2008, 11:33:45 po raz 1-wszy przez: Dżyszla
« Opcje

nie zmienia na szesnastkowy. W szesnastkowym pokazuje wyłącznie liczbę zapisaną w BCD. A to, że wtedy wyglądaidentycznie, jak dziesiętna to inna sprawa - taka już specyfika upakowanego BCD. Jednakże 10d to co innego niż 10h !!

*** Dodano o 11:33:45: *** (Autoscalanie)

Zapisałeś z błędem pierwszy printf - miał wyświetlać BCD a nie DEC.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 11:41:48 | Wypowiedź edytowana Ostatnio edytowana: 11 maja 2008, 11:47:37 po raz 1-wszy przez: fenomenolog
« Opcje

Tylko, że w Twoim kodzie, jakiejbym liczby nie wpisał, to w BCD jest taka sama.

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 11:46:15 | Wypowiedź edytowana Ostatnio edytowana: 11 maja 2008, 11:46:31 po raz 1-wszy przez: Dżyszla
« Opcje

no w dec jest dziesiętna (czyli wpisywana przez użytkownika), a w bcd jest w bcd.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 11:48:39
« Opcje

A w BCD pokazuje taką samą jak w dziesiętnym, czyli tą wpisaną tez przez użytkownika.

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 11:51:48
« Opcje

To powiedz mi, jak wygląda cyfra np 25 w kodzie BCD? Nie programem, tylko wg Ciebie.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 11:54:59
« Opcje

dziesiętny = BCD
1 = 0001
2 = 0010


12 = 0001 0010

945 = 1001 0100 0101

25 = 0010 0101

AvatarAdministrator Dżyszla Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 11:58:06
« Opcje

no dobra, a teraz zapisz odpowiedniki nie bitowo, a szesnastkowo, czyli:
0001 0010 - ile to jest w hex?
0010 0101 - jak to wygląda w hex?
itd.


mgr inż. Dżyszla

Nie odpisuję na problemy zgłaszane na e-mail lub PW!

Także dzięki firmie Netlook.pl możesz za darmo korzystać z tej strony!

 Zarejestrowany, zwieszony fenomenolog Mężczyzna Kopiuj nick (0.0.0.*) |  
Wypowiedź dodana: 11 maja 2008, 12:02:14
« Opcje

Ok, zgadza się, to jest 12 w hex. Ale mnie chodziło o wyświetlenie najpierw, że 12 = 00010010

 
Idź do strony:12Następna »

[+] Pokaż/odśwież listę czytających i monitorujących ten wątek

Podobne tematy:
Tytuł wątkuDziałWypowiedziWyświetleńOcenaOstatnia wypowiedź

Wątek zamknięty - nie można już do niego dodawać nowych wypowiedzi

Subskrybuj kanał najnowszych wypowiedzi w tym temacie


Chcesz mieć też takie forum na swojej stronie? Napisz!

Strona istnieje od 25.01.2001
Ta strona używa plików Cookie
 
archive To tylko kopia strony wykonana przez robota internetowego! Aby wyświetlić aktualną zawartość przejdź do strony.
Ładowanie...

Optymalizowane dla przeglądarki Firefox
© Copyright 2001-2017 Dawid Najgiebauer. Wszelkie prawa zastrzeżone.
Ostatnia aktualizacja podstrony: 22.09.2014 12:12
Wszystkie czasy dla strefy czasowej: Europe/Warsaw