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 :

Exercice case accessibles


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 29
    Points
    29
    Par défaut Exercice case accessibles
    Bonjour,

    je fais cet exo :


    mais le problème est que je ne n'arrive pas à détecter les cases accessibles.

    En fait, j'ai pensé à faire cela :
    compter le nombre de cases accessibles puis de faire la soustraction entre le nombre de cases et de cases accessibles pour enfin avoir le nombre de cases inaccessibles, ce qui me semble la meilleure solution, à mon avis.

    Mais quelle est la méthode pour compter les cases accessibles ?

    Merci.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut
    Bonjour

    La solution est tout simplement d'utiliser un tableau (suivant le principe de la file) qui au départ ne contient que la case d'entrée du labyrinthe.

    Ensuite tu fais une boucle qui fait ceci :

    tant qu'il y a encore des cases dans la file,

    prendre la première case de la file, répertorier les cases libres qui sont autour et qui n'ont pas déjà été ajoutées à la file, les ajouter au bout de la file, et incrémenter un coup le compteur qui indique quelle est la première case de la file.

    Quand la boucle s'arrête, le compteur indique le nombre de cases répertoriées. C'est également le nombre que tu recherches
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    je ne connais pas le principe de la file, et je n'ai pas compris le principe.
    Est-ce qu'il existe une autre méthode ?

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par crow56 Voir le message
    je ne connais pas le principe de la file, et je n'ai pas compris le principe.
    Est-ce qu'il existe une autre méthode ?
    Ce genre d'exercice est fait pour te faire progresser, alors c'est le moment de se plonger dans les articles qui parlent des structures de données. Il y en a sur ce site et sur le web...
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    voilà mon code :

    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
     
    #include <stdio.h>
     
    const int MAX_COLS = 1000;
    const int MAX_LIGS = 1000;
     
    int main()
    {
       int nbLigs, nbCols;
       int count = 0;
       scanf("%d%d", &nbLigs, &nbCols);
       for (int curLig = 0; curLig < nbLigs; curLig++)
       {
          char ligneLue[MAX_COLS+1][MAX_LIGS+1];
          scanf("%s", ligneLue);
          for (int curCol = 0; curCol < nbCols; curCol++)
          {
          	if (ligneLue[curCol][curLig] == '.')
          	{
          		if ( (ligneLue[curCol+1][curLig] == '.' && ligneLue[curCol-1][curLig] == '.')
          			|| (ligneLue[curCol][curLig+1] == '.' && ligneLue[curCol][curLig-1] == '.') )
          		{
          			count++;
          		}
          	}
          }
     
     
       }
       printf("%d\n", count);
       return 0;
    }
    mais il ne fonctonne pas, est-ce que vous pouvez me le corriger, svp ?

    Merci.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par crow56 Voir le message
    voilà mon code :
    <...>
    mais il ne fonctonne pas, est-ce que vous pouvez me le corriger, svp ?

    Merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    C:\dev\hello\main.c:7: warning: function declaration isn't a prototype
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:14: warning: char format, different type arg (arg 2)
    Linking console executable: bin\Debug\hello.exe
    Output size is 18.77 KB
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 2 warnings
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
             char ligneLue[MAX_COLS + 1][MAX_LIGS + 1];
             scanf ("%s", ligneLue);
    Ceci n'a aucun sens. Que cherches-tu à faire ?
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    en fait, pour une case libre, que faut-il vérifier ?
    j'ai pensé qu'il faut que autour de la case, il faut que ça soit des cases libres, mais je n'en suis pas sûr.

    Quel est le principe de l'algo (pseudo-code), pour cet exo ?

  8. #8
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut
    Je vais détailler un peu plus (je ne connais pas le pseudo code standar, mais tu devrais comprendre)

    /*initialisation*/
    case tableau[NBCASESMAX];
    int pointeur_debut_file=0;
    int pointeur_fin_file=1;
    tableau[0]=sortie_labyrinthe;

    /*boucle*/
    while (pointeur_fin_file>pointeur_debut_file)
    {
    case_en_cours=tableau[pointeur_debut_file];
    si case_de_gauche existe
    si case_de_gauche 'pas dans tableau'
    {tableau[pointeur_fin_file]=case_de_gauche;
    pointeur_fin_file++;}

    'idem case_du_dessus'
    'idem case_du_dessous'
    'idem case_de droite'
    pointeur_debut_file++;
    }
    printf("Nombre de cases accessibles: %d\n",pointeur_fin_file);





    A part ça les déclarations se font en dehors des boucles. Par ailleurs si tu ne lis qu'une seule ligne du labyrinthe (avec ton scanf), rentre là dans un tableau de une dimension, ça marchera mieux. Sauf que du coup comme tu rentre tes lignes une par une, tu ne peux pas trouver les cases accessibles de la ligne du dessous avant d'avoir rentré cette ligne. En bref il va falloir que d'abord tu fasses une fonction char **charge(void) qui va te charger ton labyrinthe dans un tableau de caractères et ensuite seulement tu pourras exécuter dessus un algorithme de recherche des cases libres. Mais mélanger les deux me parait risqué..
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Exercices sur Access 2007
    Par Le Nihiliste dans le forum Modélisation
    Réponses: 1
    Dernier message: 27/03/2013, 18h29
  2. besoin d'exercice sur ACCESS
    Par claccla dans le forum Access
    Réponses: 8
    Dernier message: 07/01/2008, 07h46
  3. Select Case Access VBA
    Par solal57 dans le forum VBA Access
    Réponses: 6
    Dernier message: 12/11/2007, 17h09
  4. valeur case à cocher et base access
    Par cari dans le forum VBA Access
    Réponses: 34
    Dernier message: 08/02/2006, 17h09
  5. Recupération de cases cochées sous access
    Par geefo dans le forum Access
    Réponses: 2
    Dernier message: 10/10/2005, 13h11

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