D’ailleurs je pourrai faire comme pour mon jeu, utiliser les fonctions !
[quote=“wavesound”]Elles affichent le premier puis le deuxième nombre entrés puis affichent le résultat des deux en fonction de l’opération, et ce grâce à la variable resultat qu’on a déclaré au début du main.[/quote]Non. Là, tu décris ton code, tu ne dis pas vraiment ce qu’elle font, et en plus tu oublies LE truc commun que j’essaye de te faire dégager.
Bon on va avancer un peu.
Toutes commencent par te demander deux nombres, font le calcul, puis t’affichent le résultat.
La, tu peux donc faire une fonction qui va poser la question (il faut lui passer comme argument le nom de l’operation pour bien afficher la question "Vous souhaitez effectuer une ", puis demande les deux nombres. Le problême est qu’une fonction ne sait renvoyer qu’une chose à la fois, sauf si on passe par des pointeurs.
On ne va pas le faire tout de suite, donc fais une fonction qui demande un premier nombre et le renvoie, une autre qui demande un deuxiême nombre et le renvoie.
Mais avant, fais ta fonction de choix, on a encore du boulot à faire dessus une fois que tu en auras fait un premier jet.
Question : Ça ne devrais pas aller dans la partie programmation tout ça ?
bonne idée. Hein ricardo, qu’en penses tu ?
D’acc, je vais aller voir ça.
[code]#include <stdio.h>
long renvoieChoix()
{
long votreChoix
printf("Votre choix ? ");
scanf("%ld", &votreChoix)
return 0;
}[/code]
non:
- que renvoie ta fonction ?
- ce n’est pas la fonction demandée. La fonction demandée doit afficher "1. Addition\n2. Soustraction\n3. Multiplication\n4. Division\n\nTapez le nombre correspondant à votre choix : ", récupèrer le résultat, et le renvoyer.
Ah. C’est tout de suite plus compliqué.
A chaud, j’ai pas vraiment d’idée.
non
c’est super simple !
Je ne rigoles pas, c’est impossible que tu ne trouves pas.
Déjà, que renvoie ta fonction ?
C’est simple ça: tu regardes s’il y a un return, alors ?
La fonction renvoie le choix de l’utilisateur : addition, soustraction, multiplication ou division ?
wavesound dans une procédure ou une fonction, il y a 4 choses:
Les «entrées» qui sont
- Les arguments donnés explictement. Dans l’exemple ci dessous, ce sont x et y mais PAS CC ou PASSAGE.
- Les données appartenant à l’environnement, typiquement les variables globales, i.e définies en dehors de ta fonction. Exemple typique: CC dans la fonction ci dessous.
Les «sorties» qui sont
-
Ce que retourne la fonction, c’est un seul objet, localisé dans el return. Ci dessous, c’est donc la valeur de z qui est retourné (mais pas z, on aurait pu mettre return(x+y+CC))
-
Les effets de bords: Ce que fait la fonction. Ci dessous, la fonction incrémente la variable PASSAGE d’une unité.
i[code]nt CC=23;
int PASSAGE=0;
int blop(x,y)
int x,y;
{
int z;
z:=x+y+CC;
PASSAGE++;
return(z);
}[/code]
Exemple:
Fonction sans argument avec un résultat: getc()
Fonction sans argument sans résultat: print_newline dans Caml qui fit un newline sur l’écran
Quand on programme il est important de bien connaître ces 4 aspects d’une fonction ou d’une procédure. Si tu veux décrire exactement une fonction, ce sont ces 4 points que tu dois préciser.
[quote=“wavesound”]La fonction renvoie le choix de l’utilisateur : addition, soustraction, multiplication ou division ?[/quote]non. précisément.
Aprés cette explication de fran.b, la fonction que tu as ecrite renvoie quoi ?
Pas ce que tu veux qu’elle renvoie, mais ce qu’elle renvoie vraiment dans ce que tu as écrit.
Avec return 0;, elle renvoie “pas d’erreurs, tout va bien” ?
Ça ce serait return(“pas d’erreurs, tout va bien”); toi c’est return(0);
Je ne voulais pas dire printf(“pas d’erreurs, tout va bien”);. C’est une image pour dire que le programme s’est exécuté sans problème jusqu’à la fin (si j’ai bien compris, c’est ce à quoi sert le return 0; dans le main ?).
Une traduction française du code, quoi…
Les questions de Matt sont simples, tu as une fonction Renvoiechoix:
Que veux tu qu’elle prenne comme argument? (Réponse: aucun)
Que doit elle renvoyer? (À toi de préciser).
puis
Que prend-t-elle comme argument? (Réponse: aucun)
Que renvoit-elle? (réponse: 0, à ce stade on se moque de ce que tu veux que ça fasse où d’une signification métaphysique de ce «0»)
Le return(0) dans le main est très clair, c’est le code de retour du programme.
Ah ! D’accord…
Elle doit donc renvoyer au main l’opération que l’utilisateur veut effectuer.
Ou bien même, en +, toute la procédure pour effectuer le calcul voulu.
voilà donc la réponse donnée par fran.b, et que je m’apprètais à te donner.
Elle renvoie 0 . Elle ne renvoie pas le résultat du choix, ce qui est dans notre logique ce que NOUS voulons qu’elle fasse.
Effectivement, les fonctions qui n’ont pas besoin de renvoyer quelquechose ou qui doivent renvoyer des choses trop complexes autrement que par return >peuvent< renvoyer un 0 pour dire que tout s’est bien passé, mais c’est un choix.
Dans notre cas, nous voulions juste une fonction qui ne s’occupe que de demander le choix à l’utilisateur, et de renvoyer ce qui a été choisi.
Vas y, écris la.
[code]#include <stdio.h>
long renvoieChoix()
{
long operation
printf("1. Addition\n2. Soustraction\n3. Multiplication\n4. Division\n\nTapez le nombre correspondant à votre choix : ");
scanf("%ld", &operation)
return C'est là que je bloque;
}[/code]
Si tu fais
choix=renvoieChoix();
- Quel est le type de choix?
- Que veux tu que choix ait comme valeur?