bonne ou mauvaise idée, je ne sais pas, mais il faut juste savoir ce que l'on fait, la division entière ayant sa propre utilité, et ne pas s'étonner si le résultat est 0.
on peut aussi avoir des variables de type int, et obtenir un résultat décimal si l'une d'elles est décimale ou avec un cast.
On ne sait pas si notre ami jeandchanel veut faire des divisions entières ou pas. Si ça se trouve c'est bien ce qu'il veut faire ;-) J'attire juste son attention sur le problème, que ni lui ni toi vous aviez mentionné.
Sinon, je ne ne vois pas où se trouve le "tour de passe passe", c'est l'application des règles de base de l'opérateur de division en C.
Aussi, je ne suis pas sûr de comprendre ce que tu veux dire par "autant faire bien dès le début, bien poser le problème pour bien y répondre". Si tu veux dire par là, utiliser des variables double pour stocker des entiers au lieu de variables int, je ne suis pas d'accord non plus : il me parait naturel de stocker des nombres entiers sous la forme d'entiers dans un tableau, parce que ce sont des entiers, et non pas sous forme de floats ou de double, qui vont occuper plus d'espace mémoire, sous prétexte qu'on veut ensuite pouvoir faire des divisions avec virgule dessus.
Si demain, il lui prend l'envie de faire des additions sur des entiers déguisés en double, il peut avoir d'autres surprises ou erreurs :
Après je ne vois pas trop l'utilité de diviser des entiers ensemble sauf pour des moyennes ou autre.
Après pour ce qui est du stockage dans des tableaux, c'est pour les programmes de bas niveau, les structures sont plus adaptées pour les gros codes.
Merci a tous pour vos esquisses de réponses, je reconnais que le problème n'a pas été posé clairement et je m'en excuse.
En fait je voudrais savoir pourquoi ce code ne marche pas:
#include <stdio.h> #include <stdlib.h>
double division(double tableau[], int tailleTableau) { int i = 0; double diviseur = 1;
Je n'ai pas testé ton code, mais je pense que, dans ta fonction division(), tu devrais initialiser diviseur à tableau[0] et non pas à 1, et commencer ta boucle à 1 et non à 0.
Sert toi de tailleTableau aussi pour borner ta boucle, puisque tu le passes dans la fonction.
Dans main, tes déclarations de "diviseur" et de "i" ne servent à rien.
il faudrait aussi vérifier que ton tableau, à partir de l'indice 1, ne contient pas la valeur 0, et renvoyer une erreur si c'est le cas (afin d'éviter la division par zéro).
@jeandchanel : super, je suis content pour toi, tu n'étais pas loin de la solution.
@Pierre1310, @jeandchanel : en l'occurrence, jeandchanel ne voulait pas du tout faire une succession de divisions entières, comme semble le montrer son code, mais une succession de divisions réelles. Dans ces conditions, alternativement au code proposé, où l'on fait autant de divisions que d'entrées dans le tableau - 1, on pourrait faire une multiplication de tous les nombres stockés à partir de l'indice 1 entre eux, et faire une division réelle du nombre à l'indice 0 par le nombre obtenu. Cela a plusieurs avantages :
- on évite une perte de précision liée aux limitations des calculs successifs de divisions réelles (qui peuvent ne pas tomber juste) compte tenu de la précision du type choisit
- si on a un tableau avec de très nombreuses données, on accélère le calcul sensiblement, car la division réelle est bien plus coûteuse pour la machine que la multiplication d'entiers (ou même la multiplication réelle)
- par la même occasion, on peut stocker des entiers dans le tableau, et faire une économie de mémoire vive si on part du principe que les données de départ sont effectivement des entiers
- on fait une seule division réelle
En fait, c'est plutôt la division réelle successive qui parait d'application pratique limitée.
@Pierre1310 : cela n'a finalement rien à voir avec la préoccupation de jeandchanel, qui nous avait involontairement dirigé sur une fausse piste, mais tu t'interrogeais sur l'utilité pratique d'opérer des divisions entières successives.
J'ai 16 piles
J'ai besoin de 4 piles pour faire fonctionner un drone
J'ai besoin de 3 drones pour constituer un escadron
J'ai besoin de 2 escadrons pour surveiller un km carré
Combien de kilomètres carrés pourrai-je surveiller avec 16 piles ?
j'ai besoin de vos conseils par rapport a ce code. Je voudrais savoir comment faire pour que cette fonction renvoie un message d'erreur lorsque l'utilisateur rentre la valeur 0 comme 2ieme indice? exemple : (x,0) :
printf("Erreur, division par o impossible !!!");
Merci d'avance.
#define TAILLEMAX 1000
double division(double tableau[], int tailleTab) { int i = 0; double diviseur = tableau[0];
@Pierre1310, @jeandchanel : en l'occurrence, jeandchanel ne voulait pas du tout faire une succession de divisions entières, comme semble le montrer son code, mais une succession de divisions réelles. Dans ces conditions, alternativement au code proposé, où l'on fait autant de divisions que d'entrées dans le tableau - 1, on pourrait faire une multiplication de tous les nombres stockés à partir de l'indice 1 entre eux, et faire une division réelle du nombre à l'indice 0 par le nombre obtenu. Cela a plusieurs avantages :
- on évite une perte de précision liée aux limitations des calculs successifs de divisions réelles (qui peuvent ne pas tomber juste) compte tenu de la précision du type choisit
- si on a un tableau avec de très nombreuses données, on accélère le calcul sensiblement, car la division réelle est bien plus coûteuse pour la machine que la multiplication d'entiers (ou même la multiplication réelle)
- par la même occasion, on peut stocker des entiers dans le tableau, et faire une économie de mémoire vive si on part du principe que les données de départ sont effectivement des entiers
- on fait une seule division réelle
en d'autres termes :
donnent tous deux :
En fait, c'est plutôt la division réelle successive qui parait d'application pratique limitée.
@Pierre1310 : cela n'a finalement rien à voir avec la préoccupation de jeandchanel, qui nous avait involontairement dirigé sur une fausse piste, mais tu t'interrogeais sur l'utilité pratique d'opérer des divisions entières successives.
Voilà une application pratique (avec 16 / 4 / 3 / 2 proposé initialement) :
J'ai 16 piles
J'ai besoin de 4 piles pour faire fonctionner un drone
J'ai besoin de 3 drones pour constituer un escadron
J'ai besoin de 2 escadrons pour surveiller un km carré
Combien de kilomètres carrés pourrai-je surveiller avec 16 piles ?
:-)
Dal
j'ai besoin de vos conseils par rapport a ce code. Je voudrais savoir comment faire pour que cette fonction renvoie un message d'erreur lorsque l'utilisateur rentre la valeur 0 comme 2ieme indice? exemple : (x,0) :
Merci d'avance.