X puissance Y

cs_DAR Messages postés 6 Date d'inscription samedi 23 février 2002 Statut Membre Dernière intervention 16 février 2003 - 25 oct. 2002 à 18:19
munstef Messages postés 6 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 20 décembre 2004 - 21 déc. 2004 à 22:15
Quelle est la fonction qui permet d'élever un nombre X à la puissance Y ?

Merci.
A voir également:

14 réponses

cs_bgK Messages postés 131 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 19 janvier 2004
25 oct. 2002 à 21:09
Le plus simple, c'est d'inclure Math dans la clause use de l'unité, puis d'utiliser
Power(Base,Exposant);
Par exemple : 2 puissance 3 :
Nombre := Power(2,3);

A+ et Bonne Prog.
0
magicvinni Messages postés 235 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 26 juillet 2010
26 oct. 2002 à 09:14
Autre méthode : programmer la fonction :
Function puiss(x,y:integer):integer;
begin
if y=1 then puiss:=x else puiss:=x*puiss(x,y-1);
end;

Voila, il ya plus rapide si ca t'interesse en utilisant les puissances indiennnes, mais il faudrait que je reflechisse un peu plus. Dis moi si ca t'interesse.
Magicvinni
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
26 oct. 2002 à 09:42
Si y < 1, tu obtiens une exception EStackOverflow !

Il ne faut donc pas utiliser cette fonction tel quel.

De plus, que se passe-t-il en cas de dépassement de capacité ?

Avec deux Integer en entrée et une valeur de sortie également de type Integer, on atteint vite les limites...Un Longint permettrait déjà de repousser un peu ces limites.

May Delphi be with you
0
cs_DAR Messages postés 6 Date d'inscription samedi 23 février 2002 Statut Membre Dernière intervention 16 février 2003
26 oct. 2002 à 09:54
Merci pour ton aide !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DAR Messages postés 6 Date d'inscription samedi 23 février 2002 Statut Membre Dernière intervention 16 février 2003
26 oct. 2002 à 10:01
Inutile d'aller plus loin dans tes recherches, la fonction que tu me propose est déjà très bien.
Par contre il faut que je prevoie le cas ou y=0 comme le suggère Delphiprog.

Merci.
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
26 oct. 2002 à 12:37
Si je peux me permettre : à partir de Delphi 2 Integer et Longint sont identiques ( entiers 32 bits ), ceci ne changera donc pas la capacité de la fonction. A mon avis tu pensais plutôt à Int64.

--- :sleepy) Nono du Moulin :sleepy) ---
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
26 oct. 2002 à 14:18
Merci de me le rappeler. Ca vient sans doute du fait que j'ai longtemps utilisé Delphi 1 !
Effectivement, comme le type Int64 est un type entier 64 bits non signé, ça laisse de la marge.

Mais celà ne résout pas le problème de l'erreur de débordement de pile...

May Delphi be with you
0
magicvinni Messages postés 235 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 26 juillet 2010
26 oct. 2002 à 16:19
Honte à moi prof de math qui ai oublié le cas y=0 :blush)
MagicVinni
0
magicvinni Messages postés 235 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 26 juillet 2010
27 oct. 2002 à 07:42
Function puiss(x,y:int64):int64;
begin
if y=0 then puiss:=1 else puiss:=x*puiss(x,y-1);
end;
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
27 oct. 2002 à 11:36
Les maths et la récursivité sont deux choses indépendantes.
Ainsi, tu es totalement pardonné. :approve)

May Delphi be with you
0
munstef Messages postés 6 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 20 décembre 2004
20 déc. 2004 à 11:35
mise à part de la fonction trivial que delphi propose dans sont unité Math:

function Puissance (x, y : Int64) : Int64;
var p : Int64;
begin
p:=x; result:=1;
while y > 0 do begin
if y mod = 1 then result := result * p;
p := sqr (p);
y := y div 2;
end;
end;

si y <= 0 Puissance retourne 1
0
munstef Messages postés 6 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 20 décembre 2004
20 déc. 2004 à 11:39
function Puissance (x, y : Int64) : Int64;
var p : Int64;
begin
p:=x; result:=1;
while y > 0 do begin
if y mod 2=1 then result := result * p;
p := sqr (p);
y := y div 2;
end;
end;

remarque
y mod 2 <=> Odd (y)
0
munstef Messages postés 6 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 20 décembre 2004
21 déc. 2004 à 22:08
j'avais oublié de donner une petite explication :

on prend la propriété suivante :
x^(2n) (x^n)^2 et x^(2n+1) x.(x^n)^2

donc avec la particularité de l'opérateur "div" on a :soit y 0 > x^y = 0
soit y paire => x^y = (x^(y div 2))^2
soit y impaire=> x^y = x.(x^(y div 2))^2
0
munstef Messages postés 6 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 20 décembre 2004
21 déc. 2004 à 22:15
j'ai fait une erreur !il fallait lire "soit y 0> x^y = 1"
0
Rejoignez-nous