[Exercice]Modules et Fonctions (C)
Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

[Exercice]Modules et Fonctions (C)



  1. #1
    Rouchesta

    Post [Exercice]Modules et Fonctions (C)


    ------

    Salut à tous,

    Je viens une fois de plus faire appel à vos connaissances .

    Cette fois ci je suis très près du but dans l'exercice qui suit mais j'ai l'impression que je tombe sur un problème semblable au dernier exercice que j'ai poster et n'ayant pas encore vu les pointeurs je me demande si je suis apte à le réaliser.

    DA : Garnir un tableau de 10 nombres entiers, calculez sa moyenne et sortir le contenu du tableau ainsi que la moyenne obtenue. Utilisez 3 modules (fonctions).

    Problèmes rencontrés à la compilation :

    | In function 'int main()':
    14 | error: invalid conversion from 'in*' to 'int'
    14 | error: initializing argument 1 of 'int moyenne(int)'
    === Build finished; 2 errors, o warnings ===

    Je pense apercevoir un pointeur dans cette histoire ?

    Voici mon code :
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #define N 9
    
    //Prototypes
    void obtention(int[]);
    int moyenne(int);
    void sortie(int[],int);
    
    int main(void)
    {
        int moy=0,tabNbr[N];
        obtention(tabNbr);
        moy=moyenne(tabNbr);
        sortie(tabNbr,moy);
    }
    
    void obtention(int tabNbr[])
    {
        int cpt=0;
        while(cpt<10)
        {
            printf("Entrez le %de entier : ",cpt+1);
            scanf("%d",&tabNbr[cpt]);
            cpt++;
        }
    }
    
    int moyenne(int tabNbr[],int moy)
    {
        int cpt=0;
        while(cpt<10)
        {
            moy+=tabNbr[cpt];
            cpt++;
        }
        moy/=10;
        return moy;
    }
    
    void sortie(int tabNbr[],int moy)
    {
        printf("\nLes nombres sont : %d",tabNbr[0]);
        int cpt=1;
        while(cpt<10)
        {
            printf(", %d",tabNbr[cpt]);
            cpt++;
        }
        printf("\nMoyenne = %d",moy);
    }
    Merci de votre aide,

    -----
    Dernière modification par Rouchesta ; 04/01/2012 à 10h54. Motif: Commentaire dans le code
    printf("Tololololololo");

  2. #2
    invite4492c379

    Re : [Exercice]Modules et Fonctions (C)

    Hello,

    je parcours ton code en diagonale et ma première remarque sera :

    * tu déclares int moyenne(int)
    * tu utilises int moyenne(int*)
    * tu définis int moyenne(int*, int)

    => il doit y avoir comme un problème

  3. #3
    Rouchesta

    Post Re : [Exercice]Modules et Fonctions (C)

    Merci pour l'indice,

    J'avais oublier de mettre le deuxième argument dans l'utilisation de ma fonction moyenne() ainsi que lors de sa déclaration.


    Voici le code final et fonctionnel :
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #define N 9
    
    void obtention(int[]);
    int moyenne(int[],int);
    void sortie(int[],int);
    
    int main(void)
    {
        int moy=0,tabNbr[N];
        obtention(tabNbr);
        moy=moyenne(tabNbr,moy);
        sortie(tabNbr,moy);
    }
    
    void obtention(int tabNbr[])
    {
        int cpt=0;
        while(cpt<10)
        {
            printf("Entrez le %de entier : ",cpt+1);
            scanf("%d",&tabNbr[cpt]);
            cpt++;
        }
    }
    
    int moyenne(int tabNbr[],int moy)
    {
        int cpt=0;
        while(cpt<10)
        {
            moy+=tabNbr[cpt];
            cpt++;
        }
        moy/=10;
        return moy;
    }
    
    void sortie(int tabNbr[],int moy)
    {
        printf("\nLes nombres sont : %d",tabNbr[0]);
        int cpt=1;
        while(cpt<10)
        {
            printf(", %d",tabNbr[cpt]);
            cpt++;
        }
        printf("\nMoyenne = %d",moy);
    }
    printf("Tololololololo");

  4. #4
    invite4492c379

    Re : [Exercice]Modules et Fonctions (C)

    OK, fonctionnel mais ...
    Il est inutile de passer un paramètre que tu n'utilises pas (et qui fait fonctionner ton code par effet de bord) ... ta fonction moyenne devrait être (comme il est assumé que le tableau contiendra toujours 10 nombres):
    Code:
    float moyenne(int tabNbr[])
    {
        int somme=0;
        int cpt=0;
        while(cpt<10)
        {
            somme+=tabNbr[cpt];
            cpt++;
        }
        return (float)somme/10.0;
    }
    Tu calcules ici une moyenne ... la moyenne peut être un réel même avec des donnés entières ...

  5. A voir en vidéo sur Futura
  6. #5
    Rouchesta

    Post Re : [Exercice]Modules et Fonctions (C)

    Dans cette expression tu utilises le casting

    Pourquoi deux fois ?
    return (float)somme/10.0;

    J'ai tester et ça marche dès lors que l'un d'eux possède le casting :
    Soit > return (float)somme/10;
    Soit > return somme/10.; (Plus court)

    Code Final avec prise en charge de la moyenne décimale :
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #define N 9
    
    void obtention(int[]);
    float moyenne(int[]);
    void sortie(int[],float);
    
    int main(void)
    {
        float moy;
        int tabNbr[N];
        obtention(tabNbr);
        moy=moyenne(tabNbr);
        sortie(tabNbr,moy);
    }
    
    void obtention(int tabNbr[])
    {
        int cpt=0;
        while(cpt<10)
        {
            printf("Entrez le %de entier : ",cpt+1);
            scanf("%d",&tabNbr[cpt]);
            cpt++;
        }
    }
    
    float moyenne(int tabNbr[])
    {
        int som=0;
        int cpt=0;
        while(cpt<10)
        {
            som+=tabNbr[cpt];
            cpt++;
        }
        return som/10.;
    }
    
    void sortie(int tabNbr[],float moy)
    {
        printf("\nLes nombres sont : %d",tabNbr[0]);
        int cpt=1;
        while(cpt<10)
        {
            printf(", %d",tabNbr[cpt]);
            cpt++;
        }
        printf("\nMoyenne = %.3f",moy);
    }
    printf("Tololololololo");

  7. #6
    invite4492c379

    Re : [Exercice]Modules et Fonctions (C)

    Citation Envoyé par Rouchesta Voir le message
    Dans cette expression tu utilises le casting

    Pourquoi deux fois ?
    return (float)somme/10.0;

    J'ai tester et ça marche dès lors que l'un d'eux possède le casting :
    Soit > return (float)somme/10;
    Soit > return somme/10.; (Plus court)
    (...)
    Je ne caste qu'une fois, le second est une constante, pour être complet j'aurais dû écrire :
    return (float)somme/10.0f;

    L'écriture complète évite de laisser le choix au compilateur (il n'a pas besoin de se casser la tête pour faire des casts implicites). C'est juste une habitude que j'ai (comme parenthéser complétement toutes mes conditionnelles).

    Il y a encore une erreur ... je t'aiguille ... à quoi sert le #define N 9 ?

  8. #7
    Rouchesta

    Re : [Exercice]Modules et Fonctions (C)

    En cours nous utilisons le "#define X nbr" pour avoir la possibilité de changer la taille du tableau facilement, car en cas de grand code cela peut être plus rapide pour le codeur que d'aller partout dans le script modifier les tailles etc.

    Dans l'exemple ci-dessus cette ligne est inutile puisque le tableau de changera jamais de taille.
    Mais par habitude je travaille de la sorte et les profs sont contents.

    Et aussi la librairie <conio.h> n'a rien a faire dans ce code.

    printf("Tololololololo");

  9. #8
    invite4492c379

    Re : [Exercice]Modules et Fonctions (C)

    Donc tu déclares un tableau de taille 9 et tu y insères 10 éléments ?

  10. #9
    Rouchesta

    Re : [Exercice]Modules et Fonctions (C)

    Mais l'indice commence à 0 ?

    0,1,2,3,4,5,6,7,8,9

    Non ?
    printf("Tololololololo");

  11. #10
    invite4492c379

    Re : [Exercice]Modules et Fonctions (C)

    Dans ton code tu as : int tabNbr[N];
    comme tu as #define N 9 cela revient à int tabNbr[9] qui déclare un tableau de 9 éléments indicés de 0 à 8.

    À la déclaration tu donnes toujours le nombre maximum d'éléments.

  12. #11
    Rouchesta

    Re : [Exercice]Modules et Fonctions (C)

    Je pensais jouer avec les indices et non les éléments.

    Merci de la précision.

    Dans mon cas je pense que ça n'influe pas sur le code car quand la place manque dans un tableau il ajoute quand même une case, contre la volonté du codeur.
    Mais pour être plus propre c'est vrai que je dois mettre "#define N 10".

    @++
    printf("Tololololololo");

  13. #12
    invite4492c379

    Re : [Exercice]Modules et Fonctions (C)

    Non ... Il n'ajoute pas ... quand tu déclares un tableau de 10 entiers par exemple, le code généré va en fait réserver un espace mémoire pour stocker 10 entiers et pas plus. Si ça se trouve l'emplacement suivant sera réservé pour une autre variable. Si tu essayes de modifier le 11ème élément tu vas en fait modifier une autre variable ... et je t'assure que ce genre d'erreur est difficilement repérable (il y a des outils pour t'assurer que cela n'arrive pas ...).

  14. #13
    Rouchesta

    Post Re : [Exercice]Modules et Fonctions (C)

    Je dois confondre avec autre chose ^^ Les chaines de caractères peu-être.

    Code Final Final :
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #define N 10
    
    void obtention(int[]);
    float moyenne(int[]);
    void sortie(int[],float);
    
    int main(void)
    {
        float moy;
        int tabNbr[N];
        obtention(tabNbr);
        moy=moyenne(tabNbr);
        sortie(tabNbr,moy);
    }
    
    void obtention(int tabNbr[])
    {
        int cpt=0;
        while(cpt<10)
        {
            printf("Entrez le %de entier : ",cpt+1);
            scanf("%d",&tabNbr[cpt]);
            cpt++;
        }
    }
    
    float moyenne(int tabNbr[])
    {
        int som=0;
        int cpt=0;
        while(cpt<10)
        {
            som+=tabNbr[cpt];
            cpt++;
        }
        return som/10.;
    }
    
    void sortie(int tabNbr[],float moy)
    {
        printf("\nLes nombres sont : %d",tabNbr[0]);
        int cpt=1;
        while(cpt<10)
        {
            printf(", %d",tabNbr[cpt]);
            cpt++;
        }
        printf("\nMoyenne = %.3f",moy);
    }
    printf("Tololololololo");

  15. #14
    invite4492c379

    Re : [Exercice]Modules et Fonctions (C)

    ... les chaînes de caractères sont des tableaux de caractères donc même principe ...

Discussions similaires

  1. Exercice fonctions.
    Par invitee149f508 dans le forum Mathématiques du collège et du lycée
    Réponses: 6
    Dernier message: 09/01/2011, 15h30
  2. Exercice : Fonctions et géométrie
    Par invite3ea86e13 dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 19/02/2010, 20h05
  3. Exercice fonctions.
    Par invite992a971f dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 08/03/2009, 11h44
  4. exercice étude de fonctions
    Par invite7caadc69 dans le forum Mathématiques du collège et du lycée
    Réponses: 18
    Dernier message: 27/04/2008, 08h58
  5. Exercice Fonctions V/F
    Par invitefc621b95 dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 07/11/2007, 12h15