Exercice

ASPerix Messages postés 47 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 3 septembre 2004 - 18 nov. 2003 à 19:27
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 - 19 nov. 2003 à 15:50
G un pb ou plutot un exo a faire en c (je suis etudiant en BTS info) kelk1 pourrait m'aider

Voila l'énoncé:

"Trouver une fraction égale à 9 telle que pour former les entiers du numérateur et du dénominateur, on utilise une seule fois chaque chiffre de 0 à 9."

Merci d'avance

Ben... j'ai pô de signature :-p

10 réponses

D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 1
18 nov. 2003 à 22:52
2 . 4,5
---------
1

MDR :D je crois pas que c'est une frac comme ça qu'il te faut mais on sait jamais :d je sais pas comment la formuler en C++ :d

[DmX]
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
19 nov. 2003 à 06:57
tu fou les chiffres de 0 a 9 dans un tableau, tu les passes en argument a une fonction qui les places aleatoirement dans ta fraction, l'operation est reiteré tant que la fraction n'est pas egal a 9
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
19 nov. 2003 à 08:41
Voudrais pas t'affoler mais n'essaie pas de générer toutes les possibilités! Il y a en (10!)^2 = 13168189440000 çàd plus de 13 000 milliards!

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
19 nov. 2003 à 08:50
Je te conseille de faire ceci:
tu génère toutes les possibiiltés de numérateurs (10! = 3 628 800 possibilités). Pour chacune tu divise par 9. Tu vas forcément tomber sur un entier. Et tu regardes si le nombre obtenu est bien constitué de tous les chiffres (dans un premier temps tu peux regarder si la somme des chiffres fait bien 45 pour éviter les longues vérifications)

Voilou, bon courage

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
0

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

Posez votre question
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
19 nov. 2003 à 08:54
Ah oui...j'oubliais...pour le numérateur, tu sais déjà qu'il est supérieur à 123457890 ! (le premier chiffre ne peut pas être 0) car même avec le plus petit dénominateur (0123456879) tu restes au dessus de 9.
Donc je te conseille de générer les numérateurs en commençant par 9876543210 et non par 0123456789
On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
19 nov. 2003 à 10:01
Bon je l'ai fait...il y a des tas de solutions!

ex:
2960743185
-------------- = 9
0328971465

Par contre la première vérification (le total des chiffres=45) est inutile, c'est assez facile de vérifier que les chiffres sont tous présents.

Bon je ne te file pas le code parcequ'il faut qd même que tu bosses. Mais si tu as des questions n'hésite pas (inspire-toi de l'algo que j'ai donné quand même)

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
19 nov. 2003 à 12:41
on utilise une seule fois chaque chiffre de 0 à 9

et pour ca ya pas 13mrd de possibilite!
l'exemple que tu donne ne respecte pas cette hypothese :big)
0
Stepharcher Messages postés 117 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 8 septembre 2008
19 nov. 2003 à 13:43
essaye plutot (4+5)/(7-6)
en fait, ça dépend si tu doit utiliser tous les chiffres !

>:) Stéph >:)
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
19 nov. 2003 à 15:35
voila une solution avec rand()
evidament c'est pas la meilleur vu que le temps de calcul a l'air d'etre long, au bout d'1 minute il avait encore rien trouver, je vais le laisser tourner pour voir et des que j'ai une solution je la poste(si j'en ai une un jour!)

#include <windows.h>
#include 
#include <stdlib.h>
#include <time.h>

bool exist(int n,int *t,int d)
{
int i;
for(i=0;i<d;i++)
{
if(n==t[i]) return true;
}
return false;
}

void genereOrdre(int* ordre)
{
int i;
for(i=0;i<10;i++)
{
do{
ordre[i]=rand()%10;
}while(exist(ordre[i],ordre,i));
}
}

void fraction(char *chiffre,int *res)
{
int i,ordre[10],t_num;
char num_[10],den_[10];
int num,den;

do
{
genereOrdre(ordre);
t_num=(rand()%7)+1;
for(i=0;i<t_num;i++)
{
     num_[i]=chiffre[ordre[i]];
}
num_[t_num]='\0';
num=atoi(num_);

for(i=0;i<10-t_num;i++)
{
den_[i]=chiffre[ordre[i+t_num]];
}
den_[10-t_num]='\0';
den=atoi(den_);
Sleep(5);
}while((den*9)!=num);
res[0]=num;
res[1]=den;
}
void main()
{
char *chiffre={"0123456789"};
int res[2];
srand(time(NULL));

fraction(chiffre,res);
cout<<"num="<<res[0]<<"  den="<<res[1]<<endl;

}
0
garslouche Messages postés 583 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 29 mai 2015 1
19 nov. 2003 à 15:50
Oui, bon ça va...
Ca ne change pas grand chose !

Par ex:

75249
------- = 9
08361

ou encore

57429
------- = 9
06381

On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
0
Rejoignez-nous