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 :

ptite question de tableau (trouver le max)


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par défaut ptite question de tableau (trouver le max)
    Bonjour

    ça fait des heures je planche sur un problème mais je sèche, pourriez vous m'aider svp?

    j'ai le code suivant :
    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
     
    // choix de la colonne pivot  
    float m;colonne_pivot=0;
    m=T[N][1];        
    for (j=1;j<M;j++)
             {
             printf("\nsi T[%d][%d]=%f > T[%d][%d]=%f ",N,j,T[N][j],N,j+1,T[N][j+1]); 
             if(T[N][j]>m)
             {m=T[N][j];
             colonne_pivot=j; printf("colonne_pivot %d = j %d",colonne_pivot,j);}
             else
             {colonne_pivot=j+1;printf("colonne_pivot %d = j %d",colonne_pivot,j);}
             }
    printf("\ncolonne_pivot=[%d] et valeur de la case=%f\n",colonne_pivot,T[2][colonne_pivot]);
     
    for (i=0;i<N+1;i++) 
    	{
          if (T[i][colonne_pivot]<=0) // comment on fait pour voir que TOUTES les cases de la colonne pivot sont <= zéro ?
          {
          printf("la fonction objective n'est pas bornee");
          getch();exit(0);
          }
        }
    mon 1ère problème c de trouver la colonne pivot
    et la 2ème c que je n'arrive pas à m'assurer que toutes les cases de la colonne sont <=0

    mon 1er probleme est très genant et bizarre,
    j'ai un tableau de flottant [4][8]
    et voilà ce que j'obtiens à l'écran :


    donc 1>-3 le prog croit que -3 est plus grand

    vraiment un grand grand merci si vous pouvez m'aider.
    bonne nuit

  2. #2
    Membre confirmé Avatar de bahaaldine
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 67
    Par défaut
    Bonjour,

    Dans ta structure de vérification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(T[N][j]>m)
             {
    		m=T[N][j];
             	colonne_pivot=j; printf("colonne_pivot %d = j %d",colonne_pivot,j);
    	 }
    c'est pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(T[N][j+1]>m)
             {
    		m=T[N][j];
             	colonne_pivot=j; printf("colonne_pivot %d = j %d",colonne_pivot,j);
    	 }
    qu'il faudrait mettre .?

  3. #3
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    Rien à avoir avec ton algo, mais
    1) Utilise des noms de variables plus explicite, ça évitera d'essayer de comprendre à quoi sert A, B, C ou D.
    2) Essaie de formater ton code d'une manière plus lisible, ce qui permettra à tes correspondants de comprendre plus facilement ton code.
    3) Une bonne lisibilité aidant, il faut aussi ajouter des commentaires et ne t'inquiète pas sur la quantité de commentaires, le compilateur les enlève en parsant ton code.

    Bonne continuation

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 isidore
    mon 1ère problème c de trouver la colonne pivot
    et la 2ème c que je n'arrive pas à m'assurer que toutes les cases de la colonne sont <=0
    Je ne vois absolument pas de quoi tu parles, mais quand j'ai des problèmes a résoudre, je commence par les résoudre un par un séparément. Ca évite "ça fait des heures je planche sur un problème mais je sèche".

    Et comme toujours les vieilles recettes s'appliquent:

    1. définition (quoi ?)
    2. conception (comment ?)
    3. réalisation (codage et test)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par défaut
    Bonjour

    excusez moi si je n'ai pas posté correctement
    en fait je me suis mal exprimé

    je fais l'algorithme qui est là : http://scott.univ-lehavre.fr/~balev/...OR/simplex.pdf avec l'exemple de la dernière page 4.

    j'ai T[N][j]=T[N][1]=1
    T[N][2]=-3
    T[N][3]=0
    T[N][4]=-1

    En réalité je cherche le Maximum parmi ces nombres, et c'est cela que je ne vois pas comment faire. j'ai introduit la variable m mais apparemment c'est pas ça
    mon code à l'origine c'était ç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
    21
     
     // choix de la colonne pivot  
    colonne_pivot=0;
     
    for (j=1;j<M;j++)
             {
              if(T[N][j]>T[N][j+1])
               colonne_pivot=j;
             else
               colonne_pivot=j+1;
             }
     
    for (i=0;i<N+1;i++) 
         {
          if (T[i][colonne_pivot]<=0) 
    // comment on fait pour voir que TOUTES les cases de la colonne pivot sont <= zéro ?
           {
            printf("la fonction objective n'est pas bornee");
            getch();exit(0);
          }
        }
    c le 1er problème qui est le + important, trouver le maximum
    T[N][1] est le plus grand donc l'indice j=1 doit etre gardé dans colonne_pivot


    bahaldine : non y a pas d'erreur dans le code, M vaut 4 et je vois que le programme compare bien 1,2,3 et 4

    désolé de m'etre mal exprimé, je cherc le max dans la 1ère boucle et je dois retenir l'indice.
    quand j'ai comparé 7 - 9 - 18 - 17 le code a marché parce que le maximum 18 était avant dernier et en comparant 2 apr 2 ça marche mais avec 1 ; (-3) ; 0 ; (-1) eh bien en comparant 2 par 2 c marche pas voilà tout.

    MERCI d'avance

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Par défaut
    j'ai réussi à trouver le minimum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // choix de la colonne pivot 
    colonne_pivot=1; <- là j'avais une erreur entre autre.
    float max=T[N][1];
    for (j=2;j<M+1;j++)
        {
              if(T[N][j]>max)
              {
              max=T[N][j]; 
              colonne_pivot=j;
              } 
        }

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    De manière générale, l'algorithme le plus facile pour trouver le nombre maximal d'une série de nombre est toujours du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    definir max à une valeur dont on est sur qu'elle ne sera pas bonne (-1, PE )
    Pour chaque element
    |    si max< valeur element
    |    |   max <- valeur element
    |    Fin Si
    |    passer à l'élément suivant
    Fin pour
    max est la plus grande valeur trouvee
    Si tu dois utiliser une matrice, ca peut se présenter sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    max=-1 (ou toute valeur incorrecte de manière certaine)
    Pour chaque ligne
    |    Pour chaque colone
    |    |    Si max< valeur de matrice[ligne][colone]
    |    |    |    max <- valeur de matrice[ligne][colone]
    |    |    Fin Si
    |    Fin pour chaque colone
    Fin pour chaque ligne
    max est la plus grande valeur trouvee dans la matrice
    En C, cela prendrait une forme, pour un tableau, ressemblant à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int tab[10]; /* le tableau à tester */
    int max=-1; /* si -1 ne risque pas d'etre le maximum */
    int cpt;/* il nous faut un compteur */
    for(cpt=0;cpt<10;cpt++)
    {
        if(max< tab[cpt])
            max=tab[cpt]
    }
    /* ici, max est la valeur maximale trouver dans le tableau */
    et,dans le cas d'une matrice, ca prendrait la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int matrice [10][10]; /*une matrice carrée de 10 liignes * 10 colones */
    int max=-1; /* meme remarque que la tantot */
    int ligne; /* pour compter les lignes */
    int colone; /* pour compter les colones */
    for(linge=0;ligne<10;ligne++)
    {
        for(colone=0;colone<10;colone++)
        {
            if(max< matrice[ligne][colone])
                max = matrice[ligne][colone];
        }
    }
    /* ici, max a pris la valeur maximale trouvée dans la matrice */
    Evidemment, ca ne fait que chercher la valeur maximale... il faut adapter pour le calcul du pivot ...

    Evidemment bis: j'ai utilisé des valeurs statiques, mais rien n'empeche d'utiliser des variables du genre de nb_ligne et nb_colone si la matrice a un nombre de ligne inconnu au moment de la conception
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 18/11/2007, 17h41
  2. Ptite question popup IE
    Par zevince dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/11/2005, 08h48
  3. ptite question
    Par Andrey dans le forum C
    Réponses: 8
    Dernier message: 12/11/2005, 16h54
  4. ptite question sur le fonctionnement du WSDL
    Par Valarauko dans le forum XMLRAD
    Réponses: 4
    Dernier message: 08/02/2005, 16h07
  5. ptite question sur le having
    Par mic79 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/11/2004, 16h43

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