Forum > C/C++ > Attaque du cavalier >

Attaque du cavalier

Auteur Message
jeremya Posté le 15 mai 2007 19:34:30

Administrateur
Administrateur

Auteur
Auteur

Modérateur
Modérateur

Inscrit le : 20 sep 2005
Localisation : Nord-Pas de Calais
Emploi :
Loisirs :

PROBLEME

Vous devez écrire un programme qui détermine dans une partie d'échecs, si un cavalier peut prendre une pièce de l'adversaire.

Rappelons que les échecs se jouent sur un plateau carré de 8 cases par 8. Un cavalier se déplace en avancant d'une case horizontalement ou verticalement, puis en allant en diagonale, sans revenir en arrière. Le cavalier peut se déplacer même si la case intermédiaire de son déplacement contient une pièce (amie ou ennemie). La figure suivante montre toutes les possibilités de déplacements de deux cavaliers :

ENTREE

On vous donne la description d'un plateau de jeu sous la forme de 8 lignes de 8 caractères. Les lettres majuscules représentent les pièces noires, les minuscules les pièces blanches, et les '.' représentent les cases vides. Les cavaliers sont représentés par la lettre 'c' (ou 'C'), et les autres pièces par d'autres lettres de l'alphabet.

SORTIE

Votre programme doit afficher "yes" si l'un des cavaliers noirs peut se déplacer vers une case contenant une pièce blanche (donc la prendre) et "no" dans le cas contraire.

CODE SOURCE

 
#include <stdio.h>
 
int main(int argc, char *argv[])
{ 
  char echiquier[8][8];
 
  for(int y=0;y<8;y++)
    for(int x=0;x<8;x++)
      scanf("%c",&echiquier[y][x]);
 
  int deplacements[8][2]={
      {2,-1},
      {2,1},
      {-2,-1},
      {-2,1},
      {-1,2},
      {1,2},
      {-1,-2},
      {1,-2}
    };
 
  bool result=false;
 
  for(int y=0;y<8;y++)
  {
    for(int x=0;x<8;x++)
    {
      if(echiquier[y][x]!='P') continue;
      for(int i=0;i<8;i++)
      {
 
        int cy=y+deplacements[i][0];
        int cx=x+deplacements[i][1];
 
        if(cy<0 || cy>=8) continue;
        if(cx<0 || cx>=8) continue;
 
        char c=echiquier[cy][cx];
        if(c>='a'&&c<='z')
          result=true;
 
      }
    }
  }
 
  printf(result?"yes\n":"no\n");
 
  return 0;
}
 

EXPLICATIONS

Pour écrire sur la sortie standard, on utilise la fonction printf().

Pour lire sur l'entrée standard, on utilise la fonction scanf(). 

 

Messages : 60 http://www.jeremya.ironie.org

répondre

première page page précédente page suivante dernière page

Navigation rapide :

Forum > C/C++ > Attaque du cavalier >


Cette page a été générée le 14 mai 2008 19:04:13.
clipart home livre lecture book JEREMYA
WEBSITE
jeremya.ironie.org

s'identifier

Nom d'utilisateur :
Mot de passe :

outils

qui est en ligne ?

9 visiteurs en ligne

sondage qualité

1-mauvais - excellent-5
Design :
1 5
Ergonomie :
1 5
Contenu :
1 5
Structure :
1 5
Ensemble :
1 5
1-mauvais - excellent-5
Commentaire :