Operations dans les tableaux [Résolu/Fermé]

Signaler
Messages postés
135
Date d'inscription
vendredi 10 juin 2016
Statut
Membre
Dernière intervention
31 mai 2017
-
Messages postés
8554
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
21 juillet 2020
-
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

Messages postés
8554
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
21 juillet 2020
578
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
8554
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
21 juillet 2020
578
Essaye de mettre un printf dans ton for pour vérifier ce qu'il y a dans ton tableau, si diviseur récupère bien les valeurs dans un premier temps.
Messages postés
135
Date d'inscription
vendredi 10 juin 2016
Statut
Membre
Dernière intervention
31 mai 2017

Merci Dal pour votre aide ça marche comme sur des roulettes !!!
Messages postés
5491
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 avril 2021
932
@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 d'autres termes :

#include <stdio.h>

int main(void) {
    printf("%f\n", 16.0 / 4.0 / 3.0 / 2.0);
    printf("%f\n", 16.0 / (4 * 3 * 2));
    return 0;
}
donnent tous deux :
0.666667
0.666667
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
Messages postés
135
Date d'inscription
vendredi 10 juin 2016
Statut
Membre
Dernière intervention
31 mai 2017
>
Messages postés
5491
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 avril 2021

Bonjour Dal, et les autres membres.

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];

for(i = 1; i < tailleTab; i++)
{
diviseur /=tableau[i];
}

return diviseur;
}

void demanderNombresDivision()
{
int i, tailleTab;
double tableau[TAILLEMAX] = {};


printf("\n");
printf("Vous avez choisi la Division !\n");

printf("Entrez le nombre de termes ");
scanf("%d", &tailleTab);

for(i = 0; i < tailleTab; i++)
{
printf("Entrez le nombre N* %d ? ", i);
scanf("%lf", &tableau[i]);
}

division(tableau, tailleTab);
printf("\n");
printf("Le resultat de la division est de %.2lf\n", division(tableau, tailleTab));

}

int main()
{
demanderNombresDivision();

return 0;
}
Messages postés
8554
Date d'inscription
lundi 21 décembre 2015
Statut
Membre
Dernière intervention
21 juillet 2020
578
Tu as le choix, soit tu analyses la donnée que saisie l'utilisateur, soit tu analyse le tableau en entier après qu'il soit remplit.