[C++]Probleme de logique
balinou
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
voila, je fait de la programmation en C++ , et je bloque sur une partie. le but de ce code est simple : on lui donne les coordonnées d'une case de la matrice, et on test les cellules environnantes pour savoir si elles sont occupé (true) ou libre (false). le code renvois le nombre d'"amis" que la case possède. Il me semble que ce code possède des erreurs non pas de compilation, mais de logique.
Merci à vous .
voila, je fait de la programmation en C++ , et je bloque sur une partie. le but de ce code est simple : on lui donne les coordonnées d'une case de la matrice, et on test les cellules environnantes pour savoir si elles sont occupé (true) ou libre (false). le code renvois le nombre d'"amis" que la case possède. Il me semble que ce code possède des erreurs non pas de compilation, mais de logique.
int Matrice::test_t(int l,int h) // test des cases adjacentes pour compter le nombre de cellule pleine
{
int amis =0 ;
if ( l == 0 )
{
if (h == 0) // X00
{ // 000
if ( m_matrice[1][0]) // 000
amis++ ;
if ( m_matrice[0][1])
amis++ ;
if ( m_matrice[1][1])
amis++ ;
return amis ;
}
if ( h == m_taille_hauteur-1 )
{ // 000
if ( m_matrice[l][h-1]) // 000
amis++ ; // X00
if ( m_matrice[l+1][h-1])
amis++ ;
if ( m_matrice[l+1][h])
amis++ ;
return amis ;
}
if ( h > 0 && h < m_taille_largeur )
{ // 000
if ( m_matrice[l][h-1]) // X00
amis++ ; // 000
if ( m_matrice[l][h+1])
amis++ ;
if ( m_matrice[l+1][h-1])
amis++ ;
if ( m_matrice[l+1][h])
amis++ ;
if ( m_matrice[l+1][h+1])
amis++ ;
return amis ;
}
}
if ( l == m_taille_largeur-1 )
{
if ( h==0 )
{ // 00X
if ( m_matrice[l-1][h]) // 000
amis++ ; // 000
if ( m_matrice[l][h+1])
amis++ ;
if ( m_matrice[l-1][h+1])
amis++ ;
return amis ;
}
if ( h == m_taille_hauteur-1 )
{ // 000
if ( m_matrice[l-1][h-1]) // 000
amis++ ; // 00X
if ( m_matrice[l][h-1])
amis++ ;
if ( m_matrice[l-1][h])
amis++ ;
return amis ;
}
if ( h > 0 && h < m_taille_largeur )
{ // 000
if ( m_matrice[l][h-1]) // 00X
amis++ ; // 000
if ( m_matrice[l][h+1])
amis++ ;
if ( m_matrice[l-1][h-1])
amis++ ;
if ( m_matrice[l-1][h])
amis++ ;
if ( m_matrice[l-1][h+1])
amis++ ;
return amis ;
}
}
if ( l > 0 && l < m_taille_largeur )
{
if ( h==0 )
{ // 0X0
if ( m_matrice[l-1][h]) // 000
amis++ ; // 000
if ( m_matrice[l+1][h])
amis++ ;
if ( m_matrice[l-1][h+1])
amis++ ;
if ( m_matrice[l][h+1])
amis++ ;
if ( m_matrice[l+1][h+1])
amis++ ;
return amis ;
}
if ( h == m_taille_hauteur-1 )
{ // 000
if ( m_matrice[l-1][h]) // 000
amis++ ; // 0X0
if ( m_matrice[l+1][h])
amis++ ;
if ( m_matrice[l-1][h-1])
amis++ ;
if ( m_matrice[l][h-1])
amis++ ;
if ( m_matrice[l+1][h-1])
amis++ ;
return amis ;
}
if ( h > 0 && h < m_taille_largeur )
{ // 000
if ( m_matrice[l-1][h-1]) // 0X0
amis++ ; // 000
if ( m_matrice[l][h-1])
amis++ ;
if ( m_matrice[l+1][h-1])
amis++ ;
if ( m_matrice[l-1][h])
amis++ ;
if ( m_matrice[l+1][h])
amis++ ;
if ( m_matrice[l-1][h+1])
amis++ ;
if ( m_matrice[l][h+1])
amis++ ;
if ( m_matrice[l+1][h+1])
amis++ ;
return amis ;
}
}
}
Merci à vous .
Configuration: Ubuntu 8.10 / vista Asus
A voir également:
- [C++]Probleme de logique
- Et logique excel - Guide
- Afpa tests niveau 3 d'entrée en formation : français, maths, logique - Forum Études / Formation High-Tech
- Eql test logique - Forum Programmation
- Lecteur logique ✓ - Forum Windows
- Vous devez initialiser un disque avant que le gestionnaire de disques logiques puisse y accéder - Forum Matériel & Système
2 réponses
je ne vois pas de problème de logique, juste de gros "bourinisme".
int Matrice::test_t(int l,int h) // test des cases adjacentes pour compter le nombre de cellule pleine
{
unsigned char amis=0;
for (int i=l-1;i<=l+1;++i)
for (int j=h-1;j<=h+1;++j)
if(i>=0 && j>=0 && i<m_taille_hauteur && j<m_taille_largeur)
if(m_matrice[i][j])
amis++;
};-)