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 :

Dichotomie simple et étagée


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Par défaut Dichotomie simple et étagée
    Bonjour tlm ;

    Je suis debutant en programmation, je cherche l'algorithme et le programme en C de la dichotomie simple et étagée pour la recherche d'une valeur dans un tableau.

    Meci a vous !

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    En gros tu veux le beurre et l'argent du beurre

    Réalise ton algo (ou voir le forum algo) ensuite tu pourras retranscrire cela en C et à partir de là on pourra plus t'aider.

    Je peux d'ore et déja dire que ton programme va au moins ressembler à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int main () {
        return 0;
    }

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par hegros
    En gros tu veux le beurre et l'argent du beurre

    Réalise ton algo (ou voir le forum algo) ensuite tu pourras retranscrire cela en C et à partir de là on pourra plus t'aider.

    Je peux d'ore et déja dire que ton programme va au moins ressembler à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int main () {
        return 0;
    }
    Plutôt à cela, non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int main (void) {
        return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Par défaut Algo
    J'ai l'algo de la dichotomie simple, je peut continuer ?


    //déclarations
    entier : début, milieu, fin, val
    Tnb [0..100] : Tableau d'entier

    //initialisation
    début <- 0
    fin <- 100

    //Question
    Répéter
    Afficher "Valeur recherchée?"
    Saisir val
    Jusqu'à début<=val et val<=fin

    //Boucle de recherche
    Répéter

    //Calcul du milieu
    milieu = arrondiàl'unité((début+fin)/2)

    //Conditions et affectations
    Si val > Tnb[milieu] alors

    début <- milieu + 1

    Sinon

    Si val=Tnb[milieu] alors

    début <- milieu
    fin <- milieu

    Sinon

    fin <- milieu - 1

    Finsi

    Finsi

    jusqu'à début=fin

    //Affichage du résultat
    Afficher "La valeur est ", val

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Superbe si tu es sûr de ton algo il te faut le retranscrire.

    Par exemple

    Entier : debut,fin,val
    Tnb [0..100] : Tableau d'entier

    se transforme en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int debut,fin,val;
    int Tnb[100];
    Ensuite tes Répéter jusqu'a se transforme en do while
    Tes Si en if etc etc etc

    Tu as essayé de le retranscrire en C pour voir ce que ca donne ?

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par mujigka
    Plutôt à cela, non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int main (void) {
        return 0;
    }
    Thierry
    Tant qu'a faire alors je dirais plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <stdlib.h>
    int main(int argc,char**argv) {
        return EXIT_SUCCESS;
    }

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par hegros
    Tant qu'a faire alors je dirais plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #include <stdlib.h>
    int main(int argc,char**argv) {
        return EXIT_SUCCESS;
    }
    Equivalent, sauf que les paramètres argc et argv sont inutiles, car pas utilisés. Je rappelle que int main() engendre un comportement indéterminé.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  8. #8
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par mujigka
    Equivalent, sauf que les paramètres argc et argv sont inutiles, car pas utilisés. Je rappelle que int main() engendre un comportement indéterminé.

    Thierry
    Je ne sais pas d'où tu tiens cela (la norme surement ) mais tu peux toujours essayé de relever le défi de me montrer 1 et 1 seul comportement "bizaroide" en utilisant ce proto.

    Tiens d'ailleurs rapporte nous où tu as lu cela dans la norme ou dans la spécification que ce proto engendre un comportement indeterminé.

    Bon courage

  9. #9
    Membre expérimenté Avatar de wikipierre
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 222
    Par défaut
    Salut,
    C'est pas plus simple si tu fait un truc dans le genre ca :

    int i;
    for (i = 0; i < strlen(TonTable); i++)
    {
    if (TonTable[i] == CeQueTuCherches)
    {
    // La tu met le code a éxécuter si il la trouver
    }
    }

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par wikipierre
    Salut,
    C'est pas plus simple si tu fait un truc dans le genre ca :

    int i;
    for (i = 0; i < strlen(TonTable); i++)
    {
    if (TonTable[i] == CeQueTuCherches)
    {
    // La tu met le code a éxécuter si il la trouver
    }
    }
    1) il VEUT faire de la recherche dychotomique

    2) strlen(Table) ne marche QUE pour une chaine.

    3) si tu as 25 Millions d'enregistrements, un peu dur de faire une boucle comme ça....



  11. #11
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par hegros
    Je ne sais pas d'où tu tiens cela (la norme surement )
    Oui, la norme
    Citation Envoyé par hegros
    mais tu peux toujours essayé de relever le défi de me montrer 1 et 1 seul comportement "bizaroide" en utilisant ce proto.
    A quoi bon? int main(void), ça me va, ça ne mange pas d'pain, et c'est conforme. Mais tout cela est évidamment hors sujet.

    EDIT: Et puis, int main() n'est précisément pas un prototype au sens du langage C.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  12. #12
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par mujigka
    Oui, la norme

    A quoi bon? int main(void), ça me va, ça ne mange pas d'pain, et c'est conforme. Mais tout cela est évidamment hors sujet.

    Thierry
    Certe.Cependant ca peut être intéressant que tu nous rapportes ce que dit exactement la norme à ce sujet (j'imagine que tu as le document sous la main sinon pour une prochaine fois peut être)

  13. #13
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par hegros
    Certe.Cependant ca peut être intéressant que tu nous rapportes ce que dit exactement la norme à ce sujet (j'imagine que tu as le document sous la main sinon pour une prochaine fois peut être)
    ISO/IEC 9899:TC2 section 5.1.2.2.1:
    The function called at program startup is named main. The implementation declares no
    prototype for this function. It shall be defined with a return type of int and with no
    parameters:
    int main(void) { /* ... */ }
    or with two parameters (referred to here as argc and argv, though any names may be
    used, as they are local to the function in which they are declared):
    int main(int argc, char *argv[]) { /* ... */ }
    or equivalent;9) or in some other implementation-defined manner.
    L'important ici est que no parameter se note en C main(void) et non main() qui signifie "nombre indetermine d'arguments de types indetermines".

  14. #14
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par hegros
    Certe.Cependant ca peut être intéressant que tu nous rapportes ce que dit exactement la norme à ce sujet (j'imagine que tu as le document sous la main sinon pour une prochaine fois peut être)
    <HS>
    Citation Envoyé par norme du langage C
    5.1.2.2.1 Program startup
    The function called at program startup is named main. The implementation
    prototype for this function. It shall be defined with a return type of
    parameters:
    int main(void) { /* ... */ }
    or with two parameters (referred to here as argc and argv, though
    used, as they are local to the function in which they are declared):
    int main(int argc, char *argv[]) { /* ... */
    or equivalent;9) or in some other implementation-defined manner.
    La norme ne faisant mention que de ces deux formes, toutes les autres correspondent à un comportement indéterminé et dépendant de la plateforme.

    Pour le comportement bizarre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <stdlib.h>
     
    int main()
    {
        return EXIT_SUCCESS;
    }
    compilé avec gcc avec des réglages relativement courants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wstrict-prototypes -Werror main.c
    donne une erreur de compilation.
    </HS>

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  15. #15
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par mujigka
    Pour le comportement bizarre:
    Code :

    #include <stdlib.h> int main() { return EXIT_SUCCESS; }


    compilé avec gcc avec des réglages relativement courants:
    Code :

    gcc -Wstrict-prototypes -Werror main.c

    donne une erreur de compilation.
    Quand on parle de comportement indeterminé c'est lié à l'execution du programme pas à sa compilation.

    fflush(stdin) ne pose aucun probléme à la compilation par contre à l'execution son comportement est indeterminé.

  16. #16
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 401
    Par défaut
    En effet, mais les warnings sont un bon indices pour en débusquer certains, aussi ignorer un warning est déconseillé...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  17. #17
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Médinoc
    En effet, mais les warnings sont un bon indices pour en débusquer certains, aussi ignorer un warning est déconseillé...
    Le warning des arguments argc et argv est complétement superflu.

    Mais tant qu'a faire si on ne les utilise pas c'est vrai autant mettre void.Mais la norme n'est pas trés bavarde sur ce sujet...

  18. #18
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mujigka
    Equivalent, sauf que les paramètres argc et argv sont inutiles, car pas utilisés. Je rappelle que int main() engendre un comportement indéterminé.
    Non.

    Ca signifie que le nombre et le type de paramètres n'est pas défini, ce dont on se tape tant que personne n'appelle main(). Or appeler main() est une pratique peu recommandable (interdite en C++).
    est donc acceptable et sans danger, même si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int main(void)
    {
    }
    est plus cohérent avec le reste du code qui utilise des prototypes.

Discussions similaires

  1. [simple] Récupérer sélection d'un TComboBox
    Par Claythest dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/06/2003, 18h30
  2. Effet de transition simple entre 2 images
    Par ChrisFAPS dans le forum Flash
    Réponses: 2
    Dernier message: 18/04/2003, 13h41
  3. Bon je vais essayer d'être simple :
    Par fpouget dans le forum Langage SQL
    Réponses: 8
    Dernier message: 09/04/2003, 18h46
  4. Edition d'un simple fichier java
    Par mcrepin dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 21/03/2003, 15h28
  5. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 12h29

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