Calculer une puissance

plhea Messages postés 45 Date d'inscription dimanche 13 mars 2005 Statut Membre Dernière intervention 19 mars 2006 - 20 déc. 2005 à 13:18
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 21 déc. 2005 à 11:51
bonjour à tous,

j'ai un petit problème :
dans mon programme, je dois calculer des puissances, et pour cela j'utilise la fonction Power de Math.

Le problème est que power n'accepte que des constantes en arguments et moi je veux lui donner des variables !
je ne vois plus l'interet de la fonction si on est obligé de donner des constantes alors je crois qu'il y a un 'truc'.

dans ce cas, comment calculer une puissance avec des variables en arguments ?

merci à tous
plhea

16 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 déc. 2005 à 13:36
Salut,
il faut faire comme ceci:

procedure TForm1.Button2Click(Sender: TObject);
Var Base, Exposant, Rslt :Extended;
begin
Base := 10;
Exposant := 2;
Rslt := Power(Base, Exposant);
Label1.Caption := FloatToStr(Rslt);
end;

@+
Cirec
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
20 déc. 2005 à 13:40
salut,

dans la fonction:

function Power(const Base, Exponent: Extended): Extended;

cela veut simplement dire que base n'est pas modifié par la fonction.

ainsi si tu fais

var base:real;

resultat:real;

exposant:integer;

begin



base:=2.5;exposant:=2;

resultat:=power(base,exposant);

end;

resultat:=6,25



tu peux donc très bien passer une variable comme pramètre

@+

jlen
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
20 déc. 2005 à 13:42
excuse moi cirec je n'avais pas rafraichi avant de poster

@+

jlen
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 déc. 2005 à 13:48
Salut jlen,
il n'y a pas de soucis, ce genre de double poste arrive souvent.
Avis aux Admins il devrait y avoir un petit message par Ex. où autre qui indique qu'un poste à été rajouté parce qu'il est vrai que quand tu écris ton poste tu ne sais pas ce qui ce passe à ce moment et le fait de rafraîchir, il me semble, te supprime ce que tu viens d'écrire non?


@+
Cirec


0

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

Posez votre question
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
20 déc. 2005 à 13:52
çà ne supprime pas ce que tu viens d'écrire mais le refresh est un peu
long à venir ce qui donne l'impression que tu as perdu ton message (
attendre entre 5 et 15 secondes!! )

@+

jlen
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 déc. 2005 à 14:00
euh apparemment c'est ton navigateur qui te permet cela, je vient de tester et j'ai attendu attendu et attendu (une minute) et ... ben rien poste perdu à moins de faire précédent mais là aussi une fois sur cinq je ne récupère pas ce que j'avais écris avant



@+
Cirec
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
20 déc. 2005 à 14:08
-->plhea l'intérêt de passer les arguments en constante c'est qu'ils
ne sont pas modifiés et que l'on peut ainsi les réutiliser dans
d'autres fonctions pour des calculs automatisés. ce qui ne serait pas
le cas s'ils avaient été modifié (imagine un tableur qui modifierait
les entrées en même temps que le résultat!!).
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
20 déc. 2005 à 14:10
j'utilise firefox mais là je fais le test sous IE
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
20 déc. 2005 à 19:48
Pour info, le mot clé Const désigne un paramètre passé par adresse et qui ne pourra pas être modifié dans le corps de la fonction.
On peut donc passer une variable ou une constante, du moment que la structure passée possède une adresse en mémoire.
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
20 déc. 2005 à 20:08
--> Delphiprog je pensais que les paramatres const etaient
passés par valeur et que la différence avec ceux-ci était qu'il n'est
pas possible de les modifier dans le corps de la routine; d'ailleurs
l'intérêt de passer un parametre par adresse( mot clé var
)étant de pouvoir utiliser ce pramètre directement (comme une variable
globale) sans avoir à en faire une copie dans l'espace de travail ce
qui en plus donne un code plus performant.

@+

jlen
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
20 déc. 2005 à 21:01

Jlen100 et plhea >> voici quelques lignes de code pour illustrer les diff&#233;rents mani&#232;re de passer des arguments et l'incidence sur les valeurs de retour.

procedure ByVal(a: integer);
begin
  a :=  a + 1;
  ShowMessageFmt('ByVal : %d', [a]);
 end ;

procedure ByRefConst(const a:integer);
begin
{ L'affectation suivante est impossible !
  a : = a + 1;
  }
  ShowMessageFmt('ByVal : %d', [a]);
end;

procedure ByRefVar(var a:integer);
begin
  a :=  a + 1;
  ShowMessageFmt('ByRef : %d', [a]);
 end ;

procedure TForm1.Button1Click(Sender: TObject);
var
  arg : integer;
begin
  arg : = 10;
  ShowMessageFmt('Valeur d''origine : %d', [arg]);
  ByVal(arg);
  ShowMessageFmt('Apr&#232;s ByVal : %d', [arg]);
  ByRefConst(arg);
  ShowMessageFmt('Apr&#232;s ByRefConst : %d', [arg]);
  ByRefVar(arg);
  ShowMessageFmt('Apr&#232;s ByRefVar : %d', [arg]);
end;


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 déc. 2005 à 21:35
Alors la on n'est retourné aux bases, mais bon ça fait pas de mal pour tous ceux qui auraient oublier et puis ça a l'avantage d'être claire au moins.

Est ce que ce ne serait pas plus juste où claire comme ça ?

procedure ByRefConst(const a:integer);
begin
{ L'affectation suivante est impossible !
a := a + 1;
}
ShowMessageFmt('ByRefConst : %d', [a]); // à la place de ByVal
end ;

procedure ByRefVar(var a:integer);
begin
a : = a + 1;
ShowMessageFmt('ByRefVar : %d', [a]); // à la place ByRef
end;


mais bon la je chipote un peut


@+
Cirec
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
20 déc. 2005 à 21:41
delphiprog ça je savais c'est le mode de passage du paramètre que
j'ignorais. mais en fait delphi contrairement à turbo pascal passe
toujours les parametres par adresse mais les traite ensuite différement:

quand c'est une variable(var) il utilise directement cette adresse et peut modifier la variable à cette adresse.

quand il est passé par valeur il en fait une copie et l'utilise comme
une variable locale (pas de modification de la variable initiale

quand il est passé en constante (const) il utilise la valeur située à l'adresse et interdit sa modification et c'est ici la principale différence
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
20 déc. 2005 à 21:47
cirec effectivement ça fait retourner aux bases: il a fallu que je
ressorte la bible du Turbo Pascal pour retrouver le mode exact de
passage des paramètres!! et ça date un peu

@+

jlen
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 déc. 2005 à 21:56
Tient bonne idée j'ai également une bible du turbo pascal qui doit être plaine de poussière je vais remettre le nez dans ça ne peut pas faire de mal



@+
Cirec
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
21 déc. 2005 à 11:51
Merci Cirec, je n'avais pas fait gaffe. La méthode du copier/coller a encore fait une victime

Je ne vous ai pas parlé du mot clé out :
"Un paramètre de sortie (out) est transmis par adresse comme un paramètre variable. Mais avec un paramètre out, la valeur initiale de la variable référencée n'est pas prise en compte par la routine à laquelle elle est transmise. Le paramètre out n'est utilisé qu'en sortie ; il indique simplement à la routine où placer la valeur en sortie sans spécifier de valeur en entrée."

Une bible du Turbo Pascal ? ouah !...ça commence à dater
Vous n'avez pas installé la "Référence Pascal objet" avec Delphi ? (voir rubriques d'aide dans "démarrer > Borland Delphi x >Aide > Référence Pascal Objet")

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
Rejoignez-nous