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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
- 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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022

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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596 > 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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022

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
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596 > 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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022

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
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022

25 févr. 2020 à 13:01
Ce que je comprends bien c’est on pourrait se passe de if ?
0
Whismeril
Messages postés
17339
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
24 mai 2022
596
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