Partage
  • Partager sur Facebook
  • Partager sur Twitter

Soucis avec le double

Sujet résolu
    14 août 2019 à 0:13:22

    Bonsoir 

    Je fait en ce moment l'éxo qui consiste a a obtenir la moyenne des valeurs d'un tableau j'ai réussis mais j'ai un petit soucis 

    Tout d'abord voici le code (oui je me complique avec des while mais je doit faire comme ça pour le moment voila :))

    double moyenneTableau(int *tableau, int tailleTableau)
    {
        int i;
        int somme;
        double moyenne;
    
        moyenne = 0;
        somme = 0;
        i = 0;
        while(i < tailleTableau)
        {
            somme = somme + tableau[i];
            i++;
        }
        moyenne = somme / tailleTableau;
        return (moyenne); 
    
    }
    int main()
    {
        int tab[5] = {11, 16, 8, 13, 12};
        double moyen;
        moyen = moyenneTableau(tab,5);
        printf("%.3f\n", moyen);
    }

    Ce code fonctionne mais voila si je rajoute .5 a 11 et .5 a 13 qui donne {11.5, 16, 8, 13.5, 12}

    La moyenne est normalement de 12.2 

    saut que mon tableau est un int donc si je contourne le problème par un double (mon tab de main deviens un double) et bah cette fois ci j'ai un nouveau soucis car dans le prototype de la fonction fournis avec l'éxo 

    double moyenneTableau(int *tableau, int tailleTableau)

    tableau est un int vous me suivez ?

    Même en modifiant la variable somme de ma fonction moyenne() en double sa ne change rien 

    Et quand je modifie le type de tab qui se situe dans le main en double j'ai ce message d'erreur 

    ft_putstr.c:73:28: warning: incompatible pointer types passing 'double [5]' to parameter of type 'int *' [-Wincompatible-pointer-types]
        moyen = moyenneTableau(tab,5);
                               ^~~
    ft_putstr.c:51:28: note: passing argument to parameter 'tableau' here
    double moyenneTableau(int *tableau, int tailleTableau)

    Qui reviens a ce que j'ai dit plus haut justement le paramètre de la fonction moyenne() est un int est le tab ici est un double

    Je me demande si ce que j'essaye de faire est tout simplement possible 

    -
    Edité par Bintou Karah 14 août 2019 à 0:35:51

    • Partager sur Facebook
    • Partager sur Twitter
      14 août 2019 à 1:44:55

      si tab est un tableau de double, il faut passer des doubles à la fonction:

      double moyenneTableau(double *tableau, int tailleTableau)
      

      et également déclarer somme en double.

      • Partager sur Facebook
      • Partager sur Twitter
        14 août 2019 à 1:58:02

        Oui donc impossible sans changer le int en double 

        Merci :)

        J'en profite pour rétorquer avec ce code 

        void maximumTableau(int tableau[], int tailleTableau, int valeurMax)
        {
            int i;
            i = 0;
            valeurMax = 45;
            while(i < tailleTableau)
            {
                printf("%d ", tableau[i]);
                i++;
                if(tableau[i] == valeurMax)
                {
                    tableau[i] = 0;
                }
            }
        }
        
        int main()
        {
            int tab[5] = {14,22,43,65,55};
            
            maximumTableau(tab,5,45);
        }

        mon if n'est pas pris en considération pourtant je lui déclare bien le tableau avec mon index qui va parcourir les case jusqu'a trouver la valeur == a valeur max que j'initialise en appelant ma fonction c'est comme sa que sa marche selon ce que j'ai compris et non ! pourtant j'affiche bien mes valeurs aucun soucis la dessus 

        EDIT : ah mais j'ai compris quand il arrive au if il a déjà finis de lire la boucle donc 45 n'est pas égal a 55 donc il faut que je trouve le moyen de revenir au début avant d'entrée dans le if 

        EDIT : Problème régler je m'était tromper de signe  :) je donne le code au cas ou 

        void maximumTableau(int tableau[], int tailleTableau, int valeurMax)
        {
            int i;
            i = 0;
        
            valeurMax = 45;
            while(i < tailleTableau)
            {
                if(tableau[i] > valeurMax)
                tableau[i] = 0;
                printf("%d ", tableau[i]);
                i++;
            }
        }
        
        int main()
        {
            int tab[5] = {14,76,43,65,49};
            
            maximumTableau(tab,5,45);
        }

        -
        Edité par Bintou Karah 14 août 2019 à 2:19:58

        • Partager sur Facebook
        • Partager sur Twitter

        Soucis avec le double

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown