

jazyk C - premena z desiatkovej sustavy na binarnu
zdravim mam problem s tymto jednoduchym binarnym kodom nenapise mi to nic vobec nic a neviem preco
matematicky to je spravne nie?? akorat neviem ci ked to nepodelim nevyde mi aj zvysok ze by som dal celociselnu premennu ale zas ci by to zistilo ten zvysok po deleni :D
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int desiatkova;
int dvojkova;
printf ("Zadaj prirodzene cislo v desiatkovej sustave: ");
scanf("%d",&desiatkova);
while (desiatkova<0)
{
if((desiatkova%2)==0)
{
printf("0");
}
if((desiatkova%2)==1)
{
printf("1");
}
desiatkova/2;
}
getchar();
return 0;
}
nechápu. To jako převádíš do dvojkové soustavy dělením dvěma? Spadl jsi z višně?
Příklad:
dekadicky: 4
4:2=1
2:2=1
přitom binárních 11 jsou 3 deka
správně 4 deka = binárně 100
Když už to chceš takto otrocky, tak se to počítá (pro hodnoty do 255):
je-li číslo větší 2^7, odečteš 128, zapíšeš 1 (jinak 0) a zbytek pošleš do dalšího kola
v dalším kole porovnáš s 2^6 (64) a případně opět odečteš (připíšeš při odečtení 1, jinak 0)
... a pokračuješ až po 2^0 (1).
Příklad:
číslo 4 deka:
(odpovídá 2^2)
00000100
edit: ono to jde realizovat dělením a celočícelným dělením, ale určitě ne takto.
Z višně nespadl, to je docela normální postup.
ahaa uz chapem :D idem to teda prerobit diky :D
Nic nepředělávej, až na ty dvě chyby jsi to měl dobře.
a jak ich opravim? :D sak ta podmienka sa splni az pokial nebudem delit ze vyde mensie ako 0 a to druhe preco nespravi nic??
Tak jinak, kolikrát myslíš, že se provede ten cyklus třeba pro číslo 7?
To druhé sice to číslo vydělí dvěma, ale výsledek už nikam neuloží.
pre cislo 7 3krat
Ne, proběhne 0x.
tak mam dat ze desiatkova=desiatkova/2<
nehádej, spočítej a proiteruj si to ručně.
edit: jinak to je dobře, ale ještě máš blbě ten cyklus, na to reagoval Wikan.
proč myslíš, že jsem ti uvedl ten otrocký příklad? Protože to postupné dělení ti v iteracích udělá ty mocniny dvou.
sak ale 255bitov staci na male cisla nie??
asi jsme se nepochopili (soudím tak i podle Wikana). Šlo o princip.
no jasne ja som slepy :D tam v tom while ma byt 1 a ne 0 :D to som vobec nepocital s takou chybou
Takze uz to mam takto to vyzera funkcne :) dakujem chalani za ochotu a rady
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
unsigned int desiatkova;
printf ("Zadaj prirodzene cislo v desiatkovej sustave: ");
scanf("%d",&desiatkova);
while (desiatkova>=1)
{
if((desiatkova%2)==0)
{
printf("0");
}
if((desiatkova%2)==1)
{
printf("1");
}
desiatkova=desiatkova/2;
}
printf (" - Toto je cislo v binarnej sustave.");
getchar();
return 0;
}
Kratší...
Na tohle použít rekurzi? No fuj.
Umí bežné kompilátory odhalit a optimalizovat takovéhle tragické použití rekurze?
V tomhle případě to nejspíš odhalí a "opraví", ale radši bych na to nespoléhal.
Preco tragicke? Vyhoda je hlavne v tom ze to tie cifry vypise v spravnom poradi. Na rozdiel od toho co robil dotazovatel. Neni to jedno! A s cykom to neni tak elegantne (s cyklom si musis testovat uvodne nuly a tie nezobrazovat apod). Rekurzia je idealna ptz defakto pouziva stack na uchovavanie tych predoslych cifier ked scanujes zprava. inac by si musel alokovat RAM.
A prekladac nic neopravuje ptz to ani nijak upravit ani opravit nejde bez zmeny funkcionality.
+1 :) akurat ti to nezobrazi 0 ak je num1=0. Spravnejsie (s vypisom 0 ak je 0) a aj kratsie by to asi mohlo byt napr. takto
alebo to same len univerzalnejsie vzhladom na zaklad sustavy
alebo
Tak tohle je ještě hezčí...
Ale musim povedat ze ked som to zadanie cital vcera tak ma rekurzia vobec nenapadla, aj ked toto je absolutne idealny priklad na vyhody rekurzie, asi uz starnem kua idem poziadat o dochodok :D Idealnejsie zadanie na rekurziu asi ani neexistuje :)
Já si to pamatoval ještě z výšky, kde jsme tenhle problém měli řešit rekurzí..
EDIT: Ten třeti example je fajn, ale HEX čísla to neumí...
No skoro dobre, akorat vystup je binarni cislo zapsane POZPATKU - napr. 4 ti to napise 001 misto 100
taky jsem se divil, ale pak jsem si řekl, že to "asi" nevadí.