Es ce que je peux convertir ????

baster200x Messages postés 47 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 24 juillet 2011 - 11 juin 2011 à 12:33
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 13 juin 2011 à 18:28
bonjour tous le mande!!
ben, j'ai un algorithme en langage c++ et je veux le convertir en fichier header c'est à dire même la fonction main deviendra une fonction normale plus les autres fonctions ... ma question est: es ce que je peu le convertir?
si c'est vrai pouvez vous m'aider SVP!!!
merci d'avance

3 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
13 juin 2011 à 16:22
Salut,

Ta question n'a malheureusement pas beaucoup de sens. Est-il possible que tu explique d'avantage et montre un exemple stp ?
0
baster200x Messages postés 47 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 24 juillet 2011
13 juin 2011 à 18:25
j'ai un programme écrit en c/c++ qui se compile correctement et parmi les solutions qui je l'ai trouvé pour intégrer l'algorithme à un logiciel Open source c'est de l'intégrer autant que un fichier header ... cèd: il me faut de changer le code pour qu'il soit un header (.c ---> .h) le problème se trouve dans la fonction main et voila le code :
#include <stdio.h>
#include <stdlib.h>


int nbTache = 10;
FILE *fichier, *cache, *temps_access, *puissance_access, *pop, *tempsAg, *puisAg;

void f1(int lig, int col, int ** p, double ** t,double ** tc, double * f, int ** p1);
void f2(int lig, int col, int ** p, double ** c, double ** cc, double * f, int ** p2);
void selection(int lig, int col, int ** p, double * f1, double * f2, int * par1, int * par2, int * ind);
void croisement(int lig, int col, int ** p, int * par1, int * par2, int * enf1, int * enf2, int * ind, double ** t, double ** tc, double ** c, double ** cc);
void mutation(int lig, int col, int ** p, double ** t, double ** tc, double ** c, double ** cc);
double fti(int col, int * individu, double ** t, double ** tc);
double fci(int col, int * individu, double ** c, double ** cc);

int main(int argc, char ** argv)
{
double ** T = new double* [50];
for(int i 0;i < 50;++i) T[i] new double[nbTache];

double ** C = new double* [50];
for(int i 0;i < 50;++i) C[i] new double[nbTache];

pop = fopen("pop.txt", "r");

fichier = fopen("resultat.txt", "r");
for (int i = 0; i < 50; i++)
for (int j = 0; j < nbTache; j++)
fscanf(fichier, "%lf%lf", &T[i][j], &C[i][j]);

fclose(fichier);

double * Taille = new double [50];
cache = fopen("cache.txt", "r");
for (int h = 0; h < 50; h++) fscanf(cache, "%lf", &Taille[h]);
fclose(cache);

double *Taccess = new double [50];
temps_access = fopen("temps_access.txt", "r");
for (int h = 0; h < 50; h++) fscanf(temps_access, "%lf", &Taccess[h]);
fclose(temps_access);

double * Paccess = new double [50];
puissance_access = fopen("puissance_access.txt", "r");
for (int h = 0; h < 50; h++) fscanf(puissance_access, "%lf", &Paccess[h]);
fclose(puissance_access);

double ** Tc = new double* [50];
for(int i 0;i < 50;++i) Tc[i] new double[50];

for (int i = 0; i < 50; i++)
for (int j = 0; j < 50; j++)
{
if (i j) Tc[i][j] 0;
else if (Taille[i] < Taille[j]) Tc[i][j] = 0;
else Tc[i][j] = Taccess[i] * (Taille[i] - Taille[j]);
}

double ** Cc = new double* [50];
for(int i 0;i < 50;++i) Cc[i] new double[50];

for (int i = 0; i < 50; i++)
for (int j = 0; j < 50; j++)
{
if (i j) Cc[i][j] 0;
else if (Taille[i] < Taille[j]) Cc[i][j] = 0;
else Cc[i][j] = Paccess[i] * (Taille[i] - Taille[j]);
}


int ** p = new int* [100];
for(int i 0;i < 100;++i) p[i] new int[nbTache];

for (int i = 0; i < 50; i++)
for (int j = 0; j < 50; j++)
p[i][j] = rand();

// Evaluation des individus ou calcul de Fitness
double * Ft = new double [100];
double * Fc = new double [100];
int * par1 = new int [nbTache];
int * par2 = new int [nbTache];
int * enf1 = new int [nbTache];
int * enf2 = new int [nbTache];
int ** p1 = new int* [100];
for(int i 0;i < 100;++i) p1[i] new int[nbTache];
int ** p2 = new int* [100];
for(int i 0;i < 100;++i) p2[i] new int[nbTache];
int * In = new int [2];

// Evaluation des individus
f1(100, nbTache, p, T, Tc, Ft, p1);
f2(100, nbTache, p, C, Cc, Fc, p2);
selection(100, nbTache, p, Ft, Fc, par1, par2, In);

for (int i = 0; i < 100; i++)
{
printf("%d ", i);

for (int j = 0; j < nbTache; j++) printf("%d ", p[i][j]);
printf("\n");
}

f1(100, nbTache, p, T, Tc, Ft, p1);
f2(100, nbTache, p, C, Cc, Fc, p2);

// Sélection
int k = 0;
int l = 1;

while (k < 500)
{
//nombre de génération
// croisement
croisement(100, nbTache, p, par1, par2, enf1, enf2, In, T, Tc, C, Cc);
// Mutation
mutation(100, nbTache, p, T, Tc, C, Cc);
// pop après reclassement, croisement et mutation

selection(100, nbTache, p, Ft, Fc, par1, par2, In);
//c la j'ai ajoutée une condition qui teste si c la premiere itération alors
//imprimé ou si pair de 10 imprimer aussi car je veux avoir 1 10 20 30 40 50 60 70 80 90 100

if (l % 50 == 0)
{
printf("%d\n", l);
for (int i = 0; i < 100; i++)
{
printf( "%d ", i);

for (int j = 0; j < nbTache; j++)
{
printf("%d ", p[i][j]);
}

printf("\n");

}

f1(100, nbTache, p, T, Tc, Ft, p1);

f2(100, nbTache, p, C, Cc, Fc, p2);
}

k++;
l++;
}

fclose(pop);
}

void f1(int lig, int col, int ** p, double ** t,double ** tc, double * f, int ** p1)
{
double s1, s2;
double * S1 = new double [lig];
double * S2 = new double [lig];

for (int i = 0; i < lig; i++)
{
s1 = 0;

for (int j = 0; j < col; j++)
s1 += t[p[i][j]][j];

S1[i] = s1;
}

for (int i = 0; i < lig; i++)
{
s2 = 0;

for (int j = 0; j < col-1; j++)
s2 += tc[p[i][j]][p[i][j + 1]];

S2[i] = s2;
}

tempsAg = fopen("tempsAg.txt", "w");
printf(" Ft\n");

for (int i = 0; i < lig; i++)
{
f[i] = S1[i] + S2[i];
fprintf(tempsAg, "%lf\n", f[i]);
}

fclose(tempsAg);
}

void f2(int lig, int col, int ** p, double ** c, double ** cc, double * f, int ** p2)
{
double s1, s2;
double * S1 = new double[lig];
double * S2 = new double[lig];

for (int i = 0; i < lig; i++)
{
s1 = 0;
for (int j = 0; j < col; j++) s1 += c[p[i][j]][j];
S1[i] = s1;
}

for (int i = 0; i < lig; i++)
{
s2 = 0;
for (int j = 0; j < col - 1; j++) s2 += cc[p[i][j]][p[i][j + 1]];
S2[i] = s2;
}

puisAg = fopen("puisAg.txt", "w");
printf("Fc\n");

for (int i = 0; i < lig; i++)
{
f[i] = S1[i] + S2[i];
fprintf(puisAg, "%lf\n", f[i]);
printf("%lf\n", f[i]);
}

fclose(puisAg);
}

// Appliquer l'algorithme VEGA pour la selection des individus qui feront
// objet d'un croisement et/ou Mutation
void selection(int lig, int col, int ** p, double * f1, double * f2, int * par1, int * par2, int * ind)
{
// Sous pop 1 les 50 premiers individus sont classés selon F1
double z;
int x;

//Classement selon F1
for (int i = 0; i < ( (lig / 2) - 1); i++)
{
for (int j = i + 1; j < lig / 2; j++) {
if (f1[j] < f1[i]) {
z = f1[i];
f1[i] = f1[j];
f1[j] = z;
for (int h = 0; h < col; h++) {
x = p[i][h];
p[i][h] = p[j][h];
p[j][h] = x;
}

}
}
}

double z1;
int x1; //classement selon F2
for (int i = (lig / 2); i < lig - 1; i++) {
for (int j = i + 1; j < lig; j++) {
if (f2[j] < f2[i]) {
z1 = f2[i];
f2[i] = f2[j];
f2[j] = z1;
for (int h = 0; h < col; h++) {
x1 = p[i][h];
p[i][h] = p[j][h];
p[j][h] = x1;
}

}
}
}

ind[0] = rand() % 50;
ind[1] = rand() % 50;

for (int i = 0; i < lig; i++)
{
if (i == ind[0])
{
for (int j = 0; j < col; j++)
{
par1[j] = p[i][j];
}
}

}
for (int i = 0; i < lig; i++)
{
if (i == ind[1])
{
for (int j = 0; j < col; j++)
{
par2[j] = p[i][j];
}
}
}
}

void croisement(int lig, int col, int ** p, int * par1, int * par2, int * enf1, int * enf2, int * ind, double ** t, double ** tc, double ** c, double ** cc)
{

for (int j = 0; j < col / 2; j++)
{
enf1[j] = par1[j];
enf2[j] = par2[j];
}
for (int j = col / 2; j < col; j++)
{
enf1[j] = par2[j];
enf2[j] = par1[j];
}

if (fti(col, enf1, t, tc) < fti(col, par1, t, tc))
{
for (int j = 0; j < col; j++)
{
p[ind[0]][j] = enf1[j];
}
}

if (fci(col, enf2, c, cc) < fci(col, par2, c, cc))
{
for (int j = 0; j < nbTache; j++)
{
p[ind[1]][j] = enf2[j];
}
}

}

void mutation(int lig, int col, int ** p, double ** t, double ** tc, double ** c, double ** cc)
{
int * mut = new int[lig];
int * mut1 = new int[lig];
int id = rand() % 100;

for (int i = 0; i < lig; i++)
{

if (i == id)
{
for (int j = 0; j < col; j++)
{
mut[j] = p[i][j];
mut1[j] = mut[j];
}
}
}

int id1 = rand() % col;

for (int j = 0; j < col; j++)
{
if (j == id1)
{
mut1[j] = 49 - mut[j];
}
}

if ( (fti(col, mut1, t, tc) < fti(col, mut, t, tc)) && (fti(col, mut1, t, tc) < fti(col, mut, t, tc)))
{
for (int j = 0; j < col; j++)
{
p[id][j] = mut1[j];
}
}

}

double fti(int col, int * individu, double ** t, double ** tc)
{
double s1 0, s2 0;

for (int j = 0; j < col; j++)
{
s1 += t[individu[j]][j];
// p[i]{j]= N°Configuration [j]=N° de la
// tache
}

for (int j = 0; j < col - 1; j++)
{
s2 += tc[individu[j]][individu[j + 1]];
// p[i]{j]=
// N°Configuration
// [j+1]=N°configuration
// suivante dans la solution
// en cours
}

return s1 + s2;
}

double fci(int col, int * individu, double ** c, double ** cc)
{
double s1 0, s2 0;

for (int j = 0; j < col; j++)
{
s1 += c[individu[j]][j];
// p[i]{j]= N°Configuration [j]=N° de la
// tache
}

for (int j = 0; j < col - 1; j++)
{
s2 += cc[individu[j]][individu[j + 1]]; // p[i]{j]=
// N°Configuration
// [j+1]=N°configuration
// suivante dans la solution
// en cours
}

return s1 + s2;
} 

merci..
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
13 juin 2011 à 18:28
Non tu ne peux pas intégrer ton code au logiciel simplement en ajoutant un header. Ajouter une librairie dynamique par contre c'est possible dans les limites de ce que te propose le logiciel en question.
0
Rejoignez-nous