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

tomas147
nováček
Příspěvky: 21
Registrován: listopad 13
Pohlaví: Muž
Stav:
Offline

c# počítanie mocnín

Příspěvekod tomas147 » 29 led 2014 19:23

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();

Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: c# počítanie mocnín

Příspěvekod faraon » 29 led 2014 19:38

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: listopad 13
Pohlaví: Muž
Stav:
Offline

Re: c# počítanie mocnín

Příspěvekod tomas147 » 29 led 2014 20:27

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ů
Level 4.5
Level 4.5
Příspěvky: 1971
Registrován: červen 09
Bydliště: Královehradecký kraj
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: c# počítanie mocnín

Příspěvekod domitea » 29 led 2014 20:35

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: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: c# počítanie mocnín

Příspěvekod faraon » 29 led 2014 20:51

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: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: c# počítanie mocnín

Příspěvekod CZechBoY » 29 led 2014 21:56

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: listopad 13
Pohlaví: Muž
Stav:
Offline

Re: c# počítanie mocnín

Příspěvekod tomas147 » 29 led 2014 22:48

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


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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host