Static GN Power (GN , int n)

thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020 - 23 févr. 2020 à 22:10
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 26 févr. 2020 à 06:24
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

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2020 à 06:29
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.
1
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2020 à 06:35
D’ailleurs, avant, essaye d’imaginer ce qui se passe quand n est négatif
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
25 févr. 2020 à 22:10
Et bien, en l'état quand n vaut 0 ça ne retourne pas 1
1
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
25 févr. 2020 à 23:18
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
            }
        }

1
thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
26 févr. 2020 à 02:02
Merci, je vais essayer de corriger mes erreurs
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
Modifié le 26 févr. 2020 à 06:25
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.
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 26 févr. 2020 à 02:22
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é

1
thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
26 févr. 2020 à 02:26
c'est bcp bien clair merci beaucoup.
je vais corriger et continuer les autres exercices.
0

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

Posez votre question
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
23 févr. 2020 à 22:19
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
0
thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
23 févr. 2020 à 22:21
oui je sais, mais en fait je sais pas où commencé c'est pour cela j'ai expliquer le prog
0
thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
Modifié le 23 févr. 2020 à 23:32
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));
            }
        }
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
24 févr. 2020 à 06:24
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
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2020 à 10:50
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
0
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 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
24 févr. 2020 à 19:59
oui en fait GN est défini comme Grand Nombre et a été codé plus haut dans le programme
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2020 à 20:06
OK, donc que se passe t il si n est négatif?
Et si n vaut 0?
0
thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
24 févr. 2020 à 20:11
n est un entier positif
si tu entre un nombre negatif ça retourne une erreur.
si n=0, ça retourne 1
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2020 à 20:37
Ha non, pas avec le code que tu as montré.
0
thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
24 févr. 2020 à 23:12
   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));
            }
        }
        


0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656 > thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
24 févr. 2020 à 23:31
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.
0
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 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
25 févr. 2020 à 01:20
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
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 24 févr. 2020 à 23:26
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 . )

0
thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
25 févr. 2020 à 02:10
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.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
25 févr. 2020 à 06:29
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?
0
thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
25 févr. 2020 à 06:53
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é
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656 > thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
25 févr. 2020 à 08:50
Alors pourquoi avoir mis if ? Qui dans le cas présent sont faux?
0
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 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
25 févr. 2020 à 13:00
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#
0
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 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
25 févr. 2020 à 13:01
Ce que je comprends bien c’est on pourrait se passe de if ?
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
25 févr. 2020 à 18:10
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.

0
thierno95 Messages postés 37 Date d'inscription mardi 4 février 2020 Statut Membre Dernière intervention 26 février 2020
25 févr. 2020 à 19:24
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
0
Rejoignez-nous