N-tá mocnina a odmocnina – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

N-tá mocnina a odmocnina – Pascal – Fórum – Programujte.comN-tá mocnina a odmocnina – Pascal – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
XyZZyX
~ Anonymní uživatel
6 příspěvků
23. 2. 2009   #1
-
0
-

Mám problém... Nevím, jak udělat n-tou mocninu a odmocninu. Poraďte prosím...

Nahlásit jako SPAM
IP: 213.195.202.–
Reklama
Reklama
crAzY^
~ Moderátor
+10
Grafoman
23. 2. 2009   #2
-
0
-

To XyZZyX :
no mocninu uděláš jednoduše cyklem kde každou hodnotu v každém průběhu cyklem vynásobíš. Pascal neumim tak alesppoň trochu teorie.
čili něco jako

for(int i = 1; i < mocnina; i++)

hodnota *= hodnota;

a odmocnina je
n-tá odmocnina z a je a^(1/n)

BTW: Pascal na to má určitě funkci alespoň na tu mocninu... něco jako POW(číslo, exponent)

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
crAzY^
~ Moderátor
+10
Grafoman
23. 2. 2009   #3
-
0
-
Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
XyZZyX
~ Anonymní uživatel
6 příspěvků
23. 2. 2009   #4
-
0
-

To crAzY^ :

Čím se dá v pascalu nahradit tento znak: "^"
Mě to totiž háže chybu...

Nahlásit jako SPAM
IP: 213.195.202.–
crAzY^
~ Moderátor
+10
Grafoman
23. 2. 2009   #5
-
0
-

To XyZZyX : to v pascalu nepoužiješ. domnívám se že ani jinde (mimo Excel :) ) značí to, že je to
a na (1/n)

čili budeš asi muset použít nějakou funkci

v tom odkaze co jsem ti poslal je funkce Power

Function Power(number,top:integer) : real;

begin
Power := Exp(number*Ln(1/top));
end;


asi takto by to podle mě mělo vypadat...

určitě na to najdeš jinou funkci ale tahle se asi taky dá použít

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
Ace McIntosh0
Super člen
23. 2. 2009   #6
-
0
-

mám takový pocit, že na to umocňování je v jednotce math funkce

power(zaklad, exponent);


takže na začátek programu stačí přidat jen

uses math;


a funkce power by měla jít vesele používat


Nahlásit jako SPAM
IP: 84.42.174.–
XyZZyX
~ Anonymní uživatel
6 příspěvků
23. 2. 2009   #7
-
0
-

To Ace McIntosh :
Problém je ale v tom, že já to mám celé v crt a když tam přidám math, tak to hází chybu :(

Nahlásit jako SPAM
IP: 213.195.202.–
XyZZyX
~ Anonymní uživatel
6 příspěvků
23. 2. 2009   #8
-
0
-

Ace McIntosh:

Díky, už to funguje, teď jen nějak vyřešit tu odmocninu... Poraďte pls :(

Nahlásit jako SPAM
IP: 213.195.202.–
crAzY^
~ Moderátor
+10
Grafoman
23. 2. 2009   #9
-
0
-

power(zaklad, exponent);


takžře místo exponentu tam dáš
1/mocnina

podle již zmíněného pravidla

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
XyZZyX
~ Anonymní uživatel
6 příspěvků
23. 2. 2009   #10
-
0
-

crAzY^ napsal:

power(zaklad, exponent);


takžře místo exponentu tam dáš
1/mocnina

podle již zmíněného pravidla



nejde mi 1/mocnina, protože to mám v integeru a když jsem dal 1 div mocnina, tak mi to vychází 1 :(

Nahlásit jako SPAM
IP: 213.195.202.–
crAzY^
~ Moderátor
+10
Grafoman
23. 2. 2009   #11
-
0
-

To XyZZyX : existuje v pascalu něco jako přetypování???

v C++ to udělám takto:

pow(27, 1.0/3.0); nebo pow(27, (float)1/(float)3) //vrati 3

pokud pouziju

pow(27, 1/3); //vrati asi 2.2 coz je spatne


Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
crAzY^
~ Moderátor
+10
Grafoman
23. 2. 2009   #12
-
0
-

protože při 1/3 dochází k celočíselnému dělení... čili výsledek bude celé číslo...

lepší je použít (float)1/3 - protože je alespoň jedno z čísel s desetinnou čárkou

Nahlásit jako SPAM
IP: 89.190.64.–
All you need is vision and time.
Mircosoft+1
Věrný člen
25. 2. 2009   #13
-
0
-

To crAzY^ : Přetypování v Pascalu existuje a píše se takhle: real(hodnota).

Řešení je celkem jednoduché - použít reálné vstupní parametry:

Function Power(number,top:real):real;

Begin
Power:=Exp(number*Ln(top));
End;


Protože se ale nedá logaritmovat záporné číslo, nemohli bychom takhle umocňovat na záporné exponenty. Také při nulovém exponentu by to skončilo chybou (logaritmus nuly je mínus nekonečno), ale my víme, že cokoli na nultou je 1. Takže to chce trochu si pohrát s podmínkami a nakonec může vyjít třeba tohle (počítá to a na n-tou):
function pow(a,n:real):real;

var i:longint;
vysledek:real;
Begin
if a=0 then pow:=0 {nula na cokoli je porad nula (dejme tomu, ze i neurcity vyraz nula na nultou)}
else if n=0 then pow:=1 {cokoli na nultou je 1}
else if frac(n)=0 then begin {obecna mocnina, ale s celym exponentem}
vysledek:=1;
for i:=1 to abs(trunc(n)) do vysledek:=vysledek*a;
if n<0 then vysledek:=1/vysledek; {protoze a^(-n) = 1/(a^n)}
pow:=vysledek;
end
else {uplne obecna mocnina s realnym exponentem}
if a<0 then pow:=0 {radsi vysledek 0 nez Invalid floating point operation pri zapornem zakladu logaritmu}
else pow:=exp(n*(ln(a))); {protoze ln(a^n)=n*ln(a) a exp(ln(x))=x}
End;

(zdroj: http://mircosoft.ic.cz/download/MATYKA.PAS)

Nahlásit jako SPAM
IP: 147.32.161.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
tom*p0
Stálý člen
1. 3. 2009   #14
-
0
-

Existuje i nějaké řešení pro a < 0?

EDIT: Pokud se nemýlím, tak je možné spočítat hodnotu pokud je n = 1/(celé liché číslo), potom lze dostat hodnotu jako -pow(-a, n).

Nahlásit jako SPAM
IP: 83.240.120.–
Don't waste your time, or time will waste you.
Honzc0
Stálý člen
2. 3. 2009   #15
-
0
-

To tom*p
Moc se nemýlíš. V podstatě správně, pouze se nejedná o celá lichá čísla, ale o přirozená lichá čísla.

Nahlásit jako SPAM
IP: 85.207.57.–
KIIV+42
God of flame
2. 3. 2009   #16
-
0
-

To Honzc : on myslel kdyz je lichy cely exponent tak je vysledek teto mocniny zaporny.. mozna i odmocniny...
pokud je exponent sudej (resp to odmocneni) tak zaporne cislo odmocnit nejde.. a co je mezi tema exponentama nevim :D sem do podrobnosti nesledoval

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Mircosoft+1
Věrný člen
2. 3. 2009   #17
-
0
-

Tohle: a^(-n) = 1/(a^n) platí obecně pro jakékoli hodnoty a a n.
Tohle: ntá odmocnina z a = a^(1/n) taky.
Tohle: (-a)^n = -(a^n) platí jenom pro celé liché n.
Tohle: (-a)^n = a^n platí jenom pro celé sudé n.
Pro umocňování záporného a na ne-celé n žádný algoritmus neexistuje, nebo o něm alespoň nevím (neumí to Excel ani žádné kalkulačky).

Nahlásit jako SPAM
IP: 147.32.161.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
tom*p0
Stálý člen
2. 3. 2009   #18
-
0
-

@Mircosoft: Díky, tu poslední větu jsem potřeboval slyšel, i když to není 100% pravda, některé kalkulačky (třeba PowerToy Calc, ale určitě i další) to umí, akorát v C.

@Honzc: Proč jen pro přirozená čísla? Platí to snad i pro záporná čísla ne? Akorát pro tu nulu ne... Protože jak napsal Mircosoft, tak

a^(-n) = 1/(a^n) platí obecně pro jakékoli hodnoty a a n.


Prostě jsem chtěl říct, že liché odmocniny (a převrácená čísla k lichým odmocninám - viz. citace) je možné spočítat i ze záporných čísel - je to číslo opačné k příslušné mocnině z opačného čísla, tedy pow:=-exp(n*(ln(-a))); A proto by šel kód ještě rozšířit, konkrétně v bodě:
if a<0 then pow:=0 {radsi vysledek 0 nez Invalid floating point operation pri zapornem zakladu logaritmu}
Funkce by tak mohla spočítat např. (-27)^(1/3), to se rovná -(27)^(1/3), což je -3.

Nahlásit jako SPAM
IP: 83.240.120.–
Don't waste your time, or time will waste you.
Honzc0
Stálý člen
4. 3. 2009   #19
-
0
-

To tom*p

Ještě jednou:
Ty jsi napsal
"Pokud se nemýlím, tak je možné spočítat hodnotu pokud je n = 1/(celé liché číslo), potom lze dostat hodnotu jako -pow(-a, n)."
a já jsem odpovídal na toto: n = 1/(celé liché číslo), pak to tvoje "celé liché číslo", opravdu musí být přirozené liché číslo. (0 to být nemůže, jednak dělení nulou a za druhé 0 není celé liché číslo)
Pozn.: "(-27)^(1/3), to se rovná -(27)^(1/3), což je -9." - je špatně. Správně -3.

Nahlásit jako SPAM
IP: 85.207.57.–
KIIV+42
God of flame
4. 3. 2009   #20
-
0
-

To Honzc : 27^1/3 musi byt 3 ... nechapu jak si mohl dostat 9... a jo vlastne uz to vidim 27*1/3 je 9 ale to je jeno roznasobeni ne umocneni na 1/3

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
tom*p0
Stálý člen
4. 3. 2009   #21
-
0
-

To Honzc : Máš pravdu, má to být -3, spletl jsem se, ale to je jenom drobnost. Proč by nemohlo být třeba n = 1/(-5)? Proč to musí být přirozené číslo?

Nahlásit jako SPAM
IP: 83.240.120.–
Don't waste your time, or time will waste you.
Honzc0
Stálý člen
5. 3. 2009   #22
-
0
-

To tom*p

Protože v matematice je odmocnina definována pouze pro přirozená čísla, tzn., číslo ve jmenovateli musí být větší než 0.
Ten tvůj případ se ale dá v programování celkem jednoduše obejít tak, že to mínus se přiřadí té jedničce.
Tedy 1/(-5) se napíše jako (-1)/5.
Máme-li např. (-5)^(1/(-5)), což v matematice nejde musíme to napsat jako 1/(-5)^(1/5)

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

Podobná vlákna

Mocnina a třetí mocnina — založil Ondra

Mocnina — založil Akacko

Druhá mocnina — založil off01

Je cislo mocnina dvojky ? — založil Dusan R.

Odmocnina — založil Antonidas

Moderátoři diskuze

 

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