Operations dans les tableaux

Résolu/Fermé
jeandchanel Messages postés 135 Date d'inscription vendredi 10 juin 2016 Statut Membre Dernière intervention 31 mai 2017 - Modifié par baladur13 le 14/06/2016 à 09:45
Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 - 15 juin 2016 à 09:30
Bonjour,
Peut on diviser successivement les éléments d'un tableau ?
exemple:
int tableau[4] = {16,4,3,2};
tableau[0]/tableau[1]/tableau[2]/tableau[3];





Merci d'avance..!?

1 réponse

Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 649
Modifié par Pierre1310 le 14/06/2016 à 09:55
Salut,

Ce que tu viens d'écrire se résume à :

int i, tableau[4] = {16,4,3,2};
i = ((tableau[0]/tableau[1])/tableau[2])/tableau[3];


Aucun navigateur ne propose d'extension boule-de-cristal : postez des informations pour avoir de l'aide...
1
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
14 juin 2016 à 10:15
on peut aussi préciser que les divisions successives seront des divisions entières.
0
Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 649
14 juin 2016 à 10:19
De toute façon, la division de variables de type int n'est pas une bonne idée vu qu'il n'y a pas de partie décimale.
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 14/06/2016 à 13:56
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.

#include <stdio.h>

int main(void) {
    printf("%d\n",          16 / 4 / 3 / 2);
    printf("%f\n", (double) 16 / 4 / 3 / 2);
    printf("%f\n",          16.0 / 4 / 3 / 2);
    printf("%f\n",          16.0 / 4.0 / 3.0 / 2.0);
    return 0;
}
donne
0
0.666667
0.666667
0.666667

Dal
0
Pierre1310 Messages postés 8564 Date d'inscription lundi 21 décembre 2015 Statut Membre Dernière intervention 21 juillet 2020 649
14 juin 2016 à 13:57
Oui mais il faut soit demander à ce que le résultat soit afficher en décimal ou écrire double devant.

Ce sont des tour de passe passe, autant faire bien dès le début, bien poser le problème pour bien y répondre.
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 14/06/2016 à 14:25
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 :

#include <stdio.h>

int main(void) {
    printf("%f\n", 16.0 + 4.0 + 3.0 + 2.0);
    printf("%d\n", 16.0 + 4.0 + 3.0 + 2.0); /* bogue */
    return 0;
}
ce qui donne un magnifique :
25.000000
0

:-)

Dal
0