Comment éléver un nombre à la puissance? [Résolu]

cs_edlain 21 Messages postés lundi 7 mai 2007Date d'inscription 15 août 2008 Dernière intervention - 11 juil. 2008 à 09:46 - Dernière réponse : yvessimon 647 Messages postés mardi 22 avril 2003Date d'inscription 9 janvier 2017 Dernière intervention
- 18 août 2008 à 08:43
Bonjour à tous,

j'ai un souci sur mon algorithme qui fait des calculs. En effet, quand j'essaie d'éléver un nombre à la puissance d'un autre le message d'erreur suivant apparait: "Type pointer requis".
Voici un exemple:
je veus faire par exemple B à la puissance C avec B,A et C de type extended. (B=15.5 et C=5.1235)
Donc je fais A:=B^C mais le message d'erreur sort toujous et le curseur se met après le C.

Merci de m'aider a resoudre ce problème.

Bien Cordialement.
Afficher la suite 

16 réponses

Répondre au sujet
yvessimon 647 Messages postés mardi 22 avril 2003Date d'inscription 9 janvier 2017 Dernière intervention - 11 juil. 2008 à 11:55
+3
Utile
w = x^y

q ln(w) y.ln(x)

w = exp(q)

ou alors power(x,y) // avec math en user

yvessimon
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de yvessimon
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 11 juil. 2008 à 13:30
+3
Utile
le symbole "^" en Delphi correspond a un pointeur.

var
  pX : ^integer;
begin
  New(pX);
  pX^ := 10;
  Dispose(pX);
end;

pour une puissance on utilise la fonction "Power"

Elève Base àn'importe quelle puissance.

Unité
Math

Catégorie
routines arithmétiques

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

Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
sp40 1293 Messages postés mardi 28 octobre 2003Date d'inscriptionContributeurStatut 3 juillet 2015 Dernière intervention - 11 juil. 2008 à 10:37
0
Utile
Bonjour,
Ça fait quelques temps que j'ai quitté l'école, mais de mémoire, il me semble qu'une puissance est un nombre entier...

Simon
Commenter la réponse de sp40
cs_edlain 21 Messages postés lundi 7 mai 2007Date d'inscription 15 août 2008 Dernière intervention - 11 juil. 2008 à 11:40
0
Utile
Merci Simon, de la formulation de ta réponse.
Commenter la réponse de cs_edlain
cs_edlain 21 Messages postés lundi 7 mai 2007Date d'inscription 15 août 2008 Dernière intervention - 11 juil. 2008 à 14:07
0
Utile
Ok, merci à vous (Yvessimon, f0xi).

Je vais le faire avec power.
Commenter la réponse de cs_edlain
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 11 juil. 2008 à 20:02
0
Utile
Bonjour,


@edlain


Si tu as eu des réponses qui répondaient à ton problème, pense à cliquer sur "réponse acceptée"!
Cela aidera les autres membres.
Merci.
Commenter la réponse de Caribensila
cs_edlain 21 Messages postés lundi 7 mai 2007Date d'inscription 15 août 2008 Dernière intervention - 11 juil. 2008 à 21:50
0
Utile
Bonsoir à tous,

J'ai essayé avec Power(base, exposant) et ça marché; ce qui est interrassant c'est que ça marche avec n'importe quelle puissance.

Merci encore!
Commenter la réponse de cs_edlain
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 12 juil. 2008 à 02:30
0
Utile
"J'ai essayé avec Power(base, exposant) et ça marché; ce qui est
interrassant c'est que ça marche avec n'importe quelle puissance."


La satisfaction du développeur débutant qui réussi quelque chose est toujours amusante a voir.
c'était ton micro-everest a toi.

Commenter la réponse de f0xi
cs_edlain 21 Messages postés lundi 7 mai 2007Date d'inscription 15 août 2008 Dernière intervention - 12 juil. 2008 à 11:48
0
Utile
Bonjour ,

excusez moi du derrangement que je vous cause depuis le debut de cette semaine; En fait j'ai le message d'erreur suivant lorsque je compile mon programme: "opération en virgule flottante incorrecte".
et voici un bout de mon programme:

var

r, some,some1,some2,lambda:extended;
begin
           .......
           ............
       r:=sqrt((power(some,some2)+(sqr(some1))+sqr(some2))));
           ..................
      lambda:=arctan(some1/some2);
..............
end;

le problème se situe au niveau de l'expression du  'r'. (NB: some, some1, some2 renvoient plus haut dans mes calcules des nombres à virgules). Mais lambda et les autres n'ont aucun problème.

Merci de me guider.
Commenter la réponse de cs_edlain
Caribensila 2671 Messages postés jeudi 15 janvier 2004Date d'inscription 18 janvier 2018 Dernière intervention - 12 juil. 2008 à 12:54
0
Utile
Salut,

Dans Sqrt(Expression), il est probable que Expression soit négatif dans ton code.

Pour sécuriser ton code, tu dois faire:



if Expression >= 0 then r := Sqrt( Expression )
  else showmessage('Calcul de la racine carrée d''un nombre négatif impossible!');


De même :



if some2 <> 0 then  lambda := arctan(some1/some2)
  else showmessage('Division par zéro !');
Commenter la réponse de Caribensila
cs_edlain 21 Messages postés lundi 7 mai 2007Date d'inscription 15 août 2008 Dernière intervention - 13 juil. 2008 à 11:49
0
Utile
Je suis heureux que vous me comtiez parmis vous!
Commenter la réponse de cs_edlain
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 13 juil. 2008 à 18:53
0
Utile
tu peu utiliser ArcTan2 (unit math) ce sera plus rapide et pas de soucis de division par zero

ArcTan2(Y, X);

pour Sqrt tu peu ajouter ABS pour eviter le probleme du signe negatif.

Sqrt( Abs( Expression ) );

soit :

r := sqrt( abs( power(some,some2) + sqr(some1) + sqr(some2) ));

lambda := arctan2(some1, some2);

Commenter la réponse de f0xi
yvessimon 647 Messages postés mardi 22 avril 2003Date d'inscription 9 janvier 2017 Dernière intervention - 15 juil. 2008 à 09:14
0
Utile
Bonjour,

Effectivement un test est nécessaire pour les nombres négatif.
Ce test dépend de ton calcul.
Avec sqrt(ABS(x)) tu es sûr d'avoir un resultat. Par contre est-ce logique pour ton calcul ?

Un test est nécessaire pour chaque division par zéro .
pour x^y un test est necessaire pour x<0 et y décimal

Salutations
Commenter la réponse de yvessimon
cs_edlain 21 Messages postés lundi 7 mai 2007Date d'inscription 15 août 2008 Dernière intervention - 15 juil. 2008 à 10:26
0
Utile
Bonjour Yvessimon,

Effectivement pour mes calculs je ne peux pas utiliser sqrt(ABS(X)) car ici je prend la valeur absolue de X alors que j'ai des coordonnées négatives; ce qui fait que si je prend abs(x) je fausse tous mes calculs.

excellente journée.
Commenter la réponse de cs_edlain
cs_edlain 21 Messages postés lundi 7 mai 2007Date d'inscription 15 août 2008 Dernière intervention - 15 août 2008 à 18:36
0
Utile
Bonjour à tous,

Tout d'abord, bonne fête d'assomption à tous. Je voudrais s'il vous plait savoir  comment affiche t-on une partie réelle et une partie imaginaire d'un complexe en delphi?
Exemple: si j'ai le complexe z = 5 - 2i
dans un premier temps je voudrais afficher la partie réelle donc a= 5 et dans un second temps, la partie réelle b= -2

Merci à tous.
Commenter la réponse de cs_edlain
yvessimon 647 Messages postés mardi 22 avril 2003Date d'inscription 9 janvier 2017 Dernière intervention - 18 août 2008 à 08:43
0
Utile
Bonjour,

utilise les varians
regarde dans l'aide de delphi :
function VarComplexCreate(const AReal, AImaginary: Double): Variant; overload;
Tu peux faire des additions ....


si non tu rées une table réelle de dimention 2 . Le 1er élément est la partie réelle l'autre l'imaginaire.
Puis créer les différente fonctions d'atdition multiplication ....
si non voir des exemples sur le site

Salutations
Commenter la réponse de yvessimon

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.