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 :

recherche d'un éléments dans un tableau


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 20
    Par défaut recherche d'un éléments dans un tableau
    bonjour
    j'aurais besoin d'aide, je dois programmer un programme capable de retourner vrai si la variable est contenu dans le tableau et faux sinon.
    (je tiens à préciser que ce n'est pas du vrai C mais du Cini, le langage de ma fac à Paris 6 mais je pense que vous n'aurez pas du mal à comprendre)
    voilà j'ai essayé de le faire mais lorsque je debug le programme, je constate que mon programme ne passe jamais dans la boucle while, je ne comprends pas pourquoi.
    merci pour ceux qui pourront m'aider

    le programme :
    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
    #include <cini.h>
    #define TAILLE 5
    int main () {
      int i=0,n=9;
      bool danstab=false;
      int tab[TAILLE] = {1,2,3,4,5};
      while(i<TAILLE && danstab) {
        if(tab[i]==n) {
          danstab=true;
        }
        else {
          danstab=false;
        }
        i++;
      }
      if(!danstab) {
        CINI_print_int(n);
        CINI_print_string(" est dans le tableau.");
        CINI_newline();
      }
      else {
        CINI_print_int(n);
        CINI_print_string(" n'est pas dans le tableau");
      }
      return 0;
    }

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 20
    Par défaut
    après recherche sur d'autre forum j'ai enfin trouver un algo qui fonctionne
    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
    #include <cini.h>
    #define TAILLE 5
    int main () {
      int i,n=2;
      int add=0;
      int tab[TAILLE] = {1,2,3,4,5};
      for(i=0;i<TAILLE;i++) {
    	  if (tab[i]==n) {
    		  add=add+1;
    	  }
      }
      if(add==0){
    	  CINI_print_int(n);
    	  CINI_print_string(" n'apparait pas dans le tableau.");
      }
      else{
    	  CINI_print_int(n);
    	  CINI_print_string(" apparait dans le tableau.");
      }
      return 0;
    }
    mais j'aimerais savoir pourquoi le mien ne fonctionne pas ?
    merci pour ceux qui pourront m'apporter une réponse.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    C'est simple. Si ta valeur est présente dans ton tableau, il suffit de mettre "danstab" à 1, après l'avoir initialisé à 0. Ce que tu fais dans ton code. Le problème, c'est que tu rajoutes une ligne où tu remets cette variable à 0 si la valeur courante n'est pas égale à la valeur à trouver. Cela veut dire que même si ta valeur a été trouvée auparavant, ton programme considérera que ce n'était pas le cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while(i<TAILLE && danstab) {
       if(tab[i]==n) {
          danstab=true;
       }
       else {
          danstab=false;
       }
    i++;
    }
    Par conséquent, le bloc "else" est à supprimer.

    EDIT :
    J'avais même pas vu ta condition "while". C'est encore pire : la boucle saute dès le début à cause de la valeur initiale de "danstab"... qui est à 0 (false).

    Il faut donc supprimer la seconde condition de ce "while", supprimer le bloc "else".

    Il est possible d'optimiser le code, en scannant simplement le tableau, puis sortir de la boucle dès la valeur trouvée, puis finalement, juste après la boucle, de comparer "i" à "TAILLE" : si "i" est égal à "TAILLE", c'est que la valeur à chercher n'existe pas dans ce tableau.

  4. #4
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 785
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bool danstab=false;
    int tab[TAILLE] = {1,2,3,4,5};
    while(i<TAILLE && danstab) {
    danstab est false dès le début... le programme ne peut pas rentrer dans le while

    Edgar.

  5. #5
    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
    D'après l'énoncé, "...de retourner vrai si la variable est contenu dans le tableau et faux sinon", on te demande de faire une fonction pour cela, cette fonction devant retourner vrai ou faux. Ses arguments doivent donc être
    - l'adresse du début du tableau à analyser
    - le nombre d'éléments de ce tableau
    - le nombre à rechercher dans le tableau
    On aboutit à, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int estDansTableau(int *tab, int taille, int n)
    {
       int i = 0;
       while(i<taille && tab[i]!=n) i++;
       return i<taille;
    }
    Qui peut être exploitée par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #define TAILLE 5
    int main(void) 
    {
       int tab[TAILLE] = {1,2,3,4,5};
       int n = 2;
       CINI_print_int(n);
       if(estDansTableau(tab,TAILLE,n))
           CINI_print_string(" apparait dans le tableau.");
       else
           CINI_print_string(" n'apparait pas dans le tableau.");
       CINI_newline();
       return 0;
    }

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 20
    Par défaut
    ok les gars merci de l'aide
    c'était donc le false de départ qui posait problème et qui empechait donc le passage dans la boucle

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/10/2014, 15h18
  2. Réponses: 6
    Dernier message: 11/05/2014, 10h29
  3. rechercher une série d'élément dans un tableau
    Par tunizar dans le forum WinDev
    Réponses: 9
    Dernier message: 30/12/2013, 12h51
  4. Recherche d'élément dans un tableau
    Par cartmanpro dans le forum Pascal
    Réponses: 10
    Dernier message: 29/04/2008, 15h57
  5. [HTML/CSS]désigner un élément dans un tableau de l'extérieur
    Par FrankOVD dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/06/2005, 21h55

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