Převod mezi soutavami – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Převod mezi soutavami – Pascal – Fórum – Programujte.comPřevod mezi soutavami – Pascal – Fórum – Programujte.com

 

lotrman
~ Anonymní uživatel
3 příspěvky
7. 10. 2008   #1
-
0
-

Ahoj, chtěl bych se zeptat, mohl by mi někdo prosím poradit s programem, který převádí čísla z obecné na desítkovou soustavu a naopak? Nejde mi o celý kód, spíše jenom o zápis samotného převodu (jelikož moc netuším co to je obecná soustava) používat můžu jenom příkazy DIV a MOD, pak WHILE, DO atd.
Případně díky moc za pomoc.

Nahlásit jako SPAM
IP: 147.251.53.–
KIIV
~ Moderátor
+43
God of flame
7. 10. 2008   #2
-
0
-

precti si nejdriv neco o ciselnejch soustavach a zpusobech zapisu cisel v nich

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Krychlik
~ Anonymní uživatel
195 příspěvků
7. 10. 2008   #3
-
0
-

To lotrman :
Urcite vis jak funguje 10kova- 5641 je 5*10E3+6*10E2+4*10E1+1*10E0 a podobne funguje i obecna- odzadu se zvetsuji mocniny obecneho cisla a ty se nasobi hodnotou v danem miste. tzn 421 v 5kove je 4*5E3+2*5E2+1*5E0. Tak pri prevodu z n do desitkove staci jit odzadu a pokazde znak vynasobit n(to je zakladni cislo te soustavy, prvni bude 1 protoze nE0 je 1), n vynasobit n (posunujes se na dalsi mocninu), pricist si to k vyslednemu cislu a toto delat tolikrat kolik ma vstup znaku(ve strungu je na 0 miste pocet znaku).tak dostanes cislo v 10kove.
Prevod z 10kove do n je mnohem slozitejsi na pochopeni- musis jit odzadu a sbirat zbytky po deleni(=MOD) nkem, ty pridavat na konec vystupu(ten ted musi byt string), a vstup delit nkem (toto je docela slozite na pochopeni) dokud neni vstup 0.
Postup co sem napsal funguje jenom pro obecne soustavy do 9, pro vetsi si musis udelat array znaku (protoze 5*D nejde) a s tema pocitat.
Tady je cast kodu prevodu z 10 do n, hlavne cast mezi repat a until. Nesnaz se to jenom skopirovat, protoze by ti to stejne neslo, je to psane v delphi,ale pro pochopeni zakladu to staci.



{doceho, x a vstup jsou celociselne, vystup1 je string}
doceho:=StrToInt(Edit3.Text);
vstup:=StrToInt(Edit1.Text);
vystup1:='';
repeat
x:=vstup mod doceho;
vystup1:=Inttostr(x)+vystup1;
vstup:=vstup div doceho;
until (vstup=0);
Edit2.Text:=vystup1;

Nahlásit jako SPAM
IP: 80.251.250.–
KIIV
~ Moderátor
+43
God of flame
7. 10. 2008   #4
-
0
-

krychlik obavam se ze to asi z takoveho popisu nepochopi :)

dulezity casti sou tam: jsou to pozicni soustavy - kazda pozice v cisle ma svoji urcitou vahu... v desitkove jsou pred desetinou carkou: jednotky, desitky, stovky......... tato vaha pozice se pak nasobi cislici ...
a tak dale....

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
lotrman
~ Anonymní uživatel
3 příspěvky
7. 10. 2008   #5
-
0
-

Ok takže např. číslo 123 bude v desítkové: 1x100 + 2x10 + 3x1 ? A ve dvojkove bude

123:2=61 ---- 1
61:2=30 ----- 1
30:2=15 ----- 0 ----- \
15:2=7 ------ 1 ----- / 110111 ?
7:2 = 3 ------ 1
3:2 = 1 ------ 1

S tím, že když se budu chtět dostat na tu desítkovou tak dám (123 mod 2 * 100) - jak to udělat, aby program rozpoznal kolik má to číslo prvků? Když na dvojkovou tak dám (123 div 2 ..... a zbytek po tom děleni zapišu jak?)

Doufám že nejsem uplně vedle.

Nahlásit jako SPAM
IP: 90.177.57.–
KIIV
~ Moderátor
+43
God of flame
7. 10. 2008   #6
-
0
-

si precti popis funkci ktery muzes pouzivat

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
lotrman
~ Anonymní uživatel
3 příspěvky
7. 10. 2008   #7
-
0
-

OK, jestli ještě můžu, je rozdíl mezi 123 a 1x100 + 2x10 + 3x1 ? Myšleno jako jestli je možno uvádět ten tvar 123 jako v desítkové.

Nahlásit jako SPAM
IP: 90.177.57.–
Mircosoft+1
Věrný člen
7. 10. 2008   #8
-
0
-

Zbytek po dělení získáš operátorem mod. "Zbytek po vydělení čísla A číslem B" se zapíše jako "A mod B".

Ten převod na dvojkovou soustavu máš skoro dobře, jenom zrcadlově obrácený.

Příklad se čtyřkou:
4 div 2 = 2, 4 mod 2 = 0 (4/2=2 a zbytek 0).
2 div 2 = 1, 2 mod 2 = 0
1 div 2 = 0, 1 mod 2 = 1
Výsledek je 100 dvojkově.

Převod čísla do obecné soustavy vypadá takhle:

* výsledek:=prázdný řetězec
* cyklus (opakuj tak dlouho, dokud číslo není 0):
- cifra:=číslo mod základ
- cifru zleva připiš k výsledku
- číslo:=číslo div základ

A to je celé.


Obráceně:
Postupuj zprava, tedy od nejnižších cifer. Algoritmus by mohl vypadat nějak takhle:

* výsledek:=0
* součinitel:=1
* cyklus (opakuj tak dlouho, dokud vstupní řetězec není prázdný):
- ze vstupního řetězce přečti znak nejvíc vpravo
- ten znak z něj umaž
- zjisti si, jakou ten znak má číselnou hodnotu (např. pro šestnáctkovou soustavu 9 = 9, A = 10 atd.)
- k výsledku přičti součin součinitele a hodnoty znaku
- součinitel vynásob základem soustavy

Toť vše.

Nahlásit jako SPAM
IP: 89.176.249.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Krychlik
~ Anonymní uživatel
195 příspěvků
8. 10. 2008   #9
-
0
-

Omlouvam se za mirnou zmatecnost prvniho vysvetleni.

To KIIV : Ano, cislo 123 v desitkove je skutecne 123, proto do desitkove nemusis z desitkove prevadet. A jak poznas kolikrat pri prevodu z obecne do 10- bud jak napsal Mircosoft umazavat, nebo jeste jednodusej- kdyz je vstup string tak vstup[0] je pocet znaku- to si uloz do promene a pak cyklus s "for...... downto 1" budes nacitat odkonce az po 1 coz je prvni znak vstupu.

Nahlásit jako SPAM
IP: 80.251.250.–
KIIV
~ Moderátor
+43
God of flame
8. 10. 2008   #10
-
0
-

To Krychlik : no ja vetsinou delal v C retezec o nejakej vhodne delce... na posledni pozici sem hodil 0 aby me to poznalo konec a pak sem odzadu zapisoval znaky pomoci ukazatele...
ale da se to udelat i jak si rikal... do retezce normalne a vypsat si ho po znacich pospatku.. u pascalu je u string ta delka pekne ulozena :D

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Norton
~ Anonymní uživatel
3 příspěvky
8. 10. 2008   #11
-
0
-

To lotrman : Hehe,že by ukol do Uvodu do programovani? Taky se s tim trochu peru.A taky nevim jak pomoci prikazu,ktere zname naprogramovat ten prevod z Nkove soustavy do desitkove. :-(

Nahlásit jako SPAM
IP: 89.102.212.–
KIIV
~ Moderátor
+43
God of flame
8. 10. 2008   #12
-
0
-

norton neni nic jednodussiho nez prochazet ten retezec

  hodnota = 0;

zaklad = 2;

v cyklu:
hznak = znak - '0'; // ale bude fungovat jen do 10tkove soustavy...
//pro vyssi je potreba osefovat i pismena
hodnota = hodnota * zaklad + hznak;

jen je to v C...




jen takovej test: retezec '11010'
1. znak = '1' hznak = 1 hodnota = 0*2 + 1 => 1
2. znak = '1' hznak = 1 hodnota = 1*2 + 1 => 3
3. znak = '0' hznak = 0 hodnota = 3*2 + 0 => 6
4. znak = '1' hznak = 1 hodnota = 6*2 + 1 => 13
5. znak = '0' hznak = 0 hodnota = 13*2 + 0 => 26

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
tom*p0
Stálý člen
8. 10. 2008   #13
-
0
-

Pro převod z desítkové do libovolné soustavy:
A je původní číslo v desítkové soustavě, B je číslo v soustavě SOUSTAVA

načti A

B := 0

dokud A > 0 opakuj {
na začátek čísla B přidej číslici s hodnotou (A mod SOUSTAVA)
A := A div SOUSTAVA
}


Pro převod z libovolné do desítkové soustavy:
A je číslo v soustavě SOUSTAVA, B je výsledek v desítkové soustavě

načti A

B := 0

opakuj pro I := 1 do I = počet číslic A {
B := B + (hodnota číslice z A na I-té pozici zprava) * SOUSTAVA ^ (I - 1)
}


V kódu nejsou přímo příkazy, ale lze je už snadno doplnit, záleží na programovacím jazyku a také na tom, jak jsou uložena čísla v jiných soustavách (seznam, pole, řetězec, textový soubor...)

Podobně je možné převést číslo z libovolné soustavy do libovolné, pokud si jako mezisoustavu zvolíte desítkovou.

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
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, 2 hosté

Moderátoři diskuze

 

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