CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

calcul factorielle en C

trymort
trymort
Niveau 9
06 octobre 2013 à 19:59:48

Bonjour j'ai un exercice dans lequel on doit trouver la factorielle de N sans utiliser de boucle for. En, utilisant un while c'est possible mais je me creuse la tete depuis une heure pour trouver comment faire !

Pseudo supprimé
Pseudo supprimé 06 octobre 2013 à 20:05:07

Hummm, ça alors... Alors, tant que tu n'as pas atteint le rang de la factorielle, tu dois multiplier ton résultat par le rang, c'est ça ?
Franchement, je ne vois vraiment pas comment faire...

SwordQuardo
SwordQuardo
Niveau 5
06 octobre 2013 à 20:07:00

Tu sais, for ou while, ca revient au même...

Pseudo supprimé
Pseudo supprimé 06 octobre 2013 à 20:22:14

for(i=0;i<lgn;i++){/*code*/}
est la même chose que:
i=0;while(i<lgn){i++;/*code*/}

FortCommeMeric
FortCommeMeric
Niveau 10
06 octobre 2013 à 20:23:55

Tu fais une fonction récursive

trymort
trymort
Niveau 9
06 octobre 2013 à 20:28:48

j'ai oublie de preciser que la fonction ne peut pas etre recursive c'est une autre contrainte et du coup j'avoue avoir du mal a comprendre comment on peut faire ^^

Pseudo supprimé
Pseudo supprimé 06 octobre 2013 à 20:29:46

trymort :d) Pose ton 'problème' :D

trymort
trymort
Niveau 9
06 octobre 2013 à 20:51:03

• Écrire une fonction itérative qui renvoie un nombre. Ce nombre est le résultat de
l’opération factorielle à partir du nombre passé en parametre.
• En cas d’erreur, la fonction devra retourner 0.
• Elle devra être prototypée de la façon suivante :
1 int my_factorielle_it(int nb);
• Vous devez gérer si la factorielle du nombre fait un overflow (qui est une erreur).

Votre fonction doit donner son résultat en moins de 2 secondes
Indices
• factorielle(0) = 1
• Si (n < 0) alors factorielle(n) = 0
• n puissance 0 = 1
• Si (p < 0) alors n puissance p = 0

Pseudo supprimé
Pseudo supprimé 06 octobre 2013 à 21:04:45

trymort :d) Nan, je voulais dire : comment calcules-tu une factorielle ?
Comment arrives-tu au résultat si tu dois le faire avec une calculatrice ?

PS : relis mon premier message, tu as la réponse dedans...

Eij_iZ_WanteD
Eij_iZ_WanteD
Niveau 10
06 octobre 2013 à 21:20:51

Je suis peut-être à côté de la plaque tellement ma réponse est simple mais je ne vois pas où est-ce que ça clocherait. :(

resultat = 1
while (nb > 1) {
resultat = resultat * nb
nb = nb - 1
}

Pseudo supprimé
Pseudo supprimé 06 octobre 2013 à 21:45:48

Eij_iZ_WanteD :d) Bien que ton algo soit faux par rapport à son énoncé, lui mâcher le travail n'est pas l'aider. Comme tu l'as dit le problème est trivial, il aurait fallu qu'il aboutisse à ce résultat par ses propres moyens.

trymort
trymort
Niveau 9
06 octobre 2013 à 22:28:01

ah merci, en fait ca me paraissait pas aussi evident, jpensais qu'il fallait stocker le resultat dans une autre variable et que la boucle faisait augmenter le resultat mais il suffit d'une seule variable cree en fait :o

Ace_Attorney
Ace_Attorney
Niveau 10
07 octobre 2013 à 08:43:33

gamer1037564946 Voir le profil de gamer1037564946
Posté le 6 octobre 2013 à 20:59:23 Avertir un administrateur
où as tu vu que on ne pouvait pas utiliser un for ? :)

Car ça sent l'Epitech en première année qui à beaucoup de retard sur son taff', et qui mendie de l'aide sur un forum au lieu de demander à son astek/aer, et qu'en première année, on t'interdit t'utiliser la boucle for.

Pseudo supprimé
Pseudo supprimé 07 octobre 2013 à 16:32:17

Tout est dit dans le post de Serialesky, mais il a apparemment été ignoré car l'auteur cherchait une réponse toute faite. :(

[denshaotoko]
[denshaotoko]
Niveau 25
07 octobre 2013 à 17:17:17

Factorielle sans boucle, j'aurais plutôt penser à de la recursivité

int factoriel(int p)
{
if (p != 0)
return factoriel(p-1)*n; // [1]
else
return 1;
}

[denshaotoko]
[denshaotoko]
Niveau 25
07 octobre 2013 à 17:19:45

Owned by tab

Je voulais dire :

[1] Je crois que sur cette ligne factoriel(p-1)*n est mieux que n*factoriel(p-1), car on évite de stocker en mémoire(sur la pile ? à confirmer svp, je connais pas super bien, merci :noel: ) un resultat temporaire, je crois :oui:

godrik
godrik
Niveau 30
07 octobre 2013 à 17:39:48

Si le compilateur est assez intelligent pour derecursiver, il devrait savoir que * est commutatif.

[denshaotoko]
[denshaotoko]
Niveau 25
07 octobre 2013 à 17:52:38

Donc si j'ai bien compris, il y a des compilateurs pour C qui en voyant :

return n*foo(a);

arriveront à voir qu'il y a une fonction dans l'opération, il execute donc l'appel de fonction pour récupérer la valeur de retour, et seulement ensuite, il entame le calcul en multipliant par n et renvoyant le résultat de cette opération ?

gcc en fait parti ? (je connais que celui là en fait :hap: , enfin il y a g++ qui compile du c++ et du c aussi je crois non ?)

dark_drow
dark_drow
Niveau 15
07 octobre 2013 à 22:42:54

oui gcc en fait partit

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment