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 :

Problème de fonction !


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Par défaut Problème de fonction !
    Bonsoir, je travaille actuellement sur un code qui permettra de écrire la sortie la table de vérité des différentes portes logiques du système numériques.
    Une partie sur la quelle je code la fonction ET à 2 entrée depuis ce matin m'échappe, j'ai créer une fonction avec des conditions, qui retourne la valeur .. si la condition est 1.

    Info:

    A = 0,1,0,1
    B = 0,0,1,1

    S(sortie) doit valoir= 0,0,0,1

    Voila le code.
    Votre aide me sera très très utile!

    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
    #include <stdio.h>
    #include <math.h>
     
    int main()
    {
        int numVarNon[8] = {0,1,0,1,0,0,1,1} ;
        printf("Entree A: ""%d%d%d%d\n\n", numVarNon[0],numVarNon[1],numVarNon[2],numVarNon[3]);
        printf("Entree B: ""%d%d%d%d\n",numVarNon[4],numVarNon[5],numVarNon[6],numVarNon[7]);
        int w, x, y, z ;
     
        FonctionET2(numVarNon[0], numVarNon[4],numVarNon[1],numVarNon[5],numVarNon[2],numVarNon[6], numVarNon[3], numVarNon[7]);
        printf("%d%d%d%d", w, x, y, z );
     
     
     
     
     
    }
    int FonctionET2 (int *adET1,int * adET5, int *adET2, int * adET6, int * adET3, int * adET7, int * adET4, int * adET8) /* Porte ET à 2 entrées */
    {
        int w, x, y, z ;
     
        if (*adET1=1)
        {
           if ( *adET5=1)
            {
                w = 1 ;
            }
        }
        else
        {
            w = 0 ;
        }
     
        if  (* adET2=1)
        {
            if (* adET6=1)
            {
                x = 1 ;
            }
        }
     
        else
     
        {
            x = 0 ;
        }
     
        if (* adET3=1)
        {
            if (* adET7=1)
            {
                y = 1;
            }
     
        }
     
        else
     
        {
            y = 0;
        }
     
        if (* adET4=1)
        {
            if (* adET8=1)
            {
                z = 1;
            }
        }
     
        else
     
        {
            z = 0;
        }
     
        return w, x, y, z ;
    }

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    En C, et dans bien d'autres langages, il existe des opérateurs pour les tests logiques (&&, ||, !). Pourquoi tu ne les utilises pas ?


  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Par défaut
    Mais je ne comprends toujours pas mon erreur là-dedans.
    Merci à toi

  4. #4
    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
    Beaucoup d'erreurs avant même de s'intéresser à la finalité du programme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main()
    .....
        int w, x, y, z ;
     
        FonctionET2(numVarNon[0], numVarNon[4],numVarNon[1],numVarNon[5],numVarNon[2],numVarNon[6], numVarNon[3], numVarNon[7]);
        printf("%d%d%d%d", w, x, y, z );
    }
    - appel d'une fonction FonctionET2 sans prototype
    - Utilisation de variables w, x, y, z non initialisées : l'affichage n'aura aucun sens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int FonctionET2 (int *adET1,int * adET5, int *adET2, int * adET6, int * adET3, int * adET7, int * adET4, int * adET8) /* Porte ET à 2 entrées */
    - Les paramètres sont des adresses de int alors que les arguments passés dans main() sont des int
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (*adET1=1) // et les autres
    réalise une assignation et pas une comparaison. cette dernière se fait avec ==. Le résultat est ici toujours VRAI (ce qu'aurait dû signaler le compilateur)
    - En C, on ne peut retourner qu'une valeur. Cette expression w, x, y, z est construite à partir de l'opérateur , (virgule) : w est évalué puis x est évalué puis y est évalué puis z est évalué et l'expression prend la valeur de la dernière évaluation. Ici, les trois premières évaluations n'ont pas d'effets de bords et sont donc sans effets.
    Le code est donc équivalent à

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Par défaut
    En y réfléchissant, j'ai vraiment fais des erreurs monumental. Ai ai ai.
    Malgrès ton explication, j'ai modifié quelques affectations etc.. mais ma fonction ne tient toujours pas debout.

    Est-ce tu pourrais m'expliquer la structure.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    Pour plus de clarté, je pense que tu devrais séparer ton tableau en 2 (entreesA et entreesB, par exemple) et créer un tableau de sorties (sorties).

    Ensuite, tu fais une boucle avec un ET logique (&&) sur chacune des entrées et tu stockes le résultat en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sorties[i] = entreesA[i] && entreesB[i];

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  2. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  3. Problème de fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2005, 20h30
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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