Static GN Power (GN , int n)

Signaler
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020
-
Whismeril
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
-
Bonjour, je voulais faire fonctionner cette méthode qui permet de calculer x^n sans modifier x.
n est un entier positif et nous supposons aussi que x est aussi positif.
GN: grand nombre

13 réponses

Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365
Bonjour

Tu voies quand tu veux essayer.
Dans l’énoncé que tu as donné il n’y a rien qui t’impose la récurrence, mais c’est une façon de faire.

Par contre, essaye d’imaginer (ou vérifie en exécution pas à pas) ce qui se passe quand n == 0.
Whismeril
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365
D’ailleurs, avant, essaye d’imaginer ce qui se passe quand n est négatif
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365
Et bien, en l'état quand n vaut 0 ça ne retourne pas 1
Messages postés
2099
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
2 avril 2020
89
Bonsoir
Ton code commenté
Comprends-tu ton erreur ? Ce n'est pas une erreur de syntaxe mais une erreur de logique
public static GN Power(GN x, int n)
        {
            if (n > 0) // N supérieur à 0
            {
                if (n == 0) // là N ne sera jamais = à 0
                {
                    return (1); // on ne retourne jamais cette valeur
                }
                return (x * Power(x, n - 1)); // on retourne toujours ici
            }
        }

thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

Merci, je vais essayer de corriger mes erreurs
Whismeril
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365
Bonjour, bon puisqu’on en est à réfléchir à ta place, quand n est négatif ou vaut 0, ça ne retourne rien => erreur de compilation

Mais bon ça fait juste 3 jours que je te demande de faire dans ta tête ce que vb t’as fait par écrit.
Messages postés
2099
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
2 avril 2020
89
Je vais prendre un exemple simple

soit à calculer 4 puissance 4
c'est égal à 4 * (4 puissance 3)
or 4 puissance 3 = 4 * (4 puissance 2)
et aussi 4 puissance 2 = 4 * (4 puissance 1)

Tu remarques que les puissances commencent à 4 et finissent à 1 : c'est la récursivité ( inutile de mettre puissance 0 car on a N puissance 0 = 1 quel que soit N et un nombre multiplié par 1 donne ce même nombre .
Tu remarques que N est toujours SUPERIEUR à 0 et doit toujours l'être
Dans le code précédent tu as 2 lignes à enlever c'est tout !

Ou alors il y a une façon plus simple sans récursivité

thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

c'est bcp bien clair merci beaucoup.
je vais corriger et continuer les autres exercices.
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365
Bonsoir

comme je te l'ai déjà dit, pas de code pas d'aide.

Aider ça veut dire t'expliquer où tu aurais pu faire une erreur, ou où tu pourrais optimiser, pas le faire à ta place.

Ton énoncé est simple, le programme à réaliser aussi, donc propose et on t'aiguillera
thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

oui je sais, mais en fait je sais pas où commencé c'est pour cela j'ai expliquer le prog
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

c'est ça que j'ai fait
      public static GN Power(GN x, int n)
        {
            if (n > 0)
            {
                if (n == 0)
                {
                    return (1);
                }
                return (x * Power(x, n - 1));
            }
        }
Messages postés
2099
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
2 avril 2020
89
Bonjour
Il faudrait peut-être nous en dire plus sur le type GN de ta fonction .
Quelle est la plage de tes grands nombres ? Car la classe System.Math a une fonction qui fait cela tout seul et elle nécessite 2 valeurs de type Double ( une pour le nombre et une pour l'exposant )
exemple
Double Resultat = System.Math(6, 2) 
donne 36 soit 6 x 6 = 36
Whismeril
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365
Salut vb, GN est un type décrit par son prof (c’est dans l’énoncé).
D’un point de vue purement algorithmique, savoir que c’est un grand nombre est suffisant.

S’il doit compiler le code, alors le type a soit été codé en amont par l’élève soit il est fourni par le prof
thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020
> Whismeril
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020

oui en fait GN est défini comme Grand Nombre et a été codé plus haut dans le programme
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365
OK, donc que se passe t il si n est négatif?
Et si n vaut 0?
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

n est un entier positif
si tu entre un nombre negatif ça retourne une erreur.
si n=0, ça retourne 1
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365
Ha non, pas avec le code que tu as montré.
thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

   public static GN Power(GN x, int n)
        {
            if (n > 0)
            {
                if (n == 0)
                {
                    return (1); 
/*si n a pour valeur 0 ça  doit retourner 1.
 Peut être syntaxiquement c'est pas correct.
 parce que quand j'essaye de  compiler on me
 fait savoir qu'il est impossible de démarrer 
directement un projet avec un type de sortie 
de bibliothèque de classes*/
                }
                return (x * Power(x, n - 1));
            }
        }
        


Whismeril
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365 > thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

Oui pour qu'un projet démarre, il doit être d'un type exécutable, en gros tous sauf une dll (bibliothèque de classe).
Mais bon, y'a pas besoin de compiler pour voir que non, quand n vaut 0 ça ne retourne pas 1 et que quand n est négatif ça ne génère pas d'erreur.

Imagine l'exécution, ligne par ligne, avec n = 0 et n = -1.
thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020
> Whismeril
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020

ah ok je comprends maintenant le but c'est de créer un projet et utiliser la bibliothèque comme référence alors que moi je codais à l'intérieur de la bibliothèque
Messages postés
2099
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
2 avril 2020
89
Bonjour
Il y a une erreur avec les if { } dans ton code
Un salut à Whis
Ce n'est pas la syntaxe qui n'est pas correcte : c'est la logique
A la ligne 3
if (n > 0)
tu mets ensuite à la ligne 5
if (n == 0) 

Si n > 0 en ligne 3 tu n'iras jamais au code du n= 0 ligne 5

Quant à l'autre problème concernant les bibliothèque de classe
- y-a-t'il une Form avec une interface dans ton projet ?
- y-a-t'il d'autres classes dans ton projet ?
Car je crains que tu aies ouvert le code de la classe GN et que tu rajoutes du code dedans sans qu'il n'y ait une Form
ou une application Console ( voir message 8 où tu dis que GN a été codé plus haut dans le programme . )

thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

Salut vb95,
Oui c’était ça le problème je l’ajoutais directement dans la bibliothèque GN.
Je dois utiliser ce dernier comme référence par contre.
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365
Le problème de dll c’est une chose,

Mais prenons un problème à la fois.

Ici, au départ tu es venu parler d’un code qui calcule une puissance.
Ce code ne fonctionne pas tel que tu le dis.
Et je n’ai aucunement besoin de compiler pour le voir, il suffit de se dire « tient si n vaut 0 » que se passe t il a la première ligne et à la suivante etc....
Donc pour la dernière fois, que se passe t il quand n vaut 0 et quand n vaut -1?
thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

salut Wishmeril,
pour n=1 ça retourne 1
et pour le cas de -1 on ne tient pas compte d'un nombre negatif car on a précisé que n>0 dans l'enoncé
Whismeril
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365 > thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

Alors pourquoi avoir mis if ? Qui dans le cas présent sont faux?
thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020
> Whismeril
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020

Ok logiquement donc c’est pas correct, c’est bien plus pour être corrigé et apprendre que je l’ai mis suis un débutant de C#
thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020
> Whismeril
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020

Ce que je comprends bien c’est on pourrait se passe de if ?
Messages postés
14426
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
2 avril 2020
365
Ce que je comprends bien c’est on pourrait se passe de if ?

Ça toi seul peut le décider.

Si selon ton expérience quand ton prof dit
n est un entier positif et nous supposons aussi que x est aussi positif.
ça veut dire "on n'a pas à s'en soucier " alors pas de if, à la condition que positif sous entende strictement positif (donc pas 0).

Si par contre, ça veut dire, que tu n'as pas à coder le cas d'une puissance négative, mais que l'on se sait jamais ce qui peux être fourni en paramètre, alors, il faut des if et il faut bien les faire.

PS pour n=1 ça retourne 1, seulement si x vaut 1, sinon t'as un autre problème.

thierno95
Messages postés
37
Date d'inscription
mardi 4 février 2020
Statut
Membre
Dernière intervention
26 février 2020

Ok je vais faire donc pour le cas n=0 et n negatif
J’ai fait une erreur de saisie c’est plutôt n=0