c# počítanie mocnín

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Odpovědět
tomas147
nováček
Příspěvky: 21
Registrován: 19 lis 2013 15:06

c# počítanie mocnín

Příspěvek od tomas147 »

toto je kód z jednej stránky no nerozumiem niektorým veciam ktoré sa tam vykonali,
nejak nerozumiem tomu ako funguje tento cyklus, pretože keď sa natom pozriem tka že si do premenných dosadím čísla tak mi to príde nelogické tak prosím o vysvetleni:

int vysledek = a;
for (int i = 0; i < (n - 1); i++)
vysledek = vysledek * a;
tu sa premenná vysledek rovna premennej a
no o dva riadky nižšie sa ta istá premenna rovna sebe samej vynásobena inou premennou
vysledek = výsledek * a
keď si do toho hodím čísla napr,
5 = 5 * 2 tak mi to príde čudné,
ozrejmi mi to niekto prečo to tak je? dik

Kód: Vybrat vše

Console.WriteLine("Mocninátor");
Console.WriteLine("==========");
Console.WriteLine("Zadejte základ mocniny: ");
int a = int.Parse(Console.ReadLine());
Console.WriteLine("Zadejte exponent: ");
int n = int.Parse(Console.ReadLine());

int vysledek = a;
for (int i = 0; i < (n - 1); i++)
        vysledek = vysledek * a;

Console.WriteLine("Výsledek: {0}", vysledek);
Console.WriteLine("Děkuji za použití mocninátoru");
Console.ReadKey();
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7411
Registrován: 23 pro 2010 09:23

Re: c# počítanie mocnín

Příspěvek od faraon »

V proměnné a máš číslo které umocňuješ, v proměnné n na kolikátou.

Do proměnné vysledek si okopíruješ to a, potom ho n-1 krát vynásobíš tím a.

Já bych to napsal jinak, trochu přehledněji, ale udělá to totéž:

Kód: Vybrat vše

int vysledek = 1;
for (int i = 0; i < n); i++)
    vysledek = vysledek * a;
Je tam teda o jedno násobení víc, ale tohle zdržení mě bolí mnohem méně než to, že tam nemáš kontrolu překročení rozsahu typu.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)
tomas147
nováček
Příspěvky: 21
Registrován: 19 lis 2013 15:06

Re: c# počítanie mocnín

Příspěvek od tomas147 »

rozumiem tomu prečo tam bude o jedno násobenie menej ale nerozumiem o akú kontrolu ide, objasníš mi to? vďaka
Uživatelský avatar
domitea
Tvůrce článků
Příspěvky: 1971
Registrován: 24 čer 2009 19:46
Bydliště: Královehradecký kraj
Kontaktovat uživatele:

Re: c# počítanie mocnín

Příspěvek od domitea »

int je typ proměnné, která má jen 32 bitů na vyjádření čísla. Tím pádem tím vyjádříš jen číslo do nějakých 2 miliard (první bit je mínus a 2^31 je něco kolem 2 miliard) A u mocnění to snadno překročíš :wink:
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7411
Registrován: 23 pro 2010 09:23

Re: c# počítanie mocnín

Příspěvek od faraon »

Jde o to, že třeba 1010 už nevypočítáš, protože překročíš maximální možné číslo které se do int vejde:

101 = 10
102 = 100
103 = 1000
104 = 10000
105 = 100000
106 = 1000000
107 = 10000000
108 = 100000000
109 = 1000000000
1010 = 1410065408 !!!

Sám vidíš že ten výsledek je nesmysl. Především bys musel použít číselný typ s větším rozsahem, třeba 64bitový long long int, a pak je také potřeba buď před výpočtem nebo během něj hlídat co se s číslem děje.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)
Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: 20 srp 2008 14:02
Bydliště: Brno
Kontaktovat uživatele:

Re: c# počítanie mocnín

Příspěvek od CZechBoY »

Nahoď tam UInt64 a ne**r se s tim :lol:
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW
tomas147
nováček
Příspěvky: 21
Registrován: 19 lis 2013 15:06

Re: c# počítanie mocnín

Příspěvek od tomas147 »

ja si tie kódy viac menej skúšam a snažím chápať čo a ako funguje takže to nemusím zatiaľ mať také bezchybné. dik za rady
Odpovědět

Zpět na „Programování a tvorba webu“