Diffuculté à comprendre un programme en c
Résolu
DevGl
Messages postés
136
Date d'inscription
Statut
Membre
Dernière intervention
-
sambia39 Messages postés 610 Date d'inscription Statut Membre Dernière intervention -
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
/////////////////
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
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
A voir également:
- Diffuculté à comprendre un programme en c
- Mettre en veille un programme - Guide
- Programme demarrage windows - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Desinstaller un programme - Guide
2 réponses
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
si k<i
ça evite de faire
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]; }
DevGl
Messages postés
136
Date d'inscription
Statut
Membre
Dernière intervention
Merciiiiiiiiiiiiii Jwtdd !!
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
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
à bientôt
@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