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 :

Comparaison de deux tableaux


Sujet :

C

  1. #1
    Membre actif
    Homme Profil pro
    sous marinier
    Inscrit en
    Janvier 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : sous marinier

    Informations forums :
    Inscription : Janvier 2018
    Messages : 37
    Par défaut Comparaison de deux tableaux
    Bonjour !

    Je voudrais simuler un jeu de hasard avec un programme en C et je voudrais savoir s'il m'est possible de comparer les données du joueur avec ceux tirée au hasard, en sachant que ces données sont classifié dans un tableau dynamique. Je suis conscient que vous n'allez pas écrire le programme pour moi mais pourriez vous m'orienter franchement dans une direction ?

    Un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(T1[i] != T2[i])
       			c = 0;
    	}  
    	if(c == 1)
    suffirait il?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 29
    Par défaut
    Tu peux mettre cette comparaison de tableau dans une fonction verifier_egalite() par exemple, qui prend en paramètre tes deux tableaux ainsi que leur taille.
    Il te manque une initialisation de ta variable c, et la boucle autour de tes comparaisons successives.

    On pourrait avoir un truc comme ça au final (écrit vite fait sans vérification et j'ai supposé que c'était des tableaux d'entier) :
    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
     
    //! Vérifie l'égalité de deux tableau, renvoie 0 si égal, 1 si différent
    int verifier_egalite(int * T1, int * T2, int taille)
    {
        // On considère le tableau comme égale initialement
        int c = 0;
        // Au premier élément rencontré qui n'est pas bon, on marque le tableau comme différent
        for (int i = 0; i < taille; ++i)
        {
            if (T1[i] != T2[i]) {
               c = 1;
               break;
            }
        }
        return c;
    }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 145
    Billets dans le blog
    4
    Par défaut
    memcmp existe pour ça.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par DarkinGoD Voir le message
    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
    //! Vérifie l'égalité de deux tableau, renvoie 0 si égal, 1 si différent
    int verifier_egalite(int * T1, int * T2, int taille)
    {
        // On considère le tableau comme égale initialement
        int c = 0;
        // Au premier élément rencontré qui n'est pas bon, on marque le tableau comme différent
        for (int i = 0; i < taille; ++i)
        {
            if (T1[i] != T2[i]) {
               c = 1;
               break;
            }
        }
        return c;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //! Vérifie l'égalité de deux tableau, renvoie 0 si égal, 1 si différent
    int verifier_egalite(int * T1, int * T2, size_t taille)
    {
        // On considère les tableaux comme égaux initialement
        // Au premier élément rencontré qui n'est pas bon, on marque le tableau comme différent
        for (size_t i = 0; i < taille; ++i)
        {
            if (T1[i] != T2[i]) return 1;
        }
        return 0;
    }
    Moins académinque mais tellement plus simple à écrire. Ensuite, on peut optimiser en utilisant des pointeurs...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre actif
    Homme Profil pro
    sous marinier
    Inscrit en
    Janvier 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : sous marinier

    Informations forums :
    Inscription : Janvier 2018
    Messages : 37
    Par défaut
    Darkingod, le but est de me renvoyer un ++ au compteur si au moins un des chiffre du premier tableau correspond au tirage, et pas me renvoyer un c = 1 si TOUT les chiffres entre ces deux tableaux sont exacts.

    J'ai tenté ça :

    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
    int verifier_egalite(int *T1, int *T2, int taille)
    {
        // On considère le tableau comme égale initialement
        int c = 0;
        // chaque element rencontré egale à la selection s'incremente au compteur
        for (int i = 0; i < taille; ++i)
        {
            if (T1[i] == T2[i]) {
               c++ ;
               }
           }
        return c;
    }
     
    int main()
    {
     
    compteur = verifier_egalite(nbgen, selection, n);
             printf("Compteur : %d", compteur);
    }


    Mais j'ai toujours ou que mon nombre de tirage egal au compteur... La taille doit elle correspondre à mon premier tableau, l'addition des deux, ou à mon nombre de tirage ?

    merci

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    C'est quoi tes nbgen et selection? Ce sont bien 2 tableaux d'int de taille n! Ça devrait marcher.
    La taille n à transmettre c'est celle de chacun des tableaux, et les deux doivent avoir exactement la même taille sinon ça n'a aucun sens.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par P1GOU1 Voir le message
    Darkingod, le but est de me renvoyer un ++ au compteur si au moins un des chiffre du premier tableau correspond au tirage, et pas me renvoyer un c = 1 si TOUT les chiffres entre ces deux tableaux sont exacts.
    Citation Envoyé par P1GOU1 Voir le message
    Je voudrais simuler un jeu de hasard avec un programme en C et je voudrais savoir s'il m'est possible de comparer les données du joueur avec ceux tirée au hasard, en sachant que ces données sont classifié dans un tableau dynamique.
    Ben désolé, mais rien dans ta demande initiale ne laissait sous-entendre ça. Si tu ne dis pas ce que tu veux avec un minimum d'exactitude, on peut pas le deviner !!!

    Citation Envoyé par P1GOU1 Voir le message
    Un simple :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(T1[i] != T2[i])
       			c = 0;
    	}  
    	if(c == 1)

    suffirait il?
    Ca depend de ce qui se passe ensuite quand c == 1 !!!!

    Citation Envoyé par P1GOU1 Voir le message
    J'ai tenté ça :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int verifier_egalite(int *T1, int *T2, int taille)
    {
        int c = 0;
        // chaque element rencontré egale à la selection s'incremente au compteur
        for (int i = 0; i < taille; ++i)
        {
            if (T1[i] == T2[i]) {
               c++ ;
               }
           }
        return c;
    }
    Ce code ne correspond pas à ta demande (mais bon, si tes demandes changent toutes les 5 mn...). Ton code compare chaque paire T1[n] == T2[n] avec n égal. Ainsi si T1 contient 1, 2, 3, 4, 5 et que T2 contient 10, 11, 12, 13, 1 ben ton algo trouvera que dalle parce que le premier "1" de T1 ne sera jamais comparé avec le dernier "1" de T2.

    Tu veux savoir au-moins un chiffre de T1 se trouve dans T2. Il te faut donc parcourir chaque chiffre de T1 et regarder si ce chiffre se trouve dans T2. Un algo donc en n² qu'on peut optimiser si on prend soin de commencer par trier T1 et T2. Dans ce cas, on peut alors traiter T1 et T2 en parallèle (le nom exact est "appareillage") et on retombe dans un algo en n *log(n).

    Et quoi qu'il en soit, le nom de la fonction ne sera certainement pas "verifier_egalite" !!!

    Citation Envoyé par P1GOU1 Voir le message
    // On considère le tableau comme égale initialement
    Même ce commentaire, en plus de son orthographe de benêt ("le", article défini masculin, "égale", adjectif féminin ; et égal à quoi ???) ne correspond pas au but invoqué. Tu veux savoir si les deux tableaux sont égaux ou bien si l'un des chiffres du premier se trouve dans l'autre ???

    Citation Envoyé par P1GOU1 Voir le message
    La taille doit elle correspondre à mon premier tableau, l'addition des deux, ou à mon nombre de tirage ?

    Ce genre de question en arrive presque à me faire peur...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre actif
    Homme Profil pro
    sous marinier
    Inscrit en
    Janvier 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : sous marinier

    Informations forums :
    Inscription : Janvier 2018
    Messages : 37
    Par défaut
    En effet j'aurais dû être plus clair dès mon premier post.
    Mais j'ai la chance, la déficience sociale de certain intervenant sur ce forum "d'entraide" informatique va vite me remettre dans le bain.

    Pour ceux qui reliront ce post plus tard je vais m'informer sur le tri.

    Puis le tri me donnera de l'aide pour la recherche dichotomique, ce qui parait être exactement ce que je recherche.

    Si vous avez d'autres idées qui m’évitent de me farcir deux chapitres je reste ouvert.

    Je viendrais poster mon code suite à cela, qu'il marche ou non, pour qu'on m'aide ou aider les autres.

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 801
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par P1GOU1 Voir le message
    Mais j'ai la chance, la déficience sociale de certain intervenant sur ce forum "d'entraide" informatique va vite me remettre dans le bain.
    Où as-tu vu écrit sur ce forum "forum social" ? Si tu veux du social tu vas voir les restos du coeur.
    Comme tu le dis, on est là justement pour "aider". Sauf qu'on ira aider seulement ceux qui le méritent. Et c'est qui qui le mérite ? Ben c'est déjà celui qui a une idée claire de ce qu'il veut faire et qui arrive à l'exprimer de façon concise et explicite. Parce que déjà là c'est la moitié du travail qui est fait. Sinon c'est du temps perdu pour tout le monde.

    Citation Envoyé par P1GOU1 Voir le message
    Pour ceux qui reliront ce post plus tard je vais m'informer sur le tri.
    qsort() => fonction déjà toute faite permettant de trier un tableau de n'importe quoi. Mais, comme toute fonction un peu universelle, elle nécessite de tout lui dire (quoi trier, comment comparer, combien d'éléments, taille d'un élément). Et de connaitre un petit peu les pointeurs de fonctions.
    Parce que si tu te lances dans un tri basique à ta sauce (ex tri à bulles), ton truc fonctionnera mais il sera tellement plombé que tu perdras plus de temps que ce que tu en gagneras ensuite.

    Citation Envoyé par P1GOU1 Voir le message
    Puis le tri me donnera de l'aide pour la recherche dichotomique, ce qui parait être exactement ce que je recherche.
    Mouais. C'est vrai que la recherche dichotomique te fait gagner du temps. Mais l'appareillage est ce qu'il y a de mieux.

    Citation Envoyé par P1GOU1 Voir le message
    Si vous avez d'autres idées qui m’évitent de me farcir deux chapitres je reste ouvert.
    L'appareillage.

    Allez, voici l'algo. Il est fait pour traiter des fichiers mais il peut traiter des tableaux tout pareil.
    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
    flag_f1=vrai
    flag_f2=vrai
    tant que boucle infinie, faire
    	si flag_f1 vrai alors
    		lire info fichier1 et stocker dans info1
    		si fin fichier1 alors break
    		flag_f1=faux
    	fin si
    	si flag_f2 vrai alors
    		lire info fichier2 et stocker dans info2
    		si fin fichier2 alors break
    		flag_f2=faux
    	fin si
     
    	// Ici on a les deux infos venues du fichier 1 et fichier 2. On les traite selon ce qu'on veut faire, cette partie est du choix du demandeur
     
    	// Maintenant on va évaluer quel fichier on doit continuer à lire
    	si info1 <= info2 alors
    		// L'info lue dans le fichier 1 n'a pas atteint le rang de celle lue dans le fichier 2 => il faut continuer à lire le fichier 1
    		flag_f1=vrai
    	fin si
     
    	si info2 <= info1 alors
    		// L'info lue dans le fichier 2 n'a pas atteint le rang de celle lue dans le fichier 1 => il faut continuer à lire le fichier 2
    		flag_f2=vrai
    	fin si
    fin faire
    Déroule-le à la main sur deux listes triées, tu verras que les deux listes sont parcourues en parallèle et que chaque élément de T1 est comparé avec chaque élément de T2.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. PL/SQL COMPARAISON DE DEUX TABLEAUX APRES BULK
    Par mimi_été dans le forum PL/SQL
    Réponses: 5
    Dernier message: 30/06/2009, 12h14
  2. Comparaison de deux tableaux
    Par tibss dans le forum Excel
    Réponses: 1
    Dernier message: 06/05/2009, 21h30
  3. Comparaison de deux tableaux en VB6
    Par taille50 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/08/2007, 10h28
  4. Comparaison de deux tableaux
    Par solorac dans le forum Excel
    Réponses: 7
    Dernier message: 03/08/2007, 08h49
  5. Comparaison de deux tableaux
    Par siaoly dans le forum Langage
    Réponses: 5
    Dernier message: 27/06/2006, 19h40

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