Stránka 1 z 1

c# počítanie mocnín

Napsal: 29 led 2014 19:23
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();

Re: c# počítanie mocnín

Napsal: 29 led 2014 19:38
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.

Re: c# počítanie mocnín

Napsal: 29 led 2014 20:27
od tomas147
rozumiem tomu prečo tam bude o jedno násobenie menej ale nerozumiem o akú kontrolu ide, objasníš mi to? vďaka

Re: c# počítanie mocnín

Napsal: 29 led 2014 20:35
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:

Re: c# počítanie mocnín

Napsal: 29 led 2014 20:51
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.

Re: c# počítanie mocnín

Napsal: 29 led 2014 21:56
od CZechBoY
Nahoď tam UInt64 a ne**r se s tim :lol:

Re: c# počítanie mocnín

Napsal: 29 led 2014 22:48
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