Diffuculté à comprendre un programme en c

Résolu
DevGl Messages postés 151 Statut Membre -  
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je voulais ecrire un programme en c qui donne le calcul du determinant d'une matrice carré , j'ai pas pu le faire , mais mon prof ma donnée son code , le voila , il fonctionne , mais j'ai pas compris une instruction dedant le code
voila la fonction qui calcul le determinant

float determinant (float mat[][N], int n)
{
 float result;
 float mat_n_moins_1 [N][N];
 int i, j, k;
 double l, puiss=0;
 if (n==1)
  return mat [0][0];
 else
 {
  result = 0;
  for (i=0; i<n; i++)
  {
   for (j=0; j<n-1; j++)
   {
    for (k=0; k<n-1; k++)
    {
     mat_n_moins_1 [j][k] = mat [j+1][k+(k>=i)];
    }
   }
   l=i;
      
   result = result + pow(-1, l) *mat[0][i] * determinant(mat_n_moins_1, n-1);
  }
  return result;
 }
}


/////////////////

cette boucle for (k=0; k<n-1; k++)
{
mat_n_moins_1 [j][k] = mat [j+1][k+(k>=i)];
}

qui contien l'instruction mat_n_moins_1 [j][k] = mat [j+1][k+(k>=i)]; ou j'ai trouvé un probléme à comprendre
dites moi s'il vous plait c koi ca : [k+(k>=i)] ??? qu'est ce qu ca veut dir k>=i ? ? ca veut dire quoi ?? on teste icii ou koi ?? est ce qu'il va ajouter la valeur de i ou bien de k ??
aidez moi s'il vous plait

2 réponses

  1. JwTdd
     
    salut,
    k >= i donne true ou 1 en booleen si k est plus grand ou egale à i
    il donne false ou 0 dans le cas inverse.

    donc
    si k>=i

    k+(k>=i) 
    equivaut à k+1

    si k<i

    k+(k>=i)
    equivaut à k+0

    ça evite de faire
    if (k>=i)
    {
        mat_n_moins_1 [j][k] = mat [j+1][k+1];
    }
    else
    {
        mat_n_moins_1 [j][k] = mat [j+1][k];
    }
    
    0
    1. DevGl Messages postés 151 Statut Membre
       
      Merciiiiiiiiiiiiii Jwtdd !!
      0
  2. sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   50
     
    Bonjour

    @JwTdd:salut,
    k >= i donne true ou 1 en booleen si k est plus grand ou egale à i
    il donne false ou 0 dans le cas inverse.


    La condition pour qu'une variable soit "vrai" est quand celle-ci est strictement supérieure à zéro ( NULL ) le contraire si elle est strictement égale à zéro cas du langage C.
    Suivant cette logique, la condition "si" qui a pour rôle de tester l'expression évaluera si elle vaut vrai ou faux en résumé on peut alors écrire directement
    if ( expr ){
      // si vrais faire 
    }else{
      // faire ceci à la place 
    }
    

    Mais attention cette logique booléenne en langage C est légèrement trompeuse je m'explique, si la valeur de notre variable ou expression est égale à une valeur strictement négatif exemple -1 la logique veut que cette expression soit fausse (logiquement) mais, en langage C elle vaut et vrai.
    De nombreux débutants font cette erreur ( erreur logique de programmation ) pour avoir une logique correspondant à nos besoins, c'est-à-dire toute valeur strictement supérieure à zéro ( vrais ) et toute valeur inférieure à zéro soit fausse il faut alors implémenter comme ceci
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main( void ){
    
    	int i = 1;
    
    	printf("Logique par defaut\n");
    	if( i ){
    		printf(" I vaut %d\t  et est > 0 donc\t: (VRAI)\n", i );
    		i = -1;
    	}else{
    		printf(" I vaut %d\t et est <= 0 donc\t: (FAUX)\n", i );
    	}
    
    	if( i ){
    		printf(" I vaut %d\t  et est > 0 donc\t: (VRAI)\n", i );
    		i = -6;
    	}else{
    		printf(" I vaut %d\t et est <= 0 donc\t: (FAUX)\n", i );
    	}
    
    	printf("Logique souhaiter\n");
    	if( i <= 0 ){
    		printf(" I vaut %d\t et est <= 0 donc\t: (FAUX)\n", i );
    	}else{
    		printf(" I vaut %d\t et est > 0 donc\t (VRAI)\n", i );
    	}
    
    	return( EXIT_SUCCESS );
    }
    
    


    à bientôt
    0