Převody mezi číselnými soustavami - vlastni implemetace – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Převody mezi číselnými soustavami - vlastni implemetace – C / C++ – Fórum – Programujte.comPřevody mezi číselnými soustavami - vlastni implemetace – C / C++ – Fórum – Programujte.com

 

cp.Hook0
Newbie
28. 9. 2008   #1
-
0
-

řeším následující problém.. Dejme tomu že chci převést číslo z desítkové soustavy do šestnáctkové, ale nechci použít klasicky výpis %x, jde to udělat i nějak jinak, jde nějak udat to, že pokud budu mít výsledek 10, tak se mi vypíše Ačko?? Chci se dostat k tomu, že si nakonec vytvořím vlastní číslenou soustavu.. diky za rady..

Nahlásit jako SPAM
IP: 213.211.43.–
KIIV
~ Moderátor
+43
God of flame
28. 9. 2008   #2
-
0
-

muzes si udelat pole znaku.. stejne se ti bude hodit..

char prevod[] = "0123456789ABCDEFGH"; //.....

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Bald3rr0
Super člen
28. 9. 2008   #3
-
0
-

To cp.Hook : Asi před půl rokem jsem si psal program na převod mezi soustavami (Dec, Bin, Hex). Dělal jsem to tak, jako kdybych to "počítal" ručně. Třeba při převodu z Dekadické do Hexa Jsem dělil (celočísleně) 16^váhu. A výsledek poté zapsal (10 - 15 bylo nahrazeno A - F)... Pokud nevíš jak na to, zde je to srozumitelně vysvětleno http://programujte.com/index.php?akce=clanek&cl=2007102802-ciselne-soustavy

Nahlásit jako SPAM
IP: 82.100.0.–
cp.Hook0
Newbie
28. 9. 2008   #4
-
0
-

To Bald3rr : jj jasne ty prevody chapu, ale jde mi o to, jak mam napsat to, aby mi program pri vysledku napr. 11 vypsla znak B.. nebo naopak pokud zadam znak B, aby pocital s hodnotou 11...

Nahlásit jako SPAM
IP: 213.211.43.–
Bald3rr0
Super člen
28. 9. 2008   #5
-
0
-

To cp.Hook : Já to řešil takto:

switch (y) {

case 10:
cout << "A";
break;
case 11:
cout << "B";
break;
...
case 15:
cout << "F";
break;
default:
cout << y;
break;
}

Nahlásit jako SPAM
IP: 82.100.0.–
KIIV
~ Moderátor
+43
God of flame
28. 9. 2008   #6
-
0
-

To Bald3rr : uf :D tak to radsi jak sem psal ja tim polem :o)

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
cp.Hook0
Newbie
28. 9. 2008   #7
-
0
-

To KIIV : no ja to nejak porad nechapu... dam sem presne priklad ze vstupu (pomoci getchar) nactu znak A... z toho chci aby mi program pocital s hodnotou 10, ke ktere pak napr prictu cislo 5, tedy budu mit vysledek 15 a chci aby se mi na vystup (putchar) vytisklo F... stim switchem by to slo, ale pokud chci mit soustavu, kde je vetsi mnozstvi clenu, tak me to prijde hodne neprehledne, existuje nejake elegantnejsi reseni, popripade jak to myslis stim polem, nejak mi to furt nedochazi.. zkus mi to ukazat na tom mem prikladu, dik moc....

Nahlásit jako SPAM
IP: 213.211.43.–
Bald3rr0
Super člen
28. 9. 2008   #8
-
0
-

To cp.Hook : KIIV to myslel tak, že i. prvek reprezentuje číslo i

char prevod[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

i = 10;
cout << prevod[i]; // vypíše A

Aspoň tak jsem to tedy pochopil já :)

Nahlásit jako SPAM
IP: 82.100.0.–
KIIV
~ Moderátor
+43
God of flame
28. 9. 2008   #9
-
0
-



char prevod[] = "0123456789ABCDEFGH"; //.....
char out[200]; // vystupni buffer.. pri postupnem deleni nam vychazi cislo odzadu takze ho budem zapisovat do retezce
// tez odzadu
int cislo = 12424; // prevadene cislo (predpokladejme desitkove)
int zaklad = 16; // zaklad soustavy do ktere budeme prevadet
char * pos = out+199; // nahodime ukazatel na konec retezce

// EDIT: sem tam misto ukoncujiciho znaku \0 hodil ftipne \n :DD
*pos = '\0'; // na konec retezce taky hodime ukoncujici znak.. nechceme prece vypisovat pamet za nim

while ( cislo > 0 ) {
pos--; // posuneme se o jednu dopredu od konce retezce
*pos = prevod[ cislo % zaklad ]; // zbytek po deleni prelozime ... prevod[10] == 'A' atp.
cislo /= zaklad; // taky nechceme nekonecnou smycku... nedelalo by to dobre ani pameti pred promennou pos :D
}

printf("%s", pos);

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
cp.Hook0
Newbie
28. 9. 2008   #10
-
0
-

To Bald3rr : jj super, nejak tak jsem to myslel, ale to mi stale resi jen polovinu problemu.. tedy vysledne cislo mi to prevede na pozadovany znak, ale jak docilim toho ze kdyz zadam napr znak A, tak budu pracovat s hodnotou 10.. nevim mozna to z toho nejak vypliva, ale ja jsem nejaky natvrdly...btw. 2KIIV: v tom kodu jsem se nejak ztratil...

Nahlásit jako SPAM
IP: 213.211.43.–
KIIV
~ Moderátor
+43
God of flame
28. 9. 2008   #11
-
0
-

To cp.Hook : co tam konkretne nechapes?

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
cp.Hook0
Newbie
28. 9. 2008   #12
-
0
-

To KIIV : no nejak s temi ukazateli, ktere davas na konec retezce atd.. taky prevadis tim kodem pouze cislo, jestli jsem to dobre pochopil...ale stejnak nevim jestli to ted momentalne vyresi muj problem, ktery uz vspociva jen vtom, abych konkretnimu znaku po nacteni ze vstupu udelil konkretni ciselnou hodnotu... pokud mozno co nejelegantnejsim zpusobem.. taky me napadlo nejak spolupracovat s ASCII tabulkou, ale nevim jestli je to prave orechove...

Nahlásit jako SPAM
IP: 213.211.43.–
KIIV
~ Moderátor
+43
God of flame
28. 9. 2008   #13
-
0
-

no tady to je z desitkovy do libovolny ...

pokud chces obracene tak budes muset udelat tabulku nejak takto:

unsigned char prevod[256] = {0};
prevod['0'] = 0;
prevod['1'] = 1;
...
prevod['F'] = 15;
...

pak jen blabla = prevod[(unsigned char) getchar()] ;

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
cp.Hook0
Newbie
28. 9. 2008   #14
-
0
-

To KIIV : jj dik moc... jen jeste jeden dotaz, neexistuje nejaky jiny zpusob nez ten, ze budu muset kazdemu znaku konkretne zapsat hodnotu? asi ne co.....

Nahlásit jako SPAM
IP: 213.211.43.–
KIIV
~ Moderátor
+43
God of flame
28. 9. 2008   #15
-
0
-

no leda jeste

if ( x < 10 ) {
out = x + '0';
} else {
out = x + 'A';
}


a naopak neco jako:
if ( x <= '9' ) {
out = x-'0';
} else {
out = x-'A'+10;
}

ale chce to poradne osetrit jeste ten vstup

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
cp.Hook0
Newbie
28. 9. 2008   #16
-
0
-

To KIIV : no... me napaslo jeste jedno reseni, jak uz jsem tu nekde psal, pomoci ASCII tabulky... tedy reseni problemu znaku zadat urcitou cislenou hodnotu.. uvazujme ze na vstup budou povoleny jen velke znaky a cisla... takze napr. A je v ASCII tabulce cislo 65 (dekadicky) a ja chci aby cislo A melo hodnotu 10... takze bych napsal neco takoveho...



int znak;
znak = getchar();
znak = znak - 55;

a tim bych docili toho ze promenna znak bude mit hodnotu 10, se kterou pak muzu dal pracovat..nebo je to blbost?? jelikoz jsem v C zatim amater, tak je vice nez pravdepodobne ze tohle reseni je kravina:)

Nahlásit jako SPAM
IP: 213.211.43.–
KIIV
~ Moderátor
+43
God of flame
28. 9. 2008   #17
-
0
-

To cp.Hook : a co myslis ze sem v predchozim postu asi delal?
'A' je ascii hodnota znaku A

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
cp.Hook0
Newbie
28. 9. 2008   #18
-
0
-

To KIIV : aha no jasne, jsem vul, sorry:D...ale diky moc za rady, snad uz to nejak dam do kupy, zkusim to pres tu ASCII, prijde mi to jako lepsi reseni....

Nahlásit jako SPAM
IP: 213.211.43.–
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, 110 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ý