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 :

Programme de recherche trichotomique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 21
    Par défaut Programme de recherche trichotomique
    Bonjour

    je suis actuellement en DUT informatique, j'ai un devoir à rendre pour lundi seulement je n'arrive pas à resoudre un probléme et donc voir si il y en d'autre. lors de la compilation j'ai l'erreur suivante :

    "94: attention : passing argument 1 of ‘triecroissant’ makes pointer from integer without a cast"

    seulement en cours je n'ai pas encore fait les pointeurs je ne sais donc pas comment résoudre cette erreur cependant je pense que c'est le fait de dire qu'un tableau est égal à un autre à la ligne 94. voici mon code :

    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
    80
    81
    82
    83
    84
    85
    86
     
    #include <stdio.h>
    #define MAX 20
     
    int triecroissant(int tab[MAX])
    {
        int j,i,n=MAX;
        int aux;
     
        do
        {
             j=0;         
             for(i=0;i<n;i++)
             {
                 if(tab[i]>tab[i++])
                 {
                     aux=tab[i];
                     tab[i]=tab[i++];
                     tab[i++]=aux;
                     j=1;
                 }
                 n--;
    	 }
        }
        while(j==1 && n>1);
        return(tab[MAX]);
    }
     
    int trichotomie(int tabtrie[MAX],int nb)
    {
        int debut=0;
        int fin=MAX-1;
        int tiers=(MAX-2)/3;
        int deuxtiers=2*(MAX-2)/3;
        int c=0,trouve=0;
     
        do
        {
           if(tabtrie[tiers]==nb)
           {
                trouve=1; 
           }
           else if(tabtrie[deuxtiers]==nb)
           {
                trouve=1;
           }
           else if(tabtrie[tiers]>nb)     //recherche dans le premier tiers
           {
                fin=tiers;
           }
           else if(tabtrie[deuxtiers]>nb)     //recherche dans le deuxiéme tiers
           {
                debut=tiers;
                fin=deuxtiers;
           }
           else if(tabtrie[deuxtiers]>nb)     //recherche dans le troisiéme tiers
           {
                debut=deuxtiers;
                fin=MAX;
           }
           c++;
         }
        while(trouve==0 && debut<fin);
        return(c);
    }
     
    int main()
    {
       int tab[MAX],i,nb;
       int tabtrie[MAX];
       int position;
     
       printf("bonjour entrez une valeur à la fois nous vous en demanderons 20\n");
       for(i=0;i<MAX;i++)
       {
          printf("entrez la %d ieme valeur",i);
          scanf("%d",&tab[i]);
          i++;
       }
       printf("Veuilllez entrez le nombre à rechercher dans le tableau");
       scanf("%d",&nb);
       tabtrie[MAX]=triecroissant(tab[MAX]);
       position=trichotomie(tabtrie,nb);
       printf("Ce nombre se trouve à la %d ieme position",position);
       return(0);
    }
    je vous remercie par avance.

    cordialement florian

  2. #2
    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
    Bonjour et bienvenue sur le forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tabtrie[MAX]=triecroissant(tab[MAX]);
    tab[MAX] signifie "l'élément numéro MAX de tab". Comme les éléments de tab sont des int, tab[MAX]) est un int. Comme la fonction attend un int * (adresse de int) le compilateur signale cette conversion int -> int * qui en fait est une erreur.
    De plus, tab et tabtrie ont MAX éléments, donc l'indice peut varier de 0 à MAX-1, et tab[MAX] et tabtrie[MAX] sont hors des tableaux -> plantage potentiel à l'exécution.

    Si tu espères avec cette instruction copier un tableau dans tabtrie, tu te trompes.

    Sur la fonction :
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int triecroissant(int tab[MAX])
    Dans cette déclaration, il faut voir que MAX est superbement ignoré et que cette notation est trompeuse. En fait ceci est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int triecroissant(int tab[])
    Cette notation est elle-même une "tolérance" du C et en fait est interprétée comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int triecroissant(int  *tab)
    (d'où le warning du compilateur) Quelle que soit la manière d'écrire ce paramètre, tab est un int *

    - Cette fonction renvoie un int. Je ne vois pas à quoi sert cette information pour le programme appellant. Si il n'a aucune utilité, il vaut mieux que la fonction renvoie void, donc rien. A noter que le return(tab[MAX]) accède à un élément HORS du tableau (voir remarque plus haut).

    - Plus subtil, l'expression tab[i]=tab[i++] a un comportement indéfini (car on ne sait pas quand l'incrémentation de i sera faite). Mettre l'assignation et l'incrément en deux inqtructions différentes

    Sinon, je n'ai pas regardé le détail du code.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 21
    Par défaut programme de recherche trichotomique
    bonjour

    Merci beaucoup pour ta réponse je vais essayer de corriger tout cela et si je réussi je viendrais fixer le poste a résolu sinon je reposterai si cela ne vous dérange pas.


    bon dimanche.

  4. #4
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 21
    Par défaut programme de recherche trichotomique
    re(Bonjour)

    En fait je me pose une question comment je peus faire pour que le tableau trié par ordre croissant sortant de la fonction trieCroissant soit récupéré par la fonction rechercheTrichotomique si il vous plait ?

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    J'ai du mal a voir ce que tu veux faire, mais je dirai ceci :

    Si on part du principe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int* triecroissant(int tab[MAX])
    {
        ...
    }
    Alors tu peux faite tout simplement appel a la fonction triecroissant dans la fonction TriChomitique.

  6. #6
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 21
    Par défaut Programme de recherche par tichotomie
    je pense que je vais essayer d'appeler la fonction trieCroissant dans la fontion de recherche.

    merci beaucoup à toi

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

Discussions similaires

  1. programme de recherche dicothomique
    Par phil23 dans le forum C
    Réponses: 4
    Dernier message: 12/07/2007, 20h19
  2. programme pour rechercher un codon stop sur une chaine d'adn sous perl
    Par thierry7106 dans le forum Bioinformatique
    Réponses: 4
    Dernier message: 13/04/2007, 01h02
  3. Programme effectuant recherches par URL ??
    Par pouic06 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 12/04/2006, 13h51
  4. Programme de recherche des fichiers
    Par lion13 dans le forum Linux
    Réponses: 2
    Dernier message: 05/03/2006, 22h28
  5. Préfixes segments programmes (PSP) : recherche de doc
    Par pucenet dans le forum Assembleur
    Réponses: 21
    Dernier message: 30/03/2005, 23h05

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