begin process at 2008 09 06 03:31:31
1 237 633 membres
33 nouveaux aujourd'hui
14 313 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : ou est l'erreur : boucles imbriquées [ Algorithme / Maths ] (pausecpp)

ou est l'erreur : boucles imbriquées le 10/07/2008 16:46:17

pausecpp
le compilateur ne mentionne aucune "error" ni "warning"
pourtant j'ai fait le programme pour que le valeur de S[N][M] changent!!!
voici le code ( merci pour votre temps)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include<math.h>
#define N 5
#define M 8
#define Ls 12



floatalea(floatu,floatv);
floatfonc(float*x,intn);


intmain()
{
srand(2008);
inti,k,count;
floatlanda1,landa2,longeur;
floatY[M][N],S[M][N];
floata[N]={0,1,3,-5,-10},b[N]=
{
10,18,19,11,21};


for(i=0;i<M;i++)
{
for(k=0;k<N;k++)
{
S[i][k]=alea(a[k],b[k]);

}
}
printf("\n\n");

printf("Col1\t\tCol2\t\tCol3\t\tCol4\t\tCol5\n");
for(i=0;i<M;i++)
{
for(k=0;k<N;k++)
{
printf("%f\t",S[i][k]);

}
printf("\n");
}


for(i=0;i<M;i++)
{
for(k=0;k<N;k++)
{
landa1=alea(0,1);
while(count<Ls)
{
Y[i][k]=S[i][k];
landa2=alea(0,1);
if(landa1>0.5)
{
Y[i][k]=Y[i][k]+landa2*longeur;
}
else
{
Y[i][k]=Y[i][k]-landa2*longeur;
}
if(fonc(Y[i],N)<fonc(S[i],N))


{
S[i][k]=Y[i][k];
count=Ls-1;
}
count=count+1;
}
}
}


printf("\n\nCol1\t\tCol2\t\tCol3\t\tCol4\t\tCol5\n");
for(i=0;i<M;i++)
{
for(k=0;k<N;k++)
{
printf("%f\t",S[i][k]);

}
printf("\n");
}



}
floatalea(floatu,floatv)
{
return(float)(u+((float)rand()/RAND_MAX*(v-u)));
}


floatfonc(float*x,intn)
{
inti;
floatval=0.0,t1=0.0,t2=0.0;

for(i=0;i<n;i++)
{
t1+=pow((x[i]-1.0),2.0);
}
for(i=1;i<n;i++)
{
t2+=(x[i]*x[i-1]);
}
val=t1-t2;

returnval;
}


Re : ou est l'erreur : boucles imbriquées le 10/07/2008 17:08:21

buno
Hello,
Problème de parenthèses dans la fonction alea peut-être?
returnu+((float)rand()/RAND_MAX)*(v-u);

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...

Re : ou est l'erreur : boucles imbriquées le 10/07/2008 17:17:30

pausecpp
des espaces ont sautés lorsque j'ai poster le code ( exemple "returnval" à la place de "return val" !!)
non ce n'est pas la fonction alea qui pose problème, je soupçonne lol la boucle while et les deux if à l'intérieur.

Re : ou est l'erreur : boucles imbriquées le 10/07/2008 17:46:21

darunia
srand(time(0)); ???

D@runia

Re : ou est l'erreur : boucles imbriquées le 10/07/2008 17:57:20

Pistol_Pete
Salut

En principe il suffit de lire le message d'erreur à savoir ici: "la variable count est utilisée sans avoir été initialisée"

A+
Mon site internet : [ Lien ]


Re : ou est l'erreur : boucles imbriquées le 10/07/2008 18:19:56

SAKingdom
Membre Club
Quel est le problème au fait ? Qu'est-ce que ton code ne fait pas correctement. Cette information nous aiderais probablement bien plus.

Aussi, comme précisé par darunia:
srand(2008);
ne te générera pas une suite très aléatoire de nombre. La même suite sortira d'une exécution du code à l'autre.

C++ (@++)


Re : ou est l'erreur : boucles imbriquées le 10/07/2008 18:23:51

darunia
Mouais, je suis d'accord avec SAKingdom, on propose des solutions mais on est pas forcement sur de nous, tout simplement parce qu'on a pas vraiment compris le souci (enfin pour moi c'est le cas !).

D@runia

Re : ou est l'erreur : boucles imbriquées le 10/07/2008 18:26:47

SAKingdom
Membre Club
Oops j'avais pas vu le message de pete. count n'est, en effet, pas initialisé avant son utilisation dans la boucle
while(count < Ls)

C++ (@++)


Re : ou est l'erreur : boucles imbriquées le 10/07/2008 19:30:52

pausecpp
Bonsoir à tous,
je viens d'initialiser count =1; // rien ne se passe non plus
srand(2008) effectivement je veux avoir la même suite
j'essaie de coder un algorithme mathématique de recherche de la solution minimale d'une fonction donnée :  les S[M][N] est la matrice des coordonnées ( M vecteurs ligne de N coordonées chacun : dans l'espace (x,y,z), un vecteur donné aura trois coordonnées x, y et z ).

initialement je stock les coordonnées d'un vecteur i : S[i][k] dans Y[i][k], ensuite pour un i donné je modifie  Y[i][k] et je calcule fonc(Y[i]) si j'obtient meilleure solution je garde ce vecteur dans S[i].
probleme : à la fin du programme j'obtient les meme valeure initiales de S[i][k] les memes !!!! comme si le block  for{....} ne fait rien : surement une erreur de ma part.




Re : ou est l'erreur : boucles imbriquées le 10/07/2008 23:28:23

SAKingdom
Membre Club
Réponse acceptée !
Et bien, il y a quelque petites choses:

landa1 = alea(0,1);
landa2 = alea(0,1);

J'ignore comment est fait alea mais si ces lignes donnent toujours le même résultat, je n'en vois pas trop l'utilité.

De plus, si landa1 est toujours inférieur à 0.5

if(landa1 > 0.5)

sera toujours faux.

if
(fonc(Y[i],N)<fonc(S[i],N))

Je me trompe ou le tableau Y[i] n'est pas remplit lors de l'appel de la fonction (du moins, tant que que k < N-1) ? Dans ce cas, fonc ne risque t-elle pas de retourner un résultat biaisé ?

C++ (@++)



[Page 1 Page 2]
Classé sous : count, printf, include, for, float

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS