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

Algorithmes et structures de données Discussion :

problème exo algorithme


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut problème exo algorithme
    Bonjour tout le monde, j'ai un exo à faire et je sèche... ptèt que quelqu'un pourra m'aider.
    C'est tout bête, mais jsuis ultra débutant...

    Ecrire un algo demandant 20 nombres, et définissant quel est le plus grand de ces nombres.
    Le modifier pour qu'il affiche la position de ce nombre.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Une façon de faire cela serait de "ranger" les 20 nombres dans un certain ordre et de commencer en comparant les deux premiers nombres ensemble. Cela permet de connaitre le plus grand nombre parmis deux nombres. Ensuite, on compare le plus grand nombre qu'on vient de trouver avec le 3e nombre de la rangée, on obtient donc le plus grand nombre parmis trois nombres. Et comme-ça jusqu'au 20e nombre de la rangée.
    "If you can't teach it then you don't know it."

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    ok, jvais essayer , merci.

  4. #4
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    L'idée elle est très bête, tout au long de ton algorithme tu mémorise deux choses, le plus grand nombre et sa position (ce sont deux invariants), tu gardes aussi la position courante (ie: quel est le numéro du nombre que tu est en train de demander).

    Après chaque demande, tu compares le nombre entré par rapport au plus grand nombre, suivant la valeur, il faut que tu mettes à jour les champs correspondants (plus grand nombre et indice). Tu boucles comme ceci jusqu'à ce que tu aies lu les 20 nombres.

    Il faut que tu fasses attention à l'initialisation de ton algorithme (notament quel est le plus grand nombre au début de ton algorithme).

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Citation Envoyé par PRomu@ld
    tu mémorise deux choses, le plus grand nombre et sa position
    Y aurait-il un moyen pour récupérer le plus grand nombre uniquement à la fin de l'algorithme (pour ne pas devoir le stoquer tout au long de l'algorithme) ? De le trouver en "un coup" ou de ne pas le stoquer ? Je ne saisis pas le problème
    Il me semble que la position du plus grand nombre n'est pas nécessaire, seul le plus grand nombre l'est.
    tu gardes aussi la position courante
    Cela veut dire qu'il y a une manière de faire cela sans boucler sur tous les nombres pour pouvoir en ressortir le nombre le plus grand ?

    Il faut que tu fasses attention à l'initialisation de ton algorithme (notament quel est le plus grand nombre au début de ton algorithme).
    Il me semblait que c'était clair, c'est pour cela que je n'ai pas pensé à définir la valeur initialle pour la variable qui servira à stoquer le nombre max. Je n'ai même pas présicé que je pensais stoquer ce nombre max dans une variable. Je ne suis pas doué pour faire des définitions.

    Ma solution :
    Réel Maximum(Réel a, Réel b){
    SI a = b
    RETURN a
    SINON SI a < b
    RETURN b
    SINON
    RETURN a
    FIN SI
    }

    Max est un Réel = 0
    Nombres est un tableau de 20 Réels

    POUR i=0 ; i<19 ; i++
    Max = Maximum(Nombres[i], Nombres[i+1])
    FIN POUR
    "If you can't teach it then you don't know it."

  6. #6
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Ta solution est incorrecte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    POUR i=0 ; i<19 ; i++
    Max = Maximum(Nombres[i], Nombres[i+1])
    FIN POUR
    A la fin de l'algorithme, que contient Max ?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Citation Envoyé par PRomu@ld
    A la fin de l'algorithme, que contient Max ?
    Le plus grand des deux derniers nombres comparés

    Ma solution devient :
    Réel Maximum(Réel a, Réel b){
    SI a = b
    RETURN a
    SINON SI a < b
    RETURN b
    SINON
    RETURN a
    FIN SI
    }

    Max est un Réel = 0
    Nombres est un tableau de 20 Réels

    POUR i=0 ; i<20 ; i++
    Max = Maximum(Nombres[i], Max)
    FIN POUR
    Merci pour tes réponses.
    "If you can't teach it then you don't know it."

  8. #8
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Alors, maintenant tu es dans le cas dont je te parlais tout à l'heure, à savoir l'initialisation de ton algorithme. Imagine que l'ensemble de tes nombres soient négatifs, quel va être le plus grand nombre (si on utilise ton algorithme).

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut

    Max ne doit pas être initialisé à 0, sinon, dans le cas de nombres négatifs, 0 (qui ne fait pas partie des 20 nombres) sera le plus grand nombre trouvé.

    On pourrait donc initialiser la variable Max à une des 20 valeurs contenues dans le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Réel Maximum(Réel a, Réel b){<div style="margin-left:40px">SI a = b<div style="margin-left:40px">RETURN a</div>SINON SI a < b<div style="margin-left:40px">RETURN b</div>SINON<div style="margin-left:40px">RETURN a</div>FIN SI</div>}
     
    Nombres est un tableau de 20 Réels
    Max est un Réel
     
    Max = Nombres[0]
    POUR i=0 ; i<20 ; i++<div style="margin-left:40px">Max = Maximum(Nombres[i], Max)</div>FIN POUR
    Il me semble que l'algorithme est complet maintenant. On peut peut-être discuter une toute autre solution ?
    "If you can't teach it then you don't know it."

  10. #10
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Oui, c'est à peut près ça, sauf le cas i = 0, en fait tu effectues un tour de boucle de trop. (bon ça ne reste pas si grave).

    Ma technique habituelle est relativement similaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Max = T[0]
     
    POUR i de 1 à 19 FAIRE
         SI T[i] > Max ALORS
              Max <- T[i]
         FIN SI
    FIN POUR

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    927
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 927
    Points : 2 113
    Points
    2 113
    Par défaut
    Oui, je compare le premier nombre avec lui même au début. Il faudrait donc commencer ma boucle à i=1. Et donc nos deux algorithmes sont, finalement (), identiques.
    "If you can't teach it then you don't know it."

  12. #12
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Et donc nos deux algorithmes sont, finalement (), identiques.
    Oui, de toute façon, la recherche d'un maximum dans un tableau (dont tu ne sais rien à l'origine) se fait de manière linéaire, on ne peut pas trouver mieux.

Discussions similaires

  1. Problème exo morse
    Par G.Hammond dans le forum C
    Réponses: 24
    Dernier message: 12/12/2007, 22h45
  2. problème d'algorithme snake
    Par skysee dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 14/11/2007, 20h41
  3. [linprog] Problème avec algorithme simplex
    Par barbylon dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/11/2007, 18h29
  4. Réponses: 10
    Dernier message: 23/05/2007, 09h30
  5. problème d'algorithme pour trouver les circuit d'un graphe
    Par marc_dd dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 21/08/2006, 16h36

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