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

Fortran Discussion :

Besoin d'aide pour un algorithme de remplissage par diffusion


Sujet :

Fortran

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Besoin d'aide pour un algorithme de remplissage par diffusion
    Bonjour à tous.

    Je me présente je suis étudiant en deuxième année et je travaille actuellement sur un projet d'informatique qui nous a été donné : coder un démineur. Jusqu'ici tout se passait bien jusqu'à ce que j'arrive à cet algorithme de remplissage par diffusion (variante 8 connexe), qui doit me servir à découvrir les cases vides automatiquement (comme dans le vrai jeu quoi !). Je n'ai qu'entre aperçu l'algorithmique en cours, pas au programme de mon semestre.

    Pour écrire cet algorithme de remplissage j'ai utilisé une fonction récursive (et je me suis inspiré de ce lien : algorithme remplissage) qui compile bien mais qui provoque une erreur de segmentation lors de l'exécution (à mon avis, la condition terminale de ma fonction n'est pas bonne car j'ai effectué des tests qui montrent que la fonction récursive ne s'arrête jamais.)

    Pouvez vous m'aider ??

    ci dessous le code entré dans mon programme

    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
    RECURSIVE FUNCTION devoile_vide(il,ic,grille_min) RESULT(grille_affichage)
    INTEGER, INTENT(IN)::il,ic
    INTEGER,DIMENSION(:,:),INTENT(IN)::grille_min
    INTEGER,DIMENSION(1:n+2,1:n+2)::grille_affichage
     
    IF (grille_min(il,ic)/=0) THEN
    grille_affichage(il,ic)=2
     
    ELSE
    grille_affichage(il,ic)=2
    grille_affichage=devoile_vide(max(il-1,2),ic,grille_min)
    grille_affichage=devoile_vide(min(il+1,n+1),ic,grille_min)
    grille_affichage=devoile_vide(il,min(ic+1,n+1),grille_min)
    grille_affichage=devoile_vide(il,max(ic-1,2),grille_min)
    grille_affichage=devoile_vide(max(il-1,2),min(ic+1,n+1),grille_min)
    grille_affichage=devoile_vide(max(il-1,2),max(ic-1,2),grille_min)
    grille_affichage=devoile_vide(min(il+1,n+1),min(ic+1,n+1),grille_min)
    grille_affichage=devoile_vide(min(il+1,2),max(ic-1,2),grille_min)
    END IF
    END FUNCTION
    Petite précision : grille_min est le tableau qui regroupe les valeurs codant l'emplacement des mines et les infos sur les cases voisines aux mines (nombres de 1 à 8 qui indique le nombre de mines voisinent)
    il,ic : sont les coordonnées entrer par l'utilisateur pour dévoiler une case choisie

    Merci d'avance pour votre aide et en vous souhaitant une bonne journée.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    J'ai regardé très (trop ?) rapidement.

    Je crois que quand tu cascades l'appel à devoile_vide, tu devrais limiter au cas non dévoilés. Je crois que présentement, si tu demande (2,2), l'invocation (2,2) lance (1,2) qui relance (2,2), qui relance...

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci de votre réponse. Normalement ce que j'ai écris dans le code se déroule de la manière suivante :

    si je veux dévoiler à partir de (3,3) alors :

    devoile_vide(3,3) appelle devoile_vide(2,3) qui appelle devoile_vide(1,3) puis comme on est au bord du tableau on passe à devoile_vide(3,4) qui appelle devoile_vide(3,5), etc...

    si je me trompe qu'on m'arrêtes!

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/12/2010, 22h21
  2. Besoin d'aide pour un petit Algorithme
    Par arnolem dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/08/2010, 23h51
  3. [AC-2007] Besoin d'aide pour remplissage de table SVP
    Par nric7 dans le forum Modélisation
    Réponses: 2
    Dernier message: 20/07/2009, 06h19
  4. [AIDE] besoin d'aide pour réaliser un algorithme
    Par quaresma dans le forum Algorithmes et structures de données
    Réponses: 40
    Dernier message: 18/01/2008, 09h35
  5. Besoin d'aide pour algorithme de traitement d'images
    Par Zenman94 dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 07/04/2005, 14h31

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