Reciproká hodnota z 13-místného čísla v BCD kódu – Funkcionální programování – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Reciproká hodnota z 13-místného čísla v BCD kódu – Funkcionální programování – Fórum – Programujte.comReciproká hodnota z 13-místného čísla v BCD kódu – Funkcionální programování – Fórum – Programujte.com

 

remmidemmi0
Věrný člen
1. 4. 2015   #1
-
0
-

Potřebuji vymyslet algoritmus, který vypočte reciprokou hodnotu z 13- místného čísla, kde jednotlivé číslice jsou vyjádřeny v BCD kódu.

Výsledek může být buďto v BCD kódu nebo v desítkovém kódu. Binární kód v podstatě nepřipadá do úvahy, vzhledem k velikosti čísla (45 bitů).

Algoritmus musí být použitelný k následnému naprogramování do 8-bitového mikropočítače.

Má někdo zájem? Za vyřešení odměna.

Nahlásit jako SPAM
IP: 109.81.210.–
peter
~ Anonymní uživatel
4014 příspěvků
1. 4. 2015   #2
-
0
-

Neni mi jasne zadani.

Podle google je recirpoky - prevraceny.
y = 1 / x
y = - x
y = log x (k 10 na y)
y = arc sin x (k sin x)

Podle wiki zas uvadeji jen moznost 1/x. Ale vysvetluji to jako specialni pripad pro inverzi prvek.
"V abstraktní algebře je převrácená hodnota označována jako inverzní prvek vzhledem k násobení, jedná se o speciální případ inverzního prvku."
Mozna by bylo dobre tedy zacit rovnici... y = 1 / x. Ta je jasna snad kazdemu nez ceske ne moc zdarile ekvivalenty pro anglictinu.
http://cs.wikipedia.org/…3%A1_hodnota
http://cs.wikipedia.org/…%C3%AD_prvek

BCD kod ma take ruznou podobu. Predpokladejme sloupec 1 a 2
http://sk.wikipedia.org/…BCD_k%C3%B3d
Coz by mohlo delat problem prave pro binarni vypocet.
Tady by ale reciproky/inverzi take mohlo znamenat y = 10 - x nebo y = 16 - x
"Vzhledem k velikosti čísla (45 bitů)."
BCD kod ma ale cisla 0-9, 4 bity, tudiz by tve cislo melo mit delku v nasobku 4 bitu, 44 nebo 48. Nebo to je dekadicke cislo zapsane na 45 bitu prevadene na BCD?

A / B - to se pocita jako odecitani, ne?
'1' / '7654321'
B == '0' - ano? pak vysledek je nespocitatelny; ne? pak...
B == '1' - ano? pak vysledek je 1, ne pak
'1' + '0' * pocet cifer, cili '1' + '0000000' = '10000000' (B2)
C= '000000000000000';
i = 0;
B3 = B2 - A
B3>0 ano C[i]+=1 ne pak...
B3==0 ano konec, ne B3 = B2 + '0'; ++i;
Potrebujes i postup na odcitani cisel po jednotlivych cifrach?

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:5159:7f...–
peter
~ Anonymní uživatel
4014 příspěvků
1. 4. 2015   #3
-
0
-

Mozna by bylo dobre uvest priklad.
Rekneme, ze 45 bitu je cislo bcd cili na 48 bitu, coz je 48/4 = 12 cifer, cislo treba
987654321098
Jaky ma byt vysledek toho, co povazujes za reciproky?
funkceReciproky (987654321098) = y; y = ?

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:5159:7f...–
remmidemmi0
Věrný člen
2. 4. 2015   #4
-
0
-

Reciproký je Y=1/X.

BCD čísla:

0        0000

1        0001

2        0010

3        0011

4        0100

5        0101

6        0110

7        0111

8        1000

9        1001

Těchto BCD čísel je celkem třináct (13) a reprezentují 13-ti místné číslo v desítkové soustavě. Například:

0001 0010 0011 0100 0101 0110 0111 1000 1001 0000 0001 0010 0011

čili:

1234567890123

A od takovéhoto čísla je potřeba udělat reciprokou funkci, tedy funkci 1/X.

Nahlásit jako SPAM
IP: 109.81.210.–
remmidemmi0
Věrný člen
2. 4. 2015   #5
-
0
-

#3 peter
v tebou danem příkladu bude reciproká hodnota 1/987654321098  to jest 1.0125 E-10

Nahlásit jako SPAM
IP: 109.81.210.–
2. 4. 2015   #6
-
0
-

Píšeš 45 bitů. Znamená to vč. záporných čísel? S ohledem na rozsah výsledku se float point matematice nevyhneš. Proto bych vstup konvertoval na double a provedl double dělení 1/x.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:4431:8d...–
remmidemmi0
Věrný člen
2. 4. 2015   #7
-
0
-

čísla jsou jen kladná a celá v rozsahu <1 , 1 999 999 999 999>..

Tak samozřejmě, pokud se vymyslí algoritmus na převod takovéhoto čísla do binární hodnoty a následně výpočet 1/X z binární hodnoty a následně převod zpět do BCD, pak je to také řešení.

Otázka je, jaký bude nutno požít mikropočítač a kompilátor pro naprogramování ....

Nahlásit jako SPAM
IP: 109.81.210.–
3. 4. 2015   #8
-
0
-

Asi bych použil nějaký AVR (ATMEGA...), vyšší taktování a jako IDE Atmel Studio. Můžeš to pak dělat v C nebo C++. C++ je trochu osekané.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:9c9c:3b...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý