Program na prevod čísla z 16 do 10 - Herout cvičenie – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Program na prevod čísla z 16 do 10 - Herout cvičenie – C / C++ – Fórum – Programujte.comProgram na prevod čísla z 16 do 10 - Herout cvičenie – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Pig
~ Anonymní uživatel
27 příspěvků
14. 4. 2017   #1
-
0
-

Ahoj,zacal som "studovat" knihu Cčka od herouta a natrafil som na jeden príklad ,kde uzivatel zadá 2 znaky v rozsahu 0-9 / A-F ,z čoho dostaneme čislo v 16kovej sustave a treba ho previest do 10kovej, prišiel som s niecim takymto  

#include <stdio.h>


int main() {
	int a, b;

	a = getchar()  ;
	b = getchar() ;
	if (a == 'A') a = 10;
	else if (a == 'B') a = 11;
	else if (a == 'C') a = 12;
	else if (a == 'D') a = 13;
	else if (a == 'E') a = 14;
	else if (a == 'F') a = 15;
	else  a -= '0';

	if (b == 'b') b = 10;
	else if (b == 'B') b = 11;
	else if (b == 'C') b = 12;
	else if (b == 'D') b = 13;
	else if (b == 'E') b = 14;
	else if (b == 'F') b = 15;
	else  b -= '0';

	

	printf("%d", a * 16 + b);

	
	

	return 0;


}

Zaujímalo by ma nejaké zaujimavejsie riesenie,ak teda existuje,ale predpokladam ze hej , vďaka :)

Nahlásit jako SPAM
IP: 78.98.11.–
Reklama
Reklama
Pig
~ Anonymní uživatel
27 příspěvků
14. 4. 2017   #2
-
0
-

   

if (b == 'b') b = 10; 
Tu ma byt samozrejme: 
if (b == 'A') b = 10;
Nahlásit jako SPAM
IP: 78.98.11.–
KIIV
~ Moderátor
+42
God of flame
14. 4. 2017   #3
-
0
-

Moznosti je spousta. Prekladova tabulka, switch, Ceckovska magie...

Vsechno z toho je lepsi nez  if - else if

Tabulka akorat zabira zbytecne moc mista (coz bude vadit napriklad u jednocipu s par kilobajtama pameti, normalne to nikomu nevadi).

Swich dela skoky (obvykle podle nejake jump table).

C magie je zase pro zacatecniky hotove peklo a casto i pokrocily programator musi docela zapojit mozek, aby pochopil, co to sakra dela.

Jo samozrejme pak jeste existuje napriklad funkce  strtol, ktere je hodis retezec a on to prevede. Bud muzes zadat explicitne v jake soustave to je zadano, nebo kdyz zadas parametr soustavy jako 0, a pak tomu hodis retezec:  "0xFF", tak ho prevede jako HEX.

Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Bullet Force Mutilplayer
~ Anonymní uživatel
1 příspěvek
15. 4. 2017   #4
-
0
-
Nahlásit jako SPAM
IP: 123.16.139.–
hlucheucho+13
Posthunter
18. 4. 2017   #5
-
0
-

když se podíváš do ASCII tabulky, A až F jdou hezky po řadě za sebou. I čísla, která v hex vyjadřují jdou za sebou. A tak by se dalo vydedukovat, že stačí odečíst vhodnou konstantu podobně, jako se to dělá pro rozsah 0 až 9. Je dobré pamatovat i na zadání s malými písmeny. To vede ke třem podmínkám a třem konstantám. Dobře napsané podmínky ti současně vyhodnotí i chybné zadání.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Staon0
Návštěvník
18. 4. 2017   #6
-
0
-

Jak převést číslo ze vstupního stringu jsem obecněji (pro libovolný počet číslic, nejen 2) psal tady nedávno: http://programujte.com/forum/vlakno/31428-prevod-retezce-na-cislo-bez-pouziti-funkci-ktere-to-udelaji/#p212744 

Oproti algoritmu v linku vy potřebujete načítat cifry šestnáctkové soustavy. Kód pro tento účel může vypadat takto: 

int cifra;
if(znak >= '0' && znak <= '9') {
  cifra = znak - '0';
}
else if(znak >= 'A' && znak <= 'F') {
  cifra = 10 + znak - 'A';
}
else {
  /* -- chybny vstup!!!!!!! */
}

Je to vlastně to, co píše hluchéucho v předchozím komentáři. Daný kód bude ovšem fungovat pouze tam, kde kódování znaků A až F jde číselně hezky za sebou (např. ASCII). Osobně jsem se za svou praxi nesetkal s reálně používaným kódováním, které by tuhle podmínku nesplňovalo. Což samozřejmě neznamená, že neexistuje.

Nahlásit jako SPAM
IP: 94.142.234.–
hlucheucho+13
Posthunter
18. 4. 2017   #7
-
0
-

#6 Staon
hex číslo může být zadáno i malými písmeny a tak bych doplnil větev 

else if(znak >= 'a' && znak <= 'f') {
  cifra = 10 + znak - 'a';
}

a pak teprve vstup považoval za chybný.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
MilanL+1
Super člen
28. 4. 2017   #8
-
0
-

#7 hlucheucho
šlo by ušetřit podmínku s velkými písmeny jednoduchou operací "znak OR 0x20", která v praxi provede LowerCase, dokonce je i jedno zda hned na začátku nebo až po testování čísel, neboť číselné znaky neovlivní.

ML

Nahlásit jako SPAM
IP: 91.139.9.–
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, 56 hostů

Podobná vlákna

Převod z čísla do znaku — založil Jan Růžička

Prevod cisla na retazec — založil olgo

Převod písmen na čísla — založil Merlin

Moderátoři diskuze

 

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