Problème de logique...pourtant c'est tout con, j'en suis sur

Résolu
Horfee Messages postés 188 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 août 2009 - 12 juin 2006 à 14:46
Horfee Messages postés 188 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 août 2009 - 12 juin 2006 à 16:52
Voilà en fait je dois réaliser un calcul :

je dispose d'une étude. Une étude comporte X avions. chaque avions comporte X moteurs.
On arrive a ce shéma :
       A1                           A2                         A3
   /     |       \                /      |      \               /      |      \
M1   M2   M3        M1   M2   M3       M1   M2   M3

Chaque moteur comporte des informations que je dois fusionner. Pour simplifier, on va dire que chaque moteur comporte un entier y.
Il faut ensuite que je calcule les différentes simulations : une simulation est l'addition de y de chaque moteur : je dois pour celà prendre y du moteur A1M1, que je l'ajoute au y de A2M1 et au y de A3M1, etc.
Et il faut ke je calcule ca pour chaque moteur.
Donc :

y1 = A1M1.y + A2M1.y + A3M1.y
y2 = A1M2.y + A2M1.y + A3M1.y
y3 = A1M3.y + A2M1.y + A3M1.y

y4 = A1M1.y + A2M2.y + A3M1.y
y5 = A1M2.y + A2M2.y + A3M1.y
y6 = A1M3.y + A2M2.y + A3M1.y

y7 = A1M1.y + A2M3.y + A3M1.y
y8 = A1M2.y + A2M3.y + A3M1.y
y9 = A1M3.y + A2M3.y + A3M1.y

y10 = A1M1.y + A2M1.y + A3M2.y
y11 = A1M2.y + A2M1.y + A3M2.y
y12 = A1M3.y + A2M1.y + A3M2.y

y13 = A1M1.y + A2M2.y + A3M2.y
y14 = A1M2.y + A2M2.y + A3M2.y
y15 = A1M3.y + A2M2.y + A3M2.y

y16 = A1M1.y + A2M3.y + A3M2.y
y17 = A1M2.y + A2M3.y + A3M2.y
y18 = A1M3.y + A2M3.y + A3M2.y

y19 = A1M1.y + A2M1.y + A3M3.y
y20 = A1M2.y + A2M1.y + A3M3.y
y21 = A1M3.y + A2M1.y + A3M3.y

y22 = A1M1.y + A2M2.y + A3M3.y
y23 = A1M2.y + A2M2.y + A3M3.y
y24 = A1M3.y + A2M2.y + A3M3.y

y25 = A1M1.y + A2M3.y + A3M3.y
y26 = A1M2.y + A2M3.y + A3M3.y
y27 = A1M3.y + A2M3.y + A3M3.y

Vous me suivez ?
Bon ca sachant que le nombre d'avions n'est pas connu au moment de la compilation, mais seulement au moment de l'execution (ainsi que le nombre de moteurs pour chaque avions)
On peut quand meme connaitre le nombre de resultats ( ici => 27 : Avion1.nbMoteur * Avion2.nbMoteur * ....)
A voir également:

12 réponses

Horfee Messages postés 188 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 août 2009
12 juin 2006 à 16:39
j'ai trouvé la réponse... et non je n'ai pas programmez ca n'importe comment... et ton z=3 n'a rien avoir... dans le code que tu m'a donné tu fais 3 boucle for, donc s'il fallait que je suive ta méthode avec 20 avions, il me faudrait 20 boucles...
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
12 juin 2006 à 15:00
Salut,
int combinaison Math.Pow(x,y); // ou x le nombre de moteur par avion (ici apparement tjrs 3) et y le nombre d'avion.

Dans ton cas:
avec 3 avions on aurait Math.Pow(3,3) = 27;
Autres exemples :
avec 2 avions on a Math.Pow(3,2) = 9;
avec 4 avions on a Math.Pow(3,4) = 81;

Si chaque avion peut avoir 4 moteurs et qu'on a 2 avions on a Math.Pow(4,2) = 16;
Evidemment, la formule ne fonctionne que si le nombre de moteur par avion est constant.

VC# forever
=13319
0
Horfee Messages postés 188 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 août 2009
12 juin 2006 à 15:39
non le nombre de moteurs de chaque avion est indépendamment...mais ca c'était pas compliqué...
le truc que j'arrive pas a faire c'est générer la séquence des moteurs à considéré lor du calcul (style un peu une table de verité) :
0,0,0
0,0,1
0,0,2
0,0,3
0,1,0
0,1,1
0,1,2
0,1,3
1,0,0
...
(dans ce cas là le 3eme avion a 4 moteurs, le 2nd en a 2 et le premier en a...(2))
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
12 juin 2006 à 15:47
Ben tu fais trois boucles et c'est terminé....

VC# forever
=13319
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
12 juin 2006 à 15:52
int
x = 2;


int
y = 4;


int
z = 3;


for
(

int
i = 0; i < x; i++)
{
  

for
(

int
j = 0; j < y; j++)
   {
     

for
(

int
k = 0; k < z; k++)
      {
        

Console
.WriteLine(

"{0},{1},{2}"
, i, j, k);
      }
   }
}






0,0,0
0,0,1
0,0,2
0,1,0
0,1,1
0,1,2
0,2,0
0,2,1
0,2,2
0,3,0
0,3,1
0,3,2
1,0,0
1,0,1
1,0,2
1,1,0
1,1,1
1,1,2
1,2,0
1,2,1
1,2,2
1,3,0
1,3,1
1,3,2



















VC# forever




=13319
0
Horfee Messages postés 188 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 août 2009
12 juin 2006 à 16:19
nan c pas bon, tu suppose qu'il y a 3 avions...or il se peut qu'il y en ais 20...
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
12 juin 2006 à 16:22
Avec une méthode recursive ca doit etre faisable non ?

Mx
MVP C# 
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
12 juin 2006 à 16:26
Et alors? J'ai posé z= 3 pour faire un exemple pratique!
Si tu as bien fait les choses, tes avions sont dans une collection, et tu peux donc sans autre savoir combien y'en a en faisant maCollection.Count.
Evidemment, si maintenant tu as programmé ça n'importe comment à la va-vite tu vas pas t'en sortir... Dans ca cas là, personne ne pourra rien pour toi.

VC# forever
=13319
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
12 juin 2006 à 16:41
Bon, moi j'avais suivi une mauvaise piste je pense :p

Par contre, si tu peux nous donner ta solution, ce serait sympa. Histoire que ca puisse resservir

Mx
MVP C# 
0
Horfee Messages postés 188 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 août 2009
12 juin 2006 à 16:51
//ok

//cals --> liste des avions
//nbSimul --> suffisament explicite (nombre de simulation : ds les ex ci dessus, nbSImul vaudrait 27)
//--------------------------

int[][] listes = new int[cals.Length][];
int nbMoteurPrec = 1;

for(int i = cals.Length - 1; i >= 0; i--)
{
    listes[i] = new int[nbSimul];

    for(int j = 0; j < nbSimul; j++)
        listes[i][j] = (int)Math.Floor( (j / nbMoteurPrec)%cals[i].calendriers.Count);
   
    nbMoteurPrec = cals[i].calendriers.Count;
}

// dans listes on obtient donc la liste
/*

[ 0 , 0 , 0 ]
[ 0 , 0 , 1 ]
...
*/
0
Horfee Messages postés 188 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 août 2009
12 juin 2006 à 16:52
je suis en train de tester...mais si jms vous voyez que ca ne marche pas a tous les coups, ou qu'il y a plus simple, je suis preneur !!!
0
Horfee Messages postés 188 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 août 2009
12 juin 2006 à 16:52
ah ouais aussi le cals[i].calendriers represente les moteurs de chaque avion
0
Rejoignez-nous