Ou est l'erreur : boucles imbriquées [Résolu]

Messages postés
9
Date d'inscription
jeudi 26 juin 2008
Statut
Membre
Dernière intervention
14 juillet 2008
- - Dernière réponse : pausecpp
Messages postés
9
Date d'inscription
jeudi 26 juin 2008
Statut
Membre
Dernière intervention
14 juillet 2008
- 11 juil. 2008 à 19:24
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;
}
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
11
3
Merci
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++ (@++)<!--

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 127 internautes nous ont dit merci ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
14591
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
12 septembre 2019
89
0
Merci
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...
Commenter la réponse de BunoCS
Messages postés
9
Date d'inscription
jeudi 26 juin 2008
Statut
Membre
Dernière intervention
14 juillet 2008
0
Merci
 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.
Commenter la réponse de pausecpp
Messages postés
357
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
1
0
Merci
srand(time(0)); ???

D@runia
Commenter la réponse de cs_darunia
Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
0
Merci
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 : http://pistol.petesampras.free.fr
Commenter la réponse de Pistol_Pete
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
11
0
Merci
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++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
357
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
1
0
Merci
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
Commenter la réponse de cs_darunia
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
11
0
Merci
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++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
9
Date d'inscription
jeudi 26 juin 2008
Statut
Membre
Dernière intervention
14 juillet 2008
0
Merci
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.
Commenter la réponse de pausecpp
Messages postés
9
Date d'inscription
jeudi 26 juin 2008
Statut
Membre
Dernière intervention
14 juillet 2008
0
Merci
Salut SAKingdom, et bien vous avez raison : les éléments  Y[i][k] ne sont pas tous initialisé. normalement je devrais le faire avant avec un boucle for;
UN GRAND MERCI.
Commenter la réponse de pausecpp