Code 1

mimou121084 Messages postés 7 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 6 mai 2011 - 5 mai 2011 à 10:29
mimou121084 Messages postés 7 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 6 mai 2011 - 6 mai 2011 à 18:55
bonjour tous le monde,
j'ai un code en fortran et je vais le traduire en c++
le probleme et que les boucle en passant de fortran au C++ se differe
svp si vous avez une solution aidez moi et merci d'avant

j'ai une fonction de la forme:
g(Phi)=1+A1*cos(phi)+A2*sin(phi)
suivant le valeur de A1 et A2 je fait des itiration

voici par exemple une premiere partie du code en fortran

[color=]
[b] if (A1 GT 0.0 and A2 EQ 0.0)then
Fmax = 1.0 + abs(A1)
1 X1=APHASA(0.0, Depi)
F= 1.0 + A1*cos(X1)
Y = APHASA(0.0, Fmax)
if(Y1.Gt>F)Go to 1
PHI = X1
end if/color
/b


moi je fais coome ca:


if ((A1>0.0)&&(A2=0.0))

{
FMAX=1.0+abs(A1);
rand_x= ((double)rand() /(double)RAND_MAX);// v.a entre 0 et 1
x1=(2*pi*((double)rand_x));
f1 = (1+(A1*rand_x));
F = 1.0 + A1*cos(x1);
y1=(((double)rand() /(double)RAND_MAX)*FMAX);// v.a varie de 0 a FMax.
cout<<"rand_x \t"<<rand_x <<"rand_y \t"<< y1<<"fonct_x = \t"<<F<< endl;


while (y1>f1)

{

FMAX=1.0+abs(A1);
x1=(2*pi*((double)rand_x));
rand_x= ((double)rand() /(double)RAND_MAX);
f1 = (1+(A1*rand_x));
F = 1.0 + A1*cos(x1);
y1=(((double)rand() /(double)RAND_MAX)*FMAX);// v.a varie de 0 a FMax.

phi=x1;
// cout<<"rand_x \t"<< x1<<"rand_y \t"<< rand_y<<"fonct_x = \t"<<fonct_x<< endl;


}


}
cout<<"phi = "<< phi << endl;





mais ca marche pas

6 réponses

Rionirind Messages postés 26 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 8 juillet 2011
5 mai 2011 à 11:17
Salut,

J'ai pas trop de temps pour tout regarder mais commence déjà par remplacer ta condition de départ par :
if ((A1>0.0)&&(A2==0.0))


Après fais nous savoir tes messages d'erreurs....
0
mimou121084 Messages postés 7 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 6 mai 2011
5 mai 2011 à 15:11
merci Rionirind,
voila apres exutionc que j'obtient,



si je fais un boucle (for {}: il n'a aucune influance c'est just pour la reputition)sur tous le programme pour que je repete par exemple 9 fois par exemple , j'obtient les resultats suivants, donc il me donne le bonne valeur de phi si(la condition est vrai y1>f), mais il me donne des autre valeur diffrents de x1 si la condition est fausse.





x1 5.63404 y1 1.01013 f = 2.5932
phi = 2.94115
x1 2.5979 y1 1.96321 f = -0.711608
phi = 4.92383
x1 0.916754 y1 1.08516 f = 2.2168
phi = 1.31076
x1 3.39656 y1 0.43329 f = -0.935343
phi = 3.39656
x1 4.3495 y1 1.95191 f = 0.290047
phi = 0.274104
x1 3.16381 y1 2.48183 f = -0.999507
phi = 2.59599
x1 3.85608 y1 0.209181 f = -0.510857
phi = 3.85608
x1 5.81372 y1 1.73818 f = 2.78362
phi = 3.91426
x1 5.28372 y1 0.490662 f = 2.0815
phi = 5.28372
0
Rionirind Messages postés 26 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 8 juillet 2011
6 mai 2011 à 09:31
Salut,

J'ai regardé un peu plus ton code et je te l'ai rapidement un peu repris :
if ((A1>0.0)&&(A2=0.0))
{
//faire le code tant que la condition est fausse
do
{
FMAX=1.0+abs(A1);
rand_x= ((double)rand() /(double)RAND_MAX);// v.a entre 0 et 1
x1=(2*pi*((double)rand_x));
f1 = (1+(A1*rand_x));
F = 1.0 + A1*cos(x1);
y1=(((double)rand() /(double)RAND_MAX)*FMAX);// v.a varie de 0 a FMax.
//cout<<"rand_x \t"<<rand_x <<"rand_y \t"<< y1<<"fonct_x = \t"<<F<< endl;
}while (y1>f1)

//affectation de phi et écriture écran
phi=x1;
cout<<"rand_x \t"<< x1<<"rand_y \t"<< rand_y<<"fonct_x = \t"<<fonct_x<< endl;
}
//l'ecriture de phi doit être dans la boucle
cout<<"phi = "<< phi << endl;
}


Si tu veux garder ta structure vérifie les points suivants :
- L'ordre des commande dans ta boucle while,
- L'écriture de "phi" qui se fait en dehors de ta boucle if (qui se fait dans la boucle dans ton code fortran).

Bonne prog
0
Rionirind Messages postés 26 Date d'inscription mercredi 5 décembre 2007 Statut Membre Dernière intervention 8 juillet 2011
6 mai 2011 à 09:34
edit : Et avec un point-virgule après la condition du while ça marchera mieu
0

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

Posez votre question
mimou121084 Messages postés 7 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 6 mai 2011
6 mai 2011 à 18:06
mercii bien Rionirin
j'utilise le while et ca marche bien
mais votre idee est bien aussi
encore mercie pour votre aide
0
mimou121084 Messages postés 7 Date d'inscription mardi 5 avril 2011 Statut Membre Dernière intervention 6 mai 2011
6 mai 2011 à 18:55
donc voila

ca marche mieu avec le do while

merciiiiiiiiiiiiiii Rionorind
0
Rejoignez-nous