ElectricalMan
Messages postés39Date d'inscriptionsamedi 20 mars 2004StatutMembreDernière intervention 5 novembre 2008
-
26 juil. 2006 à 11:53
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 2014
-
26 juil. 2006 à 17:59
slt tt le monde,
j'ai un ensemble de paramètres avec différentes valeurs possibles !!! je m'explique :
si au départ j'ai un ensemble de 4 param, avec pour chaque param plrs valeurs possibles. par exp : X1a / X1b , X2a / X2b , X3 , X4a / X4b / X4c
je souhaite générer les combainaisons possibles, sachant que je ne m'intéresse pas à l'ordre des param (donc pas de permutations). j'obtiendrai :
X1a , X2a , X3 , X4a X1b , X2a , X3 , X4a X1a , X2b , X3 , X4a
X1b , X2b , X3 , X4a ...
je sais pas si qq est fort en proba et qui pourrait me dire quelle formule permettrait de calculer le nbre de combinaisons possibles. je pensai au départ à Cnk avec dans cet exp : n=8 et k=4. une fois on calcul ts les ensembles de 4 param,
1) On élimine les ensembles qui ne contiennent pas une valeur de chaque param ! par exp :
X1a , X1b , X2a , X4a ; pas de 3eme param
X1a , X3 , X4a , X4c ; pas de 2eme param
...
2) On élimine les combinaison de même param (avec permutations) :
X1a , X2a , X3 , X4a
X3 , X2a , X1a , X4a -> à éliminer ; même param que la précédente
bref vous m'avez compris...
et puis bien sure si vous pouver m'aider avec un bout de code ou même un algo
voilà voilà...
ElectricalMan
Messages postés39Date d'inscriptionsamedi 20 mars 2004StatutMembreDernière intervention 5 novembre 2008 26 juil. 2006 à 14:00
merci vinc1008881
oui c bien ça ; on a toujours : X1x, X2y, X3z...
et t'as raison aussi, y'a : n*m*... combinaisons
donc maintenant mon pb, aaah ! :
- je pars d'un fichier text du type ; etat1_a/etat1_b,eta2_a/etat2_b,etat3,etat4_a/etat4_b capt1_1, capt2_1, capt3_1
etat1_c/etat1_d,eta2_a/etat2_b,etat3,etat4_c/etat4_d capt1_3, capt2_1, capt3_2
...
en fait c des états de différents automates modèlisant le comportement de composants d'un système. à droite j'ai les valeurs capteurs corresponadantes ; chaque ligne correspond à ce que je nomme par : un couple Etats/Capteurs ça m'informe sur l'état de mon système... !!! ça c pour la ptite histoire.
donc moi je souhaite générer un autre fichier avec cette fois-ci ttes les combinaisons avec un état par modèle ;
etat1_a,eta2_a,etat3,etat4_a capt1_1, capt2_1, capt3_1
etat1_b,eta2_a,etat3,etat4_a capt1_1, capt2_1, capt3_1
...
etat1_c,eta2_a,etat3,etat4_c capt1_3, capt2_1, capt3_2
etat1_d,eta2_a,etat3,etat4_c capt1_3, capt2_1, capt3_2
...
donc pour le moment j'arrive à lire ligne par ligne le fichier, je sépare les différents paramètres. pour cela j'utilise une fonction split ; char** split( char* str, const char* separateur).
// ----------- Lecture des paramètres du fichier ----------------
rewind(fic); // repositionner le curseur au début de "fic"
nbrCouples = 0; // Réinitialisation ( au cas où ! )
while( fgets(coupleEtatsCapteurs, tailleStr, fic) != NULL )
{ // On lit fic (ligne par ligne) tant qu'on ne reçoit pas d'erreur (NULL)
if( strcmp(coupleEtatsCapteurs, "\n") )
{ // Si ligne non vide
// Virer l'\n à la fin (de la ligne lue)
coupleEtatsCapteurs[strlen(coupleEtatsCapteurs) - 1] = '\0';
// Séparer les couples Etats/Capteurs en 2 chaines :
// l'ensemble des états et l'ensemble des valeurs capteurs
cpsCouple = split(coupleEtatsCapteurs, "\t");
// Extraire les différents états d'un couple
cpsEtats = split(cpsCouple[0], ",");
for(i=0; cpsEtats[i]; i++)
{
// Extraire les différents vals d'un même état
ElectricalMan
Messages postés39Date d'inscriptionsamedi 20 mars 2004StatutMembreDernière intervention 5 novembre 2008 26 juil. 2006 à 15:11
juste à titre d'info, voici la fct split(que j'ai récupéré de je ne sais d'où ?!) :
//-----------------------------------------------------------------
// Extraction de mots d'une chaine, à partir d'un "séparateur"
//-----------------------------------------------------------------
char** split( char* str, const char* separateur)
{
size_t sizeSeparateur=strlen( separateur );
char** currentSplit=0;
size_t nbSep=0, sizeSplit=0, currentSep=0;
char* pos=str, *currentPos=str;
// Compter le nombre de séparateur, et remplacer le séparateur par des '\0'
while( pos = strstr( pos, separateur ) )
{
memset( pos, '\0', sizeSeparateur );
++nbSep;
currentPos = (pos += sizeSeparateur);
}
// Calculer la taille du tableau final
sizeSplit = nbSep+1 ;
if ( !sizeSplit )
return 0;
// Allouer le tableau des pointeurs
currentSplit = malloc( (sizeSplit+1) * sizeof(char*) );
if ( !currentSplit )
return 0;
currentSplit[sizeSplit] = 0; // j'ai rajouté ça :
// ça me permettra après (dans main.c) de faire le test: for(i=0;tab[i];i++)
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201419 26 juil. 2006 à 16:44
Quelques modifications, il y a un paramètre redondant (IdxTab et Niveau) dans la fonction AfficherSol, il faut en enlever 1.
Et dans ton cas, il n'y a que 2 tableaux.
ElectricalMan
Messages postés39Date d'inscriptionsamedi 20 mars 2004StatutMembreDernière intervention 5 novembre 2008 26 juil. 2006 à 17:09
il y a un paramètre redondant (IdxTab et Niveau) dans la fonction AfficherSol, il faut en enlever 1. >> oui t'as raison. merci...
Et dans ton cas, il n'y a que 2 tableaux. >> plutôt 4 !
par exp pour la 1ere ligne (etat1_a/etat1_b,eta2_a/etat2_b,etat3,etat4_a/etat4_b) j'ai :
tableau1 : etat1_a / etat1_b
tableau2 : eta2_a / etat2_b
tableau3 : etat3
tableau4 : etat4_a / etat4_b
ElectricalMan
Messages postés39Date d'inscriptionsamedi 20 mars 2004StatutMembreDernière intervention 5 novembre 2008 26 juil. 2006 à 17:47
j'avais lu des couples Etats/Capteurs. >> oui t'as raison, c pas clair ! ;
par exp pour la 1ere ligne ;
etat1_a/etat1_b,eta2_a/etat2_b,etat3,etat4_a/etat4_b capt1_1,capt2_1,capt3_1
j'ai :
Etats : etat1_a/etat1_b,eta2_a/etat2_b,etat3,etat4_a/etat4_b
Capteurs : capt1_1,capt2_1,capt3_1
donc les val capteurs je m'en ... c les états que je retraite.
bref, merci pour le code, tu me sauve la vie. en plus ça me permet d'économiser de l'énèrgie, avec cette chaleur
NB : ça m'a permis aussi de voir un exp concret d'utilisation de pointeur de structure, c ça non ?! (et oui je maitrise pas encore !) ;
typedef struct
{
long Dim; // Taille du tableau
char **Tab; // Tableau de chaines ("Sol1-1", "Sol1-2"..)
} _Tabs, *_pTabs;