IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

pointeurs .. besoin daide


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut pointeurs .. besoin daide
    bonjour

    voici mon source d'un programme

    on a un main , avec appel de 2 fonctions
    dans la fonction saisiecalcul il faut utiliser les pointeurs or je ne vois pas du tout comment m'y prendre ...
    pouvez vous maidez un peu ... merci davance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    #include <stdio.h>
    #include <conio.h>
     
     
    /* ------------------------------------------------------------------ */
     
    /*           FONCTION  ||  EXERCICE 3  ||  Question                   */
     
    /*                saisie calcul                                       */
     
    /* ------------------------------------------------------------------ */
    float saisiecalcul(int min,int max,int somme,float moyenne) {
            int choixC;
            int i;
            int nombre;
    /* Debut */
            nombre=0;
            min=0;
            max=0;
            i=0;
            somme=0;
            moyenne=0;
     
            printf("Exercice 3 : Q1 : 'n' nombres saisis\n\n");
            printf("Entre un nombre positif :\t");  /* "1er coup à blanc"  */
            scanf("%d",&nombre);
            min=nombre;
            max=nombre;
            somme=nombre;
            do {
                    printf("\n\nEntre un nombre positif :\t");
                    scanf("%d",&nombre);
                    if (nombre>0) {
                            if (nombre>max) {
                                    max=nombre;
                            }
                            if (nombre<min) {
                                    min=nombre;
                            }
                    i++;
                    somme+=nombre;
                    }
                    printf("Ajouter un nombre ? (1/0)\t");
                    scanf("%d",&choixC);
            }
            while (choixC==1);
     
            moyenne=somme/(i+1);
     
            return (min,max,somme,moyenne);
    }
     
     
    /* ------------------------------------------------------------------ */
     
    /*           FONCTION  ||  EXERCICE 3  ||  Question                   */
     
    /*                affichage                                           */
     
    /* ------------------------------------------------------------------ */
    void affichage() {
    /* les variables */
            int min;
            int max;
            int somme;
            int choix;
            float moyenne;
    /* Debut */
            min=0;
            max=0;
            somme=0;
            moyenne=0;
            printf("\n\nResultats de la serie :\n\n");
            printf("\t\t1-Mininum\n\n");
            printf("\t\t2-Maximum\n\n");
            printf("\t\t3-Somme\n\n");
            printf("\t\t4-Moyenne\n\n");
            printf("\t\t5-Quitter\n\n");
            printf("\t\tVotre choix -->\t");
            scanf("%d",&choix);
            switch (choix){
                            case 1 : {
                                     printf("\n\nLe Min de cette serie est : %d\n\n",min);
                                     getch();
                            }
                            break;
                            case 2 : {
                                    printf("\n\nLe Max de cette serie est : %d\n\n",max);
                                    getch();
                            }
                            break;
                            case 3 : {
                                    printf("\n\nLa Somme de cette serie est : %d\n\n",somme);
                                    getch();
                            }
                            break;
                            case 4 : {
                                    printf("La Moyenne de cette serie est : %f\n\n",moyenne);
                                    getch();
                            }
                            break;
                            case 5 : {
                                    printf("A bientot cher ami ... \n\n");
                                    getch();
                            }
                            break;
                            default : {
                                    printf("Erreur de saisie\n\n");
                                    getch();
                            }
     
            }
    }
     
     
     
    #pragma hdrstop
     
     
    //---------------------------------------------------------------------------
     
    #pragma argsused
    int main(int argc, char* argv[])
    {
            int max;
            int min;
            int somme;
            float moyenne;
     
            saisiecalcul(min,max,somme,moyenne);
            affichage(min,max,somme,moyenne);
     
            return 0;
    }
    //---------------------------------------------------------------------------

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Par défaut
    En fait quand tu appelle une fonction les arguments que tu lui as donné sont copier dans uen autre zone mémoire et donc indépendant de ce que tu lui as donné au départ, dans ton cas ta moyenne (du main) garderas toujours la même valeur !

    Pour résoudre ce problème il faut que tu lui passe en argument l'adresse mémoire de cette variable : &moyenne (par exemple).

    Pour accéder à la valeur tu devras mettre une étoile *moyenne vaudras par exemple 13.

  3. #3
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    ok je vois

    le passage par addresse c'est uniquement pour la fonction saisiecalcul c'est ca ?

    pour les declarations ... des pointeurs dans ce cas , c'est dans la fonction ou dans le main ?

  5. #5
    Membre éclairé Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Par défaut
    salut
    en fait comme a dit "Plorf" tu déclare ta fonction sans rien retoutner et tu mets des * devant les arguments et même dans ta fonction ( pour indiquer les valeurs et pas les adresses) ainsi la fonction pointera sur les variables et seront automatiquement changer au cas où tu les affectes autres valeurs.
    la nouvelle fonction est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    saisiecalcul(int *min,int *max,int *somme,float *moyenne) {
            int choixC;
            int i;
            int nombre;
    /* Debut */
            nombre=0;
            *min=0;
            *max=0;
            i=0;
            *somme=0;
            *moyenne=0;
     
            printf("Exercice 3 : Q1 : 'n' nombres saisis\n\n");
            printf("Entre un nombre positif :\t");  /* "1er coup à blanc"  */
            scanf("%d",&nombre);
            *min=nombre;
            *max=nombre;
            *somme=nombre;
            do {
                    printf("\n\nEntre un nombre positif :\t");
                    scanf("%d",&nombre);
                    if (nombre>0) {
                            if (nombre>*max) {
                                    *max=nombre;
                            }
                            if (nombre<*min) {
                                    *min=nombre;
                            }
                    i++;
                    *somme+=nombre;
                    }
                    printf("Ajouter un nombre ? (1/0)\t");
                    scanf("%d",&choixC);
            }
            while (choixC==1);
     
            *moyenne=*somme/(i+1);
    }

  6. #6
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Citation Envoyé par archer Voir le message
    en fait comme a dit "Plorf" tu déclare ta fonction sans rien retoutner (...)
    C'est pour ça qu'il faut mettre "void" dans la signature de la fonction.

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Indépendamment du problème de pointeurs commentés par les précédents intervenants sur le sujet, je te signale un usage du return qui laisse penser que tu n'as pas compris son fonctionnement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            return (min,max,somme,moyenne);
    return permet de quitter la fonction en renvoyant UNE valeur, celle qui suit le return en question. On ne peut pas renvoyer plusieurs valeurs. Si on a à renvoyer plusieurs valeurs, on doit passer par le liste des paramètres comme décrit par les post précédents.

    le compilateur admet l'écriture que tu utilises, mais fait tout à fait autre chose que ce tu espères. Pour lui, tu utilises l'opérateur , (virgule) : Il évalue min (ce qui ne fait rien au final puisque cette évaluation n'a pas d'effets de bords, c'est à dire n'engendre aucune action ni ne modifie aucune variable), puis max (même remarque) puis somme (idem) puis moyenne et l'expression prend pour valeur celle de moyenne et c'est cette (unique) valeur qui est retournée par la fonction.

Discussions similaires

  1. [Besoin d’aide] comment inserer des graphiques?
    Par NedaRyme dans le forum iReport
    Réponses: 8
    Dernier message: 12/03/2008, 14h33
  2. Besoin daide sur un code
    Par Panaméen dans le forum C
    Réponses: 8
    Dernier message: 14/10/2007, 11h15
  3. besoin daide automatisation de sql loader
    Par soufianetomase dans le forum SQL*Loader
    Réponses: 3
    Dernier message: 10/08/2007, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo