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 :

un petit problème d'algo


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Salut

    Je propose ce petit alogo de parcours de la grille, désolé je ne suis pas très fort en pseudo code, je l'aurais bien écrit en C mais comme c'est dans le forum algo

    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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    description grille
       maxligne
       maxcol
     
    description d'une case
       numligne,
       numcol
       visitee
       marquee
     
    variables globales utilisées
    direction  (4 valeurs droite, gauche, haut bas)
    numligne  (varie entre 1 et maxligne)
    numcol    (varie entre 1 et maxcol)
     
     
    variables locales à la procédure principale
    flagecrire : booléen, vrai on maruqe faux on ne marque pas, change à chaque étape
     
    debut
      flagecrire <- vrai
      numligne <- 1
      numcol <- 1
      direction <- droite
      faire
        si flagecrire alors
        debut
          marquer la case
        fin
        flagecrire <- non gflagecrire
      tant que avancerdunecase est vrai
    fin
     
    // c'est la fonction avancer d'une case qui fait tout
    // elle regarde suivant la direction si on peut avancer 
    // et si on ne peut pas, elle change la direction
    // au bout de 4 essai, on revient au point de départ, donc si on y arrive c'est qu'on ne peut plus bouger, le parcours est termine
     
    fonction avancerdunecase
    retourn vrai/faux
    debut
      // on effectue au maximum 4 tests puisqu'il y a 4 directions
      si testecaselibre(numligne, numcol, direction) = faux alors
      debut
         direction <- directionsuivante(direction)
         si testecaselibre(numligne, numcol, direction) = faux alors
         debut 
            direction <- directionsuivante(direction)
            si testecaselibre(numligne, numcol, direction) = faux alors
            debut 
              direction <- directionsuivante(direction)
              si testecaselibre(numligne, numcol, direction) = faux alors
                retourner faux
            fin
         fin
       fin
       marquerla case numligne, numcol comme visitee
       retourner vrai
    fin
     
    fonction directionsuivante
    argument dir direction
    retour direction
    debut
       si direction = droite alors
          retourner bas
       si direction = bas alors 
          retourner gauche
       si direction = gauche alors
          retourner haut
       si direction = haut alors
          retourner droite
    fin
     
     
    // test si la case proche suivant la direction indiquée est visitable
    // (dans la grille et non visitée)
    // Si elle l'est les coordonnées de la case sont modifiées (influence du C)
     
    fonction testecaselibre 
    arguments modifiés numeroligne, numerocolonne, 
    argument non modifie direction
    retourne vrai/faux
    debut       
      si direction = droite alors
        si numerocolonne < maxcol et si la case située en numeroligne, numerocolonne+1 n'a pas été visitée
          debut
            numerocolonne <- numerocolonne + 1
            retourner vrai
          fin
        sinon
          retourner faux
     
      si direction = bas alors
        si numeroligne < maxlig - 1 et si la cas située en en numeroligne + 1, numerocolonne n'a pas été visitée
          debut
             numeroligne <- numeroligne + 1 
            retourner vrai
          fin
        sinon
          retourner faux
     
       si direction = gauche alors
        si maxcol > 1 et si la cas située en en numeroligne, numerocolonne -1 n'a pas été visitée
          debut 
            numerocolonne <- numerocolonne - 1
            retourner vrai
          fin
        sinon
          retourner faux
     
       si direction = hautalors
        si maxlig > 1 et si la cas située en en numeroligne-1, numerocolonne n'a pas été visitée 
          debut
            numeroligne <- numeroligne - 1
            retourner vrai
          fin
     
        sinon
          retourner faux
    fin
    Voilà, je ne l'ai pas testé, mais il ne doit pas y avoir beaucoup d'erreurs.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  2. #2
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 12
    Par défaut supertramp
    wahouuu
    je pense qu'il doit marcher, c'est un bon raisonnement, merci beaucoup de la peine que tu t'es donné
    voilà ce qu'on m'a également proposé, en un poil plus court, et qui fonctionne

    tableau[,] := faux
    y_inf := 1
    y_sup := 8 -- 8 lignes
    x_inf := 1
    x_sup := 6 -- 6 colonnes
    y := 1 -- en haut
    x := 1 -- à gauche
    delta_x := 2 -- on se déplace vers la droite
    delta_y := 0

    tant que (x_inf < x_sup) et (y_inf < y_sup) faire
    tableau[x,y] := vrai
    si x + delta_x > x_sup alors
    delta_x := 0
    delta_y := 2 -- on se déplace vers le bas
    y_inf := y_inf + 1
    fin si
    si x + delta_x < x_inf alors
    delta_x := 0
    delta_y := -2 -- on se déplace vers le haut
    y_sup := y_sup - 1
    fin si
    si y + delta_y > y_sup alors
    delta_x := -2 -- on se déplace vers la gauche
    delta_y := 0
    x_sup := x_sup - 1
    fin si
    si y + delta_y < y_inf alors
    delta_x := 2 -- on se déplace vers la droite
    delta_y := 0
    x_inf := x_inf + 1
    fin si
    x := x + delta_x
    y := y + delta_y
    fin tant que

    MERCI A TOUS POUR VOTRE AIDE!!!

  3. #3
    Membre éprouvé Avatar de PINGOUIN_GEANT
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 149
    Par défaut
    il manque des sorties de boucle quand le test est valide à moins que t'as programmé avec des else if
    j'aurais fait quatre boucles dans le tant que comme l'itération se propage jusqu'à un certain point dans une direction d'ailleurs l'ordre des si est très important je pense que le programme plante si tu inverses deux if.
    je soupçone aussi le programme d'être adapté aux matrices de taille n+2,n et de ne pas réussir si il y a beaucoup plus de colonnes que de lignes.
    Comme trap D s'est décarcassé à pondre un pseudo-code tu es obligé de l'implémenter dans le langage de son choix. voir les règles du forum
    http://club.developpez.com/regles/
    si tu ne connais pas le langage choisi par trap D, tu peux toujours poser quelques questions sur le forum concerné.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Petit problème d'algo sur les entiers
    Par Bebuck dans le forum Débuter avec Java
    Réponses: 13
    Dernier message: 21/09/2011, 22h04
  2. Un petit problème dans un petit algo!
    Par Pierre-Hakim dans le forum Général Python
    Réponses: 3
    Dernier message: 29/10/2008, 23h29
  3. Petit problème d'algo
    Par RodEpsi dans le forum Delphi
    Réponses: 5
    Dernier message: 01/08/2006, 15h30
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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