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ątekKomputer w lato - jak zadbać o właściwe chłodzenie
Komentarze do porady Komputer w lato - jak zadbać o właściwe chłodzenie
Komentarze / Porady3328 17.08.2012 18:05:17
Wątekjak ocenicie to co piszePogaduchy271 2.11.2005 11:28:47
WątekJak odblokowac nokie 6300 ??Pogaduchy1559 13.04.2009 08:23:20
Wątekinstalacja openSUSE
Jak robić partycje?
Porady / Oprogramowanie, systemy operacyjne8123 20.02.2009 12:14:39
Wąteksieć lokalna
jak pogodzić z firewallem na komputerach
Porady / Oprogramowanie, systemy operacyjne6132 30.10.2008 18:27:12

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.
Korzystając z niej wyrażasz zgodę na przetwarzanie danych a zakresie podanym w Polityce Prywatności.
 
archive To tylko kopia strony wykonana przez robota internetowego! Aby wyświetlić aktualną zawartość przejdź do strony.

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