Resolution d'opérations mathématique

iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 - 26 juil. 2006 à 16:12
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 - 29 juil. 2006 à 13:31
Bonjour,

j'aimerais creer une fonction qui prend comme parametre un int[] de  nombre et un nombre et qu'elle sorte toutes les opérations possible avec la liste de nombre et les 4 operateurs ( +,-,*,/ ) pour trouver comme resultat le deuxieme nombre passé en parametre.

Voila ce que j'ai déjà ecrit malheuresement sa marche pas :

<hr />void

res(
int[] v,
int nbr){

string[] op =
new
string[4] {
"+",
"-",
"*",
"/" };

string resultat =
"";

for (v[0] = 0 ; v[0] < 4 ; v[0]++)

for (v[1] = 0 ; v[1] < 4 ; v[1]++)

for (v[2] = 0 ; v[2] < 4 ; v[2]++)

for (v[3] = 0 ; v[3] < 4 ; v[3]++)

for (v[4] = 0 ; v[4] < 4 ; v[4]++)

for (v[5] = 0; v[5] < 4; v[5]++){

int z = 1;

for (
int i = 2 ; i <= 7 ; i++){

switch (v[i - 2]){

case 0: z += i;

break;

case 1: z -= i;

break;

case 2: z *= i;

break;

case 3: z /= i;

break;}

}

if (z == nbr){

MessageBox.Show(
"ds la boucle");

for (
int j = 0; j <= 6; j++){
resultat +(j + 1) + (j 6 ?

" =" : op[v[j]]);}

}

}

}

<hr />

Merci d'avance pour votre aide

5 réponses

iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
26 juil. 2006 à 16:13
j'ai oublie de preciser voila le tableau  passé en parametre :

int[] v =
new
int[6] { 1, 10, 25, 50, 75, 100 };
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 38
27 juil. 2006 à 10:53
"Le compte est bon !"...

avant de coder dans le vide... essaye de réfléchir à un algorithme de résolution... mais, ca va pas être facile.

en gros, comment tu essayerais de résoudre le problème si tu étais à la place de l'ordi.

Sébastien FERRAND (
blog)
Consultant Indépendant
[Microsoft MVP Visual C#]
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
27 juil. 2006 à 12:12
Je crois pas qu'il existe d'algo ou bien tres tres dificil à mettre en oeuvre, je pense que la technique du bruteforce est la meilleur

je precise que ce code est un portage Javascript qui fonctionne
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
28 juil. 2006 à 12:55
Note : Ce code a été testé en PHP,Javascript alors pourquoi pas en Csharp ?
0

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

Posez votre question
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
29 juil. 2006 à 13:31
Alors j'ai cherché sur le net et j'ai trouvé 1 algo recursift : http://eternitygames.free.fr/LeCompteEstBon.html#Premier%20Algorithme%20(récursif)

J'aimerais integrer cet algo dans une fonction j'ai donc codé :

<hr />void

res2(
int[] v,
int nbr){

compteur++;

this.Text =
"Possibilitées testées : " + compteur.ToString();

int[] tempV =
new
int[v.Length - 1];

for (
int i = 1; i < v.Length - 1; i++){

tempV[i] = v[i + 1];

}

if (tempV.Length > 1){

//==============================

// Crée les nouveaux array : +

//==============================tempV[0] = v[0] + v[1];

resultat +=

"\n" + v[0] +
"+" + v[1] +
"=" + v[0] + v[1];res2(tempV, nbr);

//==============================

// Crée les nouveaux array : -

//==============================

if (v[0] - v[1] >= 1){

tempV[0] = v[0] - v[1];

int sous = v[0] - v[1];resultat +=

"\n" + v[0] +
"moins" + v[1] +
"=" + sous;res2(tempV, nbr);

}

//==============================

// Crée les nouveaux array : -i

//==============================

if (v[0] - v[1] >= 1){

tempV[0] = v[1] - v[0];

int sous = v[1] - v[0];resultat +=

"\n" + v[1] +
"-" + v[0] +
"=" + sous;res2(tempV, nbr);

}

//==============================

// Crée les nouveaux array : *

//==============================tempV[0] = v[0] * v[1];

resultat +=

"\n" + v[0] +
"*" + v[1] +
"=" + v[0] * v[1];res2(tempV, nbr);

//==============================

// Crée les nouveaux array : /
//if (v[1] 0 || v[0] == 0){

tempV[0] = v[0] / v[1];

resultat +=

"\n" + v[0] +
"/" + v[1] +
"=" + v[0] / v[1];res2(tempV, nbr);

}

//==============================

// Crée les nouveaux array : /i
//if (v[1] 0 || v[0] == 0){

tempV[0] = v[1] / v[0];

resultat +=

"\n" + v[1] +
"/" + v[0] +
"=" + v[1] / v[0];res2(tempV, nbr);

}
}
}

<hr />

Le probleme c'est que je sais pas comment recuperer ma variable resultat qui est censé contenir l'operation

merci de m'aidé
0