floriandevelop
Messages postés8Date d'inscriptionsamedi 22 janvier 2005StatutMembreDernière intervention 4 janvier 2008
-
13 sept. 2005 à 22:12
Alcantornet
Messages postés89Date d'inscriptionmardi 8 février 2005StatutMembreDernière intervention14 novembre 2007
-
16 sept. 2005 à 17:02
Bonjour!
pour ma première question, je vais demander un truc qu'on pourra trouver tordu..!
alors voilà: comment peut-on utiliser directement la fonction main (en
c /c++) avec des appels récursifs, en l'occurence je souhaite
implémenter une fonction main qui calcule une factorielle d'un entier
passé en paramètre!!!
voici le début de mon code:
int main(int x = 3)
{
if (x = = 0) return 1;
else return x * main(x-1);
}
je lance un terminal (sous windows XP) et redirige le résultat dans un fichier texte, mais n'obtient rien du tout:
floriandevelop
Messages postés8Date d'inscriptionsamedi 22 janvier 2005StatutMembreDernière intervention 4 janvier 20081 14 sept. 2005 à 09:06
Bon, je vais expliquer pourquoi je veux faire cela:
Dans un cours de technique de compilation, notre professeur nous a
demandé d'utiliser le main récursivement, pour voir comment cela se
passe au niveau du compilateur j'imagine....
Donc, ça sert à rien de critiquer cette méthode, il s'agit d'un exercice!!!
j'aurais peut-être du le préciser dès le début....
floriandevelop
Messages postés8Date d'inscriptionsamedi 22 janvier 2005StatutMembreDernière intervention 4 janvier 20081 14 sept. 2005 à 10:55
Très tordu comme raisonement.
Ou est le probleme exactement ? Sur quoi bloques tu ?
je bloque sur les point suivants:
<ol>
<li>comment lire ou interpréter le résultat? j'essaie en appelant mon
programme en ligne de commande et en redirigeant le flux sur un fichier</li>
<li>que signifie l'argument char *argv[] du main?</li>
<li>comment appeler proprement la fonction main récursivment</li>
</ol>
vous ne trouvez pas que c'est un exercice intéressant??
bweps
Messages postés17Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention10 mai 2007 14 sept. 2005 à 14:54
heu...
la redirection que tu effectues concerne ce qui est envoyé vers la sortie standard, non?
Vu que ton programme n'y envoie rien, ça paraît normal que ton log soit vide ?...
bweps
Messages postés17Date d'inscriptiondimanche 12 décembre 2004StatutMembreDernière intervention10 mai 2007 14 sept. 2005 à 15:08
Je n'avais pas vu tes questions...
2. char *argv[] est un pointeur sur un tableau de chaînes de caractères qui sont en fait, lors du premier appel (par l'OS) les paramètres de la ligne de commande. Au pif (à vérifier), argc est le nombre de ces chaînes de caractères.
3.il suffit alors de passer en paramètre de ta fonction main
- l'argument courant (ton x courant)
- l'argument initial (le nombre dont tu dois calculer la factorielle)
Pour ça, il suffit de les convertir en chaîne de caractères et les passer en argument de ton main, en précisant grâce à argc qu'il y en a deux
1. pour envoyer le résultat sur la sortie standard, il suffit alors de distinguer un cas des autres dans ton main : celui ou l'argument courant est égal à l'argument initial. Dans ce cas, tu dois, après avoir fait le calcul (lancé la récursion), écrire le résultat obtenu au lieu d'en faire un return...
Voilà voilà. J'espère ne pas avoir dit de bêtises. Vu que c'est un exercice, je trouve que j'en ai déjà dit beaucoup...
Bon courage
Alcantornet
Messages postés89Date d'inscriptionmardi 8 février 2005StatutMembreDernière intervention14 novembre 2007 16 sept. 2005 à 17:02
c:\main 5 > log.txt
ça sert à rien de mettre > log.txt, le
> sert à mettre dans un fichier du texte qui devrait apparaitre dans
le terminal. Dans ton cas il y a de toute façon rien qui s'affiche donc
c'est inutile.
Par contre pour connaître la valeur retourner d'un programme fait ceci (tjs dans le terminal) :
c:\main 5 Lance ton programme
(appuies sur enter koi...)
echo %errorlevel% Affiche la valeur du return de ton prog.