Conversion C / caml

Fermé
mouton - 15 juin 2009 à 15:06
 mouton - 21 juin 2009 à 13:57
Bonjour,
je travaille en ce moment sur les courbes de bezier dont je dois rendre un dossier pour la semaine prochaine, mais il me manque certains elements notament en info ou j'aimerai bien traduire certains programme ecrit en C pour les mettre sous la forme de caml
en voici un exemple :
float B (int n, int i, float t)

{

if (i==0) return (pow(1-t),n) ; //pow(x,n) = x^n

return (t/(1-t)(n-i+1)/i*B(n,i-1,t)) ;

}

ou encore :
void Calcul_1 (void)

{

X=0 , Y=0;

float Bz;

for (int i=0 ; i<=n ; i++)

{

Bz=B(n,i,t)

X=X+Bz*P[i].x ;

Y=Y+Bz*P[i].y ;

}

}

mais aussi :
#define DEGRE_MAX 100

typedef stuct

{

float x;

float y;

} point;

int n,nb;

point P[DEGRE_MAX];

float t,pas,X=0,Y=0;

void main (void)

{

input ("Entrez le degré",&n);

saisie_points_initialise (&P);

input ("Entrez le nombre de points pour le tracé",&nb);

putpixel (P[0].x,P[0].y);

for (t=pas=(float)(1/nb) ; t<=1 ; t+=pas)

{

Calcul_1();

lineto (X,Y); // ou putpixel (X,Y); sans joindre les points

}

}



quelqu'un pourrait-il m'aider?? j'aurais besoin d'une reponse relativement rapide s'il vous plait...
merci d'avance

4 réponses

KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 004
20 juin 2009 à 19:27
Un petit tutoriel pour t'aider : Appel de commandes C/C++ dans OCaml
0
salut
heu...
j'ai pas tout compris mais j'crois que c'est juste pour melanger et pas pour traduire integralement si?
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 004
21 juin 2009 à 13:29
Effectivement, mais pour traduire intégralement la seule méthode qui existe c'est de connaitre les 2 langages, moi je les connais à peu près et je veux bien t'en traduire un peu pour te montrer la voie, mais je ne vais pas tout te recoder surtout si tu as beaucoup de code...
0
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 004
21 juin 2009 à 13:40
Pour le premier ça donnerait ça :
let rec B n i t = 
	if i=0 then (1.0-.t)**(float_of_int n)
		 else t/.(1.0-.t)*.float_of_int(n-i+1)/.float_of_int(i)*.B(n,i-1,t);;
Pour les suivant, le code C est faux, il manque des informations (de déclaration ou de type) pour X, Y, n, i, t, et P.
Or en Caml le typage est primordial !!!

Corrige donc tes programmes en C avant de faire une traduction en Caml...
0
merci beaucoup!!
je vais essayer alors de corriger le C
0