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 :

N'arrive pas a passer d'un tableau booleens a un tableau d'entier (sudoku) (gros débutant en prog)


Sujet :

Fortran

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 3
    Points
    3
    Par défaut N'arrive pas a passer d'un tableau booleens a un tableau d'entier (sudoku) (gros débutant en prog)
    Bonjour a tous,
    Voila, je dois programmer un résolveur de sudoku, en fortran (sachant que je suis nul de chez nul la dedans...)

    Je suis bloqué depuis plusieurs jours, je m'explique :
    J'ai créés 4 subroutines : pour déterminer les valeurs possibles par lignes, par colonnes, et par régions (le sudoku est divisé en 9 régions) ; et une autre pour qu'il n'y ai qu'un seul chiffre possible dans une case du sudoku.
    Voici mon module :

    SUBROUTINE elimine_ligne(bool,tab,i,j,k,l,m) ! élimine la ligne du chiffre déjà présent
    IMPLICIT NONE
    INTEGER :: i,j,k,l,m
    INTEGER, DIMENSION(3,3,3,3) :: tab !dimension du tableau du sudoku
    LOGICAL, DIMENSION(3,3,3,3,9) :: bool !dimension du tableau booléen
    bool=.TRUE. ! tableau booléen initialisé à true
    DO i=1,3
    DO j=1,3
    DO k=1,3
    DO l=1,3
    DO m=1,9
    IF (m==tab(i,j,k,l)) THEN
    bool(i,:,k,:,m)=.false. ! enregistre false pour le chiffre dans la ligne
    END IF
    END DO
    END DO
    END DO
    END DO
    END DO
    END SUBROUTINE

    SUBROUTINE elimine_colonne(bool,tab,i,j,k,l,m) ! élimine la colonne du chiffre déjà présent
    IMPLICIT NONE
    INTEGER :: i,j,k,l,m
    INTEGER, DIMENSION(3,3,3,3) :: tab !dimension du tableau du sudoku
    LOGICAL,DIMENSION(3,3,3,3,9) :: bool !dimension du tableau booléen
    bool=.TRUE. !tableau booléen initialisé à true
    DO i=1,3
    DO j=1,3
    DO k=1,3
    DO l=1,3
    DO m=1,9
    IF (m==tab(i,j,k,l)) THEN
    bool(:,j,:,l,m)=.false. ! enregistre false pour le chiffre dans la colonne
    END IF
    END DO
    END DO
    END DO
    END DO
    END DO
    END SUBROUTINE

    SUBROUTINE elimine_region(bool,tab,i,j,k,l,m) ! élimine la région du chiffre déjà présent
    IMPLICIT NONE
    INTEGER :: i,j,k,l,m
    INTEGER, DIMENSION(3,3,3,3) :: tab !dimension du tableau du sudoku
    LOGICAL,DIMENSION(3,3,3,3,9) :: bool !dimension du tableau booléen
    bool=.TRUE. !tableau booléen initialisé à true
    DO i=1,3
    DO j=1,3
    DO k=1,3
    DO l=1,3
    DO m=1,9
    IF (m==tab(i,j,k,l)) THEN
    bool(i,j,:,:,m)=.false. ! enregistre false pour le chiffre dans la région
    END IF
    END DO
    END DO
    END DO
    END DO
    END DO
    END SUBROUTINE

    SUBROUTINE elimine_local(bool,tab,i,j,k,l,m) ! élimine toutes les autres valeurs de m de la case
    IMPLICIT NONE
    INTEGER :: i,j,k,l,m
    INTEGER, DIMENSION(3,3,3,3) :: tab !dimension du tableau du sudoku
    LOGICAL,DIMENSION(3,3,3,3,9) :: bool !dimension du tableau booléen
    bool=.TRUE. !tableau booléen initialisé à true
    DO i=1,3
    DO j=1,3
    DO k=1,3
    DO l=1,3
    DO m=1,9
    IF (m==tab(i,j,k,l)) THEN
    bool(i,j,k,l,m)=.true. ! enregistre true pour le chiffre dans la case
    END IF
    END DO
    END DO
    END DO
    END DO
    END DO
    END SUBROUTINE
    Mon problème vient ensuite, quand j'appelle les subroutines dans mon programme principal, je ne vois pas du tout comment :
    - appeler les subroutines en boucle, dans qu'il y a des cases incertaines
    - comment écrire dans mon tableau (sudoku) la valeur de la case certaine (en gros comment passer du tableau de booléens au tableau de sudoku)

    Voila ce que j'ai fais pour l'instant pour appeler les subroutines, et pour essayer d'écrire dans le tableau sudoku (bool est mon tableau de booléens(5 dimensions), et region est mon tableau sudoku (4 dimensions)) :

    DO WHILE (0==region(i,j,k,l))
    call elimine_ligne(bool,region,i,j,k,l,m)
    call elimine_colonne(bool,region,i,j,k,l,m)
    call elimine_region(bool,region,i,j,k,l,m)
    call elimine_local(bool,region,i,j,k,l,m)
    END DO

    Do (.true.=bool(i,j,k,l,m))
    m=region(i,j,k,l)
    end do
    Si qq à une idée pour me guider, ou un bout de solution, ca m'aiderai énormément !!

    En vous remerciant.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    C'est bon, c'est résolu.
    Merci pour toute votre aide ^^

Discussions similaires

  1. [Wamp] je n'arrive pas à faier passer mon serveur de 'hors ligne ' à ' en ligne '
    Par khaledmoez dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 22/07/2010, 19h05
  2. j arrive pas à remplir mon tableau de String
    Par poulette3000 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 29/10/2007, 18h52
  3. Réponses: 3
    Dernier message: 28/05/2007, 07h47
  4. j'arrive pas a selectionner les champ d'un tableau a mysql
    Par ghita269 dans le forum Administration
    Réponses: 3
    Dernier message: 04/07/2006, 12h38

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