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 dichotomique fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Par défaut recherche dichotomique fichier
    salut
    je essaye d'effectuer une recherche dichotomique sur le fichier(fichier d'étudiant),mais je trouve qlq difficultés ,si je taper un nom qui existe déjà ,il m'affiche que le nom n'existe !
    voici mon essai:
    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
     
        #include<stdio.h>
        #include<conio.h>
        #include<string.h>
        /*ce script permet de éffecter une recherche dichatomique */
        typedef struct 
        {
                int num;
                char nom[10];
        }etud;
     
        int main()
        {
            FILE *f;
            int sup,inf,trouve=0,milieu;
            char nom_chercher[20];
            etud e;
     
            printf("Taper l'element à chercher\n");
            gets(nom_chercher);
     
            f=fopen("etudiant.dat","r+");
            fseek(f,0,0);
            sup=ftell(f)/sizeof(etud);
     
            do
            {
                                      milieu=sup-inf/2;
                                      /*positioner le cursur au milieu*/
                                      fseek(f,(milieu-1)*sizeof(etud),0);
                                      fread(&e,sizeof(etud),1,f);
     
                                      /*tester cet element */
                                      if(strcmp(e.nom,nom_chercher)==0)
                                                                       trouve=1;
                                      else
                                          {
                                                                       if(strcmp(e.nom,nom_chercher)>0)
                                                                                 sup=milieu-1;
                                                                       else
                                                                                 inf=milieu+1;
                                          }
            }while(!trouve&&sup>inf);
            if(trouve==0)
                         printf("L'element n'existe pass ");
            else 
                         printf("L'element existe ");   
            getch();
            return 0;
        }
    n considere que la liste des étudiantes est trié en ordre croissante(les noms).

    merci de m'aider

    comment va indentation?

    bonne nuit

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    inf n'est jamais initialisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /*ce script permet de éffecter une recherche dichatomique */
    Boum ?

  3. #3
    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
    Dans ta discussion précédente, on avait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                f=fopen("etudiant.dat","r+");
                 fseek(f,0,2);                           
                l=ftell(f)/sizeof(etud);
    Et je t'avais suggéré d'utiliser les constantes prédéfinies SEEK_SET,SEEK_CUR et SEEK_END dans fseek().

    Ici, on trouve

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            f=fopen("etudiant.dat","r+");
            fseek(f,0,0);
            sup=ftell(f)/sizeof(etud);
    Comme quoi, ne pas suivre les conseils ...

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Par défaut
    mabu=> vous avez tout a fait raison ,mais le programme ne marche pas ,si je lui donne un nom qui existe ,il m'affiche qu'il n'existe pas !!!
    diogene => ce sont les habitudes ,mais la prochaine fois ,je changerais

  5. #5
    Invité(e)
    Invité(e)
    Par défaut
    Le problème semble venir de la détermination du milieu :

    Il faudrait remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    milieu = (sup + inf) / 2;
    Citation Envoyé par hindou90 Voir le message
    diogene => ce sont les habitudes ,mais la prochaine fois ,je changerais
    Pourquoi pas maintenant ?

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 128
    Par défaut
    oui j ai mal calculé la distance .
    mais je pense que l'erreur vient de l'ouverture ,je pense que je dois remplacer r+ par r .

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

Discussions similaires

  1. recherche dichotomique mot fichier
    Par flow_13 dans le forum Débuter
    Réponses: 4
    Dernier message: 19/11/2009, 15h24
  2. Recherche dichotomique d'une ligne dans un fichier
    Par yarf dans le forum Général Java
    Réponses: 5
    Dernier message: 31/03/2008, 15h37
  3. Réponses: 14
    Dernier message: 25/10/2004, 21h33
  4. batch de recherche de fichier ...
    Par Félia dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 29/07/2004, 15h54
  5. Recherche support fichier
    Par sydiop dans le forum Informix
    Réponses: 5
    Dernier message: 18/03/2004, 10h15

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