[C++]Probleme de logique

balinou -  
Char Snipeur Messages postés 9813 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.

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 .

2 réponses

balinou
 
allons bon, pas un pour dire que ce code est bon ? bon tand pis, je me suis corrigé tt seul.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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++;
}
;-)
0